ETH Price: $2,660.25 (+0.23%)
Gas: 4 Gwei

Token

HEX Money (HXY)
 

Overview

Max Total Supply

12,949,612.78468318 HXY

Holders

581

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 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:
HEXMONEY

Compiler Version
v0.6.4+commit.1dca32f3

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 3 of 5: HEXMONEY.sol
//HEXMONEY.sol
//
//

pragma solidity 0.6.4;

import "./SafeMath.sol";
import "./IERC20.sol";
import "./HEX.sol";
import "./Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

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

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

//Uniswap factory interface
interface UniswapFactoryInterface {
    // Create Exchange
    function createExchange(address token) external returns (address exchange);
    // Get Exchange and Token Info
    function getExchange(address token) external view returns (address exchange);
    function getToken(address exchange) external view returns (address token);
    function getTokenWithId(uint256 tokenId) external view returns (address token);
    // Never use
    function initializeFactory(address template) external;
}

//Uniswap Interface
interface UniswapExchangeInterface {
    // Address of ERC20 token sold on this exchange
    function tokenAddress() external view returns (address token);
    // Address of Uniswap Factory
    function factoryAddress() external view returns (address factory);
    // Provide Liquidity
    function addLiquidity(uint256 min_liquidity, uint256 max_tokens, uint256 deadline) external payable returns (uint256);
    function removeLiquidity(uint256 amount, uint256 min_eth, uint256 min_tokens, uint256 deadline) external returns (uint256, uint256);
    // Get Prices
    function getEthToTokenInputPrice(uint256 eth_sold) external view returns (uint256 tokens_bought);
    function getEthToTokenOutputPrice(uint256 tokens_bought) external view returns (uint256 eth_sold);
    function getTokenToEthInputPrice(uint256 tokens_sold) external view returns (uint256 eth_bought);
    function getTokenToEthOutputPrice(uint256 eth_bought) external view returns (uint256 tokens_sold);
    // Trade ETH to ERC20
    function ethToTokenSwapInput(uint256 min_tokens, uint256 deadline) external payable returns (uint256  tokens_bought);
    function ethToTokenTransferInput(uint256 min_tokens, uint256 deadline, address recipient) external payable returns (uint256  tokens_bought);
    function ethToTokenSwapOutput(uint256 tokens_bought, uint256 deadline) external payable returns (uint256  eth_sold);
    function ethToTokenTransferOutput(uint256 tokens_bought, uint256 deadline, address recipient) external payable returns (uint256  eth_sold);
    // Trade ERC20 to ETH
    function tokenToEthSwapInput(uint256 tokens_sold, uint256 min_eth, uint256 deadline) external returns (uint256  eth_bought);
    function tokenToEthTransferInput(uint256 tokens_sold, uint256 min_eth, uint256 deadline, address recipient) external returns (uint256  eth_bought);
    function tokenToEthSwapOutput(uint256 eth_bought, uint256 max_tokens, uint256 deadline) external returns (uint256  tokens_sold);
    function tokenToEthTransferOutput(uint256 eth_bought, uint256 max_tokens, uint256 deadline, address recipient) external returns (uint256  tokens_sold);
    // Trade ERC20 to ERC20
    function tokenToTokenSwapInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address token_addr) external returns (uint256  tokens_bought);
    function tokenToTokenTransferInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address recipient, address token_addr) external returns (uint256  tokens_bought);
    function tokenToTokenSwapOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address token_addr) external returns (uint256  tokens_sold);
    function tokenToTokenTransferOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address recipient, address token_addr) external returns (uint256  tokens_sold);
    // Trade ERC20 to Custom Pool
    function tokenToExchangeSwapInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address exchange_addr) external returns (uint256  tokens_bought);
    function tokenToExchangeTransferInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address recipient, address exchange_addr) external returns (uint256  tokens_bought);
    function tokenToExchangeSwapOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address exchange_addr) external returns (uint256  tokens_sold);
    function tokenToExchangeTransferOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address recipient, address exchange_addr) external returns (uint256  tokens_sold);
}

////////////////////////////////////////////////
////////////////////EVENTS/////////////////////
//////////////////////////////////////////////

contract TokenEvents {

    //when a user freezes tokens
    event TokenFreeze(
        address indexed user,
        uint value
    );

    //when a user unfreezes tokens
    event TokenUnfreeze(
        address indexed user,
        uint value
    );

    //when a user transforms HEX to HXY
    event Transform (
        uint hexAmt,
        uint hxyAmt,
        address indexed transformer
    );

    //when founder tokens are locked
    event FounderLock (
        uint hxyAmt,
        uint timestamp
    );

    //when founder tokens are unlocked
    event FounderUnlock (
        uint hxyAmt,
        uint timestamp
    );
}

//////////////////////////////////////
//////////HEXMONEY TOKEN CONTRACT////////
////////////////////////////////////
contract HEXMONEY is IERC20, TokenEvents {

    using SafeMath for uint256;
    using SafeERC20 for HEXMONEY;

    mapping (address => uint256) private _balances;

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

    //uniswap setup
    address internal uniFactory = 0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95;
    address internal uniETHHEX = 0x05cDe89cCfa0adA8C88D5A23caaa79Ef129E7883;
    address public uniETHHXY = address(0);
    UniswapExchangeInterface internal uniHEXInterface = UniswapExchangeInterface(uniETHHEX);
    UniswapExchangeInterface internal uniHXYInterface;
    UniswapFactoryInterface internal uniFactoryInterface = UniswapFactoryInterface(uniFactory);
    //hex contract setup
    address internal hexAddress = 0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39;
    HEX internal hexInterface = HEX(hexAddress);
    //transform room
    bool public roomActive;
    uint public roundCap = 0;
    uint public roundTransformed = 0;
    uint public totalHeartsTransformed = 0;
    uint public totalHXYTransformed = 0;
    uint public distributable = 0;
    //mint / freeze
    uint public unlockLvl = 0;
    uint public lockStartTimestamp = 0;
    uint public lockDayLength = 1825;//5 years (10% released every 6 months)
    uint public lockedTokens = 0;
    uint private allLocked = 0;

    bool public mintBlock;//disables any more tokens ever being minted once _totalSupply reaches _maxSupply
    uint public mintRatio = 1000; //1000 for 0.1% (1 HXY for every 1000 HEX)
    uint public minFreezeDayLength = 7; // min days to freeze
    uint internal daySeconds = 86400; // seconds in a day
    uint public totalFrozen = 0;
    mapping (address => uint) public tokenFrozenBalances;//balance of HXY frozen mapped by user

    //tokenomics
    uint256 public _maxSupply = 6000000000000000;// max supply @ 60M
    uint256 internal _totalSupply;
    string public constant name = "HEX Money";
    string public constant symbol = "HXY";
    uint public constant decimals = 8;

    //multisig
    address payable internal MULTISIG = 0x35C7a87EbC3E9fBfd2a31579c70f0A2A8D4De4c5;
    //admin
    address payable internal FOUNDER = 0xc61f905832aE9FB6Ef5BaD8CF6e5b8B5aE1DF026;
    address payable internal KYLE = 0xD30BC4859A79852157211E6db19dE159673a67E2;
    address payable internal MICHAEL = 0xe551072153c02fa33d4903CAb0435Fb86F1a80cb;
    address payable internal SWIFT = 0x7251FFB72C77221D16e6e04c9CD309EfFd0F940D;
    address payable internal MARCO = 0xbf1984B12878c6A25f0921535c76C05a60bdEf39;
    uint public donationGasLimit = 21000;
    bool private locked;
    //team
    address payable internal MARK = 0x35e9034f47cc00b8A9b555fC1FDB9598b2c245fD;
    address payable internal JARED = 0x5eCb4D3B4b451b838242c3CF8404ef18f5C486aB;
    address payable internal LOUIS = 0x454f203260a74C0A8B5c0a78fbA5B4e8B31dCC63;
    address payable internal DONATOR = 0x723e82Eb1A1b419Fb36e9bD65E50A979cd13d341;
    address payable internal KEVIN = 0x3487b398546C9b757921df6dE78EC308203f5830;
    address payable internal AMIRIS = 0x406D1fC98D231aD69807Cd41d4D6F8273401354f;
    //investor
    address payable internal ANGEL = 0xF80A891c1A7600dDd84b1F9d54E0b092610Ed804;
    //minters
    address[] public minterAddresses;// future contracts to enable minting of HXY relative to HEX 1000:1

    mapping(address => bool) admins;
    mapping(address => bool) minters;
    mapping (address => Frozen) public frozen;

    struct Frozen{
        uint freezeStartTimestamp;
    }
    
    modifier onlyMultisig(){
        require(msg.sender == MULTISIG, "not authorized");
        _;
    }

    modifier onlyAdmins(){
        require(admins[msg.sender], "not an admin");
        _;
    }

    modifier onlyMinters(){
        require(minters[msg.sender], "not a minter");
        _;
    }
    
    //protects against potential reentrancy
    modifier synchronized {
        require(!locked, "Sync lock");
        locked = true;
        _;
        locked = false;
    }

    constructor() public {
        admins[FOUNDER] = true;
        admins[KYLE] = true;
        admins[MARCO] = true;
        admins[SWIFT] = true;
        admins[MICHAEL] = true;
        admins[msg.sender] = true;
        //mint founder tokens
        mintFounderTokens(_maxSupply.mul(20).div(100));//20% of max supply
        //create uni exchange
        uniETHHXY = uniFactoryInterface.createExchange(address(this));
        uniHXYInterface = UniswapExchangeInterface(uniETHHXY);
    }

    //fallback for eth sent to contract - auto distribute as donation
    receive() external payable{
        donate();
    }

    function _initialLiquidity()
        public
        payable
        onlyAdmins
        synchronized
    {
        require(msg.value >= 0.001 ether, "eth value too low");
        //add liquidity
        uint heartsForEth = uniHEXInterface.getEthToTokenInputPrice(msg.value);//price of eth value in hex
        uint hxy = heartsForEth / mintRatio;
        _mint(address(this), hxy);//mint tokens to this contract
        this.safeApprove(uniETHHXY, hxy);//approve uni exchange contract
        uniHXYInterface.addLiquidity{value:msg.value}(0, hxy, (now + 15 minutes)); //send tokens and eth to uni as liquidity*/
    }
    
    
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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 returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].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 returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply unless mintBLock is true
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        uint256 amt = amount;
        require(account != address(0), "ERC20: mint to the zero address");
        if(!mintBlock){
            if(_totalSupply < _maxSupply){
                if(_totalSupply.add(amt) > _maxSupply){
                    amt = _maxSupply.sub(_totalSupply);
                    _totalSupply = _maxSupply;
                    mintBlock = true;
                }
                else{
                    _totalSupply = _totalSupply.add(amt);
                }
                _balances[account] = _balances[account].add(amt);
                emit Transfer(address(0), account, amt);
            }
        }
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount, "ERC20: burn amount exceeds allowance"));
    }

    /**
     * @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);//from address(0) for minting

    /**
     * @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);

    //mint HXY to founders (only ever called in constructor)
    function mintFounderTokens(uint tokens)
        internal
        synchronized
        returns(bool)
    {
        require(tokens <= _maxSupply.mul(20).div(100), "founder tokens cannot be over 20%");
        address minter = FOUNDER;

        _mint(minter, tokens/2);//mint HXY
        _mint(address(this), tokens/2);//mint HXY to be locked for 5 years, 10% unlocked every 6 months
        lock(tokens/2);
        return true;
    }

    function lock(uint tokens)
        internal
    {
        lockStartTimestamp = now;
        lockedTokens = tokens;
        allLocked = tokens;
        emit FounderLock(tokens, lockStartTimestamp);
    }

    function unlock()
        public
        onlyAdmins
        synchronized
    {
        uint sixMonths = lockDayLength/10;
        require(unlockLvl < 10, "token unlock complete");
        require(lockStartTimestamp.add(sixMonths.mul(daySeconds)) <= now, "tokens cannot be unlocked yet");//must be at least over 6 months
        uint value = allLocked/10;
        if(lockStartTimestamp.add((sixMonths).mul(daySeconds)) <= now && unlockLvl == 0){
            unlockLvl++;
            lockedTokens = lockedTokens.sub(value);
            transfer(FOUNDER, value);
        }
        else if(lockStartTimestamp.add((sixMonths * 2).mul(daySeconds)) <= now && unlockLvl == 1){
            unlockLvl++;
            lockedTokens = lockedTokens.sub(value);
            transfer(FOUNDER, value);
        }
        else if(lockStartTimestamp.add((sixMonths * 3).mul(daySeconds)) <= now && unlockLvl == 2){
            unlockLvl++;
            lockedTokens = lockedTokens.sub(value);
            transfer(FOUNDER, value);
        }
        else if(lockStartTimestamp.add((sixMonths * 4).mul(daySeconds)) <= now && unlockLvl == 3){
            unlockLvl++;
            lockedTokens = lockedTokens.sub(value);
            transfer(FOUNDER, value); 
        }
        else if(lockStartTimestamp.add((sixMonths * 5).mul(daySeconds)) <= now && unlockLvl == 4){
            unlockLvl++;
            lockedTokens = lockedTokens.sub(value);
            transfer(FOUNDER, value);
        }
        else if(lockStartTimestamp.add((sixMonths * 6).mul(daySeconds)) <= now && unlockLvl == 5){
            unlockLvl++;
            lockedTokens = lockedTokens.sub(value);
            transfer(FOUNDER, value); 
        }
        else if(lockStartTimestamp.add((sixMonths * 7).mul(daySeconds)) <= now && unlockLvl == 6){
            unlockLvl++;
            lockedTokens = lockedTokens.sub(value);
            transfer(FOUNDER, value);
        }
        else if(lockStartTimestamp.add((sixMonths * 8).mul(daySeconds)) <= now && unlockLvl == 7)
        {
            unlockLvl++;     
            lockedTokens = lockedTokens.sub(value);      
            transfer(FOUNDER, value);
        }
        else if(lockStartTimestamp.add((sixMonths * 9).mul(daySeconds)) <= now && unlockLvl == 8){
            unlockLvl++;
            lockedTokens = lockedTokens.sub(value);
            transfer(FOUNDER, value);
        }
        else if(lockStartTimestamp.add((sixMonths * 10).mul(daySeconds)) <= now && unlockLvl == 9){
            unlockLvl++;
            if(lockedTokens >= value){
                lockedTokens = lockedTokens.sub(value);
            }
            else{
                value = lockedTokens;
                lockedTokens = 0;
            }
            transfer(FOUNDER, value);
        }
        else{
            revert();
        }
        emit FounderUnlock(value, now);
    }
    ////////////////////////////////////////////////////////
    /////////////////PUBLIC FACING - HXY CONTROL//////////
    //////////////////////////////////////////////////////

    //freeze HXY tokens to contract - resets freeze time , if re-freezing before minFreezeDayLength any profit from already frozen tokens is lost along with resetting the freezeStartTimestamp, incentivizing freezing larger amounts for longer.
    function FreezeTokens(uint amt)
        public
    {
        require(amt > 0, "zero input");
        require(tokenBalance() >= amt, "Error: insufficient balance");//ensure user has enough funds
        if(isFreezeFinished()){
            UnfreezeTokens();//unfreezes all currently froze tokens + profit
        }
        //update balances
        tokenFrozenBalances[msg.sender] = tokenFrozenBalances[msg.sender].add(amt);
        totalFrozen = totalFrozen.add(amt);
        frozen[msg.sender].freezeStartTimestamp = now;
        _transfer(msg.sender, address(this), amt);//make transfer
        emit TokenFreeze(msg.sender, amt);
    }

    //unfreeze HXY tokens from contract
    function UnfreezeTokens()
        public
        synchronized
    {
        require(tokenFrozenBalances[msg.sender] > 0,"Error: unsufficient frozen balance");//ensure user has enough locked funds
        require(isFreezeFinished(), "tokens cannot be unlocked yet. min 7 day freeze");
        uint amt = tokenFrozenBalances[msg.sender];
        _mint(msg.sender, calcFreezingRewards());//mint HXY - total unfrozen / 1000 * minFreezeDayLength + days past
        tokenFrozenBalances[msg.sender] = 0;
        frozen[msg.sender].freezeStartTimestamp = 0;
        totalFrozen = totalFrozen.sub(amt);
        _transfer(address(this), msg.sender, amt);//make transfer
        emit TokenUnfreeze(msg.sender, amt);
    }

    //returns freezing reward in hxy
    function calcFreezingRewards()
        public
        view
        returns(uint)
    {
        return (tokenFrozenBalances[msg.sender].div(mintRatio) * minFreezeDayLength + daysPastMinFreezeLength());
    }
    
    //returns amount of days frozen past min freeze length of 7 days
    function daysPastMinFreezeLength()
        public
        view
        returns(uint)
    {
        uint daysPast = now.sub(frozen[msg.sender].freezeStartTimestamp).div(daySeconds);
        if(daysPast >= minFreezeDayLength){
            return daysPast - minFreezeDayLength;// returns 0 if under 1 day passed
        }
        else{
            return 0;
        }
    }

    //transforms HEX to HXY @ 1000:1
    function transformHEX(uint hearts, address ref)//Approval needed
        public
        synchronized
    {
        require(roomActive, "transform room not active");
        require(hexInterface.transferFrom(msg.sender, address(this), hearts), "Transfer failed");//send hex from user to contract
        //transform
        uint HXY = hearts / mintRatio;//HXY tokens to mint
        if(ref != address(0))//ref
        {
            require(roundCap >= roundTransformed.add(HXY.add(HXY.div(10))), "round supply cap reached");
            require(roundCap < _maxSupply.sub(totalSupply()), "round cap exeeds remaining maxSupply, reduce roundCap");
            roundTransformed += HXY.add(HXY.div(10));
            totalHXYTransformed += HXY.add(HXY.div(10));
            totalHeartsTransformed += hearts;
            _mint(ref, HXY.div(10));
        }
        else{//no ref
            require(roundCap >= roundTransformed.add(HXY), "round supply cap reached");
            require(roundCap < _maxSupply.sub(totalSupply()), "round cap exeeds remaining maxSupply, reduce roundCap");
            roundTransformed += HXY;
            totalHXYTransformed += HXY;
            totalHeartsTransformed += hearts;
        }
        _mint(msg.sender, HXY);//mint HXY - 0.1% of total heart value @ 1 HXY for 1000 HEX
        distributable += hearts;
        emit Transform(hearts, HXY, msg.sender);
    }
    
    //mint HXY to address ( for use in external contracts within the eco-system)
    function mintHXY(uint hearts, address receiver)
        public
        onlyMinters
        returns(bool)
    {
        uint amt = hearts.div(mintRatio);
        address minter = receiver;
        _mint(minter, amt);//mint HXY - 0.1% of total heart value @ 1 HXY for 1000 HEX
        return true;
    }

    ///////////////////////////////
    ////////ADMIN ONLY//////////////
    ///////////////////////////////

    //allows addition of contract addresses that can call this contracts mint function.
    function addMinter(address minter)
        public
        onlyMultisig
        returns (bool)
    {        
        minters[minter] = true;
        minterAddresses.push(minter);
        return true;
    }

    //toggle transform room on/off. specify percantage of maxSupply available to transform
    function toggleRoundActive(uint percentSupplyCap)
        public
        onlyAdmins
    {
        require(percentSupplyCap < (100 - (_totalSupply.mul(100).div(_maxSupply))), "percentage supplied to high");
        if(!roomActive){
            roomActive = true;
            roundCap = _maxSupply.mul(percentSupplyCap).div(100);
            roundTransformed = 0;
        }
        else{
            roomActive = false;
        }
    }

    ///////////////////////////////
    ////////VIEW ONLY//////////////
    ///////////////////////////////

    //total HXY frozen in contract
    function totalFrozenTokenBalance()
        public
        view
        returns (uint256)
    {
        return totalFrozen;
    }

    //HXY balance of caller
    function tokenBalance()
        public
        view
        returns (uint256)
    {
        return balanceOf(msg.sender);
    }

    //
    function isFreezeFinished()
        public
        view
        returns(bool)
    {
        if(frozen[msg.sender].freezeStartTimestamp == 0){
            return false;
        }
        else{
           return frozen[msg.sender].freezeStartTimestamp.add((minFreezeDayLength).mul(daySeconds)) <= now;               
        }

    }
    
    
    function distributeTransformedHex () public {
        //get balance    
        require(distributable > 99, "balance too low to distribute");
        //distribute
        uint256 percent = distributable.div(100);
        uint teamPercent = percent.mul(20);
        //
        hexInterface.transfer(LOUIS, teamPercent.div(7));
        hexInterface.transfer(AMIRIS, teamPercent.div(7));
        hexInterface.transfer(MARK, teamPercent.div(7));
        hexInterface.transfer(KEVIN, teamPercent.div(7));
        hexInterface.transfer(DONATOR, teamPercent.div(7));
        hexInterface.transfer(JARED, teamPercent.div(7));
        hexInterface.transfer(KYLE, teamPercent.div(7));
        //
        hexInterface.transfer(MARCO, percent.mul(15));
        hexInterface.transfer(SWIFT, percent.mul(10));
        hexInterface.transfer(ANGEL, percent.mul(20));
        hexInterface.transfer(MICHAEL, percent.mul(15));
        hexInterface.transfer(FOUNDER, percent.mul(20));//10% HXY liquidity allocation + 10% overflow
        distributable = 0;
    }
    
    function donate() public payable {
        require(msg.value > 0);
        bool success = false;
        uint256 balance = msg.value;
        //distribute
        uint256 percent = balance.div(100);
        uint teamPercent = percent.mul(20);
        (success, ) =  LOUIS.call{value:teamPercent.div(7)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        (success, ) =  AMIRIS.call{value:teamPercent.div(7)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        (success, ) =  MARK.call{value:teamPercent.div(7)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        (success, ) =  KEVIN.call{value:teamPercent.div(7)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        (success, ) =  DONATOR.call{value:teamPercent.div(7)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        (success, ) =  JARED.call{value:teamPercent.div(7)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        (success, ) =  KYLE.call{value:teamPercent.div(7)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        //
        (success, ) =  MARCO.call{value:percent.mul(15)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        (success, ) =  SWIFT.call{value:percent.mul(10)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        (success, ) =  ANGEL.call{value:percent.mul(20)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        (success, ) =  MICHAEL.call{value:percent.mul(15)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
        (success, ) =  FOUNDER.call{value:percent.mul(20)}{gas:donationGasLimit}('');
        require(success, "Transfer failed");
    }

    function setDonateGasLimit(uint gasLimit)
        public
        onlyAdmins
    {
        donationGasLimit = gasLimit;
    }
}

File 1 of 5: Address.sol
pragma solidity 0.6.4;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

File 2 of 5: HEX.sol
pragma solidity 0.6.4;

interface HEX {
   /**
     * @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);//from address(0) for minting

    /**
     * @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);

   function stakeStart(uint256 newStakedHearts, uint256 newStakedDays) external;
   function stakeEnd(uint256 stakeIndex, uint40 stakeIdParam) external;
   function stakeCount(address stakerAddr) external view returns (uint256);
   function stakeLists(address owner, uint256 stakeIndex) external view returns (uint40, uint72, uint72, uint16, uint16, uint16, bool);
   function currentDay() external view returns (uint256);
   function dailyDataRange(uint256 beginDay, uint256 endDay) external view returns (uint256[] memory);
   function globalInfo() external view returns (uint256[13] memory);

}

File 4 of 5: IERC20.sol
pragma solidity 0.6.4;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */

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);//from address(0) for minting

    /**
     * @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);
}

File 5 of 5: SafeMath.sol
pragma solidity 0.6.4;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
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.
     *
     * _Available since v2.4.0._
     */
    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.
     *
     * _Available since v2.4.0._
     */
    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.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"hxyAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"FounderLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"hxyAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"FounderUnlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenUnfreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"hexAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"hxyAmt","type":"uint256"},{"indexed":true,"internalType":"address","name":"transformer","type":"address"}],"name":"Transform","type":"event"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"FreezeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UnfreezeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_initialLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calcFreezingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daysPastMinFreezeLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeTransformedHex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"donationGasLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"frozen","outputs":[{"internalType":"uint256","name":"freezeStartTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isFreezeFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDayLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minFreezeDayLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"hearts","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mintHXY","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minterAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roomActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roundCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roundTransformed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gasLimit","type":"uint256"}],"name":"setDonateGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentSupplyCap","type":"uint256"}],"name":"toggleRoundActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenFrozenBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFrozen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFrozenTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHXYTransformed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHeartsTransformed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hearts","type":"uint256"},{"internalType":"address","name":"ref","type":"address"}],"name":"transformHEX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniETHHXY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockLvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811673c0a47dfe034b400b47bdad5fecda2621de6c4d9517918290556003805482167305cde89ccfa0ada8c88d5a23caaa79ef129e7883179081905560048054831690556005805483166001600160a01b03928316179055600780548316938216939093178355600880548316732b591e99afe9f32eaa6214f7b7629768c40eeb391790819055600980548416919092161790556000600a819055600b819055600c819055600d819055600e819055600f8190556010819055610721601155601281905560138190556103e860155560169290925562015180601755601891909155661550f7dca70000601a55601c805482167335c7a87ebc3e9fbfd2a31579c70f0a2a8d4de4c5179055601d8054821673c61f905832ae9fb6ef5bad8cf6e5b8b5ae1df026179055601e8054821673d30bc4859a79852157211e6db19de159673a67e2179055601f8054821673e551072153c02fa33d4903cab0435fb86f1a80cb179055602080548216737251ffb72c77221d16e6e04c9cd309effd0f940d17905560218054821673bf1984b12878c6a25f0921535c76c05a60bdef39179055615208602255602380547435e9034f47cc00b8a9b555fc1fdb9598b2c245fd00610100600160a81b0319909116179055602480548216735ecb4d3b4b451b838242c3cf8404ef18f5c486ab17905560258054821673454f203260a74c0a8b5c0a78fba5b4e8b31dcc6317905560268054821673723e82eb1a1b419fb36e9bd65e50a979cd13d341179055602780548216733487b398546c9b757921df6de78ec308203f583017905560288054821673406d1fc98d231ad69807cd41d4d6f8273401354f1790556029805490911673f80a891c1a7600ddd84b1f9d54e0b092610ed804179055348015620002a557600080fd5b50601d546001600160a01b039081166000908152602b602090815260408083208054600160ff199182168117909255601e548616855282852080548216831790556021548616855282852080548216831790558354861685528285208054821683179055601f549095168452818420805486168217905533845292208054909316909117909155601a546200037791620003689160649162000354919060149062000427811b62002e8917901c565b6200048e60201b62002e401790919060201c565b6001600160e01b03620004d816565b5060075460408051630b2479c760e11b815230600482015290516001600160a01b0390921691631648f38e916024808201926020929091908290030181600087803b158015620003c657600080fd5b505af1158015620003db573d6000803e3d6000fd5b505050506040513d6020811015620003f257600080fd5b5051600480546001600160a01b03199081166001600160a01b0393841617918290556006805492909316911617905562000962565b600082620004385750600062000488565b828202828482816200044657fe5b0414620004855760405162461bcd60e51b8152600401808060200182810382526021815260200180620042ef6021913960400191505060405180910390fd5b90505b92915050565b60006200048583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620005ef60201b60201c565b60235460009060ff161562000520576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b60238054600160ff19909116179055601a5462000553906064906200035490601462000427602090811b62002e8917901c565b821115620005935760405162461bcd60e51b8152600401808060200182810382526021815260200180620042ce6021913960400191505060405180910390fd5b601d546001600160a01b0316620005b8816002855b046001600160e01b036200069616565b620005c630600285620005a8565b620005dd600284046001600160e01b036200081216565b50506023805460ff1916905550600190565b600081836200067f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200064357818101518382015260200162000629565b50505050905090810190601f168015620006715780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200068c57fe5b0495945050505050565b806001600160a01b038316620006f3576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60145460ff166200080d57601a54601b5410156200080d57601a546200072a82601b546200086060201b620032031790919060201c565b11156200076a576200074f601b54601a54620008bb60201b620031c11790919060201c565b601a54601b556014805460ff1916600117905590506200078a565b6200078681601b546200086060201b620032031790919060201c565b601b555b6001600160a01b03831660009081526020818152604090912054620007ba9183906200320362000860821b17901c565b6001600160a01b0384166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b505050565b4260108190556012829055601382905560408051838152602081019290925280517f3625b5dbaf49e9a7d78db4e7a4dfe7a45f4088a196185afc1a1a0d4d70db85ac9281900390910190a150565b60008282018381101562000485576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006200048583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200090560201b60201c565b600081848411156200095a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156200064357818101518382015260200162000629565b505050900390565b61395c80620009726000396000f3fe60806040526004361061028c5760003560e01c806370a082311161015a578063a457c2d7116100c1578063d05166501161007a578063d051665014610846578063d66e182714610879578063dd62ed3e146108a3578063e1175b3f146108de578063ed88c68e146108f3578063fd71ea50146108fb5761029b565b8063a457c2d714610747578063a49b0fb614610780578063a69df4b5146107b9578063a9059cbb146107ce578063b0efb8a314610807578063c7d0b70e1461081c5761029b565b80638c89e7d0116101135780638c89e7d01461068d578063922e92a3146106a257806395d89b41146106d5578063983b2d56146106ea5780639b8fdacc1461071d5780639e1a4d19146107325761029b565b806370a08231146105c5578063714a35fb146105f85780637f13375d1461060d57806384a91db71461062257806385ca6eb81461062a57806388bb5beb146106545761029b565b806330adef7c116101fe5780634496223b116101b75780634496223b14610547578063451154301461055c578063453ec42f146105715780634af4be5a14610586578063529f4e881461059b5780636710fb28146105b05761029b565b806330adef7c146104a5578063313ce567146104ba5780633676ea1b146104cf57806339509351146104e45780633f9bcc6c1461051d57806343e97339146105325761029b565b8063095ea7b311610250578063095ea7b3146103c15780630eb347401461040e57806318160ddd146104235780631e7f87bc1461043857806322f4596f1461044d57806323b872dd146104625761029b565b80630115a04f146102a057806302885097146102c75780630410808e1461030d57806306fdde031461032257806307245e29146103ac5761029b565b3661029b57610299610910565b005b600080fd5b3480156102ac57600080fd5b506102b5611183565b60408051918252519081900360200190f35b3480156102d357600080fd5b506102f1600480360360208110156102ea57600080fd5b5035611189565b604080516001600160a01b039092168252519081900360200190f35b34801561031957600080fd5b506102b56111b0565b34801561032e57600080fd5b506103376111b7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610371578181015183820152602001610359565b50505050905090810190601f16801561039e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b857600080fd5b506102b56111dc565b3480156103cd57600080fd5b506103fa600480360360408110156103e457600080fd5b506001600160a01b0381351690602001356111e2565b604080519115158252519081900360200190f35b34801561041a57600080fd5b506102b56111f9565b34801561042f57600080fd5b506102b56111ff565b34801561044457600080fd5b506102b5611205565b34801561045957600080fd5b506102b561120b565b34801561046e57600080fd5b506103fa6004803603606081101561048557600080fd5b506001600160a01b03813581169160208101359091169060400135611211565b3480156104b157600080fd5b506102b5611280565b3480156104c657600080fd5b506102b56112da565b3480156104db57600080fd5b506102b56112df565b3480156104f057600080fd5b506103fa6004803603604081101561050757600080fd5b506001600160a01b0381351690602001356112e5565b34801561052957600080fd5b506102b5611321565b34801561053e57600080fd5b506102b5611327565b34801561055357600080fd5b506102b561132d565b34801561056857600080fd5b506102b5611333565b34801561057d57600080fd5b506102b5611339565b34801561059257600080fd5b506102b561136f565b3480156105a757600080fd5b506103fa611375565b3480156105bc57600080fd5b506102b5611385565b3480156105d157600080fd5b506102b5600480360360208110156105e857600080fd5b50356001600160a01b031661138b565b34801561060457600080fd5b506103fa6113a6565b34801561061957600080fd5b506102996113af565b610299611bff565b34801561063657600080fd5b506102996004803603602081101561064d57600080fd5b5035611e40565b34801561066057600080fd5b506102996004803603604081101561067757600080fd5b50803590602001356001600160a01b0316611e98565b34801561069957600080fd5b506103fa61229c565b3480156106ae57600080fd5b506102b5600480360360208110156106c557600080fd5b50356001600160a01b03166122f8565b3480156106e157600080fd5b5061033761230a565b3480156106f657600080fd5b506103fa6004803603602081101561070d57600080fd5b50356001600160a01b0316612329565b34801561072957600080fd5b506102b56123e6565b34801561073e57600080fd5b506102b56123ec565b34801561075357600080fd5b506103fa6004803603604081101561076a57600080fd5b506001600160a01b0381351690602001356123fc565b34801561078c57600080fd5b506103fa600480360360408110156107a357600080fd5b50803590602001356001600160a01b0316612451565b3480156107c557600080fd5b506102996124d3565b3480156107da57600080fd5b506103fa600480360360408110156107f157600080fd5b506001600160a01b0381351690602001356129f4565b34801561081357600080fd5b506102b5612a01565b34801561082857600080fd5b506102996004803603602081101561083f57600080fd5b5035612a07565b34801561085257600080fd5b506102b56004803603602081101561086957600080fd5b50356001600160a01b0316612b56565b34801561088557600080fd5b506102996004803603602081101561089c57600080fd5b5035612b68565b3480156108af57600080fd5b506102b5600480360360408110156108c657600080fd5b506001600160a01b0381358116916020013516612c89565b3480156108ea57600080fd5b50610299612cb4565b610299610910565b34801561090757600080fd5b506102f1612e31565b6000341161091d57600080fd5b6000348161093282606463ffffffff612e4016565b9050600061094782601463ffffffff612e8916565b6025549091506001600160a01b031661096782600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d80600081146109aa576040519150601f19603f3d011682016040523d82523d6000602084013e6109af565b606091505b505080945050836109f9576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6028546001600160a01b0316610a1682600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d8060008114610a59576040519150601f19603f3d011682016040523d82523d6000602084013e610a5e565b606091505b50508094505083610aa8576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60235461010090046001600160a01b0316610ac4826007612e40565b6022546040519091906000818181858888f193505050503d8060008114610b07576040519150601f19603f3d011682016040523d82523d6000602084013e610b0c565b606091505b50508094505083610b56576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6027546001600160a01b0316610b7382600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d8060008114610bb6576040519150601f19603f3d011682016040523d82523d6000602084013e610bbb565b606091505b50508094505083610c05576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6026546001600160a01b0316610c2282600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d8060008114610c65576040519150601f19603f3d011682016040523d82523d6000602084013e610c6a565b606091505b50508094505083610cb4576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6024546001600160a01b0316610cd182600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d8060008114610d14576040519150601f19603f3d011682016040523d82523d6000602084013e610d19565b606091505b50508094505083610d63576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b601e546001600160a01b0316610d8082600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d8060008114610dc3576040519150601f19603f3d011682016040523d82523d6000602084013e610dc8565b606091505b50508094505083610e12576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6021546001600160a01b0316610e2f83600f63ffffffff612e8916565b6022546040519091906000818181858888f193505050503d8060008114610e72576040519150601f19603f3d011682016040523d82523d6000602084013e610e77565b606091505b50508094505083610ec1576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6020546001600160a01b0316610ede83600a63ffffffff612e8916565b6022546040519091906000818181858888f193505050503d8060008114610f21576040519150601f19603f3d011682016040523d82523d6000602084013e610f26565b606091505b50508094505083610f70576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6029546001600160a01b0316610f8d83601463ffffffff612e8916565b6022546040519091906000818181858888f193505050503d8060008114610fd0576040519150601f19603f3d011682016040523d82523d6000602084013e610fd5565b606091505b5050809450508361101f576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b601f546001600160a01b031661103c83600f63ffffffff612e8916565b6022546040519091906000818181858888f193505050503d806000811461107f576040519150601f19603f3d011682016040523d82523d6000602084013e611084565b606091505b505080945050836110ce576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b601d546001600160a01b03166110eb83601463ffffffff612e8916565b6022546040519091906000818181858888f193505050503d806000811461112e576040519150601f19603f3d011682016040523d82523d6000602084013e611133565b606091505b5050809450508361117d576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b50505050565b60115481565b602a818154811061119657fe5b6000918252602090912001546001600160a01b0316905081565b6018545b90565b60405180604001604052806009815260200168484558204d6f6e657960b81b81525081565b60105481565b60006111ef338484612ee2565b5060015b92915050565b60125481565b601b5490565b60185481565b601a5481565b600061121e848484612fce565b611276843361127185604051806060016040528060288152602001613802602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919063ffffffff61312a16565b612ee2565b5060019392505050565b601754336000908152602d6020526040812054909182916112b991906112ad90429063ffffffff6131c116565b9063ffffffff612e4016565b905060165481106112d057601654900390506111b4565b60009150506111b4565b600881565b60225481565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916111ef918590611271908663ffffffff61320316565b60155481565b600c5481565b60165481565b600d5481565b6000611343611280565b601654601554336000908152601960205260409020546113689163ffffffff612e4016565b0201905090565b600b5481565b600954600160a01b900460ff1681565b600e5481565b6001600160a01b031660009081526020819052604090205490565b60145460ff1681565b6063600e5411611406576040805162461bcd60e51b815260206004820152601d60248201527f62616c616e636520746f6f206c6f7720746f2064697374726962757465000000604482015290519081900360640190fd5b600e5460009061141d90606463ffffffff612e4016565b9050600061143282601463ffffffff612e8916565b6009546025549192506001600160a01b039081169163a9059cbb911661145f84600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156114ae57600080fd5b505af11580156114c2573d6000803e3d6000fd5b505050506040513d60208110156114d857600080fd5b50506009546028546001600160a01b039182169163a9059cbb911661150484600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561155357600080fd5b505af1158015611567573d6000803e3d6000fd5b505050506040513d602081101561157d57600080fd5b50506009546023546001600160a01b039182169163a9059cbb916101009004166115ae84600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156115fd57600080fd5b505af1158015611611573d6000803e3d6000fd5b505050506040513d602081101561162757600080fd5b50506009546027546001600160a01b039182169163a9059cbb911661165384600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156116a257600080fd5b505af11580156116b6573d6000803e3d6000fd5b505050506040513d60208110156116cc57600080fd5b50506009546026546001600160a01b039182169163a9059cbb91166116f884600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561174757600080fd5b505af115801561175b573d6000803e3d6000fd5b505050506040513d602081101561177157600080fd5b50506009546024546001600160a01b039182169163a9059cbb911661179d84600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156117ec57600080fd5b505af1158015611800573d6000803e3d6000fd5b505050506040513d602081101561181657600080fd5b5050600954601e546001600160a01b039182169163a9059cbb911661184284600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b505050506040513d60208110156118bb57600080fd5b50506009546021546001600160a01b039182169163a9059cbb91166118e785600f63ffffffff612e8916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b505050506040513d602081101561196057600080fd5b50506009546020546001600160a01b039182169163a9059cbb911661198c85600a63ffffffff612e8916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156119db57600080fd5b505af11580156119ef573d6000803e3d6000fd5b505050506040513d6020811015611a0557600080fd5b50506009546029546001600160a01b039182169163a9059cbb9116611a3185601463ffffffff612e8916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611a8057600080fd5b505af1158015611a94573d6000803e3d6000fd5b505050506040513d6020811015611aaa57600080fd5b5050600954601f546001600160a01b039182169163a9059cbb9116611ad685600f63ffffffff612e8916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611b2557600080fd5b505af1158015611b39573d6000803e3d6000fd5b505050506040513d6020811015611b4f57600080fd5b5050600954601d546001600160a01b039182169163a9059cbb9116611b7b85601463ffffffff612e8916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611bca57600080fd5b505af1158015611bde573d6000803e3d6000fd5b505050506040513d6020811015611bf457600080fd5b50506000600e555050565b336000908152602b602052604090205460ff16611c52576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60235460ff1615611c96576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff1916600117905566038d7ea4c68000341015611cf3576040805162461bcd60e51b81526020600482015260116024820152706574682076616c756520746f6f206c6f7760781b604482015290519081900360640190fd5b6005546040805163cd7724c360e01b815234600482015290516000926001600160a01b03169163cd7724c3916024808301926020929190829003018186803b158015611d3e57600080fd5b505afa158015611d52573d6000803e3d6000fd5b505050506040513d6020811015611d6857600080fd5b50516015549091506000908281611d7b57fe5b049050611d88308261325d565b600454611da69030906001600160a01b03168363ffffffff6133b216565b6006546040805163422f104360e01b815260006004820152602481018490526103844201604482015290516001600160a01b039092169163422f1043913491606480830192602092919082900301818588803b158015611e0557600080fd5b505af1158015611e19573d6000803e3d6000fd5b50505050506040513d6020811015611e3057600080fd5b50506023805460ff191690555050565b336000908152602b602052604090205460ff16611e93576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602255565b60235460ff1615611edc576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff19166001179055600954600160a01b900460ff16611f47576040805162461bcd60e51b815260206004820152601960248201527f7472616e73666f726d20726f6f6d206e6f742061637469766500000000000000604482015290519081900360640190fd5b600954604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611fa157600080fd5b505af1158015611fb5573d6000803e3d6000fd5b505050506040513d6020811015611fcb57600080fd5b5051612010576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6000601554838161201d57fe5b0490506001600160a01b0382161561217a5761206261205361204683600a63ffffffff612e4016565b839063ffffffff61320316565b600b549063ffffffff61320316565b600a5410156120b3576040805162461bcd60e51b81526020600482015260186024820152771c9bdd5b99081cdd5c1c1b1e4818d85c081c995858da195960421b604482015290519081900360640190fd5b6120cd6120be6111ff565b601a549063ffffffff6131c116565b600a541061210c5760405162461bcd60e51b81526004018080602001828103825260358152602001806137ac6035913960400191505060405180910390fd5b61212d61212082600a63ffffffff612e4016565b829063ffffffff61320316565b600b8054909101905561214a61212082600a63ffffffff612e4016565b600d80549091019055600c8054840190556121758261217083600a63ffffffff612e4016565b61325d565b612241565b600b5461218d908263ffffffff61320316565b600a5410156121de576040805162461bcd60e51b81526020600482015260186024820152771c9bdd5b99081cdd5c1c1b1e4818d85c081c995858da195960421b604482015290519081900360640190fd5b6121e96120be6111ff565b600a54106122285760405162461bcd60e51b81526004018080602001828103825260358152602001806137ac6035913960400191505060405180910390fd5b600b805482019055600d805482019055600c8054840190555b61224b338261325d565b600e8054840190556040805184815260208101839052815133927f8593cdaa8491d9718db378eaf48de9e143905b0b70afce0df61a0afda3235625928290030190a250506023805460ff1916905550565b336000908152602d60205260408120546122b8575060006111b4565b426122ef6122d3601754601654612e8990919063ffffffff16565b336000908152602d60205260409020549063ffffffff61320316565b111590506111b4565b60196020526000908152604090205481565b6040518060400160405280600381526020016248585960e81b81525081565b601c546000906001600160a01b0316331461237c576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b506001600160a01b03166000818152602c60205260408120805460ff19166001908117909155602a8054808301825592527fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d290910180546001600160a01b03191690921790915590565b600a5481565b60006123f73361138b565b905090565b60006111ef338461127185604051806060016040528060258152602001613902602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919063ffffffff61312a16565b336000908152602c602052604081205460ff166124a4576040805162461bcd60e51b815260206004820152600c60248201526b3737ba10309036b4b73a32b960a11b604482015290519081900360640190fd5b60006124bb60155485612e4090919063ffffffff16565b9050826124c8818361325d565b506001949350505050565b336000908152602b602052604090205460ff16612526576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60235460ff161561256a576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff19166001179055601154600090600a90049050600a600f54106125d2576040805162461bcd60e51b8152602060048201526015602482015274746f6b656e20756e6c6f636b20636f6d706c65746560581b604482015290519081900360640190fd5b426125fa6125eb60175484612e8990919063ffffffff16565b6010549063ffffffff61320316565b111561264d576040805162461bcd60e51b815260206004820152601d60248201527f746f6b656e732063616e6e6f7420626520756e6c6f636b656420796574000000604482015290519081900360640190fd5b6000600a6013548161265b57fe5b049050426126776125eb60175485612e8990919063ffffffff16565b111580156126855750600f54155b156126c557600f805460010190556012546126a6908263ffffffff6131c116565b601255601d546126bf906001600160a01b0316826129f4565b506129ac565b426126e16125eb60175485600202612e8990919063ffffffff16565b111580156126f15750600f546001145b1561271257600f805460010190556012546126a6908263ffffffff6131c116565b4261272e6125eb60175485600302612e8990919063ffffffff16565b1115801561273e5750600f546002145b1561275f57600f805460010190556012546126a6908263ffffffff6131c116565b4261277b6125eb60175485600402612e8990919063ffffffff16565b1115801561278b5750600f546003145b156127ac57600f805460010190556012546126a6908263ffffffff6131c116565b426127c86125eb60175485600502612e8990919063ffffffff16565b111580156127d85750600f546004145b156127f957600f805460010190556012546126a6908263ffffffff6131c116565b426128156125eb60175485600602612e8990919063ffffffff16565b111580156128255750600f546005145b1561284657600f805460010190556012546126a6908263ffffffff6131c116565b426128626125eb60175485600702612e8990919063ffffffff16565b111580156128725750600f546006145b1561289357600f805460010190556012546126a6908263ffffffff6131c116565b426128af6125eb60175485600802612e8990919063ffffffff16565b111580156128bf5750600f546007145b156128e057600f805460010190556012546126a6908263ffffffff6131c116565b426128fc6125eb60175485600902612e8990919063ffffffff16565b1115801561290c5750600f546008145b1561292d57600f805460010190556012546126a6908263ffffffff6131c116565b426129496125eb60175485600a02612e8990919063ffffffff16565b111580156129595750600f546009145b1561029b57600f80546001019055601254811161298b57601254612983908263ffffffff6131c116565b601255612996565b506012805460009091555b601d546126bf906001600160a01b0316826129f4565b6040805182815242602082015281517ff6742054252f94c182844c882646c1d954775ae04b2de8f83448d54154ddaf62929181900390910190a150506023805460ff19169055565b60006111ef338484612fce565b600f5481565b60008111612a49576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b80612a526123ec565b1015612aa5576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b612aad61229c565b15612aba57612aba612cb4565b33600090815260196020526040902054612ada908263ffffffff61320316565b33600090815260196020526040902055601854612afd908263ffffffff61320316565b601855336000818152602d60205260409020429055612b1d903083612fce565b60408051828152905133917f7def9f73ac6a7ac8fe4dc55f5257d48aed7e3f9d5247b0020598b87a5c369d82919081900360200190a250565b602d6020526000908152604090205481565b336000908152602b602052604090205460ff16612bbb576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b612bd7601a546112ad6064601b54612e8990919063ffffffff16565b6064038110612c2d576040805162461bcd60e51b815260206004820152601b60248201527f70657263656e7461676520737570706c69656420746f20686967680000000000604482015290519081900360640190fd5b600954600160a01b900460ff16612c78576009805460ff60a01b1916600160a01b179055601a54612c6b906064906112ad908463ffffffff612e8916565b600a556000600b55612c86565b6009805460ff60a01b191690555b50565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60235460ff1615612cf8576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff1916600117905533600090815260196020526040902054612d505760405162461bcd60e51b815260040180806020018281038252602281526020018061378a6022913960400191505060405180910390fd5b612d5861229c565b612d935760405162461bcd60e51b815260040180806020018281038252602f81526020018061389d602f913960400191505060405180910390fd5b3360008181526019602052604090205490612db090612170611339565b336000908152601960209081526040808320839055602d909152812055601854612de0908263ffffffff6131c116565b601855612dee303383612fce565b60408051828152905133917fb925ba840e2f36bcb317f8179bd8b5ed01aba4a22abf5f169162c0894dea87ab919081900360200190a2506023805460ff19169055565b6004546001600160a01b031681565b6000612e8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134c5565b9392505050565b600082612e98575060006111f3565b82820282848281612ea557fe5b0414612e825760405162461bcd60e51b81526004018080602001828103825260218152602001806137e16021913960400191505060405180910390fd5b6001600160a01b038316612f275760405162461bcd60e51b815260040180806020018281038252602481526020018061384f6024913960400191505060405180910390fd5b6001600160a01b038216612f6c5760405162461bcd60e51b81526004018080602001828103825260228152602001806137426022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166130135760405162461bcd60e51b815260040180806020018281038252602581526020018061382a6025913960400191505060405180910390fd5b6001600160a01b0382166130585760405162461bcd60e51b815260040180806020018281038252602381526020018061371f6023913960400191505060405180910390fd5b61309b81604051806060016040528060268152602001613764602691396001600160a01b038616600090815260208190526040902054919063ffffffff61312a16565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546130d0908263ffffffff61320316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156131b95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561317e578181015183820152602001613166565b50505050905090810190601f1680156131ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000612e8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061312a565b600082820183811015612e82576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b806001600160a01b0383166132b9576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60145460ff166133ad57601a54601b5410156133ad57601a54601b546132e5908363ffffffff61320316565b111561331a57601b54601a546133009163ffffffff6131c116565b601a54601b556014805460ff191660011790559050613331565b601b5461332d908263ffffffff61320316565b601b555b6001600160a01b03831660009081526020819052604090205461335a908263ffffffff61320316565b6001600160a01b0384166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b505050565b801580613438575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d602081101561343457600080fd5b5051155b6134735760405162461bcd60e51b81526004018080602001828103825260368152602001806138cc6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526133ad90849061352a565b600081836135145760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561317e578181015183820152602001613166565b50600083858161352057fe5b0495945050505050565b61353c826001600160a01b03166136e2565b61358d576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106135cb5780518252601f1990920191602091820191016135ac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461362d576040519150601f19603f3d011682016040523d82523d6000602084013e613632565b606091505b509150915081613689576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561117d578080602001905160208110156136a557600080fd5b505161117d5760405162461bcd60e51b815260040180806020018281038252602a815260200180613873602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061371657508115155b94935050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654572726f723a20756e73756666696369656e742066726f7a656e2062616c616e6365726f756e6420636170206578656564732072656d61696e696e67206d6178537570706c792c2072656475636520726f756e64436170536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564746f6b656e732063616e6e6f7420626520756e6c6f636b6564207965742e206d696e20372064617920667265657a655361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205963e2cc6febc1d5ff96247b2710816b17ed5bc683d5987a232f4ba64841545d64736f6c63430006040033666f756e64657220746f6b656e732063616e6e6f74206265206f76657220323025536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806370a082311161015a578063a457c2d7116100c1578063d05166501161007a578063d051665014610846578063d66e182714610879578063dd62ed3e146108a3578063e1175b3f146108de578063ed88c68e146108f3578063fd71ea50146108fb5761029b565b8063a457c2d714610747578063a49b0fb614610780578063a69df4b5146107b9578063a9059cbb146107ce578063b0efb8a314610807578063c7d0b70e1461081c5761029b565b80638c89e7d0116101135780638c89e7d01461068d578063922e92a3146106a257806395d89b41146106d5578063983b2d56146106ea5780639b8fdacc1461071d5780639e1a4d19146107325761029b565b806370a08231146105c5578063714a35fb146105f85780637f13375d1461060d57806384a91db71461062257806385ca6eb81461062a57806388bb5beb146106545761029b565b806330adef7c116101fe5780634496223b116101b75780634496223b14610547578063451154301461055c578063453ec42f146105715780634af4be5a14610586578063529f4e881461059b5780636710fb28146105b05761029b565b806330adef7c146104a5578063313ce567146104ba5780633676ea1b146104cf57806339509351146104e45780633f9bcc6c1461051d57806343e97339146105325761029b565b8063095ea7b311610250578063095ea7b3146103c15780630eb347401461040e57806318160ddd146104235780631e7f87bc1461043857806322f4596f1461044d57806323b872dd146104625761029b565b80630115a04f146102a057806302885097146102c75780630410808e1461030d57806306fdde031461032257806307245e29146103ac5761029b565b3661029b57610299610910565b005b600080fd5b3480156102ac57600080fd5b506102b5611183565b60408051918252519081900360200190f35b3480156102d357600080fd5b506102f1600480360360208110156102ea57600080fd5b5035611189565b604080516001600160a01b039092168252519081900360200190f35b34801561031957600080fd5b506102b56111b0565b34801561032e57600080fd5b506103376111b7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610371578181015183820152602001610359565b50505050905090810190601f16801561039e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b857600080fd5b506102b56111dc565b3480156103cd57600080fd5b506103fa600480360360408110156103e457600080fd5b506001600160a01b0381351690602001356111e2565b604080519115158252519081900360200190f35b34801561041a57600080fd5b506102b56111f9565b34801561042f57600080fd5b506102b56111ff565b34801561044457600080fd5b506102b5611205565b34801561045957600080fd5b506102b561120b565b34801561046e57600080fd5b506103fa6004803603606081101561048557600080fd5b506001600160a01b03813581169160208101359091169060400135611211565b3480156104b157600080fd5b506102b5611280565b3480156104c657600080fd5b506102b56112da565b3480156104db57600080fd5b506102b56112df565b3480156104f057600080fd5b506103fa6004803603604081101561050757600080fd5b506001600160a01b0381351690602001356112e5565b34801561052957600080fd5b506102b5611321565b34801561053e57600080fd5b506102b5611327565b34801561055357600080fd5b506102b561132d565b34801561056857600080fd5b506102b5611333565b34801561057d57600080fd5b506102b5611339565b34801561059257600080fd5b506102b561136f565b3480156105a757600080fd5b506103fa611375565b3480156105bc57600080fd5b506102b5611385565b3480156105d157600080fd5b506102b5600480360360208110156105e857600080fd5b50356001600160a01b031661138b565b34801561060457600080fd5b506103fa6113a6565b34801561061957600080fd5b506102996113af565b610299611bff565b34801561063657600080fd5b506102996004803603602081101561064d57600080fd5b5035611e40565b34801561066057600080fd5b506102996004803603604081101561067757600080fd5b50803590602001356001600160a01b0316611e98565b34801561069957600080fd5b506103fa61229c565b3480156106ae57600080fd5b506102b5600480360360208110156106c557600080fd5b50356001600160a01b03166122f8565b3480156106e157600080fd5b5061033761230a565b3480156106f657600080fd5b506103fa6004803603602081101561070d57600080fd5b50356001600160a01b0316612329565b34801561072957600080fd5b506102b56123e6565b34801561073e57600080fd5b506102b56123ec565b34801561075357600080fd5b506103fa6004803603604081101561076a57600080fd5b506001600160a01b0381351690602001356123fc565b34801561078c57600080fd5b506103fa600480360360408110156107a357600080fd5b50803590602001356001600160a01b0316612451565b3480156107c557600080fd5b506102996124d3565b3480156107da57600080fd5b506103fa600480360360408110156107f157600080fd5b506001600160a01b0381351690602001356129f4565b34801561081357600080fd5b506102b5612a01565b34801561082857600080fd5b506102996004803603602081101561083f57600080fd5b5035612a07565b34801561085257600080fd5b506102b56004803603602081101561086957600080fd5b50356001600160a01b0316612b56565b34801561088557600080fd5b506102996004803603602081101561089c57600080fd5b5035612b68565b3480156108af57600080fd5b506102b5600480360360408110156108c657600080fd5b506001600160a01b0381358116916020013516612c89565b3480156108ea57600080fd5b50610299612cb4565b610299610910565b34801561090757600080fd5b506102f1612e31565b6000341161091d57600080fd5b6000348161093282606463ffffffff612e4016565b9050600061094782601463ffffffff612e8916565b6025549091506001600160a01b031661096782600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d80600081146109aa576040519150601f19603f3d011682016040523d82523d6000602084013e6109af565b606091505b505080945050836109f9576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6028546001600160a01b0316610a1682600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d8060008114610a59576040519150601f19603f3d011682016040523d82523d6000602084013e610a5e565b606091505b50508094505083610aa8576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60235461010090046001600160a01b0316610ac4826007612e40565b6022546040519091906000818181858888f193505050503d8060008114610b07576040519150601f19603f3d011682016040523d82523d6000602084013e610b0c565b606091505b50508094505083610b56576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6027546001600160a01b0316610b7382600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d8060008114610bb6576040519150601f19603f3d011682016040523d82523d6000602084013e610bbb565b606091505b50508094505083610c05576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6026546001600160a01b0316610c2282600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d8060008114610c65576040519150601f19603f3d011682016040523d82523d6000602084013e610c6a565b606091505b50508094505083610cb4576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6024546001600160a01b0316610cd182600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d8060008114610d14576040519150601f19603f3d011682016040523d82523d6000602084013e610d19565b606091505b50508094505083610d63576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b601e546001600160a01b0316610d8082600763ffffffff612e4016565b6022546040519091906000818181858888f193505050503d8060008114610dc3576040519150601f19603f3d011682016040523d82523d6000602084013e610dc8565b606091505b50508094505083610e12576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6021546001600160a01b0316610e2f83600f63ffffffff612e8916565b6022546040519091906000818181858888f193505050503d8060008114610e72576040519150601f19603f3d011682016040523d82523d6000602084013e610e77565b606091505b50508094505083610ec1576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6020546001600160a01b0316610ede83600a63ffffffff612e8916565b6022546040519091906000818181858888f193505050503d8060008114610f21576040519150601f19603f3d011682016040523d82523d6000602084013e610f26565b606091505b50508094505083610f70576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6029546001600160a01b0316610f8d83601463ffffffff612e8916565b6022546040519091906000818181858888f193505050503d8060008114610fd0576040519150601f19603f3d011682016040523d82523d6000602084013e610fd5565b606091505b5050809450508361101f576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b601f546001600160a01b031661103c83600f63ffffffff612e8916565b6022546040519091906000818181858888f193505050503d806000811461107f576040519150601f19603f3d011682016040523d82523d6000602084013e611084565b606091505b505080945050836110ce576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b601d546001600160a01b03166110eb83601463ffffffff612e8916565b6022546040519091906000818181858888f193505050503d806000811461112e576040519150601f19603f3d011682016040523d82523d6000602084013e611133565b606091505b5050809450508361117d576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b50505050565b60115481565b602a818154811061119657fe5b6000918252602090912001546001600160a01b0316905081565b6018545b90565b60405180604001604052806009815260200168484558204d6f6e657960b81b81525081565b60105481565b60006111ef338484612ee2565b5060015b92915050565b60125481565b601b5490565b60185481565b601a5481565b600061121e848484612fce565b611276843361127185604051806060016040528060288152602001613802602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919063ffffffff61312a16565b612ee2565b5060019392505050565b601754336000908152602d6020526040812054909182916112b991906112ad90429063ffffffff6131c116565b9063ffffffff612e4016565b905060165481106112d057601654900390506111b4565b60009150506111b4565b600881565b60225481565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916111ef918590611271908663ffffffff61320316565b60155481565b600c5481565b60165481565b600d5481565b6000611343611280565b601654601554336000908152601960205260409020546113689163ffffffff612e4016565b0201905090565b600b5481565b600954600160a01b900460ff1681565b600e5481565b6001600160a01b031660009081526020819052604090205490565b60145460ff1681565b6063600e5411611406576040805162461bcd60e51b815260206004820152601d60248201527f62616c616e636520746f6f206c6f7720746f2064697374726962757465000000604482015290519081900360640190fd5b600e5460009061141d90606463ffffffff612e4016565b9050600061143282601463ffffffff612e8916565b6009546025549192506001600160a01b039081169163a9059cbb911661145f84600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156114ae57600080fd5b505af11580156114c2573d6000803e3d6000fd5b505050506040513d60208110156114d857600080fd5b50506009546028546001600160a01b039182169163a9059cbb911661150484600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561155357600080fd5b505af1158015611567573d6000803e3d6000fd5b505050506040513d602081101561157d57600080fd5b50506009546023546001600160a01b039182169163a9059cbb916101009004166115ae84600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156115fd57600080fd5b505af1158015611611573d6000803e3d6000fd5b505050506040513d602081101561162757600080fd5b50506009546027546001600160a01b039182169163a9059cbb911661165384600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156116a257600080fd5b505af11580156116b6573d6000803e3d6000fd5b505050506040513d60208110156116cc57600080fd5b50506009546026546001600160a01b039182169163a9059cbb91166116f884600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561174757600080fd5b505af115801561175b573d6000803e3d6000fd5b505050506040513d602081101561177157600080fd5b50506009546024546001600160a01b039182169163a9059cbb911661179d84600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156117ec57600080fd5b505af1158015611800573d6000803e3d6000fd5b505050506040513d602081101561181657600080fd5b5050600954601e546001600160a01b039182169163a9059cbb911661184284600763ffffffff612e4016565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b505050506040513d60208110156118bb57600080fd5b50506009546021546001600160a01b039182169163a9059cbb91166118e785600f63ffffffff612e8916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b505050506040513d602081101561196057600080fd5b50506009546020546001600160a01b039182169163a9059cbb911661198c85600a63ffffffff612e8916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156119db57600080fd5b505af11580156119ef573d6000803e3d6000fd5b505050506040513d6020811015611a0557600080fd5b50506009546029546001600160a01b039182169163a9059cbb9116611a3185601463ffffffff612e8916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611a8057600080fd5b505af1158015611a94573d6000803e3d6000fd5b505050506040513d6020811015611aaa57600080fd5b5050600954601f546001600160a01b039182169163a9059cbb9116611ad685600f63ffffffff612e8916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611b2557600080fd5b505af1158015611b39573d6000803e3d6000fd5b505050506040513d6020811015611b4f57600080fd5b5050600954601d546001600160a01b039182169163a9059cbb9116611b7b85601463ffffffff612e8916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611bca57600080fd5b505af1158015611bde573d6000803e3d6000fd5b505050506040513d6020811015611bf457600080fd5b50506000600e555050565b336000908152602b602052604090205460ff16611c52576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60235460ff1615611c96576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff1916600117905566038d7ea4c68000341015611cf3576040805162461bcd60e51b81526020600482015260116024820152706574682076616c756520746f6f206c6f7760781b604482015290519081900360640190fd5b6005546040805163cd7724c360e01b815234600482015290516000926001600160a01b03169163cd7724c3916024808301926020929190829003018186803b158015611d3e57600080fd5b505afa158015611d52573d6000803e3d6000fd5b505050506040513d6020811015611d6857600080fd5b50516015549091506000908281611d7b57fe5b049050611d88308261325d565b600454611da69030906001600160a01b03168363ffffffff6133b216565b6006546040805163422f104360e01b815260006004820152602481018490526103844201604482015290516001600160a01b039092169163422f1043913491606480830192602092919082900301818588803b158015611e0557600080fd5b505af1158015611e19573d6000803e3d6000fd5b50505050506040513d6020811015611e3057600080fd5b50506023805460ff191690555050565b336000908152602b602052604090205460ff16611e93576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602255565b60235460ff1615611edc576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff19166001179055600954600160a01b900460ff16611f47576040805162461bcd60e51b815260206004820152601960248201527f7472616e73666f726d20726f6f6d206e6f742061637469766500000000000000604482015290519081900360640190fd5b600954604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611fa157600080fd5b505af1158015611fb5573d6000803e3d6000fd5b505050506040513d6020811015611fcb57600080fd5b5051612010576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6000601554838161201d57fe5b0490506001600160a01b0382161561217a5761206261205361204683600a63ffffffff612e4016565b839063ffffffff61320316565b600b549063ffffffff61320316565b600a5410156120b3576040805162461bcd60e51b81526020600482015260186024820152771c9bdd5b99081cdd5c1c1b1e4818d85c081c995858da195960421b604482015290519081900360640190fd5b6120cd6120be6111ff565b601a549063ffffffff6131c116565b600a541061210c5760405162461bcd60e51b81526004018080602001828103825260358152602001806137ac6035913960400191505060405180910390fd5b61212d61212082600a63ffffffff612e4016565b829063ffffffff61320316565b600b8054909101905561214a61212082600a63ffffffff612e4016565b600d80549091019055600c8054840190556121758261217083600a63ffffffff612e4016565b61325d565b612241565b600b5461218d908263ffffffff61320316565b600a5410156121de576040805162461bcd60e51b81526020600482015260186024820152771c9bdd5b99081cdd5c1c1b1e4818d85c081c995858da195960421b604482015290519081900360640190fd5b6121e96120be6111ff565b600a54106122285760405162461bcd60e51b81526004018080602001828103825260358152602001806137ac6035913960400191505060405180910390fd5b600b805482019055600d805482019055600c8054840190555b61224b338261325d565b600e8054840190556040805184815260208101839052815133927f8593cdaa8491d9718db378eaf48de9e143905b0b70afce0df61a0afda3235625928290030190a250506023805460ff1916905550565b336000908152602d60205260408120546122b8575060006111b4565b426122ef6122d3601754601654612e8990919063ffffffff16565b336000908152602d60205260409020549063ffffffff61320316565b111590506111b4565b60196020526000908152604090205481565b6040518060400160405280600381526020016248585960e81b81525081565b601c546000906001600160a01b0316331461237c576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b506001600160a01b03166000818152602c60205260408120805460ff19166001908117909155602a8054808301825592527fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d290910180546001600160a01b03191690921790915590565b600a5481565b60006123f73361138b565b905090565b60006111ef338461127185604051806060016040528060258152602001613902602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919063ffffffff61312a16565b336000908152602c602052604081205460ff166124a4576040805162461bcd60e51b815260206004820152600c60248201526b3737ba10309036b4b73a32b960a11b604482015290519081900360640190fd5b60006124bb60155485612e4090919063ffffffff16565b9050826124c8818361325d565b506001949350505050565b336000908152602b602052604090205460ff16612526576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60235460ff161561256a576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff19166001179055601154600090600a90049050600a600f54106125d2576040805162461bcd60e51b8152602060048201526015602482015274746f6b656e20756e6c6f636b20636f6d706c65746560581b604482015290519081900360640190fd5b426125fa6125eb60175484612e8990919063ffffffff16565b6010549063ffffffff61320316565b111561264d576040805162461bcd60e51b815260206004820152601d60248201527f746f6b656e732063616e6e6f7420626520756e6c6f636b656420796574000000604482015290519081900360640190fd5b6000600a6013548161265b57fe5b049050426126776125eb60175485612e8990919063ffffffff16565b111580156126855750600f54155b156126c557600f805460010190556012546126a6908263ffffffff6131c116565b601255601d546126bf906001600160a01b0316826129f4565b506129ac565b426126e16125eb60175485600202612e8990919063ffffffff16565b111580156126f15750600f546001145b1561271257600f805460010190556012546126a6908263ffffffff6131c116565b4261272e6125eb60175485600302612e8990919063ffffffff16565b1115801561273e5750600f546002145b1561275f57600f805460010190556012546126a6908263ffffffff6131c116565b4261277b6125eb60175485600402612e8990919063ffffffff16565b1115801561278b5750600f546003145b156127ac57600f805460010190556012546126a6908263ffffffff6131c116565b426127c86125eb60175485600502612e8990919063ffffffff16565b111580156127d85750600f546004145b156127f957600f805460010190556012546126a6908263ffffffff6131c116565b426128156125eb60175485600602612e8990919063ffffffff16565b111580156128255750600f546005145b1561284657600f805460010190556012546126a6908263ffffffff6131c116565b426128626125eb60175485600702612e8990919063ffffffff16565b111580156128725750600f546006145b1561289357600f805460010190556012546126a6908263ffffffff6131c116565b426128af6125eb60175485600802612e8990919063ffffffff16565b111580156128bf5750600f546007145b156128e057600f805460010190556012546126a6908263ffffffff6131c116565b426128fc6125eb60175485600902612e8990919063ffffffff16565b1115801561290c5750600f546008145b1561292d57600f805460010190556012546126a6908263ffffffff6131c116565b426129496125eb60175485600a02612e8990919063ffffffff16565b111580156129595750600f546009145b1561029b57600f80546001019055601254811161298b57601254612983908263ffffffff6131c116565b601255612996565b506012805460009091555b601d546126bf906001600160a01b0316826129f4565b6040805182815242602082015281517ff6742054252f94c182844c882646c1d954775ae04b2de8f83448d54154ddaf62929181900390910190a150506023805460ff19169055565b60006111ef338484612fce565b600f5481565b60008111612a49576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b80612a526123ec565b1015612aa5576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b612aad61229c565b15612aba57612aba612cb4565b33600090815260196020526040902054612ada908263ffffffff61320316565b33600090815260196020526040902055601854612afd908263ffffffff61320316565b601855336000818152602d60205260409020429055612b1d903083612fce565b60408051828152905133917f7def9f73ac6a7ac8fe4dc55f5257d48aed7e3f9d5247b0020598b87a5c369d82919081900360200190a250565b602d6020526000908152604090205481565b336000908152602b602052604090205460ff16612bbb576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b612bd7601a546112ad6064601b54612e8990919063ffffffff16565b6064038110612c2d576040805162461bcd60e51b815260206004820152601b60248201527f70657263656e7461676520737570706c69656420746f20686967680000000000604482015290519081900360640190fd5b600954600160a01b900460ff16612c78576009805460ff60a01b1916600160a01b179055601a54612c6b906064906112ad908463ffffffff612e8916565b600a556000600b55612c86565b6009805460ff60a01b191690555b50565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60235460ff1615612cf8576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff1916600117905533600090815260196020526040902054612d505760405162461bcd60e51b815260040180806020018281038252602281526020018061378a6022913960400191505060405180910390fd5b612d5861229c565b612d935760405162461bcd60e51b815260040180806020018281038252602f81526020018061389d602f913960400191505060405180910390fd5b3360008181526019602052604090205490612db090612170611339565b336000908152601960209081526040808320839055602d909152812055601854612de0908263ffffffff6131c116565b601855612dee303383612fce565b60408051828152905133917fb925ba840e2f36bcb317f8179bd8b5ed01aba4a22abf5f169162c0894dea87ab919081900360200190a2506023805460ff19169055565b6004546001600160a01b031681565b6000612e8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134c5565b9392505050565b600082612e98575060006111f3565b82820282848281612ea557fe5b0414612e825760405162461bcd60e51b81526004018080602001828103825260218152602001806137e16021913960400191505060405180910390fd5b6001600160a01b038316612f275760405162461bcd60e51b815260040180806020018281038252602481526020018061384f6024913960400191505060405180910390fd5b6001600160a01b038216612f6c5760405162461bcd60e51b81526004018080602001828103825260228152602001806137426022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166130135760405162461bcd60e51b815260040180806020018281038252602581526020018061382a6025913960400191505060405180910390fd5b6001600160a01b0382166130585760405162461bcd60e51b815260040180806020018281038252602381526020018061371f6023913960400191505060405180910390fd5b61309b81604051806060016040528060268152602001613764602691396001600160a01b038616600090815260208190526040902054919063ffffffff61312a16565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546130d0908263ffffffff61320316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156131b95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561317e578181015183820152602001613166565b50505050905090810190601f1680156131ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000612e8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061312a565b600082820183811015612e82576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b806001600160a01b0383166132b9576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60145460ff166133ad57601a54601b5410156133ad57601a54601b546132e5908363ffffffff61320316565b111561331a57601b54601a546133009163ffffffff6131c116565b601a54601b556014805460ff191660011790559050613331565b601b5461332d908263ffffffff61320316565b601b555b6001600160a01b03831660009081526020819052604090205461335a908263ffffffff61320316565b6001600160a01b0384166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b505050565b801580613438575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d602081101561343457600080fd5b5051155b6134735760405162461bcd60e51b81526004018080602001828103825260368152602001806138cc6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526133ad90849061352a565b600081836135145760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561317e578181015183820152602001613166565b50600083858161352057fe5b0495945050505050565b61353c826001600160a01b03166136e2565b61358d576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106135cb5780518252601f1990920191602091820191016135ac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461362d576040519150601f19603f3d011682016040523d82523d6000602084013e613632565b606091505b509150915081613689576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561117d578080602001905160208110156136a557600080fd5b505161117d5760405162461bcd60e51b815260040180806020018281038252602a815260200180613873602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061371657508115155b94935050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654572726f723a20756e73756666696369656e742066726f7a656e2062616c616e6365726f756e6420636170206578656564732072656d61696e696e67206d6178537570706c792c2072656475636520726f756e64436170536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564746f6b656e732063616e6e6f7420626520756e6c6f636b6564207965742e206d696e20372064617920667265657a655361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205963e2cc6febc1d5ff96247b2710816b17ed5bc683d5987a232f4ba64841545d64736f6c63430006040033

Deployed Bytecode Sourcemap

8176:26128:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12878:8;:6;:8::i;:::-;8176:26128;;12:1:-1;9;2:12;9391:32:2;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9391:32:2;;;:::i;:::-;;;;;;;;;;;;;;;;11454;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11454:32:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11454:32:2;;:::i;:::-;;;;-1:-1:-1;;;;;11454:32:2;;;;;;;;;;;;;;30543:134;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30543:134:2;;;:::i;10105:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10105:41:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10105:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9350:34;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9350:34:2;;;:::i;14619:159::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14619:159:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;14619:159:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9469:28;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9469:28:2;;;:::i;13606:100::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13606:100:2;;;:::i;9848:27::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9848:27:2;;;:::i;9999:44::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9999:44:2;;;:::i;15250:309::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15250:309:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;15250:309:2;;;;;;;;;;;;;;;;;:::i;27169:382::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27169:382:2;;;:::i;10197:33::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10197:33:2;;;:::i;10766:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10766:36:2;;;:::i;15968:206::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15968:206:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;15968:206:2;;;;;;;;:::i;9648:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9648:28:2;;;:::i;9174:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9174:38:2;;;:::i;9726:34::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9726:34:2;;;:::i;9219:35::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9219:35:2;;;:::i;26875:212::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26875:212:2;;;:::i;9135:32::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9135:32:2;;;:::i;9075:22::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9075:22:2;;;:::i;9261:29::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9261:29:2;;;:::i;13769:119::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13769:119:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13769:119:2;-1:-1:-1;;;;;13769:119:2;;:::i;9539:21::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9539:21:2;;;:::i;31224:1063::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31224:1063:2;;;:::i;12902:629::-;;;:::i;34172:129::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34172:129:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34172:129:2;;:::i;27597:1416::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27597:1416:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27597:1416:2;;;;;;-1:-1:-1;;;;;27597:1416:2;;:::i;30863:343::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30863:343:2;;;:::i;9882:52::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9882:52:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9882:52:2;-1:-1:-1;;;;;9882:52:2;;:::i;10153:37::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10153:37:2;;;:::i;29628:212::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29628:212:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29628:212:2;-1:-1:-1;;;;;29628:212:2;;:::i;9104:24::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9104:24:2;;;:::i;30714:133::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30714:133:2;;;:::i;16677:257::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16677:257:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;16677:257:2;;;;;;;;:::i;29107:310::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29107:310:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29107:310:2;;;;;;-1:-1:-1;;;;;29107:310:2;;:::i;22041:2931::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22041:2931:2;;;:::i;14101:165::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14101:165:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;14101:165:2;;;;;;;;:::i;9318:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9318:25:2;;;:::i;25406:650::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25406:650:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25406:650:2;;:::i;11639:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11639:41:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11639:41:2;-1:-1:-1;;;;;11639:41:2;;:::i;29940:446::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29940:446:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29940:446:2;;:::i;14329:143::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14329:143:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;14329:143:2;;;;;;;;;;:::i;26105:724::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26105:724:2;;;:::i;32299:1865::-;;;:::i;8607:37::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8607:37:2;;;:::i;32299:1865::-;32363:1;32351:9;:13;32343:22;;12:1:-1;9;2:12;32343:22:2;32376:12;32425:9;32376:12;32485:16;32425:9;32497:3;32485:16;:11;:16;:::i;:::-;32467:34;-1:-1:-1;32512:16:2;32531:15;32467:34;32543:2;32531:15;:11;:15;:::i;:::-;32572:5;;32512:34;;-1:-1:-1;;;;;;32572:5:2;32589:18;32512:34;32605:1;32589:18;:15;:18;:::i;:::-;32613:16;;32572:62;;32613:16;;32572:62;;;;;;;32613:16;32572:62;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;32557:77:2;;;;;32653:7;32645:35;;;;;-1:-1:-1;;;32645:35:2;;;;;;;;;;;;-1:-1:-1;;;32645:35:2;;;;;;;;;;;;;;;32706:6;;-1:-1:-1;;;;;32706:6:2;32724:18;:11;32740:1;32724:18;:15;:18;:::i;:::-;32748:16;;32706:63;;32748:16;;32706:63;;;;;;;32748:16;32706:63;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;32691:78:2;;;;;32788:7;32780:35;;;;;-1:-1:-1;;;32780:35:2;;;;;;;;;;;;-1:-1:-1;;;32780:35:2;;;;;;;;;;;;;;;32841:4;;;;;-1:-1:-1;;;;;32841:4:2;32857:18;:11;32873:1;32857:15;:18::i;:::-;32881:16;;32841:61;;32881:16;;32841:61;;;;;;;32881:16;32841:61;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;32826:76:2;;;;;32921:7;32913:35;;;;;-1:-1:-1;;;32913:35:2;;;;;;;;;;;;-1:-1:-1;;;32913:35:2;;;;;;;;;;;;;;;32974:5;;-1:-1:-1;;;;;32974:5:2;32991:18;:11;33007:1;32991:18;:15;:18;:::i;:::-;33015:16;;32974:62;;33015:16;;32974:62;;;;;;;33015:16;32974:62;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;32959:77:2;;;;;33055:7;33047:35;;;;;-1:-1:-1;;;33047:35:2;;;;;;;;;;;;-1:-1:-1;;;33047:35:2;;;;;;;;;;;;;;;33108:7;;-1:-1:-1;;;;;33108:7:2;33127:18;:11;33143:1;33127:18;:15;:18;:::i;:::-;33151:16;;33108:64;;33151:16;;33108:64;;;;;;;33151:16;33108:64;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;33093:79:2;;;;;33191:7;33183:35;;;;;-1:-1:-1;;;33183:35:2;;;;;;;;;;;;-1:-1:-1;;;33183:35:2;;;;;;;;;;;;;;;33244:5;;-1:-1:-1;;;;;33244:5:2;33261:18;:11;33277:1;33261:18;:15;:18;:::i;:::-;33285:16;;33244:62;;33285:16;;33244:62;;;;;;;33285:16;33244:62;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;33229:77:2;;;;;33325:7;33317:35;;;;;-1:-1:-1;;;33317:35:2;;;;;;;;;;;;-1:-1:-1;;;33317:35:2;;;;;;;;;;;;;;;33378:4;;-1:-1:-1;;;;;33378:4:2;33394:18;:11;33410:1;33394:18;:15;:18;:::i;:::-;33418:16;;33378:61;;33418:16;;33378:61;;;;;;;33418:16;33378:61;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;33363:76:2;;;;;33458:7;33450:35;;;;;-1:-1:-1;;;33450:35:2;;;;;;;;;;;;-1:-1:-1;;;33450:35:2;;;;;;;;;;;;;;;33523:5;;-1:-1:-1;;;;;33523:5:2;33540:15;:7;33552:2;33540:15;:11;:15;:::i;:::-;33561:16;;33523:59;;33561:16;;33523:59;;;;;;;33561:16;33523:59;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;33508:74:2;;;;;33601:7;33593:35;;;;;-1:-1:-1;;;33593:35:2;;;;;;;;;;;;-1:-1:-1;;;33593:35:2;;;;;;;;;;;;;;;33654:5;;-1:-1:-1;;;;;33654:5:2;33671:15;:7;33683:2;33671:15;:11;:15;:::i;:::-;33692:16;;33654:59;;33692:16;;33654:59;;;;;;;33692:16;33654:59;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;33639:74:2;;;;;33732:7;33724:35;;;;;-1:-1:-1;;;33724:35:2;;;;;;;;;;;;-1:-1:-1;;;33724:35:2;;;;;;;;;;;;;;;33785:5;;-1:-1:-1;;;;;33785:5:2;33802:15;:7;33814:2;33802:15;:11;:15;:::i;:::-;33823:16;;33785:59;;33823:16;;33785:59;;;;;;;33823:16;33785:59;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;33770:74:2;;;;;33863:7;33855:35;;;;;-1:-1:-1;;;33855:35:2;;;;;;;;;;;;-1:-1:-1;;;33855:35:2;;;;;;;;;;;;;;;33916:7;;-1:-1:-1;;;;;33916:7:2;33935:15;:7;33947:2;33935:15;:11;:15;:::i;:::-;33956:16;;33916:61;;33956:16;;33916:61;;;;;;;33956:16;33916:61;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;33901:76:2;;;;;33996:7;33988:35;;;;;-1:-1:-1;;;33988:35:2;;;;;;;;;;;;-1:-1:-1;;;33988:35:2;;;;;;;;;;;;;;;34049:7;;-1:-1:-1;;;;;34049:7:2;34068:15;:7;34080:2;34068:15;:11;:15;:::i;:::-;34089:16;;34049:61;;34089:16;;34049:61;;;;;;;34089:16;34049:61;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;34034:76:2;;;;;34129:7;34121:35;;;;;-1:-1:-1;;;34121:35:2;;;;;;;;;;;;-1:-1:-1;;;34121:35:2;;;;;;;;;;;;;;;32299:1865;;;;:::o;9391:32::-;;;;:::o;11454:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11454:32:2;;-1:-1:-1;11454:32:2;:::o;30543:134::-;30658:11;;30543:134;;:::o;10105:41::-;;;;;;;;;;;;;;-1:-1:-1;;;10105:41:2;;;;:::o;9350:34::-;;;;:::o;14619:159::-;14694:4;14711:37;14720:10;14732:7;14741:6;14711:8;:37::i;:::-;-1:-1:-1;14766:4:2;14619:159;;;;;:::o;9469:28::-;;;;:::o;13606:100::-;13686:12;;13606:100;:::o;9848:27::-;;;;:::o;9999:44::-;;;;:::o;15250:309::-;15348:4;15365:36;15375:6;15383:9;15394:6;15365:9;:36::i;:::-;15412:117;15421:6;15429:10;15441:87;15477:6;15441:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15441:19:2;;;;;;:11;:19;;;;;;;;15461:10;15441:31;;;;;;;;;:87;;:35;:87;:::i;:::-;15412:8;:117::i;:::-;-1:-1:-1;15547:4:2;15250:309;;;;;:::o;27169:382::-;27342:10;;27304;27251:4;27297:18;;;:6;:18;;;;;:39;27251:4;;;;27289:64;;27342:10;27289:48;;:3;;:48;:7;:48;:::i;:::-;:52;:64;:52;:64;:::i;:::-;27273:80;;27379:18;;27367:8;:30;27364:180;;27431:18;;27420:29;;;-1:-1:-1;27413:36:2;;27364:180;27531:1;27524:8;;;;;10197:33;10229:1;10197:33;:::o;10766:36::-;;;;:::o;15968:206::-;16074:10;16048:4;16095:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16095:32:2;;;;;;;;;;16048:4;;16065:79;;16086:7;;16095:48;;16132:10;16095:48;:36;:48;:::i;9648:28::-;;;;:::o;9174:38::-;;;;:::o;9726:34::-;;;;:::o;9219:35::-;;;;:::o;26875:212::-;26953:4;27053:25;:23;:25::i;:::-;27032:18;;27019:9;;27003:10;26983:31;;;;:19;:31;;;;;;:46;;;:35;:46;:::i;:::-;:67;:95;26975:104;;26875:212;:::o;9135:32::-;;;;:::o;9075:22::-;;;-1:-1:-1;;;9075:22:2;;;;;:::o;9261:29::-;;;;:::o;13769:119::-;-1:-1:-1;;;;;13862:18:2;13835:7;13862:18;;;;;;;;;;;;13769:119::o;9539:21::-;;;;;;:::o;31224:1063::-;31330:2;31314:13;;:18;31306:60;;;;;-1:-1:-1;;;31306:60:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;31417:13;;31399:15;;31417:22;;31435:3;31417:22;:17;:22;:::i;:::-;31399:40;-1:-1:-1;31450:16:2;31469:15;31399:40;31481:2;31469:15;:11;:15;:::i;:::-;31507:12;;31529:5;;31450:34;;-1:-1:-1;;;;;;31507:12:2;;;;:21;;31529:5;31536:18;31450:34;31552:1;31536:18;:15;:18;:::i;:::-;31507:48;;;;;;;;;;;;;-1:-1:-1;;;;;31507:48:2;-1:-1:-1;;;;;31507:48:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31507:48:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31507:48:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;31566:12:2;;31588:6;;-1:-1:-1;;;;;31566:12:2;;;;:21;;31588:6;31596:18;:11;31612:1;31596:18;:15;:18;:::i;:::-;31566:49;;;;;;;;;;;;;-1:-1:-1;;;;;31566:49:2;-1:-1:-1;;;;;31566:49:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31566:49:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31566:49:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;31626:12:2;;31648:4;;-1:-1:-1;;;;;31626:12:2;;;;:21;;:12;31648:4;;;31654:18;:11;31670:1;31654:18;:15;:18;:::i;:::-;31626:47;;;;;;;;;;;;;-1:-1:-1;;;;;31626:47:2;-1:-1:-1;;;;;31626:47:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31626:47:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31626:47:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;31684:12:2;;31706:5;;-1:-1:-1;;;;;31684:12:2;;;;:21;;31706:5;31713:18;:11;31729:1;31713:18;:15;:18;:::i;:::-;31684:48;;;;;;;;;;;;;-1:-1:-1;;;;;31684:48:2;-1:-1:-1;;;;;31684:48:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31684:48:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31684:48:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;31743:12:2;;31765:7;;-1:-1:-1;;;;;31743:12:2;;;;:21;;31765:7;31774:18;:11;31790:1;31774:18;:15;:18;:::i;:::-;31743:50;;;;;;;;;;;;;-1:-1:-1;;;;;31743:50:2;-1:-1:-1;;;;;31743:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31743:50:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31743:50:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;31804:12:2;;31826:5;;-1:-1:-1;;;;;31804:12:2;;;;:21;;31826:5;31833:18;:11;31849:1;31833:18;:15;:18;:::i;:::-;31804:48;;;;;;;;;;;;;-1:-1:-1;;;;;31804:48:2;-1:-1:-1;;;;;31804:48:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31804:48:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31804:48:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;31863:12:2;;31885:4;;-1:-1:-1;;;;;31863:12:2;;;;:21;;31885:4;31891:18;:11;31907:1;31891:18;:15;:18;:::i;:::-;31863:47;;;;;;;;;;;;;-1:-1:-1;;;;;31863:47:2;-1:-1:-1;;;;;31863:47:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31863:47:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31863:47:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;31933:12:2;;31955:5;;-1:-1:-1;;;;;31933:12:2;;;;:21;;31955:5;31962:15;:7;31974:2;31962:15;:11;:15;:::i;:::-;31933:45;;;;;;;;;;;;;-1:-1:-1;;;;;31933:45:2;-1:-1:-1;;;;;31933:45:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31933:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31933:45:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;31989:12:2;;31933:45;32011:5;-1:-1:-1;;;;;31989:12:2;;;;:21;;32011:5;32018:15;:7;32030:2;32018:15;:11;:15;:::i;:::-;31989:45;;;;;;;;;;;;;-1:-1:-1;;;;;31989:45:2;-1:-1:-1;;;;;31989:45:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31989:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31989:45:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;32045:12:2;;32067:5;;-1:-1:-1;;;;;32045:12:2;;;;:21;;32067:5;32074:15;:7;32086:2;32074:15;:11;:15;:::i;:::-;32045:45;;;;;;;;;;;;;-1:-1:-1;;;;;32045:45:2;-1:-1:-1;;;;;32045:45:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32045:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32045:45:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;32101:12:2;;32123:7;;-1:-1:-1;;;;;32101:12:2;;;;:21;;32123:7;32132:15;:7;32144:2;32132:15;:11;:15;:::i;:::-;32101:47;;;;;;;;;;;;;-1:-1:-1;;;;;32101:47:2;-1:-1:-1;;;;;32101:47:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32101:47:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32101:47:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;32159:12:2;;32181:7;;-1:-1:-1;;;;;32159:12:2;;;;:21;;32181:7;32190:15;:7;32202:2;32190:15;:11;:15;:::i;:::-;32159:47;;;;;;;;;;;;;-1:-1:-1;;;;;32159:47:2;-1:-1:-1;;;;;32159:47:2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32159:47:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32159:47:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;32278:1:2;32262:13;:17;-1:-1:-1;;31224:1063:2:o;12902:629::-;11916:10;11909:18;;;;:6;:18;;;;;;;;11901:43;;;;;-1:-1:-1;;;11901:43:2;;;;;;;;;;;;-1:-1:-1;;;11901:43:2;;;;;;;;;;;;;;;12168:6:::1;::::0;::::1;;12167:7;12159:29;;;::::0;;-1:-1:-1;;;12159:29:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12159:29:2;;;;;;;;;;;;;::::1;;12199:6;:13:::0;;-1:-1:-1;;12199:13:2::1;12208:4;12199:13;::::0;;13043:11:::2;13030:9;:24;;13022:54;;;::::0;;-1:-1:-1;;;13022:54:2;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;13022:54:2;;;;;;;;;;;;;::::2;;13132:15;::::0;:50:::2;::::0;;-1:-1:-1;;;13132:50:2;;13172:9:::2;13132:50;::::0;::::2;::::0;;;13112:17:::2;::::0;-1:-1:-1;;;;;13132:15:2::2;::::0;:39:::2;::::0;:50;;;;;::::2;::::0;;;;;;;;:15;:50;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;13132:50:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;13132:50:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;13132:50:2;13246:9:::2;::::0;13132:50;;-1:-1:-1;13220:8:2::2;::::0;13132:50;13246:9;13231:24:::2;;;;;13220:35;;13266:25;13280:4;13287:3;13266:5;:25::i;:::-;13349:9;::::0;13332:32:::2;::::0;:4:::2;::::0;-1:-1:-1;;;;;13349:9:2::2;13360:3:::0;13332:32:::2;:16;:32;:::i;:::-;13406:15;::::0;:73:::2;::::0;;-1:-1:-1;;;13406:73:2;;:15:::2;:73;::::0;::::2;::::0;;;;;;;13467:10:::2;13461:3;:16;13406:73:::0;;;;;;-1:-1:-1;;;;;13406:15:2;;::::2;::::0;:28:::2;::::0;13441:9:::2;::::0;13406:73;;;;;::::2;::::0;;;;;;;;13441:9;13406:15;:73;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;13406:73:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;13406:73:2;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;;12235:6:2::1;:14:::0;;-1:-1:-1;;12235:14:2::1;::::0;;-1:-1:-1;;12902:629:2:o;34172:129::-;11916:10;11909:18;;;;:6;:18;;;;;;;;11901:43;;;;;-1:-1:-1;;;11901:43:2;;;;;;;;;;;;-1:-1:-1;;;11901:43:2;;;;;;;;;;;;;;;34266:16:::1;:27:::0;34172:129::o;27597:1416::-;12168:6;;;;12167:7;12159:29;;;;;-1:-1:-1;;;12159:29:2;;;;;;;;;;;;-1:-1:-1;;;12159:29:2;;;;;;;;;;;;;;;12199:6;:13;;-1:-1:-1;;12199:13:2;12208:4;12199:13;;;27724:10:::1;::::0;-1:-1:-1;;;27724:10:2;::::1;12199:13:::0;27724:10:::1;27716:48;;;::::0;;-1:-1:-1;;;27716:48:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27783:12;::::0;:60:::1;::::0;;-1:-1:-1;;;27783:60:2;;27809:10:::1;27783:60;::::0;::::1;::::0;27829:4:::1;27783:60:::0;;;;;;;;;;;;-1:-1:-1;;;;;27783:12:2;;::::1;::::0;:25:::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;:12:::1;::::0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27783:60:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27783:60:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27783:60:2;27775:88:::1;;;::::0;;-1:-1:-1;;;27775:88:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27775:88:2;;;;;;;;;;;;;::::1;;27927:8;27947:9;;27938:6;:18;;;;;;::::0;-1:-1:-1;;;;;;27990:17:2;::::1;::::0;27987:843:::1;;28058:42;28079:20;28087:11;:3:::0;28095:2:::1;28087:11;:7;:11;:::i;:::-;28079:3:::0;;:20:::1;:7;:20;:::i;:::-;28058:16;::::0;;:42:::1;:20;:42;:::i;:::-;28046:8;;:54;;28038:91;;;::::0;;-1:-1:-1;;;28038:91:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28038:91:2;;;;;;;;;;;;;::::1;;28163:29;28178:13;:11;:13::i;:::-;28163:10;::::0;;:29:::1;:14;:29;:::i;:::-;28152:8;;:40;28144:106;;;;-1:-1:-1::0;;;28144:106:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28285:20;28293:11;:3:::0;28301:2:::1;28293:11;:7;:11;:::i;:::-;28285:3:::0;;:20:::1;:7;:20;:::i;:::-;28265:16;:40:::0;;;;::::1;::::0;;28343:20:::1;28351:11;:3:::0;28359:2:::1;28351:11;:7;:11;:::i;28343:20::-;28320:19;:43:::0;;;;::::1;::::0;;28378:22:::1;:32:::0;;;::::1;::::0;;28425:23:::1;28431:3:::0;28436:11:::1;:3:::0;28444:2:::1;28436:11;:7;:11;:::i;:::-;28425:5;:23::i;:::-;27987:843;;;28517:16;::::0;:25:::1;::::0;28538:3;28517:25:::1;:20;:25;:::i;:::-;28505:8;;:37;;28497:74;;;::::0;;-1:-1:-1;;;28497:74:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28497:74:2;;;;;;;;;;;;;::::1;;28605:29;28620:13;:11;:13::i;28605:29::-;28594:8;;:40;28586:106;;;;-1:-1:-1::0;;;28586:106:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28707:16;:23:::0;;;::::1;::::0;;28745:19:::1;:26:::0;;;::::1;::::0;;28786:22:::1;:32:::0;;;::::1;::::0;;27987:843:::1;28840:22;28846:10;28858:3;28840:5;:22::i;:::-;28932:13;:23:::0;;;::::1;::::0;;28971:34:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;28994:10:::1;::::0;28971:34:::1;::::0;;;;;;::::1;-1:-1:-1::0;;12235:6:2;:14;;-1:-1:-1;;12235:14:2;;;-1:-1:-1;27597:1416:2:o;30863:343::-;30970:10;30938:4;30963:18;;;:6;:18;;;;;:39;30960:237;;-1:-1:-1;31030:5:2;31023:12;;30960:237;31167:3;31082:81;31126:36;31151:10;;31127:18;;31126:24;;:36;;;;:::i;:::-;31089:10;31082:18;;;;:6;:18;;;;;:39;;:81;:43;:81;:::i;:::-;:88;;31075:95;;;;9882:52;;;;;;;;;;;;;:::o;10153:37::-;;;;;;;;;;;;;;-1:-1:-1;;;10153:37:2;;;;:::o;29628:212::-;11814:8;;29719:4;;-1:-1:-1;;;;;11814:8:2;11800:10;:22;11792:49;;;;;-1:-1:-1;;;11792:49:2;;;;;;;;;;;;-1:-1:-1;;;11792:49:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29749:15:2::1;;::::0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;29749:22:2::1;29767:4;29749:22:::0;;::::1;::::0;;;29782:15:::1;27:10:-1::0;;23:18;;::::1;45:23:::0;;29782:28:2;;;;;::::1;::::0;;-1:-1:-1;;;;;;29782:28:2::1;::::0;;::::1;::::0;;;29767:4;29628:212::o;9104:24::-;;;;:::o;30714:133::-;30786:7;30818:21;30828:10;30818:9;:21::i;:::-;30811:28;;30714:133;:::o;16677:257::-;16762:4;16779:125;16788:10;16800:7;16809:94;16846:15;16809:94;;;;;;;;;;;;;;;;;16821:10;16809:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16809:32:2;;;;;;;;;;;:94;;:36;:94;:::i;29107:310::-;12021:10;29209:4;12013:19;;;:7;:19;;;;;;;;12005:44;;;;;-1:-1:-1;;;12005:44:2;;;;;;;;;;;;-1:-1:-1;;;12005:44:2;;;;;;;;;;;;;;;29231:8:::1;29242:21;29253:9;;29242:6;:10;;:21;;;;:::i;:::-;29231:32:::0;-1:-1:-1;29291:8:2;29310:18:::1;29291:8:::0;29231:32;29310:5:::1;:18::i;:::-;-1:-1:-1::0;29405:4:2::1;::::0;29107:310;-1:-1:-1;;;;29107:310:2:o;22041:2931::-;11916:10;11909:18;;;;:6;:18;;;;;;;;11901:43;;;;;-1:-1:-1;;;11901:43:2;;;;;;;;;;;;-1:-1:-1;;;11901:43:2;;;;;;;;;;;;;;;12168:6:::1;::::0;::::1;;12167:7;12159:29;;;::::0;;-1:-1:-1;;;12159:29:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12159:29:2;;;;;;;;;;;;;::::1;;12199:6;:13:::0;;-1:-1:-1;;12199:13:2::1;12208:4;12199:13;::::0;;22150::::2;::::0;12199:6:::1;::::0;22164:2:::2;::::0;22150:16:::2;22133:33;;22197:2;22185:9;;:14;22177:48;;;::::0;;-1:-1:-1;;;22177:48:2;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;22177:48:2;;;;;;;;;;;;;::::2;;22297:3;22244:49;22267:25;22281:10;;22267:9;:13;;:25;;;;:::i;:::-;22244:18;::::0;;:49:::2;:22;:49;:::i;:::-;:56;;22236:98;;;::::0;;-1:-1:-1;;;22236:98:2;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;22377:10;22400:2;22390:9;;:12;;;;;;22377:25;;22471:3;22416:51;22439:27;22455:10;;22440:9;22439:15;;:27;;;;:::i;22416:51::-;:58;;:76;;;;-1:-1:-1::0;22478:9:2::2;::::0;:14;22416:76:::2;22413:2511;;;22508:9;:11:::0;;::::2;;::::0;;22549:12:::2;::::0;:23:::2;::::0;22566:5;22549:23:::2;:16;:23;:::i;:::-;22534:12;:38:::0;22596:7:::2;::::0;22587:24:::2;::::0;-1:-1:-1;;;;;22596:7:2::2;22605:5:::0;22587:8:::2;:24::i;:::-;;22413:2511;;;22700:3;22641:55;22664:31;22684:10;;22665:9;22677:1;22665:13;22664:19;;:31;;;;:::i;22641:55::-;:62;;:80;;;;;22707:9;;22720:1;22707:14;22641:80;22638:2286;;;22737:9;:11:::0;;::::2;;::::0;;22778:12:::2;::::0;:23:::2;::::0;22795:5;22778:23:::2;:16;:23;:::i;22638:2286::-;22929:3;22870:55;22893:31;22913:10;;22894:9;22906:1;22894:13;22893:19;;:31;;;;:::i;22870:55::-;:62;;:80;;;;;22936:9;;22949:1;22936:14;22870:80;22867:2057;;;22966:9;:11:::0;;::::2;;::::0;;23007:12:::2;::::0;:23:::2;::::0;23024:5;23007:23:::2;:16;:23;:::i;22867:2057::-;23158:3;23099:55;23122:31;23142:10;;23123:9;23135:1;23123:13;23122:19;;:31;;;;:::i;23099:55::-;:62;;:80;;;;;23165:9;;23178:1;23165:14;23099:80;23096:1828;;;23195:9;:11:::0;;::::2;;::::0;;23236:12:::2;::::0;:23:::2;::::0;23253:5;23236:23:::2;:16;:23;:::i;23096:1828::-;23388:3;23329:55;23352:31;23372:10;;23353:9;23365:1;23353:13;23352:19;;:31;;;;:::i;23329:55::-;:62;;:80;;;;;23395:9;;23408:1;23395:14;23329:80;23326:1598;;;23425:9;:11:::0;;::::2;;::::0;;23466:12:::2;::::0;:23:::2;::::0;23483:5;23466:23:::2;:16;:23;:::i;23326:1598::-;23617:3;23558:55;23581:31;23601:10;;23582:9;23594:1;23582:13;23581:19;;:31;;;;:::i;23558:55::-;:62;;:80;;;;;23624:9;;23637:1;23624:14;23558:80;23555:1369;;;23654:9;:11:::0;;::::2;;::::0;;23695:12:::2;::::0;:23:::2;::::0;23712:5;23695:23:::2;:16;:23;:::i;23555:1369::-;23847:3;23788:55;23811:31;23831:10;;23812:9;23824:1;23812:13;23811:19;;:31;;;;:::i;23788:55::-;:62;;:80;;;;;23854:9;;23867:1;23854:14;23788:80;23785:1139;;;23884:9;:11:::0;;::::2;;::::0;;23925:12:::2;::::0;:23:::2;::::0;23942:5;23925:23:::2;:16;:23;:::i;23785:1139::-;24076:3;24017:55;24040:31;24060:10;;24041:9;24053:1;24041:13;24040:19;;:31;;;;:::i;24017:55::-;:62;;:80;;;;;24083:9;;24096:1;24083:14;24017:80;24014:910;;;24123:9;:11:::0;;::::2;;::::0;;24169:12:::2;::::0;:23:::2;::::0;24186:5;24169:23:::2;:16;:23;:::i;24014:910::-;24326:3;24267:55;24290:31;24310:10;;24291:9;24303:1;24291:13;24290:19;;:31;;;;:::i;24267:55::-;:62;;:80;;;;;24333:9;;24346:1;24333:14;24267:80;24264:660;;;24363:9;:11:::0;;::::2;;::::0;;24404:12:::2;::::0;:23:::2;::::0;24421:5;24404:23:::2;:16;:23;:::i;24264:660::-;24556:3;24496:56;24519:32;24540:10;;24520:9;24532:2;24520:14;24519:20;;:32;;;;:::i;24496:56::-;:63;;:81;;;;;24563:9;;24576:1;24563:14;24496:81;24493:431;;;24593:9;:11:::0;;::::2;;::::0;;24622:12:::2;::::0;:21;-1:-1:-1;24619:206:2::2;;24678:12;::::0;:23:::2;::::0;24695:5;24678:23:::2;:16;:23;:::i;:::-;24663:12;:38:::0;24619:206:::2;;;-1:-1:-1::0;24762:12:2::2;::::0;;24808:1:::2;24793:16:::0;;;24619:206:::2;24848:7;::::0;24839:24:::2;::::0;-1:-1:-1;;;;;24848:7:2::2;24857:5:::0;24839:8:::2;:24::i;24493:431::-;24939:25;::::0;;;;;24960:3:::2;24939:25;::::0;::::2;::::0;;;::::2;::::0;;;;;;;;;::::2;-1:-1:-1::0;;12235:6:2::1;:14:::0;;-1:-1:-1;;12235:14:2::1;::::0;;22041:2931::o;14101:165::-;14179:4;14196:40;14206:10;14218:9;14229:6;14196:9;:40::i;9318:25::-;;;;:::o;25406:650::-;25484:1;25478:3;:7;25470:30;;;;;-1:-1:-1;;;25470:30:2;;;;;;;;;;;;-1:-1:-1;;;25470:30:2;;;;;;;;;;;;;;;25537:3;25519:14;:12;:14::i;:::-;:21;;25511:61;;;;;-1:-1:-1;;;25511:61:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;25616:18;:16;:18::i;:::-;25613:112;;;25650:16;:14;:16::i;:::-;25816:10;25796:31;;;;:19;:31;;;;;;:40;;25832:3;25796:40;:35;:40;:::i;:::-;25782:10;25762:31;;;;:19;:31;;;;;:74;25861:11;;:20;;25877:3;25861:20;:15;:20;:::i;:::-;25847:11;:34;25899:10;25892:18;;;;:6;:18;;;;;25934:3;25892:45;;25948:41;;25978:4;25985:3;25948:9;:41::i;:::-;26020:28;;;;;;;;26032:10;;26020:28;;;;;;;;;;25406:650;:::o;11639:41::-;;;;;;;;;;;;;:::o;29940:446::-;11916:10;11909:18;;;;:6;:18;;;;;;;;11901:43;;;;;-1:-1:-1;;;11901:43:2;;;;;;;;;;;;-1:-1:-1;;;11901:43:2;;;;;;;;;;;;;;;30077:37:::1;30103:10;;30077:21;30094:3;30077:12;;:16;;:21;;;;:::i;:37::-;30070:3;:45;30050:16;:66;30042:106;;;::::0;;-1:-1:-1;;;30042:106:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30163:10;::::0;-1:-1:-1;;;30163:10:2;::::1;;;30159:220;;30189:10;:17:::0;;-1:-1:-1;;;;30189:17:2::1;-1:-1:-1::0;;;30189:17:2::1;::::0;;30232:10:::1;::::0;:41:::1;::::0;30269:3:::1;::::0;30232:32:::1;::::0;30247:16;30232:32:::1;:14;:32;:::i;:41::-;30221:8;:52:::0;30307:1:::1;30288:16;:20:::0;30159:220:::1;;;30349:10;:18:::0;;-1:-1:-1;;;;30349:18:2::1;::::0;;30159:220:::1;29940:446:::0;:::o;14329:143::-;-1:-1:-1;;;;;14437:18:2;;;14410:7;14437:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14329:143::o;26105:724::-;12168:6;;;;12167:7;12159:29;;;;;-1:-1:-1;;;12159:29:2;;;;;;;;;;;;-1:-1:-1;;;12159:29:2;;;;;;;;;;;;;;;12199:6;:13;;-1:-1:-1;;12199:13:2;12208:4;12199:13;;;26213:10:::1;12199:6:::0;26193:31;;;:19:::1;:31;::::0;;;;;26185:81:::1;;;;-1:-1:-1::0;;;26185:81:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26322:18;:16;:18::i;:::-;26314:78;;;;-1:-1:-1::0;;;26314:78:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26434:10;26403:8;26414:31:::0;;;:19:::1;:31;::::0;;;;;;26456:40:::1;::::0;26474:21:::1;:19;:21::i;26456:40::-;26594:10;26608:1;26574:31:::0;;;:19:::1;:31;::::0;;;;;;;:35;;;26620:6:::1;:18:::0;;;;;:43;26688:11:::1;::::0;:20:::1;::::0;26704:3;26688:20:::1;:15;:20;:::i;:::-;26674:11;:34:::0;26719:41:::1;26737:4;26744:10;26756:3:::0;26719:9:::1;:41::i;:::-;26791:30;::::0;;;;;;;26805:10:::1;::::0;26791:30:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;12235:6:2;:14;;-1:-1:-1;;12235:14:2;;;26105:724::o;8607:37::-;;;-1:-1:-1;;;;;8607:37:2;;:::o;3169:132:4:-;3227:7;3254:39;3258:1;3261;3254:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3247:46;3169:132;-1:-1:-1;;;3169:132:4:o;2230:471::-;2288:7;2533:6;2529:47;;-1:-1:-1;2563:1:4;2556:8;;2529:47;2600:5;;;2604:1;2600;:5;:1;2624:5;;;;;:10;2616:56;;;;-1:-1:-1;;;2616:56:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20030:338:2;-1:-1:-1;;;;;20124:19:2;;20116:68;;;;-1:-1:-1;;;20116:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20203:21:2;;20195:68;;;;-1:-1:-1;;;20195:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20276:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20328:32;;;;;;;;;;;;;;;;;20030:338;;;:::o;17423:469::-;-1:-1:-1;;;;;17521:20:2;;17513:70;;;;-1:-1:-1;;;17513:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17602:23:2;;17594:71;;;;-1:-1:-1;;;17594:71:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17696;17718:6;17696:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17696:17:2;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;17676:17:2;;;:9;:17;;;;;;;;;;;:91;;;;17801:20;;;;;;;:32;;17826:6;17801:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;17778:20:2;;;:9;:20;;;;;;;;;;;;:55;;;;17849:35;;;;;;;17778:20;;17849:35;;;;;;;;;;;;;17423:469;;;:::o;1787:192:4:-;1873:7;1909:12;1901:6;;;;1893:29;;;;-1:-1:-1;;;1893:29:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1893:29:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1945:5:4;;;1787:192::o;1314:136::-;1372:7;1399:43;1403:1;1406;1399:43;;;;;;;;;;;;;;;;;:3;:43::i;858:181::-;916:7;948:5;;;972:6;;;;964:46;;;;;-1:-1:-1;;;964:46:4;;;;;;;;;;;;;;;;;;;;;;;;;;;18197:713:2;18279:6;-1:-1:-1;;;;;18304:21:2;;18296:65;;;;;-1:-1:-1;;;18296:65:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;18376:9;;;;18372:531;;18419:10;;18404:12;;:25;18401:491;;;18476:10;;18452:12;;:21;;18469:3;18452:21;:16;:21;:::i;:::-;:34;18449:303;;;18531:12;;18516:10;;:28;;;:14;:28;:::i;:::-;18582:10;;18567:12;:25;18615:9;:16;;-1:-1:-1;;18615:16:2;18627:4;18615:16;;;18510:34;-1:-1:-1;18449:303:2;;;18711:12;;:21;;18728:3;18711:21;:16;:21;:::i;:::-;18696:12;:36;18449:303;-1:-1:-1;;;;;18791:18:2;;:9;:18;;;;;;;;;;;:27;;18814:3;18791:27;:22;:27;:::i;:::-;-1:-1:-1;;;;;18770:18:2;;:9;:18;;;;;;;;;;;:48;;;;18842:34;;;;;;;18770:18;;:9;;18842:34;;;;;;;;;;18401:491;18197:713;;;:::o;708:622::-;1078:10;;;1077:62;;-1:-1:-1;1094:39:2;;;-1:-1:-1;;;1094:39:2;;1118:4;1094:39;;;;-1:-1:-1;;;;;1094:39:2;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;2:2:-1;;;;27:1;24;17:12;2:2;1094:39:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1094:39:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1094:39:2;:44;1077:62;1069:152;;;;-1:-1:-1;;;1069:152:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:62;;;-1:-1:-1;;;;;1259:62:2;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1259:62:2;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1232:90:2;;1252:5;;1232:19;:90::i;3831:345:4:-;3917:7;4019:12;4012:5;4004:28;;;;-1:-1:-1;;;4004:28:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4004:28:4;;4043:9;4059:1;4055;:5;;;;;;;3831:345;-1:-1:-1;;;;;3831:345:4:o;1721:1115:2:-;2326:27;2334:5;-1:-1:-1;;;;;2326:25:2;;:27::i;:::-;2318:71;;;;;-1:-1:-1;;;2318:71:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;2463:12;2477:23;2512:5;-1:-1:-1;;;;;2504:19:2;2524:4;2504:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2504:25:2;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2462:67:2;;;;2548:7;2540:52;;;;;-1:-1:-1;;;2540:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2609:17;;:21;2605:224;;2751:10;2740:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2740:30:2;2732:85;;;;-1:-1:-1;;;2732:85:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;707:619:0;767:4;1235:20;;1078:66;1275:23;;;;;;:42;;-1:-1:-1;1302:15:0;;;1275:42;1267:51;707:619;-1:-1:-1;;;;707:619:0:o

Swarm Source

ipfs://5963e2cc6febc1d5ff96247b2710816b17ed5bc683d5987a232f4ba64841545d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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