ETH Price: $2,550.82 (-4.91%)

Token

HEX Money (HXY)
 

Overview

Max Total Supply

60,000,000 HXY

Holders

867

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
1,513.40646007 HXY

Value
$0.00
0x67e1a1749df9813ce6ff0038bbf5f90f1029f1ed
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: HEXMONEYv1_1.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 v2 interface
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IUniswapV2Pair {
  event Approval(address indexed owner, address indexed spender, uint value);
  event Transfer(address indexed from, address indexed to, uint value);

  function name() external pure returns (string memory);
  function symbol() external pure returns (string memory);
  function decimals() external pure returns (uint8);
  function totalSupply() external view returns (uint);
  function balanceOf(address owner) external view returns (uint);
  function allowance(address owner, address spender) external view returns (uint);

  function approve(address spender, uint value) external returns (bool);
  function transfer(address to, uint value) external returns (bool);
  function transferFrom(address from, address to, uint value) external returns (bool);

  function DOMAIN_SEPARATOR() external view returns (bytes32);
  function PERMIT_TYPEHASH() external pure returns (bytes32);
  function nonces(address owner) external view returns (uint);

  function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

  event Mint(address indexed sender, uint amount0, uint amount1);
  event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
  event Swap(
      address indexed sender,
      uint amount0In,
      uint amount1In,
      uint amount0Out,
      uint amount1Out,
      address indexed to
  );
  event Sync(uint112 reserve0, uint112 reserve1);

  function MINIMUM_LIQUIDITY() external pure returns (uint);
  function factory() external view returns (address);
  function token0() external view returns (address);
  function token1() external view returns (address);
  function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
  function price0CumulativeLast() external view returns (uint);
  function price1CumulativeLast() external view returns (uint);
  function kLast() external view returns (uint);

  function mint(address to) external returns (uint liquidity);
  function burn(address to) external returns (uint amount0, uint amount1);
  function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
  function skim(address to) external;
  function sync() external;
}

////////////////////////////////////////////////
////////////////////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 freezes freely minted tokens
    event FreeMintFreeze(
        address indexed user,
        uint value,
        uint indexed dapp //0 for ref, increment per external dapp
    );

    //when a user unfreezes freely minted tokens
    event FreeMintUnfreeze(
        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 frozen
    event FounderLock (
        uint hxyAmt,
        uint timestamp
    );

    //when founder tokens are unfrozen
    event FounderUnlock (
        uint hxyAmt,
        uint timestamp
    );
    
    event LiquidityPush(
        uint256 amountA,
        uint256 amountB,
        uint256 liquidity
    );
    
    event DividendPush(
        uint256 hexDivs  
    );
    
}

//////////////////////////////////////
//////////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 public factoryAddress = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
    address public routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public uniHEXHXY = address(0);
    IUniswapV2Pair internal uniPairInterface = IUniswapV2Pair(uniHEXHXY);
    IUniswapV2Router02 internal uniV2Router = IUniswapV2Router02(routerAddress);
    
    //hex contract setup
    address internal hexAddress = 0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39;
    HEX internal hexInterface = HEX(hexAddress);

    //transform setup
    bool public roomActive;
    uint public totalHeartsTransformed = 0;
    uint public totalHxyTransformed = 0;
    uint public totalDividends = 0;
    uint public totalLiquidityAdded = 0;
    uint public hexLiquidity = 0;
    uint public hexDivs = 0;

    //mint / freeze setup
    uint public unlockLvl = 0;
    uint public founderLockStartTimestamp = 0;
    uint public founderLockDayLength = 1825;//5 years (10% released every sixmonths)
    uint public founderLockedTokens = 0;
    uint private allFounderLocked = 0;

    bool public mintBlock;//disables any more tokens ever being minted once _totalSupply reaches _maxSupply
    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
    uint public totalFreeMintFrozen = 0;
    mapping (address => uint) public freeMintFrozenBalances;//balance of HXY free minted 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;
    
    //airdrop contract
    address payable public airdropContract = address(0);
    //multisig
    address public multisig = address(0);
    //admin
    address payable internal _p1 = 0xb9F8e9dad5D985dF35036C61B6Aded2ad08bd53f;
    address payable internal _p2 = 0xe551072153c02fa33d4903CAb0435Fb86F1a80cb;
    address payable internal _p3 = 0xc5f517D341c1bcb2cdC004e519AF6C4613A8AB2d;
    address payable internal _p4 = 0x47705B509A4Fe6a0237c975F81030DAC5898Dc06;
    address payable internal _p5 = 0x31101541339B4B3864E728BbBFc1b8A0b3BCAa45;
    
    bool private sync;
    bool public multisigSet;
    bool public transformsActive;
    
    //minters
    address[] public minterAddresses;// future contracts to enable minting of HXY

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

    struct Frozen{
        uint256 freezeStartTimestamp;
        uint256 totalEarnedInterest;
    }
    
    struct FreeMintFrozen{
        uint256 totalHxyMinted;
    }
    
    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");
        _;
    }
    
    modifier onlyOnceMultisig(){
        require(!multisigSet, "cannot call twice");
        multisigSet = true;
        _;
    }
    
    modifier onlyOnceTransform(){
        require(!transformsActive, "cannot call twice");
        transformsActive = true;
        _;
    }
    
    //protects against potential reentrancy
    modifier synchronized {
        require(!sync, "Sync lock");
        sync = true;
        _;
        sync = false;
    }

    constructor(uint256 v2Supply) public {
        admins[_p1] = true;
        admins[_p2] = true;
        admins[_p3] = true;
        admins[msg.sender] = true;
        //mint initial tokens
        mintInitialTokens(v2Supply);
    }


    receive() external payable{
        donate();
    }

    
    /**
     * @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 lock (only ever called in constructor)
    function mintInitialTokens(uint v2Supply)
        internal
        synchronized
    {
        require(v2Supply <= _maxSupply, "cannot mint");
        uint256 _founderLockedTokens = _maxSupply.div(10);
        _mint(_p1, v2Supply.sub(_founderLockedTokens));//mint HXY to airdrop on launch
        _mint(address(this), _founderLockedTokens);//mint HXY to be frozen for 10 years, 10% unfrozen every year
        founderLock(_founderLockedTokens);
    }

    function founderLock(uint tokens)
        internal
    {
        founderLockStartTimestamp = now;
        founderLockedTokens = tokens;
        allFounderLocked = tokens;
        emit FounderLock(tokens, founderLockStartTimestamp);
    }

    //unlock founder tokens
    function unlock()
        public
        onlyAdmins
        synchronized
    {
        uint sixMonths = founderLockDayLength/10;
        require(unlockLvl < 10, "token unlock complete");
        require(founderLockStartTimestamp.add(sixMonths.mul(daySeconds)) <= now, "tokens cannot be unfrozen yet");//must be at least over 6 months
        uint value = allFounderLocked/10;
        if(founderLockStartTimestamp.add((sixMonths).mul(daySeconds)) <= now && unlockLvl == 0){
            unlockLvl++;
            founderLockedTokens = founderLockedTokens.sub(value);
            transfer(_p1, value.mul(30).div(100));
            transfer(_p2, value.mul(30).div(100));
            transfer(_p3, value.mul(20).div(100));
            transfer(_p4, value.mul(15).div(100));
            transfer(_p5, value.mul(5).div(100));
        }
        else if(founderLockStartTimestamp.add((sixMonths * 2).mul(daySeconds)) <= now && unlockLvl == 1){
            unlockLvl++;
            founderLockedTokens = founderLockedTokens.sub(value);
            transfer(_p1, value.mul(30).div(100));
            transfer(_p2, value.mul(30).div(100));
            transfer(_p3, value.mul(20).div(100));
            transfer(_p4, value.mul(15).div(100));
            transfer(_p5, value.mul(5).div(100));
        }
        else if(founderLockStartTimestamp.add((sixMonths * 3).mul(daySeconds)) <= now && unlockLvl == 2){
            unlockLvl++;
            founderLockedTokens = founderLockedTokens.sub(value);
            transfer(_p1, value.mul(30).div(100));
            transfer(_p2, value.mul(30).div(100));
            transfer(_p3, value.mul(20).div(100));
            transfer(_p4, value.mul(15).div(100));
            transfer(_p5, value.mul(5).div(100));
        }
        else if(founderLockStartTimestamp.add((sixMonths * 4).mul(daySeconds)) <= now && unlockLvl == 3){
            unlockLvl++;
            founderLockedTokens = founderLockedTokens.sub(value);
            transfer(_p1, value.mul(30).div(100));
            transfer(_p2, value.mul(30).div(100));
            transfer(_p3, value.mul(20).div(100));
            transfer(_p4, value.mul(15).div(100));
            transfer(_p5, value.mul(5).div(100));
        }
        else if(founderLockStartTimestamp.add((sixMonths * 5).mul(daySeconds)) <= now && unlockLvl == 4){
            unlockLvl++;
            founderLockedTokens = founderLockedTokens.sub(value);
            transfer(_p1, value.mul(30).div(100));
            transfer(_p2, value.mul(30).div(100));
            transfer(_p3, value.mul(20).div(100));
            transfer(_p4, value.mul(15).div(100));
            transfer(_p5, value.mul(5).div(100));
        }
        else if(founderLockStartTimestamp.add((sixMonths * 6).mul(daySeconds)) <= now && unlockLvl == 5){
            unlockLvl++;
            founderLockedTokens = founderLockedTokens.sub(value);
            transfer(_p1, value.mul(30).div(100));
            transfer(_p2, value.mul(30).div(100));
            transfer(_p3, value.mul(20).div(100));
            transfer(_p4, value.mul(15).div(100));
            transfer(_p5, value.mul(5).div(100));
        }
        else if(founderLockStartTimestamp.add((sixMonths * 7).mul(daySeconds)) <= now && unlockLvl == 6){
            unlockLvl++;
            founderLockedTokens = founderLockedTokens.sub(value);
            transfer(_p1, value.mul(30).div(100));
            transfer(_p2, value.mul(30).div(100));
            transfer(_p3, value.mul(20).div(100));
            transfer(_p4, value.mul(15).div(100));
            transfer(_p5, value.mul(5).div(100));
        }
        else if(founderLockStartTimestamp.add((sixMonths * 8).mul(daySeconds)) <= now && unlockLvl == 7)
        {
            unlockLvl++;     
            founderLockedTokens = founderLockedTokens.sub(value);      
            transfer(_p1, value.mul(30).div(100));
            transfer(_p2, value.mul(30).div(100));
            transfer(_p3, value.mul(20).div(100));
            transfer(_p4, value.mul(15).div(100));
            transfer(_p5, value.mul(5).div(100));
        }
        else if(founderLockStartTimestamp.add((sixMonths * 9).mul(daySeconds)) <= now && unlockLvl == 8){
            unlockLvl++;
            founderLockedTokens = founderLockedTokens.sub(value);
            transfer(_p1, value.mul(30).div(100));
            transfer(_p2, value.mul(30).div(100));
            transfer(_p3, value.mul(20).div(100));
            transfer(_p4, value.mul(15).div(100));
            transfer(_p5, value.mul(5).div(100));
        }
        else if(founderLockStartTimestamp.add((sixMonths * 10).mul(daySeconds)) <= now && unlockLvl == 9){
            unlockLvl++;
            if(founderLockedTokens >= value){
                founderLockedTokens = founderLockedTokens.sub(value);
            }
            else{
                value = founderLockedTokens;
                founderLockedTokens = 0;
            }
            transfer(_p1, value.mul(30).div(100));
            transfer(_p2, value.mul(30).div(100));
            transfer(_p3, value.mul(20).div(100));
            transfer(_p4, value.mul(15).div(100));
            transfer(_p5, value.mul(5).div(100));
        }
        else{
            revert();
        }
        emit FounderUnlock(value, now);
    }
    ////////////////////////////////////////////////////////
    /////////////////PUBLIC FACING - HXY CONTROL//////////
    //////////////////////////////////////////////////////

    //freeze HXY tokens to contract
    function FreezeTokens(uint amt)
        public
    {
        require(amt > 0, "zero input");
        require(tokenBalance() >= amt, "Error: insufficient balance");//ensure user has enough funds
        if(isFreezeFinished(msg.sender)){
            UnfreezeTokens();//unfreezes all currently frozen 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 frozen funds
        require(isFreezeFinished(msg.sender), "tokens cannot be unfrozen yet. min 7 day freeze");
        uint amt = tokenFrozenBalances[msg.sender];
        uint256 interest = calcFreezingRewards(msg.sender);
        _mint(msg.sender, interest);//mint HXY - total unfrozen / 1000 * (minFreezeDayLength + days past) @ 36.5% per year
        frozen[msg.sender].totalEarnedInterest += interest;
        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(address _user)
        public
        view
        returns(uint)
    {
        return (tokenFrozenBalances[_user].div(1000) * (minFreezeDayLength + daysPastMinFreezeTime(_user)));
    }
    
    //returns amount of days frozen past min freeze time of 7 days
    function daysPastMinFreezeTime(address _user)
        public
        view
        returns(uint)
    {
        if(frozen[_user].freezeStartTimestamp == 0){
            return 0;
        }
        uint daysPast = now.sub(frozen[_user].freezeStartTimestamp).div(daySeconds);
        if(daysPast >= minFreezeDayLength){
            return daysPast - minFreezeDayLength;// returns 0 if under 1 day passed
        }
        else{
            return 0;
        }
    }
    
    //freeze HXY tokens to contract for duration (till maxSupply reached)
    function FreezeFreeMint(uint amt, address user, uint dapp)
        public
        onlyMinters
        synchronized
    {
        require(amt > 0, "zero input");
        if(!mintBlock){
            //mint tokens
            uint t = totalSupply();
            freeMintHXY(amt,address(this));//mint HXY to contract and freeze
            //adjust for max supply breach
            if(totalSupply().sub(t) < amt){
                amt = totalSupply().sub(t);
            }
            //update balances
            freeMintFrozenBalances[user] = freeMintFrozenBalances[user].add(amt);
            totalFrozen = totalFrozen.add(amt);
            totalFreeMintFrozen = totalFreeMintFrozen.add(amt);
            freeMintFrozen[user].totalHxyMinted += amt;
            emit FreeMintFreeze(user, amt, dapp);
        }

    }
    
    //freeze HXY tokens to contract from ref bonus (till maxSupply reached)
    function FreezeRefFreeMint(uint amt, address ref)
        internal
    {
        require(amt > 0, "zero input");
        if(!mintBlock){
            //mint tokens
            uint t = totalSupply();
            freeMintHXY(amt,address(this));//mint HXY to contract and freeze
            //adjust for max supply breach
            if(totalSupply().sub(t) < amt){
                amt = totalSupply().sub(t);
            }
            //update balances
            freeMintFrozenBalances[ref] = freeMintFrozenBalances[ref].add(amt);
            totalFrozen = totalFrozen.add(amt);
            totalFreeMintFrozen = totalFreeMintFrozen.add(amt);
            freeMintFrozen[ref].totalHxyMinted += amt;
            emit FreeMintFreeze(ref, amt, 0);
        }

    }
    
    //unfreeze HXY tokens from contract
    function UnfreezeFreeMint()
        public
        synchronized
    {
        require(freeMintFrozenBalances[msg.sender] > 0,"Error: unsufficient frozen balance");//ensure user has enough frozen funds
        require(mintBlock, "tokens cannot be unfrozen yet. max supply not yet reached");
        //update values
        uint amt = freeMintFrozenBalances[msg.sender];
        freeMintFrozenBalances[msg.sender] = 0;
        totalFrozen = totalFrozen.sub(amt);
        totalFreeMintFrozen = totalFreeMintFrozen.sub(amt);
        //make transfer
        _transfer(address(this), msg.sender, amt);
        emit FreeMintUnfreeze(msg.sender, amt);
    }
    
    //mint HXY to address
    function freeMintHXY(uint value, address minter)
        internal
    {
        uint amt = value;
        _mint(minter, amt);//mint HXY
    }

    //transforms HEX to HXY
    function transformHEX(uint hearts, address ref)//Approval needed
        public
        synchronized
    {
        require(roomActive, "transforms not yet active");
        require(hearts >= 100, "value too low");
        require(hexInterface.transferFrom(msg.sender, address(this), hearts), "Transfer failed");//send hex from user to contract
        //allocate funds
        hexDivs += hearts.div(2);//50%
        hexLiquidity += hearts.div(2);//50%
        
        //get HXY price
        (uint reserve0, uint reserve1,) = uniPairInterface.getReserves();
        uint hxy = uniV2Router.quote(hearts, reserve0, reserve1);
        if(ref != address(0))//ref
        {
            totalHxyTransformed += hxy.add(hxy.div(10));
            totalHeartsTransformed += hearts;
            FreezeRefFreeMint(hxy.div(10), ref);
        }
        else{//no ref
            totalHxyTransformed += hxy;
            totalHeartsTransformed += hearts;
        }
        require(totalHxyTransformed <= 3000000000000000, "transform threshold breached");//remaining for interest and free mint
        _mint(msg.sender, hxy);
        emit Transform(hearts, hxy, msg.sender);
    }
    
    
    function pushLiquidity()
        public
        synchronized
    {
        require(hexLiquidity > 1000, "nothing to add");
        //get price 
        (uint reserve0, uint reserve1,) = uniPairInterface.getReserves();
        uint hxy = uniV2Router.quote(hexLiquidity, reserve0, reserve1);
        _mint(address(this), hxy);
        //approve
        this.safeApprove(routerAddress, hxy);
        require(hexInterface.approve(routerAddress, hexLiquidity), "could not approve");
        //add liquidity
        (uint amountA, uint amountB, uint liquidity) = uniV2Router.addLiquidity(hexAddress, address(this), hexLiquidity, hxy, 0, 0, _p1, now.add(800));
        totalLiquidityAdded += hexLiquidity;
        //reset
        hexLiquidity = 0;
        emit LiquidityPush(amountA, amountB, liquidity);
    }
    
    
    function pushDivs()
        public
        synchronized
    {
        require(hexDivs > 0, "nothing to distribute");
        //send divs
        totalDividends += hexDivs;
        hexInterface.transfer(airdropContract, hexDivs);
        //send any unallocated HEX in contract to dividend contract
        uint overflow = 0;
        if(hexInterface.balanceOf(address(this)).sub(hexLiquidity) > 0){
            overflow = hexInterface.balanceOf(address(this)).sub(hexLiquidity);
            hexInterface.transfer(airdropContract, overflow);   
        }
        emit DividendPush(hexDivs.add(overflow));
        //reset
        hexDivs = 0;
    }
    
    ///////////////////////////////
    ////////ADMIN/MULTISIG ONLY//////////////
    ///////////////////////////////
    
    function setMultiSig(address _multisig)
        public
        onlyAdmins
        onlyOnceMultisig
    {
        multisig = _multisig;    
    }
    
    //set airdropcontract for can only be set once
    function setAirdropContract(address payable _airdropContract)
        public
        onlyMultisig
    {
        airdropContract = _airdropContract;    
    }
    
    //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;
    }

    //transform room initiation
    function transformActivate()
        public
        onlyMultisig
        onlyOnceTransform
    {
        roomActive = true;
    }

    function setExchange(address exchange)
        public
        onlyMultisig
    {
        uniHEXHXY = exchange;
        uniPairInterface = IUniswapV2Pair(uniHEXHXY);
    }
    
    
    function setV2Router(address router)
        public
        onlyMultisig
    {
        routerAddress = router;
        uniV2Router = IUniswapV2Router02(routerAddress);
    }
    
    ///////////////////////////////
    ////////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(address _user)
        public
        view
        returns(bool)
    {
        if(frozen[_user].freezeStartTimestamp == 0){
            return false;
        }
        else{
           return frozen[_user].freezeStartTimestamp.add((minFreezeDayLength).mul(daySeconds)) <= now;               
        }

    }
    
    function donate() public payable {
        require(msg.value > 0);
        bool success = false;
        uint256 balance = msg.value;
        //distribute
        (success, ) =  _p1.call{value:balance.mul(30).div(100)}{gas:21000}('');
        require(success, "Transfer failed");
        (success, ) =  _p2.call{value:balance.mul(30).div(100)}{gas:21000}('');
        require(success, "Transfer failed");
        (success, ) =  _p3.call{value:balance.mul(20).div(100)}{gas:21000}('');
        require(success, "Transfer failed");
        (success, ) =  _p4.call{value:balance.mul(15).div(100)}{gas:21000}('');
        require(success, "Transfer failed");
        (success, ) =  _p5.call{value:balance.mul(5).div(100)}{gas:21000}('');
        require(success, "Transfer failed");
    }

}

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":[{"internalType":"uint256","name":"v2Supply","type":"uint256"}],"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":"hexDivs","type":"uint256"}],"name":"DividendPush","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"},{"indexed":true,"internalType":"uint256","name":"dapp","type":"uint256"}],"name":"FreeMintFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"FreeMintUnfreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"LiquidityPush","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"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"dapp","type":"uint256"}],"name":"FreezeFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"FreezeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UnfreezeFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UnfreezeTokens","outputs":[],"stateMutability":"nonpayable","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":[],"name":"airdropContract","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"calcFreezingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"daysPastMinFreezeTime","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":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factoryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"founderLockDayLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"founderLockStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"founderLockedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeMintFrozen","outputs":[{"internalType":"uint256","name":"totalHxyMinted","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeMintFrozenBalances","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"},{"internalType":"uint256","name":"totalEarnedInterest","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hexDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hexLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isFreezeFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"uint256"}],"name":"minterAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multisig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multisigSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pushDivs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pushLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"roomActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_airdropContract","type":"address"}],"name":"setAirdropContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"exchange","type":"address"}],"name":"setExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_multisig","type":"address"}],"name":"setMultiSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFreeMintFrozen","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":"totalHeartsTransformed","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":"totalLiquidityAdded","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":[],"name":"transformActivate","outputs":[],"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":"transformsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniHEXHXY","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"}]

6080604052600280546001600160a01b0319908116735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f17909155600380548216737a250d5630b4cf539739df2c5dacb4c659f2488d1790819055600480548316905560058054831690556006805483166001600160a01b03928316179055600780548316732b591e99afe9f32eaa6214f7b7629768c40eeb3917808255600880548516919093161790915560006009819055600a819055600b819055600c819055600d819055600e819055600f819055601081905561072160115560128190556013819055601591909155620151806016556017819055601955661550f7dca70000601b55601d805482169055601e805482169055601f8054821673b9f8e9dad5d985df35036c61b6aded2ad08bd53f17905560208054821673e551072153c02fa33d4903cab0435fb86f1a80cb17905560218054821673c5f517d341c1bcb2cdc004e519af6c4613a8ab2d1790556022805482167347705b509a4fe6a0237c975f81030dac5898dc06179055602380549091167331101541339b4b3864e728bbbfc1b8a0b3bcaa45179055348015620001ac57600080fd5b50604051620043a6380380620043a683398181016040526020811015620001d257600080fd5b5051601f546001600160a01b0390811660009081526025602090815260408083208054600160ff19918216811790925592548516845281842080548416821790556021549094168352808320805483168517905533835290912080549091169091179055620002418162000248565b5062000745565b602354600160a01b900460ff161562000294576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b179055601b54811115620002ed576040805162461bcd60e51b815260206004820152600b60248201526a18d85b9b9bdd081b5a5b9d60aa1b604482015290519081900360640190fd5b60006200030c600a601b546200038160201b620030331790919060201c565b601f5490915062000347906001600160a01b0316620003388484620003d2602090811b620033ae17901c565b6001600160e01b036200041c16565b6200035c30826001600160e01b036200041c16565b62000370816001600160e01b036200059816565b50506023805460ff60a01b19169055565b6000620003cb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620005e660201b60201c565b9392505050565b6000620003cb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200068d60201b60201c565b806001600160a01b03831662000479576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60145460ff166200059357601b54601c5410156200059357601b54620004b082601c54620006ea60201b620033541790919060201c565b1115620004f057620004d5601c54601b54620003d260201b620033ae1790919060201c565b601b54601c556014805460ff19166001179055905062000510565b6200050c81601c54620006ea60201b620033541790919060201c565b601c555b6001600160a01b038316600090815260208181526040909120546200054091839062003354620006ea821b17901c565b6001600160a01b0384166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b505050565b4260108190556012829055601382905560408051838152602081019290925280517f3625b5dbaf49e9a7d78db4e7a4dfe7a45f4088a196185afc1a1a0d4d70db85ac9281900390910190a150565b60008183620006765760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200063a57818101518382015260200162000620565b50505050905090810190601f168015620006685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200068357fe5b0495945050505050565b60008184841115620006e25760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156200063a57818101518382015260200162000620565b505050900390565b600082820183811015620003cb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b613c5180620007556000396000f3fe6080604052600436106103905760003560e01c8063714a35fb116101dc578063a457c2d711610102578063d0516650116100a0578063e1175b3f1161006f578063e1175b3f14610bbb578063e4ba2e8e14610bd0578063e9f268b114610c03578063ed88c68e14610c185761039f565b8063d051665014610ae0578063d3bcca7514610b2c578063d4d5763c14610b41578063dd62ed3e14610b805761039f565b8063ab2be726116100dc578063ab2be72614610a77578063ad1c977114610a8c578063b0efb8a314610aa1578063c7d0b70e14610ab65761039f565b8063a457c2d7146109f0578063a69df4b514610a29578063a9059cbb14610a3e5761039f565b8063924013171161017a578063983b2d5611610149578063983b2d561461097e578063997664d7146109b15780639e1a4d19146109c6578063a44dc8f5146109db5761039f565b8063924013171461092a57806395d89b411461093f57806395f4474514610954578063966dae0e146109695761039f565b8063791c3504116101b6578063791c35041461089457806388bb5beb146108a95780638d010f43146108e2578063922e92a3146108f75761039f565b8063714a35fb14610837578063722799661461084c578063743e03d9146108615761039f565b80633268cc56116102c15780634de5ba6a1161025f578063634091971161022e578063634091971461078957806367b1f5df1461079e5780636f011538146107d157806370a08231146108045761039f565b80634de5ba6a146106f957806350bf28b61461072c578063529f4e88146107415780635a15adae146107565761039f565b806343b63b9d1161029b57806343b63b9d146106a557806343e97339146106ba5780634496223b146106cf5780634783c35b146106e45761039f565b80633268cc561461064257806339509351146106575780633b67b067146106905761039f565b806322f4596f1161032e578063284d30ef11610308578063284d30ef146105b257806329c95ac0146105e55780632c5535c2146105fa578063313ce5671461062d5761039f565b806322f4596f1461052757806323b872dd1461053c57806325fb63531461057f5761039f565b806306fdde031161036a57806306fdde0314610426578063095ea7b3146104b057806318160ddd146104fd5780631e7f87bc146105125761039f565b806302885097146103a4578063038a7a08146103ea5780630410808e146104115761039f565b3661039f5761039d610c1c565b005b600080fd5b3480156103b057600080fd5b506103ce600480360360208110156103c757600080fd5b5035610fbd565b604080516001600160a01b039092168252519081900360200190f35b3480156103f657600080fd5b506103ff610fe4565b60408051918252519081900360200190f35b34801561041d57600080fd5b506103ff610fea565b34801561043257600080fd5b5061043b610ff0565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561047557818101518382015260200161045d565b50505050905090810190601f1680156104a25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104bc57600080fd5b506104e9600480360360408110156104d357600080fd5b506001600160a01b038135169060200135611015565b604080519115158252519081900360200190f35b34801561050957600080fd5b506103ff61102c565b34801561051e57600080fd5b506103ff611032565b34801561053357600080fd5b506103ff611038565b34801561054857600080fd5b506104e96004803603606081101561055f57600080fd5b506001600160a01b0381358116916020810135909116906040013561103e565b34801561058b57600080fd5b5061039d600480360360208110156105a257600080fd5b50356001600160a01b03166110ad565b3480156105be57600080fd5b5061039d600480360360208110156105d557600080fd5b50356001600160a01b031661112c565b3480156105f157600080fd5b506104e9611208565b34801561060657600080fd5b506103ff6004803603602081101561061d57600080fd5b50356001600160a01b0316611218565b34801561063957600080fd5b506103ff61122a565b34801561064e57600080fd5b506103ce61122f565b34801561066357600080fd5b506104e96004803603604081101561067a57600080fd5b506001600160a01b03813516906020013561123e565b34801561069c57600080fd5b5061039d61127a565b3480156106b157600080fd5b506103ff6113f5565b3480156106c657600080fd5b506103ff6113fb565b3480156106db57600080fd5b506103ff611401565b3480156106f057600080fd5b506103ce611407565b34801561070557600080fd5b506103ff6004803603602081101561071c57600080fd5b50356001600160a01b0316611416565b34801561073857600080fd5b506103ff611490565b34801561074d57600080fd5b506104e9611496565b34801561076257600080fd5b506103ff6004803603602081101561077957600080fd5b50356001600160a01b03166114a6565b34801561079557600080fd5b506104e96114b8565b3480156107aa57600080fd5b5061039d600480360360208110156107c157600080fd5b50356001600160a01b03166114c8565b3480156107dd57600080fd5b5061039d600480360360208110156107f457600080fd5b50356001600160a01b0316611547565b34801561081057600080fd5b506103ff6004803603602081101561082757600080fd5b50356001600160a01b03166115b9565b34801561084357600080fd5b506104e96115d4565b34801561085857600080fd5b5061039d6115dd565b34801561086d57600080fd5b506104e96004803603602081101561088457600080fd5b50356001600160a01b03166118de565b3480156108a057600080fd5b5061039d61194c565b3480156108b557600080fd5b5061039d600480360360408110156108cc57600080fd5b50803590602001356001600160a01b0316611d92565b3480156108ee57600080fd5b506103ff6121ce565b34801561090357600080fd5b506103ff6004803603602081101561091a57600080fd5b50356001600160a01b03166121d4565b34801561093657600080fd5b506103ce6121e6565b34801561094b57600080fd5b5061043b6121f5565b34801561096057600080fd5b506103ff612214565b34801561097557600080fd5b506103ce61221a565b34801561098a57600080fd5b506104e9600480360360208110156109a157600080fd5b50356001600160a01b0316612229565b3480156109bd57600080fd5b506103ff6122e6565b3480156109d257600080fd5b506103ff6122ec565b3480156109e757600080fd5b506103ff6122fc565b3480156109fc57600080fd5b506104e960048036036040811015610a1357600080fd5b506001600160a01b038135169060200135612302565b348015610a3557600080fd5b5061039d612357565b348015610a4a57600080fd5b506104e960048036036040811015610a6157600080fd5b506001600160a01b038135169060200135612949565b348015610a8357600080fd5b506103ce612956565b348015610a9857600080fd5b5061039d612965565b348015610aad57600080fd5b506103ff612a30565b348015610ac257600080fd5b5061039d60048036036020811015610ad957600080fd5b5035612a36565b348015610aec57600080fd5b50610b1360048036036020811015610b0357600080fd5b50356001600160a01b0316612b86565b6040805192835260208301919091528051918290030190f35b348015610b3857600080fd5b506103ff612b9f565b348015610b4d57600080fd5b5061039d60048036036060811015610b6457600080fd5b508035906001600160a01b036020820135169060400135612ba5565b348015610b8c57600080fd5b506103ff60048036036040811015610ba357600080fd5b506001600160a01b0381358116916020013516612dba565b348015610bc757600080fd5b5061039d612de5565b348015610bdc57600080fd5b506103ff60048036036020811015610bf357600080fd5b50356001600160a01b0316612f8a565b348015610c0f57600080fd5b506103ff612fcd565b61039d5b60003411610c2957600080fd5b601f5460009034906001600160a01b0316610c5c6064610c5084601e63ffffffff612fd316565b9063ffffffff61303316565b60405161520891906000818181858888f193505050503d8060008114610c9e576040519150601f19603f3d011682016040523d82523d6000602084013e610ca3565b606091505b50508092505081610ced576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6020546001600160a01b0316610d0f6064610c5084601e63ffffffff612fd316565b60405161520891906000818181858888f193505050503d8060008114610d51576040519150601f19603f3d011682016040523d82523d6000602084013e610d56565b606091505b50508092505081610da0576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6021546001600160a01b0316610dc26064610c5084601463ffffffff612fd316565b60405161520891906000818181858888f193505050503d8060008114610e04576040519150601f19603f3d011682016040523d82523d6000602084013e610e09565b606091505b50508092505081610e53576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6022546001600160a01b0316610e756064610c5084600f63ffffffff612fd316565b60405161520891906000818181858888f193505050503d8060008114610eb7576040519150601f19603f3d011682016040523d82523d6000602084013e610ebc565b606091505b50508092505081610f06576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6023546001600160a01b0316610f286064610c5084600563ffffffff612fd316565b60405161520891906000818181858888f193505050503d8060008114610f6a576040519150601f19603f3d011682016040523d82523d6000602084013e610f6f565b606091505b50508092505081610fb9576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b5050565b60248181548110610fca57fe5b6000918252602090912001546001600160a01b0316905081565b600a5481565b60175490565b60405180604001604052806009815260200168484558204d6f6e657960b81b81525081565b6000611022338484613075565b5060015b92915050565b601c5490565b60175481565b601b5481565b600061104b848484613161565b6110a3843361109e85604051806060016040528060288152602001613b26602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919063ffffffff6132bd16565b613075565b5060019392505050565b601e546001600160a01b031633146110fd576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600380546001600160a01b03199081166001600160a01b03938416179182905560068054929093169116179055565b3360009081526025602052604090205460ff1661117f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602354600160a81b900460ff16156111d2576040805162461bcd60e51b815260206004820152601160248201527063616e6e6f742063616c6c20747769636560781b604482015290519081900360640190fd5b6023805460ff60a81b1916600160a81b179055601e80546001600160a01b039092166001600160a01b0319909216919091179055565b602354600160b01b900460ff1681565b60286020526000908152604090205481565b600881565b6003546001600160a01b031681565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161102291859061109e908663ffffffff61335416565b602354600160a01b900460ff16156112c5576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b179055336000908152601a60205260409020546113235760405162461bcd60e51b8152600401808060200182810382526022815260200180613a7b6022913960400191505060405180910390fd5b60145460ff166113645760405162461bcd60e51b8152600401808060200182810382526039815260200180613acc6039913960400191505060405180910390fd5b336000908152601a60205260408120805491905560175461138b908263ffffffff6133ae16565b6017556019546113a1908263ffffffff6133ae16565b6019556113af303383613161565b60408051828152905133917fe077eb71e671866ccb21027ce96d50f8cc0f5cc09336f433e506d017390a5e35919081900360200190a2506023805460ff60a01b19169055565b600c5481565b60095481565b60155481565b601e546001600160a01b031681565b6001600160a01b03811660009081526027602052604081205461143b5750600061148b565b6016546001600160a01b038316600090815260276020526040812054909161146e91610c5090429063ffffffff6133ae16565b90506015548110611485576015549003905061148b565b60009150505b919050565b600e5481565b600854600160a01b900460ff1681565b601a6020526000908152604090205481565b602354600160a81b900460ff1681565b601e546001600160a01b03163314611518576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600480546001600160a01b03199081166001600160a01b03938416179182905560058054929093169116179055565b601e546001600160a01b03163314611597576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b60145460ff1681565b602354600160a01b900460ff1615611628576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b179055600e54611687576040805162461bcd60e51b81526020600482015260156024820152746e6f7468696e6720746f206469737472696275746560581b604482015290519081900360640190fd5b600e54600b805482019055600854601d546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101949094525191169163a9059cbb9160448083019260209291908290030181600087803b1580156116e957600080fd5b505af11580156116fd573d6000803e3d6000fd5b505050506040513d602081101561171357600080fd5b5050600d54600854604080516370a0823160e01b8152306004820152905160009384936117a59391926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561176d57600080fd5b505afa158015611781573d6000803e3d6000fd5b505050506040513d602081101561179757600080fd5b50519063ffffffff6133ae16565b111561188357600d54600854604080516370a0823160e01b815230600482015290516117fb93926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561176d57600080fd5b600854601d546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b15801561185657600080fd5b505af115801561186a573d6000803e3d6000fd5b505050506040513d602081101561188057600080fd5b50505b600e547f5616606963f34708c0ca9fe847c0558c76203b4cf30738ab99f485ddf4be9896906118b8908363ffffffff61335416565b60408051918252519081900360200190a1506000600e556023805460ff60a01b19169055565b6001600160a01b0381166000908152602760205260408120546119035750600061148b565b4261194361191e601654601554612fd390919063ffffffff16565b6001600160a01b0385166000908152602760205260409020549063ffffffff61335416565b1115905061148b565b602354600160a01b900460ff1615611997576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b179055600d546103e8106119f3576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd1a1a5b99c81d1bc818591960921b604482015290519081900360640190fd5b600080600560009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611a4457600080fd5b505afa158015611a58573d6000803e3d6000fd5b505050506040513d6060811015611a6e57600080fd5b508051602091820151600654600d5460408051632b58577b60e21b815260048101929092526001600160701b0394851660248301819052949093166044820181905292519396509194506000936001600160a01b039091169263ad615dec926064808201939291829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b50519050611b2130826133f0565b600354611b3f9030906001600160a01b03168363ffffffff61354516565b600854600354600d546040805163095ea7b360e01b81526001600160a01b039384166004820152602481019290925251919092169163095ea7b39160448083019260209291908290030181600087803b158015611b9b57600080fd5b505af1158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b5051611c0c576040805162461bcd60e51b8152602060048201526011602482015270636f756c64206e6f7420617070726f766560781b604482015290519081900360640190fd5b600654600754600d54601f54600093849384936001600160a01b039283169363e8e3370093928316923092918a918891829116611c514261032063ffffffff61335416565b6040518963ffffffff1660e01b815260040180896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160a01b03166001600160a01b0316815260200182815260200198505050505050505050606060405180830381600087803b158015611cee57600080fd5b505af1158015611d02573d6000803e3d6000fd5b505050506040513d6060811015611d1857600080fd5b508051602080830151604093840151600d8054600c80549091019055600090558451848152928301829052828501819052935192965094509192507fbce88b8a70f9ef437d42f87980bf44fd12f5e9fc861c3f0f29fda526e931c6049181900360600190a150506023805460ff60a01b1916905550505050565b602354600160a01b900460ff1615611ddd576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b9081179091556008540460ff16611e4b576040805162461bcd60e51b815260206004820152601960248201527f7472616e73666f726d73206e6f74207965742061637469766500000000000000604482015290519081900360640190fd5b6064821015611e91576040805162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b604482015290519081900360640190fd5b600854604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611eeb57600080fd5b505af1158015611eff573d6000803e3d6000fd5b505050506040513d6020811015611f1557600080fd5b5051611f5a576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b611f6b82600263ffffffff61303316565b600e80549091019055611f8582600263ffffffff61303316565b600d8054909101905560055460408051630240bc6b60e21b8152905160009283926001600160a01b0390911691630902f1ac91600480820192606092909190829003018186803b158015611fd857600080fd5b505afa158015611fec573d6000803e3d6000fd5b505050506040513d606081101561200257600080fd5b50805160209182015160065460408051632b58577b60e21b8152600481018a90526001600160701b03948516602482018190529490931660448401819052905193965094506000936001600160a01b039091169263ad615dec926064808201939291829003018186803b15801561207857600080fd5b505afa15801561208c573d6000803e3d6000fd5b505050506040513d60208110156120a257600080fd5b505190506001600160a01b03841615612107576120d66120c982600a63ffffffff61303316565b829063ffffffff61335416565b600a805490910181556009805487019055612102906120fc90839063ffffffff61303316565b85613658565b612118565b600a80548201905560098054860190555b660aa87bee538000600a541115612176576040805162461bcd60e51b815260206004820152601c60248201527f7472616e73666f726d207468726573686f6c6420627265616368656400000000604482015290519081900360640190fd5b61218033826133f0565b6040805186815260208101839052815133927f8593cdaa8491d9718db378eaf48de9e143905b0b70afce0df61a0afda3235625928290030190a250506023805460ff60a01b19169055505050565b600d5481565b60186020526000908152604090205481565b6004546001600160a01b031681565b6040518060400160405280600381526020016248585960e81b81525081565b60105481565b6002546001600160a01b031681565b601e546000906001600160a01b0316331461227c576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b506001600160a01b03166000818152602660205260408120805460ff1916600190811790915560248054808301825592527f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec490910180546001600160a01b03191690921790915590565b600b5481565b60006122f7336115b9565b905090565b60195481565b6000611022338461109e85604051806060016040528060258152602001613bf7602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919063ffffffff6132bd16565b3360009081526025602052604090205460ff166123aa576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602354600160a01b900460ff16156123f5576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b179055601154600090600a90049050600a600f5410612463576040805162461bcd60e51b8152602060048201526015602482015274746f6b656e20756e6c6f636b20636f6d706c65746560581b604482015290519081900360640190fd5b4261248b61247c60165484612fd390919063ffffffff16565b6010549063ffffffff61335416565b11156124de576040805162461bcd60e51b815260206004820152601d60248201527f746f6b656e732063616e6e6f7420626520756e66726f7a656e20796574000000604482015290519081900360640190fd5b6000600a601354816124ec57fe5b0490504261250861247c60165485612fd390919063ffffffff16565b111580156125165750600f54155b1561260757600f80546001019055601254612537908263ffffffff6133ae16565b601255601f54612565906001600160a01b03166125606064610c5085601e63ffffffff612fd316565b612949565b5060205461258c906001600160a01b03166125606064610c5085601e63ffffffff612fd316565b506021546125b3906001600160a01b03166125606064610c5085601463ffffffff612fd316565b506022546125da906001600160a01b03166125606064610c5085600f63ffffffff612fd316565b50602354612601906001600160a01b03166125606064610c5085600563ffffffff612fd316565b506128fe565b4261262361247c60165485600202612fd390919063ffffffff16565b111580156126335750600f546001145b1561265457600f80546001019055601254612537908263ffffffff6133ae16565b4261267061247c60165485600302612fd390919063ffffffff16565b111580156126805750600f546002145b156126a157600f80546001019055601254612537908263ffffffff6133ae16565b426126bd61247c60165485600402612fd390919063ffffffff16565b111580156126cd5750600f546003145b156126ee57600f80546001019055601254612537908263ffffffff6133ae16565b4261270a61247c60165485600502612fd390919063ffffffff16565b1115801561271a5750600f546004145b1561273b57600f80546001019055601254612537908263ffffffff6133ae16565b4261275761247c60165485600602612fd390919063ffffffff16565b111580156127675750600f546005145b1561278857600f80546001019055601254612537908263ffffffff6133ae16565b426127a461247c60165485600702612fd390919063ffffffff16565b111580156127b45750600f546006145b156127d557600f80546001019055601254612537908263ffffffff6133ae16565b426127f161247c60165485600802612fd390919063ffffffff16565b111580156128015750600f546007145b1561282257600f80546001019055601254612537908263ffffffff6133ae16565b4261283e61247c60165485600902612fd390919063ffffffff16565b1115801561284e5750600f546008145b1561286f57600f80546001019055601254612537908263ffffffff6133ae16565b4261288b61247c60165485600a02612fd390919063ffffffff16565b1115801561289b5750600f546009145b1561039f57600f8054600101905560125481116128cd576012546128c5908263ffffffff6133ae16565b6012556128d8565b506012805460009091555b601f54612565906001600160a01b03166125606064610c5085601e63ffffffff612fd316565b6040805182815242602082015281517ff6742054252f94c182844c882646c1d954775ae04b2de8f83448d54154ddaf62929181900390910190a150506023805460ff60a01b19169055565b6000611022338484613161565b601d546001600160a01b031681565b601e546001600160a01b031633146129b5576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b602354600160b01b900460ff1615612a08576040805162461bcd60e51b815260206004820152601160248201527063616e6e6f742063616c6c20747769636560781b604482015290519081900360640190fd5b6023805460ff60b01b1916600160b01b1790556008805460ff60a01b1916600160a01b179055565b600f5481565b60008111612a78576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b80612a816122ec565b1015612ad4576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b612add336118de565b15612aea57612aea612de5565b33600090815260186020526040902054612b0a908263ffffffff61335416565b33600090815260186020526040902055601754612b2d908263ffffffff61335416565b601755336000818152602760205260409020429055612b4d903083613161565b60408051828152905133917f7def9f73ac6a7ac8fe4dc55f5257d48aed7e3f9d5247b0020598b87a5c369d82919081900360200190a250565b6027602052600090815260409020805460019091015482565b60115481565b3360009081526026602052604090205460ff16612bf8576040805162461bcd60e51b815260206004820152600c60248201526b3737ba10309036b4b73a32b960a11b604482015290519081900360640190fd5b602354600160a01b900460ff1615612c43576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b17905582612c95576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b60145460ff16612da8576000612ca961102c565b9050612cb584306137a5565b83612cce82612cc261102c565b9063ffffffff6133ae16565b1015612ce357612ce081612cc261102c565b93505b6001600160a01b0383166000908152601a6020526040902054612d0c908563ffffffff61335416565b6001600160a01b0384166000908152601a6020526040902055601754612d38908563ffffffff61335416565b601755601954612d4e908563ffffffff61335416565b6019556001600160a01b038316600081815260286020908152604091829020805488019055815187815291518593927fea0fa627e5a8c6915f721a8352cdcc563f31ccea6748496c1daa6f4018cd1c9d92908290030190a3505b50506023805460ff60a01b1916905550565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b602354600160a01b900460ff1615612e30576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b17905533600090815260186020526040902054612e8e5760405162461bcd60e51b8152600401808060200182810382526022815260200180613a7b6022913960400191505060405180910390fd5b612e97336118de565b612ed25760405162461bcd60e51b815260040180806020018281038252602f815260200180613a9d602f913960400191505060405180910390fd5b3360008181526018602052604081205491612eec90612f8a565b9050612ef833826133f0565b336000908152602760208181526040808420600181018054870190556018835290842084905591905255601754612f35908363ffffffff6133ae16565b601755612f43303384613161565b60408051838152905133917fb925ba840e2f36bcb317f8179bd8b5ed01aba4a22abf5f169162c0894dea87ab919081900360200190a250506023805460ff60a01b19169055565b6000612f9582611416565b6015546001600160a01b038416600090815260186020526040902054910190612fc6906103e863ffffffff61303316565b0292915050565b60125481565b600082612fe257506000611026565b82820282848281612fef57fe5b041461302c5760405162461bcd60e51b8152600401808060200182810382526021815260200180613b056021913960400191505060405180910390fd5b9392505050565b600061302c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137b0565b6001600160a01b0383166130ba5760405162461bcd60e51b8152600401808060200182810382526024815260200180613b736024913960400191505060405180910390fd5b6001600160a01b0382166130ff5760405162461bcd60e51b8152600401808060200182810382526022815260200180613a336022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166131a65760405162461bcd60e51b8152600401808060200182810382526025815260200180613b4e6025913960400191505060405180910390fd5b6001600160a01b0382166131eb5760405162461bcd60e51b8152600401808060200182810382526023815260200180613a106023913960400191505060405180910390fd5b61322e81604051806060016040528060268152602001613a55602691396001600160a01b038616600090815260208190526040902054919063ffffffff6132bd16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613263908263ffffffff61335416565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561334c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133115781810151838201526020016132f9565b50505050905090810190601f16801561333e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561302c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061302c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132bd565b806001600160a01b03831661344c576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60145460ff1661354057601b54601c54101561354057601b54601c54613478908363ffffffff61335416565b11156134ad57601c54601b546134939163ffffffff6133ae16565b601b54601c556014805460ff1916600117905590506134c4565b601c546134c0908263ffffffff61335416565b601c555b6001600160a01b0383166000908152602081905260409020546134ed908263ffffffff61335416565b6001600160a01b0384166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b505050565b8015806135cb575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561359d57600080fd5b505afa1580156135b1573d6000803e3d6000fd5b505050506040513d60208110156135c757600080fd5b5051155b6136065760405162461bcd60e51b8152600401808060200182810382526036815260200180613bc16036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052613540908490613815565b6000821161369a576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b60145460ff16610fb95760006136ae61102c565b90506136ba83306137a5565b826136c782612cc261102c565b10156136dc576136d981612cc261102c565b92505b6001600160a01b0382166000908152601a6020526040902054613705908463ffffffff61335416565b6001600160a01b0383166000908152601a6020526040902055601754613731908463ffffffff61335416565b601755601954613747908463ffffffff61335416565b6019556001600160a01b0382166000818152602860209081526040808320805488019055805187815290519293927fea0fa627e5a8c6915f721a8352cdcc563f31ccea6748496c1daa6f4018cd1c9d929181900390910190a3505050565b8161354082826133f0565b600081836137ff5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156133115781810151838201526020016132f9565b50600083858161380b57fe5b0495945050505050565b613827826001600160a01b03166139d3565b613878576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106138b65780518252601f199092019160209182019101613897565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613918576040519150601f19603f3d011682016040523d82523d6000602084013e61391d565b606091505b509150915081613974576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156139cd5780806020019051602081101561399057600080fd5b50516139cd5760405162461bcd60e51b815260040180806020018281038252602a815260200180613b97602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590613a0757508115155b94935050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654572726f723a20756e73756666696369656e742066726f7a656e2062616c616e6365746f6b656e732063616e6e6f7420626520756e66726f7a656e207965742e206d696e20372064617920667265657a65746f6b656e732063616e6e6f7420626520756e66726f7a656e207965742e206d617820737570706c79206e6f74207965742072656163686564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d1063f92076745e8137f664d98ca1623da342af63a1e2dfe814f00d44ae370d164736f6c634300060400330000000000000000000000000000000000000000000000000005265baeddbc80

Deployed Bytecode

0x6080604052600436106103905760003560e01c8063714a35fb116101dc578063a457c2d711610102578063d0516650116100a0578063e1175b3f1161006f578063e1175b3f14610bbb578063e4ba2e8e14610bd0578063e9f268b114610c03578063ed88c68e14610c185761039f565b8063d051665014610ae0578063d3bcca7514610b2c578063d4d5763c14610b41578063dd62ed3e14610b805761039f565b8063ab2be726116100dc578063ab2be72614610a77578063ad1c977114610a8c578063b0efb8a314610aa1578063c7d0b70e14610ab65761039f565b8063a457c2d7146109f0578063a69df4b514610a29578063a9059cbb14610a3e5761039f565b8063924013171161017a578063983b2d5611610149578063983b2d561461097e578063997664d7146109b15780639e1a4d19146109c6578063a44dc8f5146109db5761039f565b8063924013171461092a57806395d89b411461093f57806395f4474514610954578063966dae0e146109695761039f565b8063791c3504116101b6578063791c35041461089457806388bb5beb146108a95780638d010f43146108e2578063922e92a3146108f75761039f565b8063714a35fb14610837578063722799661461084c578063743e03d9146108615761039f565b80633268cc56116102c15780634de5ba6a1161025f578063634091971161022e578063634091971461078957806367b1f5df1461079e5780636f011538146107d157806370a08231146108045761039f565b80634de5ba6a146106f957806350bf28b61461072c578063529f4e88146107415780635a15adae146107565761039f565b806343b63b9d1161029b57806343b63b9d146106a557806343e97339146106ba5780634496223b146106cf5780634783c35b146106e45761039f565b80633268cc561461064257806339509351146106575780633b67b067146106905761039f565b806322f4596f1161032e578063284d30ef11610308578063284d30ef146105b257806329c95ac0146105e55780632c5535c2146105fa578063313ce5671461062d5761039f565b806322f4596f1461052757806323b872dd1461053c57806325fb63531461057f5761039f565b806306fdde031161036a57806306fdde0314610426578063095ea7b3146104b057806318160ddd146104fd5780631e7f87bc146105125761039f565b806302885097146103a4578063038a7a08146103ea5780630410808e146104115761039f565b3661039f5761039d610c1c565b005b600080fd5b3480156103b057600080fd5b506103ce600480360360208110156103c757600080fd5b5035610fbd565b604080516001600160a01b039092168252519081900360200190f35b3480156103f657600080fd5b506103ff610fe4565b60408051918252519081900360200190f35b34801561041d57600080fd5b506103ff610fea565b34801561043257600080fd5b5061043b610ff0565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561047557818101518382015260200161045d565b50505050905090810190601f1680156104a25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104bc57600080fd5b506104e9600480360360408110156104d357600080fd5b506001600160a01b038135169060200135611015565b604080519115158252519081900360200190f35b34801561050957600080fd5b506103ff61102c565b34801561051e57600080fd5b506103ff611032565b34801561053357600080fd5b506103ff611038565b34801561054857600080fd5b506104e96004803603606081101561055f57600080fd5b506001600160a01b0381358116916020810135909116906040013561103e565b34801561058b57600080fd5b5061039d600480360360208110156105a257600080fd5b50356001600160a01b03166110ad565b3480156105be57600080fd5b5061039d600480360360208110156105d557600080fd5b50356001600160a01b031661112c565b3480156105f157600080fd5b506104e9611208565b34801561060657600080fd5b506103ff6004803603602081101561061d57600080fd5b50356001600160a01b0316611218565b34801561063957600080fd5b506103ff61122a565b34801561064e57600080fd5b506103ce61122f565b34801561066357600080fd5b506104e96004803603604081101561067a57600080fd5b506001600160a01b03813516906020013561123e565b34801561069c57600080fd5b5061039d61127a565b3480156106b157600080fd5b506103ff6113f5565b3480156106c657600080fd5b506103ff6113fb565b3480156106db57600080fd5b506103ff611401565b3480156106f057600080fd5b506103ce611407565b34801561070557600080fd5b506103ff6004803603602081101561071c57600080fd5b50356001600160a01b0316611416565b34801561073857600080fd5b506103ff611490565b34801561074d57600080fd5b506104e9611496565b34801561076257600080fd5b506103ff6004803603602081101561077957600080fd5b50356001600160a01b03166114a6565b34801561079557600080fd5b506104e96114b8565b3480156107aa57600080fd5b5061039d600480360360208110156107c157600080fd5b50356001600160a01b03166114c8565b3480156107dd57600080fd5b5061039d600480360360208110156107f457600080fd5b50356001600160a01b0316611547565b34801561081057600080fd5b506103ff6004803603602081101561082757600080fd5b50356001600160a01b03166115b9565b34801561084357600080fd5b506104e96115d4565b34801561085857600080fd5b5061039d6115dd565b34801561086d57600080fd5b506104e96004803603602081101561088457600080fd5b50356001600160a01b03166118de565b3480156108a057600080fd5b5061039d61194c565b3480156108b557600080fd5b5061039d600480360360408110156108cc57600080fd5b50803590602001356001600160a01b0316611d92565b3480156108ee57600080fd5b506103ff6121ce565b34801561090357600080fd5b506103ff6004803603602081101561091a57600080fd5b50356001600160a01b03166121d4565b34801561093657600080fd5b506103ce6121e6565b34801561094b57600080fd5b5061043b6121f5565b34801561096057600080fd5b506103ff612214565b34801561097557600080fd5b506103ce61221a565b34801561098a57600080fd5b506104e9600480360360208110156109a157600080fd5b50356001600160a01b0316612229565b3480156109bd57600080fd5b506103ff6122e6565b3480156109d257600080fd5b506103ff6122ec565b3480156109e757600080fd5b506103ff6122fc565b3480156109fc57600080fd5b506104e960048036036040811015610a1357600080fd5b506001600160a01b038135169060200135612302565b348015610a3557600080fd5b5061039d612357565b348015610a4a57600080fd5b506104e960048036036040811015610a6157600080fd5b506001600160a01b038135169060200135612949565b348015610a8357600080fd5b506103ce612956565b348015610a9857600080fd5b5061039d612965565b348015610aad57600080fd5b506103ff612a30565b348015610ac257600080fd5b5061039d60048036036020811015610ad957600080fd5b5035612a36565b348015610aec57600080fd5b50610b1360048036036020811015610b0357600080fd5b50356001600160a01b0316612b86565b6040805192835260208301919091528051918290030190f35b348015610b3857600080fd5b506103ff612b9f565b348015610b4d57600080fd5b5061039d60048036036060811015610b6457600080fd5b508035906001600160a01b036020820135169060400135612ba5565b348015610b8c57600080fd5b506103ff60048036036040811015610ba357600080fd5b506001600160a01b0381358116916020013516612dba565b348015610bc757600080fd5b5061039d612de5565b348015610bdc57600080fd5b506103ff60048036036020811015610bf357600080fd5b50356001600160a01b0316612f8a565b348015610c0f57600080fd5b506103ff612fcd565b61039d5b60003411610c2957600080fd5b601f5460009034906001600160a01b0316610c5c6064610c5084601e63ffffffff612fd316565b9063ffffffff61303316565b60405161520891906000818181858888f193505050503d8060008114610c9e576040519150601f19603f3d011682016040523d82523d6000602084013e610ca3565b606091505b50508092505081610ced576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6020546001600160a01b0316610d0f6064610c5084601e63ffffffff612fd316565b60405161520891906000818181858888f193505050503d8060008114610d51576040519150601f19603f3d011682016040523d82523d6000602084013e610d56565b606091505b50508092505081610da0576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6021546001600160a01b0316610dc26064610c5084601463ffffffff612fd316565b60405161520891906000818181858888f193505050503d8060008114610e04576040519150601f19603f3d011682016040523d82523d6000602084013e610e09565b606091505b50508092505081610e53576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6022546001600160a01b0316610e756064610c5084600f63ffffffff612fd316565b60405161520891906000818181858888f193505050503d8060008114610eb7576040519150601f19603f3d011682016040523d82523d6000602084013e610ebc565b606091505b50508092505081610f06576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6023546001600160a01b0316610f286064610c5084600563ffffffff612fd316565b60405161520891906000818181858888f193505050503d8060008114610f6a576040519150601f19603f3d011682016040523d82523d6000602084013e610f6f565b606091505b50508092505081610fb9576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b5050565b60248181548110610fca57fe5b6000918252602090912001546001600160a01b0316905081565b600a5481565b60175490565b60405180604001604052806009815260200168484558204d6f6e657960b81b81525081565b6000611022338484613075565b5060015b92915050565b601c5490565b60175481565b601b5481565b600061104b848484613161565b6110a3843361109e85604051806060016040528060288152602001613b26602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919063ffffffff6132bd16565b613075565b5060019392505050565b601e546001600160a01b031633146110fd576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600380546001600160a01b03199081166001600160a01b03938416179182905560068054929093169116179055565b3360009081526025602052604090205460ff1661117f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602354600160a81b900460ff16156111d2576040805162461bcd60e51b815260206004820152601160248201527063616e6e6f742063616c6c20747769636560781b604482015290519081900360640190fd5b6023805460ff60a81b1916600160a81b179055601e80546001600160a01b039092166001600160a01b0319909216919091179055565b602354600160b01b900460ff1681565b60286020526000908152604090205481565b600881565b6003546001600160a01b031681565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161102291859061109e908663ffffffff61335416565b602354600160a01b900460ff16156112c5576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b179055336000908152601a60205260409020546113235760405162461bcd60e51b8152600401808060200182810382526022815260200180613a7b6022913960400191505060405180910390fd5b60145460ff166113645760405162461bcd60e51b8152600401808060200182810382526039815260200180613acc6039913960400191505060405180910390fd5b336000908152601a60205260408120805491905560175461138b908263ffffffff6133ae16565b6017556019546113a1908263ffffffff6133ae16565b6019556113af303383613161565b60408051828152905133917fe077eb71e671866ccb21027ce96d50f8cc0f5cc09336f433e506d017390a5e35919081900360200190a2506023805460ff60a01b19169055565b600c5481565b60095481565b60155481565b601e546001600160a01b031681565b6001600160a01b03811660009081526027602052604081205461143b5750600061148b565b6016546001600160a01b038316600090815260276020526040812054909161146e91610c5090429063ffffffff6133ae16565b90506015548110611485576015549003905061148b565b60009150505b919050565b600e5481565b600854600160a01b900460ff1681565b601a6020526000908152604090205481565b602354600160a81b900460ff1681565b601e546001600160a01b03163314611518576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600480546001600160a01b03199081166001600160a01b03938416179182905560058054929093169116179055565b601e546001600160a01b03163314611597576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b60145460ff1681565b602354600160a01b900460ff1615611628576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b179055600e54611687576040805162461bcd60e51b81526020600482015260156024820152746e6f7468696e6720746f206469737472696275746560581b604482015290519081900360640190fd5b600e54600b805482019055600854601d546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101949094525191169163a9059cbb9160448083019260209291908290030181600087803b1580156116e957600080fd5b505af11580156116fd573d6000803e3d6000fd5b505050506040513d602081101561171357600080fd5b5050600d54600854604080516370a0823160e01b8152306004820152905160009384936117a59391926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561176d57600080fd5b505afa158015611781573d6000803e3d6000fd5b505050506040513d602081101561179757600080fd5b50519063ffffffff6133ae16565b111561188357600d54600854604080516370a0823160e01b815230600482015290516117fb93926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561176d57600080fd5b600854601d546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b15801561185657600080fd5b505af115801561186a573d6000803e3d6000fd5b505050506040513d602081101561188057600080fd5b50505b600e547f5616606963f34708c0ca9fe847c0558c76203b4cf30738ab99f485ddf4be9896906118b8908363ffffffff61335416565b60408051918252519081900360200190a1506000600e556023805460ff60a01b19169055565b6001600160a01b0381166000908152602760205260408120546119035750600061148b565b4261194361191e601654601554612fd390919063ffffffff16565b6001600160a01b0385166000908152602760205260409020549063ffffffff61335416565b1115905061148b565b602354600160a01b900460ff1615611997576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b179055600d546103e8106119f3576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd1a1a5b99c81d1bc818591960921b604482015290519081900360640190fd5b600080600560009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611a4457600080fd5b505afa158015611a58573d6000803e3d6000fd5b505050506040513d6060811015611a6e57600080fd5b508051602091820151600654600d5460408051632b58577b60e21b815260048101929092526001600160701b0394851660248301819052949093166044820181905292519396509194506000936001600160a01b039091169263ad615dec926064808201939291829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b50519050611b2130826133f0565b600354611b3f9030906001600160a01b03168363ffffffff61354516565b600854600354600d546040805163095ea7b360e01b81526001600160a01b039384166004820152602481019290925251919092169163095ea7b39160448083019260209291908290030181600087803b158015611b9b57600080fd5b505af1158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b5051611c0c576040805162461bcd60e51b8152602060048201526011602482015270636f756c64206e6f7420617070726f766560781b604482015290519081900360640190fd5b600654600754600d54601f54600093849384936001600160a01b039283169363e8e3370093928316923092918a918891829116611c514261032063ffffffff61335416565b6040518963ffffffff1660e01b815260040180896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160a01b03166001600160a01b0316815260200182815260200198505050505050505050606060405180830381600087803b158015611cee57600080fd5b505af1158015611d02573d6000803e3d6000fd5b505050506040513d6060811015611d1857600080fd5b508051602080830151604093840151600d8054600c80549091019055600090558451848152928301829052828501819052935192965094509192507fbce88b8a70f9ef437d42f87980bf44fd12f5e9fc861c3f0f29fda526e931c6049181900360600190a150506023805460ff60a01b1916905550505050565b602354600160a01b900460ff1615611ddd576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b9081179091556008540460ff16611e4b576040805162461bcd60e51b815260206004820152601960248201527f7472616e73666f726d73206e6f74207965742061637469766500000000000000604482015290519081900360640190fd5b6064821015611e91576040805162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b604482015290519081900360640190fd5b600854604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611eeb57600080fd5b505af1158015611eff573d6000803e3d6000fd5b505050506040513d6020811015611f1557600080fd5b5051611f5a576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b611f6b82600263ffffffff61303316565b600e80549091019055611f8582600263ffffffff61303316565b600d8054909101905560055460408051630240bc6b60e21b8152905160009283926001600160a01b0390911691630902f1ac91600480820192606092909190829003018186803b158015611fd857600080fd5b505afa158015611fec573d6000803e3d6000fd5b505050506040513d606081101561200257600080fd5b50805160209182015160065460408051632b58577b60e21b8152600481018a90526001600160701b03948516602482018190529490931660448401819052905193965094506000936001600160a01b039091169263ad615dec926064808201939291829003018186803b15801561207857600080fd5b505afa15801561208c573d6000803e3d6000fd5b505050506040513d60208110156120a257600080fd5b505190506001600160a01b03841615612107576120d66120c982600a63ffffffff61303316565b829063ffffffff61335416565b600a805490910181556009805487019055612102906120fc90839063ffffffff61303316565b85613658565b612118565b600a80548201905560098054860190555b660aa87bee538000600a541115612176576040805162461bcd60e51b815260206004820152601c60248201527f7472616e73666f726d207468726573686f6c6420627265616368656400000000604482015290519081900360640190fd5b61218033826133f0565b6040805186815260208101839052815133927f8593cdaa8491d9718db378eaf48de9e143905b0b70afce0df61a0afda3235625928290030190a250506023805460ff60a01b19169055505050565b600d5481565b60186020526000908152604090205481565b6004546001600160a01b031681565b6040518060400160405280600381526020016248585960e81b81525081565b60105481565b6002546001600160a01b031681565b601e546000906001600160a01b0316331461227c576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b506001600160a01b03166000818152602660205260408120805460ff1916600190811790915560248054808301825592527f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec490910180546001600160a01b03191690921790915590565b600b5481565b60006122f7336115b9565b905090565b60195481565b6000611022338461109e85604051806060016040528060258152602001613bf7602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919063ffffffff6132bd16565b3360009081526025602052604090205460ff166123aa576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602354600160a01b900460ff16156123f5576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b179055601154600090600a90049050600a600f5410612463576040805162461bcd60e51b8152602060048201526015602482015274746f6b656e20756e6c6f636b20636f6d706c65746560581b604482015290519081900360640190fd5b4261248b61247c60165484612fd390919063ffffffff16565b6010549063ffffffff61335416565b11156124de576040805162461bcd60e51b815260206004820152601d60248201527f746f6b656e732063616e6e6f7420626520756e66726f7a656e20796574000000604482015290519081900360640190fd5b6000600a601354816124ec57fe5b0490504261250861247c60165485612fd390919063ffffffff16565b111580156125165750600f54155b1561260757600f80546001019055601254612537908263ffffffff6133ae16565b601255601f54612565906001600160a01b03166125606064610c5085601e63ffffffff612fd316565b612949565b5060205461258c906001600160a01b03166125606064610c5085601e63ffffffff612fd316565b506021546125b3906001600160a01b03166125606064610c5085601463ffffffff612fd316565b506022546125da906001600160a01b03166125606064610c5085600f63ffffffff612fd316565b50602354612601906001600160a01b03166125606064610c5085600563ffffffff612fd316565b506128fe565b4261262361247c60165485600202612fd390919063ffffffff16565b111580156126335750600f546001145b1561265457600f80546001019055601254612537908263ffffffff6133ae16565b4261267061247c60165485600302612fd390919063ffffffff16565b111580156126805750600f546002145b156126a157600f80546001019055601254612537908263ffffffff6133ae16565b426126bd61247c60165485600402612fd390919063ffffffff16565b111580156126cd5750600f546003145b156126ee57600f80546001019055601254612537908263ffffffff6133ae16565b4261270a61247c60165485600502612fd390919063ffffffff16565b1115801561271a5750600f546004145b1561273b57600f80546001019055601254612537908263ffffffff6133ae16565b4261275761247c60165485600602612fd390919063ffffffff16565b111580156127675750600f546005145b1561278857600f80546001019055601254612537908263ffffffff6133ae16565b426127a461247c60165485600702612fd390919063ffffffff16565b111580156127b45750600f546006145b156127d557600f80546001019055601254612537908263ffffffff6133ae16565b426127f161247c60165485600802612fd390919063ffffffff16565b111580156128015750600f546007145b1561282257600f80546001019055601254612537908263ffffffff6133ae16565b4261283e61247c60165485600902612fd390919063ffffffff16565b1115801561284e5750600f546008145b1561286f57600f80546001019055601254612537908263ffffffff6133ae16565b4261288b61247c60165485600a02612fd390919063ffffffff16565b1115801561289b5750600f546009145b1561039f57600f8054600101905560125481116128cd576012546128c5908263ffffffff6133ae16565b6012556128d8565b506012805460009091555b601f54612565906001600160a01b03166125606064610c5085601e63ffffffff612fd316565b6040805182815242602082015281517ff6742054252f94c182844c882646c1d954775ae04b2de8f83448d54154ddaf62929181900390910190a150506023805460ff60a01b19169055565b6000611022338484613161565b601d546001600160a01b031681565b601e546001600160a01b031633146129b5576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b602354600160b01b900460ff1615612a08576040805162461bcd60e51b815260206004820152601160248201527063616e6e6f742063616c6c20747769636560781b604482015290519081900360640190fd5b6023805460ff60b01b1916600160b01b1790556008805460ff60a01b1916600160a01b179055565b600f5481565b60008111612a78576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b80612a816122ec565b1015612ad4576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b612add336118de565b15612aea57612aea612de5565b33600090815260186020526040902054612b0a908263ffffffff61335416565b33600090815260186020526040902055601754612b2d908263ffffffff61335416565b601755336000818152602760205260409020429055612b4d903083613161565b60408051828152905133917f7def9f73ac6a7ac8fe4dc55f5257d48aed7e3f9d5247b0020598b87a5c369d82919081900360200190a250565b6027602052600090815260409020805460019091015482565b60115481565b3360009081526026602052604090205460ff16612bf8576040805162461bcd60e51b815260206004820152600c60248201526b3737ba10309036b4b73a32b960a11b604482015290519081900360640190fd5b602354600160a01b900460ff1615612c43576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b17905582612c95576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b60145460ff16612da8576000612ca961102c565b9050612cb584306137a5565b83612cce82612cc261102c565b9063ffffffff6133ae16565b1015612ce357612ce081612cc261102c565b93505b6001600160a01b0383166000908152601a6020526040902054612d0c908563ffffffff61335416565b6001600160a01b0384166000908152601a6020526040902055601754612d38908563ffffffff61335416565b601755601954612d4e908563ffffffff61335416565b6019556001600160a01b038316600081815260286020908152604091829020805488019055815187815291518593927fea0fa627e5a8c6915f721a8352cdcc563f31ccea6748496c1daa6f4018cd1c9d92908290030190a3505b50506023805460ff60a01b1916905550565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b602354600160a01b900460ff1615612e30576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b6023805460ff60a01b1916600160a01b17905533600090815260186020526040902054612e8e5760405162461bcd60e51b8152600401808060200182810382526022815260200180613a7b6022913960400191505060405180910390fd5b612e97336118de565b612ed25760405162461bcd60e51b815260040180806020018281038252602f815260200180613a9d602f913960400191505060405180910390fd5b3360008181526018602052604081205491612eec90612f8a565b9050612ef833826133f0565b336000908152602760208181526040808420600181018054870190556018835290842084905591905255601754612f35908363ffffffff6133ae16565b601755612f43303384613161565b60408051838152905133917fb925ba840e2f36bcb317f8179bd8b5ed01aba4a22abf5f169162c0894dea87ab919081900360200190a250506023805460ff60a01b19169055565b6000612f9582611416565b6015546001600160a01b038416600090815260186020526040902054910190612fc6906103e863ffffffff61303316565b0292915050565b60125481565b600082612fe257506000611026565b82820282848281612fef57fe5b041461302c5760405162461bcd60e51b8152600401808060200182810382526021815260200180613b056021913960400191505060405180910390fd5b9392505050565b600061302c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137b0565b6001600160a01b0383166130ba5760405162461bcd60e51b8152600401808060200182810382526024815260200180613b736024913960400191505060405180910390fd5b6001600160a01b0382166130ff5760405162461bcd60e51b8152600401808060200182810382526022815260200180613a336022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166131a65760405162461bcd60e51b8152600401808060200182810382526025815260200180613b4e6025913960400191505060405180910390fd5b6001600160a01b0382166131eb5760405162461bcd60e51b8152600401808060200182810382526023815260200180613a106023913960400191505060405180910390fd5b61322e81604051806060016040528060268152602001613a55602691396001600160a01b038616600090815260208190526040902054919063ffffffff6132bd16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613263908263ffffffff61335416565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561334c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133115781810151838201526020016132f9565b50505050905090810190601f16801561333e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561302c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061302c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132bd565b806001600160a01b03831661344c576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60145460ff1661354057601b54601c54101561354057601b54601c54613478908363ffffffff61335416565b11156134ad57601c54601b546134939163ffffffff6133ae16565b601b54601c556014805460ff1916600117905590506134c4565b601c546134c0908263ffffffff61335416565b601c555b6001600160a01b0383166000908152602081905260409020546134ed908263ffffffff61335416565b6001600160a01b0384166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b505050565b8015806135cb575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561359d57600080fd5b505afa1580156135b1573d6000803e3d6000fd5b505050506040513d60208110156135c757600080fd5b5051155b6136065760405162461bcd60e51b8152600401808060200182810382526036815260200180613bc16036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052613540908490613815565b6000821161369a576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b60145460ff16610fb95760006136ae61102c565b90506136ba83306137a5565b826136c782612cc261102c565b10156136dc576136d981612cc261102c565b92505b6001600160a01b0382166000908152601a6020526040902054613705908463ffffffff61335416565b6001600160a01b0383166000908152601a6020526040902055601754613731908463ffffffff61335416565b601755601954613747908463ffffffff61335416565b6019556001600160a01b0382166000818152602860209081526040808320805488019055805187815290519293927fea0fa627e5a8c6915f721a8352cdcc563f31ccea6748496c1daa6f4018cd1c9d929181900390910190a3505050565b8161354082826133f0565b600081836137ff5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156133115781810151838201526020016132f9565b50600083858161380b57fe5b0495945050505050565b613827826001600160a01b03166139d3565b613878576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106138b65780518252601f199092019160209182019101613897565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613918576040519150601f19603f3d011682016040523d82523d6000602084013e61391d565b606091505b509150915081613974576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156139cd5780806020019051602081101561399057600080fd5b50516139cd5760405162461bcd60e51b815260040180806020018281038252602a815260200180613b97602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590613a0757508115155b94935050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654572726f723a20756e73756666696369656e742066726f7a656e2062616c616e6365746f6b656e732063616e6e6f7420626520756e66726f7a656e207965742e206d696e20372064617920667265657a65746f6b656e732063616e6e6f7420626520756e66726f7a656e207965742e206d617820737570706c79206e6f74207965742072656163686564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d1063f92076745e8137f664d98ca1623da342af63a1e2dfe814f00d44ae370d164736f6c63430006040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000005265baeddbc80

-----Decoded View---------------
Arg [0] : v2Supply (uint256): 1449550101200000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000005265baeddbc80


Deployed Bytecode Sourcemap

11527:29423:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15880:8;:6;:8::i;:::-;11527:29423;;12:1:-1;9;2:12;14342:32:2;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14342:32:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14342:32:2;;:::i;:::-;;;;-1:-1:-1;;;;;14342:32:2;;;;;;;;;;;;;;12427:35;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12427:35:2;;;:::i;:::-;;;;;;;;;;;;;;;;39468:134;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39468:134:2;;;:::i;13534:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13534: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;13534:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16980:159;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16980:159:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;16980:159:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;15967:100;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15967:100:2;;;:::i;13123:27::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13123:27:2;;;:::i;13428:44::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13428:44:2;;;:::i;17611:309::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17611:309:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;17611:309:2;;;;;;;;;;;;;;;;;:::i;39128:179::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39128:179:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39128:179:2;-1:-1:-1;;;;;39128:179:2;;:::i;38061:150::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38061:150:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38061:150:2;-1:-1:-1;;;;;38061:150:2;;:::i;14286:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14286:28:2;;;:::i;14552:57::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14552:57:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14552:57:2;-1:-1:-1;;;;;14552:57:2;;:::i;13626:33::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13626:33:2;;;:::i;11886:73::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11886:73:2;;;:::i;18329:206::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18329:206:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;18329:206:2;;;;;;;;:::i;34328:663::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34328:663:2;;;:::i;12506:35::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12506:35:2;;;:::i;12382:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12382:38:2;;;:::i;13001:34::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13001:34:2;;;:::i;13770:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13770:36:2;;;:::i;32006:476::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32006:476:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32006:476:2;-1:-1:-1;;;;;32006:476:2;;:::i;12583:23::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12583:23:2;;;:::i;12353:22::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12353:22:2;;;:::i;13296:55::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13296:55:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13296:55:2;-1:-1:-1;;;;;13296:55:2;;:::i;14256:23::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14256:23:2;;;:::i;38934:176::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38934:176:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38934:176:2;-1:-1:-1;;;;;38934:176:2;;:::i;38275:162::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38275:162:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38275:162:2;-1:-1:-1;;;;;38275:162:2;;:::i;16130:119::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16130:119:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16130:119:2;-1:-1:-1;;;;;16130:119:2;;:::i;12892:21::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12892:21:2;;;:::i;37261:661::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37261:661:2;;;:::i;39788:346::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39788:346:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39788:346:2;-1:-1:-1;;;;;39788:346:2;;:::i;36422:821::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36422:821:2;;;:::i;35213:1191::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35213:1191:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35213:1191:2;;;;;;-1:-1:-1;;;;;35213:1191:2;;:::i;12548:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12548:28:2;;;:::i;13157:52::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13157:52:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13157:52:2;-1:-1:-1;;;;;13157:52:2;;:::i;11966:37::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11966:37:2;;;:::i;13582:::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13582:37:2;;;:::i;12674:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12674:41:2;;;:::i;11805:74::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11805:74:2;;;:::i;38538:212::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38538:212:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38538:212:2;-1:-1:-1;;;;;38538:212:2;;:::i;12469:30::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12469:30:2;;;:::i;39639:133::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39639:133:2;;;:::i;13254:35::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13254:35:2;;;:::i;19038:257::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19038:257:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;19038:257:2;;;;;;;;:::i;24474:5381::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24474:5381:2;;;:::i;16462:165::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16462:165:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;16462:165:2;;;;;;;;:::i;13696:51::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13696:51:2;;;:::i;38791:135::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38791:135:2;;;:::i;12642:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12642:25:2;;;:::i;30082:661::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30082:661:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30082:661:2;;:::i;14504:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14504:41:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14504:41:2;-1:-1:-1;;;;;14504:41:2;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12722:39;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12722:39:2;;;:::i;32569:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32569:837:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32569:837:2;;;-1:-1:-1;;;;;32569:837:2;;;;;;;;;;:::i;16690:143::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16690:143:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;16690:143:2;;;;;;;;;;:::i;30796:862::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30796:862:2;;;:::i;31706:220::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31706:220:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31706:220:2;-1:-1:-1;;;;;31706:220:2;;:::i;12808:35::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12808:35:2;;;:::i;40146:799::-;;;40210:1;40198:9;:13;40190:22;;12:1:-1;9;2:12;40190:22:2;40329:3;;40223:12;;40272:9;;-1:-1:-1;;;;;40329:3:2;40344:24;40364:3;40344:15;40272:9;40356:2;40344:15;:11;:15;:::i;:::-;:19;:24;:19;:24;:::i;:::-;40329:55;;40374:5;;40329:55;;;;;;;40374:5;40329:55;;;;;;;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;;40314:70:2;;;;;40403:7;40395:35;;;;;-1:-1:-1;;;40395:35:2;;;;;;;;;;;;-1:-1:-1;;;40395:35:2;;;;;;;;;;;;;;;40456:3;;-1:-1:-1;;;;;40456:3:2;40471:24;40491:3;40471:15;:7;40483:2;40471:15;:11;:15;:::i;:24::-;40456:55;;40501:5;;40456:55;;;;;;;40501:5;40456:55;;;;;;;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;;40441:70:2;;;;;40530:7;40522:35;;;;;-1:-1:-1;;;40522:35:2;;;;;;;;;;;;-1:-1:-1;;;40522:35:2;;;;;;;;;;;;;;;40583:3;;-1:-1:-1;;;;;40583:3:2;40598:24;40618:3;40598:15;:7;40610:2;40598:15;:11;:15;:::i;:24::-;40583:55;;40628:5;;40583:55;;;;;;;40628:5;40583:55;;;;;;;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;;40568:70:2;;;;;40657:7;40649:35;;;;;-1:-1:-1;;;40649:35:2;;;;;;;;;;;;-1:-1:-1;;;40649:35:2;;;;;;;;;;;;;;;40710:3;;-1:-1:-1;;;;;40710:3:2;40725:24;40745:3;40725:15;:7;40737:2;40725:15;:11;:15;:::i;:24::-;40710:55;;40755:5;;40710:55;;;;;;;40755:5;40710:55;;;;;;;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;;40695:70:2;;;;;40784:7;40776:35;;;;;-1:-1:-1;;;40776:35:2;;;;;;;;;;;;-1:-1:-1;;;40776:35:2;;;;;;;;;;;;;;;40837:3;;-1:-1:-1;;;;;40837:3:2;40852:23;40871:3;40852:14;:7;40864:1;40852:14;:11;:14;:::i;:23::-;40837:54;;40881:5;;40837:54;;;;;;;40881:5;40837:54;;;;;;;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;;40822:69:2;;;;;40910:7;40902:35;;;;;-1:-1:-1;;;40902:35:2;;;;;;;;;;;;-1:-1:-1;;;40902:35:2;;;;;;;;;;;;;;;40146:799;;:::o;14342:32::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14342:32:2;;-1:-1:-1;14342:32:2;:::o;12427:35::-;;;;:::o;39468:134::-;39583:11;;39468:134;:::o;13534:41::-;;;;;;;;;;;;;;-1:-1:-1;;;13534:41:2;;;;:::o;16980:159::-;17055:4;17072:37;17081:10;17093:7;17102:6;17072:8;:37::i;:::-;-1:-1:-1;17127:4:2;16980:159;;;;;:::o;15967:100::-;16047:12;;15967:100;:::o;13123:27::-;;;;:::o;13428:44::-;;;;:::o;17611:309::-;17709:4;17726:36;17736:6;17744:9;17755:6;17726:9;:36::i;:::-;17773:117;17782:6;17790:10;17802:87;17838:6;17802:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17802:19:2;;;;;;:11;:19;;;;;;;;17822:10;17802:31;;;;;;;;;:87;;:35;:87;:::i;:::-;17773:8;:117::i;:::-;-1:-1:-1;17908:4:2;17611:309;;;;;:::o;39128:179::-;14858:8;;-1:-1:-1;;;;;14858:8:2;14844:10;:22;14836:49;;;;;-1:-1:-1;;;14836:49:2;;;;;;;;;;;;-1:-1:-1;;;14836:49:2;;;;;;;;;;;;;;;39219:13:::1;:22:::0;;-1:-1:-1;;;;;;39219:22:2;;::::1;-1:-1:-1::0;;;;;39219:22:2;;::::1;;::::0;;;;39252:11:::1;:47:::0;;39285:13;;;::::1;39252:47:::0;::::1;;::::0;;39128:179::o;38061:150::-;14960:10;14953:18;;;;:6;:18;;;;;;;;14945:43;;;;;-1:-1:-1;;;14945:43:2;;;;;;;;;;;;-1:-1:-1;;;14945:43:2;;;;;;;;;;;;;;;15172:11:::1;::::0;-1:-1:-1;;;15172:11:2;::::1;;;15171:12;15163:42;;;::::0;;-1:-1:-1;;;15163:42:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15163:42:2;;;;;;;;;;;;;::::1;;15216:11;:18:::0;;-1:-1:-1;;;;15216:18:2::1;-1:-1:-1::0;;;15216:18:2::1;::::0;;38179:8:::2;:20:::0;;-1:-1:-1;;;;;38179:20:2;;::::2;-1:-1:-1::0;;;;;;38179:20:2;;::::2;::::0;;;::::2;::::0;;38061:150::o;14286:28::-;;;-1:-1:-1;;;14286:28:2;;;;;:::o;14552:57::-;;;;;;;;;;;;;:::o;13626:33::-;13658:1;13626:33;:::o;11886:73::-;;;-1:-1:-1;;;;;11886:73:2;;:::o;18329:206::-;18435:10;18409:4;18456:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18456:32:2;;;;;;;;;;18409:4;;18426:79;;18447:7;;18456:48;;18493:10;18456:48;:36;:48;:::i;34328:663::-;15505:4;;-1:-1:-1;;;15505:4:2;;;;15504:5;15496:27;;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;;;;15534:4;:11;;-1:-1:-1;;;;15534:11:2;-1:-1:-1;;;15534:11:2;;;34441:10:::1;15534:11:::0;34418:34;;;:22:::1;:34;::::0;;;;;34410:84:::1;;;;-1:-1:-1::0;;;34410:84:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34550:9;::::0;::::1;;34542:79;;;;-1:-1:-1::0;;;34542:79:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34691:10;34657:8;34668:34:::0;;;:22:::1;:34;::::0;;;;;;34713:38;;;34776:11:::1;::::0;:20:::1;::::0;34668:34;34776:20:::1;:15;:20;:::i;:::-;34762:11;:34:::0;34829:19:::1;::::0;:28:::1;::::0;34853:3;34829:28:::1;:23;:28;:::i;:::-;34807:19;:50:::0;34893:41:::1;34911:4;34918:10;34930:3:::0;34893:9:::1;:41::i;:::-;34950:33;::::0;;;;;;;34967:10:::1;::::0;34950:33:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;15568:4:2;:12;;-1:-1:-1;;;;15568:12:2;;;34328:663::o;12506:35::-;;;;:::o;12382:38::-;;;;:::o;13001:34::-;;;;:::o;13770:36::-;;;-1:-1:-1;;;;;13770:36:2;;:::o;32006:476::-;-1:-1:-1;;;;;32124:13:2;;32099:4;32124:13;;;:6;:13;;;;;:34;32121:78;;-1:-1:-1;32186:1:2;32179:8;;32121:78;32273:10;;-1:-1:-1;;;;;32233:13:2;;32209;32233;;;:6;:13;;;;;:34;32209:13;;32225:59;;:43;;:3;;:43;:7;:43;:::i;:59::-;32209:75;;32310:18;;32298:8;:30;32295:180;;32362:18;;32351:29;;;-1:-1:-1;32344:36:2;;32295:180;32462:1;32455:8;;;32006:476;;;;:::o;12583:23::-;;;;:::o;12353:22::-;;;-1:-1:-1;;;12353:22:2;;;;;:::o;13296:55::-;;;;;;;;;;;;;:::o;14256:23::-;;;-1:-1:-1;;;14256:23:2;;;;;:::o;38934:176::-;14858:8;;-1:-1:-1;;;;;14858:8:2;14844:10;:22;14836:49;;;;;-1:-1:-1;;;14836:49:2;;;;;;;;;;;;-1:-1:-1;;;14836:49:2;;;;;;;;;;;;;;;39027:9:::1;:20:::0;;-1:-1:-1;;;;;;39027:20:2;;::::1;-1:-1:-1::0;;;;;39027:20:2;;::::1;;::::0;;;;39058:16:::1;:44:::0;;39092:9;;;::::1;39058:44:::0;::::1;;::::0;;38934:176::o;38275:162::-;14858:8;;-1:-1:-1;;;;;14858:8:2;14844:10;:22;14836:49;;;;;-1:-1:-1;;;14836:49:2;;;;;;;;;;;;-1:-1:-1;;;14836:49:2;;;;;;;;;;;;;;;38391:15:::1;:34:::0;;-1:-1:-1;;;;;;38391:34:2::1;-1:-1:-1::0;;;;;38391:34:2;;;::::1;::::0;;;::::1;::::0;;38275:162::o;16130:119::-;-1:-1:-1;;;;;16223:18:2;16196:7;16223:18;;;;;;;;;;;;16130:119::o;12892:21::-;;;;;;:::o;37261:661::-;15505:4;;-1:-1:-1;;;15505:4:2;;;;15504:5;15496:27;;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;;;;15534:4;:11;;-1:-1:-1;;;;15534:11:2;-1:-1:-1;;;15534:11:2;;;37343:7:::1;::::0;37335:45:::1;;;::::0;;-1:-1:-1;;;37335:45:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;37335:45:2;;;;;;;;;;;;;::::1;;37430:7;::::0;37412:14:::1;:25:::0;;;::::1;::::0;;37448:12:::1;::::0;37470:15:::1;::::0;37448:47:::1;::::0;;-1:-1:-1;;;37448:47:2;;-1:-1:-1;;;;;37470:15:2;;::::1;37448:47;::::0;::::1;::::0;;;;;;;;;:12;::::1;::::0;:21:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;37412:14:::1;37448:12:::0;:47;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;37448:47:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37448:47:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;37648:12:2::1;::::0;37606::::1;::::0;:37:::1;::::0;;-1:-1:-1;;;37606:37:2;;37637:4:::1;37606:37;::::0;::::1;::::0;;;37575:13:::1;::::0;;;37606:55:::1;::::0;37648:12;;-1:-1:-1;;;;;37606:12:2;;::::1;::::0;:22:::1;::::0;:37;;;;;37448:47:::1;::::0;37606:37;;;;;;;:12;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;37606:37:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37606:37:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37606:37:2;;:55:::1;:41;:55;:::i;:::-;:59;37603:222;;;37734:12;::::0;37692::::1;::::0;:37:::1;::::0;;-1:-1:-1;;;37692:37:2;;37723:4:::1;37692:37;::::0;::::1;::::0;;;:55:::1;::::0;37734:12;-1:-1:-1;;;;;37692:12:2::1;::::0;:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;:12;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;37692:55:2;37762:12;::::0;37784:15:::1;::::0;37762:48:::1;::::0;;-1:-1:-1;;;37762:48:2;;-1:-1:-1;;;;;37784:15:2;;::::1;37762:48;::::0;::::1;::::0;;;;;;;;;37681:66;;-1:-1:-1;37762:12:2;::::1;::::0;:21:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;;:12:::1;::::0;:48;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;37762:48:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37762:48:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;37603:222:2::1;37853:7;::::0;37840:35:::1;::::0;37853:21:::1;::::0;37865:8;37853:21:::1;:11;:21;:::i;:::-;37840:35;::::0;;;;;;;;;;::::1;::::0;;::::1;-1:-1:-1::0;37913:1:2::1;37903:7;:11:::0;15568:4;:12;;-1:-1:-1;;;;15568:12:2;;;37261:661::o;39788:346::-;-1:-1:-1;;;;;39901:13:2;;39876:4;39901:13;;;:6;:13;;;;;:34;39898:227;;-1:-1:-1;39963:5:2;39956:12;;39898:227;40095:3;40015:76;40054:36;40079:10;;40055:18;;40054:24;;:36;;;;:::i;:::-;-1:-1:-1;;;;;40015:13:2;;;;;;:6;:13;;;;;:34;;:76;:38;:76;:::i;:::-;:83;;40008:90;;;;36422:821;15505:4;;-1:-1:-1;;;15505:4:2;;;;15504:5;15496:27;;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;;;;15534:4;:11;;-1:-1:-1;;;;15534:11:2;-1:-1:-1;;;15534:11:2;;;36509:12:::1;::::0;36524:4:::1;-1:-1:-1::0;36501:46:2::1;;;::::0;;-1:-1:-1;;;36501:46:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36501:46:2;;;;;;;;;;;;;::::1;;36581:13;36596::::0;36614:16:::1;;;;;;;;;-1:-1:-1::0;;;;;36614:16:2::1;-1:-1:-1::0;;;;;36614:28:2::1;;:30;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36614:30:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36614:30:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36614:30:2;;::::1;::::0;;::::1;::::0;36666:11:::1;::::0;36684:12:::1;::::0;36614:30;36666:51;;-1:-1:-1;;;36666:51:2;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;36580:64:2;;::::1;36666:51:::0;;;;;;36580:64;;;::::1;36666:51:::0;;;;;;;;36580:64;;-1:-1:-1;36580:64:2;;-1:-1:-1;36655:8:2::1;::::0;-1:-1:-1;;;;;36666:11:2;;::::1;::::0;:17:::1;::::0;:51;;;;;36614:30;36666:51;;;;;;:11;:51;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;36666:51:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36666:51:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36666:51:2;;-1:-1:-1;36728:25:2::1;36742:4;36666:51:::0;36728:5:::1;:25::i;:::-;36800:13;::::0;36783:36:::1;::::0;:4:::1;::::0;-1:-1:-1;;;;;36800:13:2::1;36815:3:::0;36783:36:::1;:16;:36;:::i;:::-;36838:12;::::0;36859:13:::1;::::0;36874:12:::1;::::0;36838:49:::1;::::0;;-1:-1:-1;;;36838:49:2;;-1:-1:-1;;;;;36859:13:2;;::::1;36838:49;::::0;::::1;::::0;;;;;;;;;:12;;;::::1;::::0;:20:::1;::::0;:49;;;;;::::1;::::0;;;;;;;;:12:::1;::::0;:49;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;36838:49:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36838:49:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36838:49:2;36830:79:::1;;;::::0;;-1:-1:-1;;;36830:79:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36830:79:2;;;;;;;;;;;;;::::1;;36992:11;::::0;37017:10:::1;::::0;37044:12:::1;::::0;37069:3:::1;::::0;36946:12:::1;::::0;;;;;-1:-1:-1;;;;;36992:11:2;;::::1;::::0;:24:::1;::::0;37017:10;;::::1;::::0;37037:4:::1;::::0;37044:12;37058:3;;36946:12;;;;37069:3:::1;37074:12;:3;37082;37074:12;:7;:12;:::i;:::-;36992:95;;;;;;;;;;;;;-1:-1:-1::0;;;;;36992:95:2::1;-1:-1:-1::0;;;;;36992:95:2::1;;;;;;-1:-1:-1::0;;;;;36992:95:2::1;-1:-1:-1::0;;;;;36992:95:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;36992:95:2::1;-1:-1:-1::0;;;;;36992:95:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36992:95:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36992:95:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36992:95:2;;::::1;::::0;;::::1;::::0;;;;;;37121:12:::1;::::0;;37098:19:::1;:35:::0;;;;::::1;::::0;;:19:::1;37161:16:::0;;37193:42;;;;;;;::::1;::::0;;;;;;;;;;;36992:95;;-1:-1:-1;36992:95:2;-1:-1:-1;36992:95:2;;-1:-1:-1;37193:42:2::1;::::0;;;;36992:95;37193:42;;::::1;-1:-1:-1::0;;15568:4:2;:12;;-1:-1:-1;;;;15568:12:2;;;-1:-1:-1;;;;36422:821:2:o;35213:1191::-;15505:4;;-1:-1:-1;;;15505:4:2;;;;15504:5;15496:27;;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;;;;15534:4;:11;;-1:-1:-1;;;;15534:11:2;-1:-1:-1;;;15534:11:2;;;;;;35340:10:::1;::::0;::::1;15534:11:::0;35340:10:::1;35332:48;;;::::0;;-1:-1:-1;;;35332:48:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35409:3;35399:6;:13;;35391:39;;;::::0;;-1:-1:-1;;;35391:39:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35391:39:2;;;;;;;;;;;;;::::1;;35449:12;::::0;:60:::1;::::0;;-1:-1:-1;;;35449:60:2;;35475:10:::1;35449:60;::::0;::::1;::::0;35495:4:::1;35449:60:::0;;;;;;;;;;;;-1:-1:-1;;;;;35449: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;35449:60:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35449:60:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35449:60:2;35441:88:::1;;;::::0;;-1:-1:-1;;;35441:88:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35441:88:2;;;;;;;;;;;;;::::1;;35609:13;:6:::0;35620:1:::1;35609:13;:10;:13;:::i;:::-;35598:7;:24:::0;;;;::::1;::::0;;35654:13:::1;:6:::0;35665:1:::1;35654:13;:10;:13;:::i;:::-;35638:12;:29:::0;;;;::::1;::::0;;35752:16:::1;::::0;:30:::1;::::0;;-1:-1:-1;;;35752:30:2;;;;35638:12:::1;::::0;;;-1:-1:-1;;;;;35752:16:2;;::::1;::::0;:28:::1;::::0;:30:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:16;:30;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;35752:30:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35752:30:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35752:30:2;;::::1;::::0;;::::1;::::0;35804:11:::1;::::0;35752:30;35804:45;;-1:-1:-1;;;35804:45:2;;::::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;35718:64:2;;::::1;35804:45:::0;;;;;;35718:64;;;::::1;35804:45:::0;;;;;;;;35718:64;;-1:-1:-1;35718:64:2;-1:-1:-1;35793:8:2::1;::::0;-1:-1:-1;;;;;35804:11:2;;::::1;::::0;:17:::1;::::0;:45;;;;;35752:30;35804:45;;;;;;:11;:45;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;35804:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35804:45:2;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35804:45:2;;-1:-1:-1;;;;;;35863:17:2;::::1;::::0;35860:325:::1;;35934:20;35942:11;:3:::0;35950:2:::1;35942:11;:7;:11;:::i;:::-;35934:3:::0;;:20:::1;:7;:20;:::i;:::-;35911:19;:43:::0;;;;::::1;::::0;;35969:22:::1;:32:::0;;;::::1;::::0;;36016:35:::1;::::0;36034:11:::1;::::0;:3;;:11:::1;:7;:11;:::i;:::-;36047:3;36016:17;:35::i;:::-;35860:325;;;36100:19;:26:::0;;;::::1;::::0;;36141:22:::1;:32:::0;;;::::1;::::0;;35860:325:::1;36226:16;36203:19;;:39;;36195:80;;;::::0;;-1:-1:-1;;;36195:80:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36324:22;36330:10;36342:3;36324:5;:22::i;:::-;36362:34;::::0;;;;;::::1;::::0;::::1;::::0;;;;;36385:10:::1;::::0;36362:34:::1;::::0;;;;;;::::1;-1:-1:-1::0;;15568:4:2;:12;;-1:-1:-1;;;;15568:12:2;;;-1:-1:-1;;;35213:1191:2:o;12548:28::-;;;;:::o;13157:52::-;;;;;;;;;;;;;:::o;11966:37::-;;;-1:-1:-1;;;;;11966:37:2;;:::o;13582:::-;;;;;;;;;;;;;;-1:-1:-1;;;13582:37:2;;;;:::o;12674:41::-;;;;:::o;11805:74::-;;;-1:-1:-1;;;;;11805:74:2;;:::o;38538:212::-;14858:8;;38629:4;;-1:-1:-1;;;;;14858:8:2;14844:10;:22;14836:49;;;;;-1:-1:-1;;;14836:49:2;;;;;;;;;;;;-1:-1:-1;;;14836:49:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38659:15:2::1;;::::0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;38659:22:2::1;38677:4;38659:22:::0;;::::1;::::0;;;38692:15:::1;27:10:-1::0;;23:18;;::::1;45:23:::0;;38692:28:2;;;;;::::1;::::0;;-1:-1:-1;;;;;;38692:28:2::1;::::0;;::::1;::::0;;;38677:4;38538:212::o;12469:30::-;;;;:::o;39639:133::-;39711:7;39743:21;39753:10;39743:9;:21::i;:::-;39736:28;;39639:133;:::o;13254:35::-;;;;:::o;19038:257::-;19123:4;19140:125;19149:10;19161:7;19170:94;19207:15;19170:94;;;;;;;;;;;;;;;;;19182:10;19170:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;19170:32:2;;;;;;;;;;;:94;;:36;:94;:::i;24474:5381::-;14960:10;14953:18;;;;:6;:18;;;;;;;;14945:43;;;;;-1:-1:-1;;;14945:43:2;;;;;;;;;;;;-1:-1:-1;;;14945:43:2;;;;;;;;;;;;;;;15505:4:::1;::::0;-1:-1:-1;;;15505:4:2;::::1;;;15504:5;15496:27;;;::::0;;-1:-1:-1;;;15496:27:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;;::::1;;15534:4;:11:::0;;-1:-1:-1;;;;15534:11:2::1;-1:-1:-1::0;;;15534:11:2::1;::::0;;24583:20:::2;::::0;15534:11;;24604:2:::2;::::0;24583:23:::2;24566:40;;24637:2;24625:9;;:14;24617:48;;;::::0;;-1:-1:-1;;;24617:48:2;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;24617:48:2;;;;;;;;;;;;;::::2;;24744:3;24684:56;24714:25;24728:10;;24714:9;:13;;:25;;;;:::i;:::-;24684;::::0;;:56:::2;:29;:56;:::i;:::-;:63;;24676:105;;;::::0;;-1:-1:-1;;;24676:105:2;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;24824:10;24854:2;24837:16;;:19;;;;;;24824:32;;24932:3;24870:58;24900:27;24916:10;;24901:9;24900:15;;:27;;;;:::i;24870:58::-;:65;;:83;;;;-1:-1:-1::0;24939:9:2::2;::::0;:14;24870:83:::2;24867:4940;;;24969:9;:11:::0;;::::2;;::::0;;25017:19:::2;::::0;:30:::2;::::0;25041:5;25017:30:::2;:23;:30;:::i;:::-;24995:19;:52:::0;25071:3:::2;::::0;25062:37:::2;::::0;-1:-1:-1;;;;;25071:3:2::2;25076:22;25094:3;25076:13;:5:::0;25086:2:::2;25076:13;:9;:13;:::i;:22::-;25062:8;:37::i;:::-;-1:-1:-1::0;25123:3:2::2;::::0;25114:37:::2;::::0;-1:-1:-1;;;;;25123:3:2::2;25128:22;25146:3;25128:13;:5:::0;25138:2:::2;25128:13;:9;:13;:::i;25114:37::-;-1:-1:-1::0;25175:3:2::2;::::0;25166:37:::2;::::0;-1:-1:-1;;;;;25175:3:2::2;25180:22;25198:3;25180:13;:5:::0;25190:2:::2;25180:13;:9;:13;:::i;25166:37::-;-1:-1:-1::0;25227:3:2::2;::::0;25218:37:::2;::::0;-1:-1:-1;;;;;25227:3:2::2;25232:22;25250:3;25232:13;:5:::0;25242:2:::2;25232:13;:9;:13;:::i;25218:37::-;-1:-1:-1::0;25279:3:2::2;::::0;25270:36:::2;::::0;-1:-1:-1;;;;;25279:3:2::2;25284:21;25301:3;25284:12;:5:::0;25294:1:::2;25284:12;:9;:12;:::i;25270:36::-;;24867:4940;;;25402:3;25336:62;25366:31;25386:10;;25367:9;25379:1;25367:13;25366:19;;:31;;;;:::i;25336:62::-;:69;;:87;;;;;25409:9;;25422:1;25409:14;25336:87;25333:4474;;;25439:9;:11:::0;;::::2;;::::0;;25487:19:::2;::::0;:30:::2;::::0;25511:5;25487:30:::2;:23;:30;:::i;25333:4474::-;25872:3;25806:62;25836:31;25856:10;;25837:9;25849:1;25837:13;25836:19;;:31;;;;:::i;25806:62::-;:69;;:87;;;;;25879:9;;25892:1;25879:14;25806:87;25803:4004;;;25909:9;:11:::0;;::::2;;::::0;;25957:19:::2;::::0;:30:::2;::::0;25981:5;25957:30:::2;:23;:30;:::i;25803:4004::-;26342:3;26276:62;26306:31;26326:10;;26307:9;26319:1;26307:13;26306:19;;:31;;;;:::i;26276:62::-;:69;;:87;;;;;26349:9;;26362:1;26349:14;26276:87;26273:3534;;;26379:9;:11:::0;;::::2;;::::0;;26427:19:::2;::::0;:30:::2;::::0;26451:5;26427:30:::2;:23;:30;:::i;26273:3534::-;26812:3;26746:62;26776:31;26796:10;;26777:9;26789:1;26777:13;26776:19;;:31;;;;:::i;26746:62::-;:69;;:87;;;;;26819:9;;26832:1;26819:14;26746:87;26743:3064;;;26849:9;:11:::0;;::::2;;::::0;;26897:19:::2;::::0;:30:::2;::::0;26921:5;26897:30:::2;:23;:30;:::i;26743:3064::-;27282:3;27216:62;27246:31;27266:10;;27247:9;27259:1;27247:13;27246:19;;:31;;;;:::i;27216:62::-;:69;;:87;;;;;27289:9;;27302:1;27289:14;27216:87;27213:2594;;;27319:9;:11:::0;;::::2;;::::0;;27367:19:::2;::::0;:30:::2;::::0;27391:5;27367:30:::2;:23;:30;:::i;27213:2594::-;27752:3;27686:62;27716:31;27736:10;;27717:9;27729:1;27717:13;27716:19;;:31;;;;:::i;27686:62::-;:69;;:87;;;;;27759:9;;27772:1;27759:14;27686:87;27683:2124;;;27789:9;:11:::0;;::::2;;::::0;;27837:19:::2;::::0;:30:::2;::::0;27861:5;27837:30:::2;:23;:30;:::i;27683:2124::-;28222:3;28156:62;28186:31;28206:10;;28187:9;28199:1;28187:13;28186:19;;:31;;;;:::i;28156:62::-;:69;;:87;;;;;28229:9;;28242:1;28229:14;28156:87;28153:1654;;;28269:9;:11:::0;;::::2;;::::0;;28322:19:::2;::::0;:30:::2;::::0;28346:5;28322:30:::2;:23;:30;:::i;28153:1654::-;28713:3;28647:62;28677:31;28697:10;;28678:9;28690:1;28678:13;28677:19;;:31;;;;:::i;28647:62::-;:69;;:87;;;;;28720:9;;28733:1;28720:14;28647:87;28644:1163;;;28750:9;:11:::0;;::::2;;::::0;;28798:19:::2;::::0;:30:::2;::::0;28822:5;28798:30:::2;:23;:30;:::i;28644:1163::-;29184:3;29117:63;29147:32;29168:10;;29148:9;29160:2;29148:14;29147:20;;:32;;;;:::i;29117:63::-;:70;;:88;;;;;29191:9;;29204:1;29191:14;29117:88;29114:693;;;29221:9;:11:::0;;::::2;;::::0;;29250:19:::2;::::0;:28;-1:-1:-1;29247:241:2::2;;29320:19;::::0;:30:::2;::::0;29344:5;29320:30:::2;:23;:30;:::i;:::-;29298:19;:52:::0;29247:241:::2;;;-1:-1:-1::0;29411:19:2::2;::::0;;29471:1:::2;29449:23:::0;;;29247:241:::2;29511:3;::::0;29502:37:::2;::::0;-1:-1:-1;;;;;29511:3:2::2;29516:22;29534:3;29516:13;:5:::0;29526:2:::2;29516:13;:9;:13;:::i;29114:693::-;29822:25;::::0;;;;;29843:3:::2;29822:25;::::0;::::2;::::0;;;::::2;::::0;;;;;;;;;::::2;-1:-1:-1::0;;15568:4:2::1;:12:::0;;-1:-1:-1;;;;15568:12:2::1;::::0;;24474:5381::o;16462:165::-;16540:4;16557:40;16567:10;16579:9;16590:6;16557:9;:40::i;13696:51::-;;;-1:-1:-1;;;;;13696:51:2;;:::o;38791:135::-;14858:8;;-1:-1:-1;;;;;14858:8:2;14844:10;:22;14836:49;;;;;-1:-1:-1;;;14836:49:2;;;;;;;;;;;;-1:-1:-1;;;14836:49:2;;;;;;;;;;;;;;;15314:16:::1;::::0;-1:-1:-1;;;15314:16:2;::::1;;;15313:17;15305:47;;;::::0;;-1:-1:-1;;;15305:47:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15305:47:2;;;;;;;;;;;;;::::1;;15363:16;:23:::0;;-1:-1:-1;;;;15363:23:2::1;-1:-1:-1::0;;;15363:23:2::1;::::0;;38901:10:::2;:17:::0;;-1:-1:-1;;;;38901:17:2::2;-1:-1:-1::0;;;38901:17:2::2;::::0;;38791:135::o;12642:25::-;;;;:::o;30082:661::-;30160:1;30154:3;:7;30146:30;;;;;-1:-1:-1;;;30146:30:2;;;;;;;;;;;;-1:-1:-1;;;30146:30:2;;;;;;;;;;;;;;;30213:3;30195:14;:12;:14::i;:::-;:21;;30187:61;;;;;-1:-1:-1;;;30187:61:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;30292:28;30309:10;30292:16;:28::i;:::-;30289:123;;;30336:16;:14;:16::i;:::-;30503:10;30483:31;;;;:19;:31;;;;;;:40;;30519:3;30483:40;:35;:40;:::i;:::-;30469:10;30449:31;;;;:19;:31;;;;;:74;30548:11;;:20;;30564:3;30548:20;:15;:20;:::i;:::-;30534:11;:34;30586:10;30579:18;;;;:6;:18;;;;;30621:3;30579:45;;30635:41;;30665:4;30672:3;30635:9;:41::i;:::-;30707:28;;;;;;;;30719:10;;30707:28;;;;;;;;;;30082:661;:::o;14504:41::-;;;;;;;;;;;;;;;;;;;:::o;12722:39::-;;;;:::o;32569:837::-;15065:10;15057:19;;;;:7;:19;;;;;;;;15049:44;;;;;-1:-1:-1;;;15049:44:2;;;;;;;;;;;;-1:-1:-1;;;15049:44:2;;;;;;;;;;;;;;;15505:4:::1;::::0;-1:-1:-1;;;15505:4:2;::::1;;;15504:5;15496:27;;;::::0;;-1:-1:-1;;;15496:27:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;;::::1;;15534:4;:11:::0;;-1:-1:-1;;;;15534:11:2::1;-1:-1:-1::0;;;15534:11:2::1;::::0;;32711:7;32703:30:::2;;;::::0;;-1:-1:-1;;;32703:30:2;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;32703:30:2;;;;;;;;;;;;;::::2;;32748:9;::::0;::::2;;32744:653;;32800:6;32809:13;:11;:13::i;:::-;32800:22;;32837:30;32849:3;32861:4;32837:11;:30::i;:::-;32985:3;32962:20;32980:1;32962:13;:11;:13::i;:::-;:17:::0;:20:::2;:17;:20;:::i;:::-;:26;32959:91;;;33014:20;33032:1;33014:13;:11;:13::i;:20::-;33008:26;;32959:91;-1:-1:-1::0;;;;;33126:28:2;::::2;;::::0;;;:22:::2;:28;::::0;;;;;:37:::2;::::0;33159:3;33126:37:::2;:32;:37;:::i;:::-;-1:-1:-1::0;;;;;33095:28:2;::::2;;::::0;;;:22:::2;:28;::::0;;;;:68;33192:11:::2;::::0;:20:::2;::::0;33208:3;33192:20:::2;:15;:20;:::i;:::-;33178:11;:34:::0;33249:19:::2;::::0;:28:::2;::::0;33273:3;33249:28:::2;:23;:28;:::i;:::-;33227:19;:50:::0;-1:-1:-1;;;;;33292:20:2;::::2;;::::0;;;:14:::2;:20;::::0;;;;;;;;:42;;;::::2;::::0;;33354:31;;;;;;;33380:4;;33292:20;33354:31:::2;::::0;;;;;;;::::2;32744:653;;-1:-1:-1::0;;15568:4:2::1;:12:::0;;-1:-1:-1;;;;15568:12:2::1;::::0;;-1:-1:-1;32569:837:2:o;16690:143::-;-1:-1:-1;;;;;16798:18:2;;;16771:7;16798:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16690:143::o;30796:862::-;15505:4;;-1:-1:-1;;;15505:4:2;;;;15504:5;15496:27;;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;-1:-1:-1;;;15496:27:2;;;;;;;;;;;;;;;15534:4;:11;;-1:-1:-1;;;;15534:11:2;-1:-1:-1;;;15534:11:2;;;30904:10:::1;15534:11:::0;30884:31;;;:19:::1;:31;::::0;;;;;30876:81:::1;;;;-1:-1:-1::0;;;30876:81:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31013:28;31030:10;31013:16;:28::i;:::-;31005:88;;;;-1:-1:-1::0;;;31005:88:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31135:10;31104:8;31115:31:::0;;;:19:::1;:31;::::0;;;;;;31176::::1;::::0;:19:::1;:31::i;:::-;31157:50;;31218:27;31224:10;31236:8;31218:5;:27::i;:::-;31349:10;31342:18;::::0;;;:6:::1;:18;::::0;;;;;;;:38:::1;::::0;::::1;:50:::0;;;::::1;::::0;;31403:19:::1;:31:::0;;;;;:35;;;31449:18;;;:43;31517:11:::1;::::0;:20:::1;::::0;31533:3;31517:20:::1;:15;:20;:::i;:::-;31503:11;:34:::0;31548:41:::1;31566:4;31573:10;31585:3:::0;31548:9:::1;:41::i;:::-;31620:30;::::0;;;;;;;31634:10:::1;::::0;31620:30:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;;15568:4:2;:12;;-1:-1:-1;;;;15568:12:2;;;30796:862::o;31706:220::-;31797:4;31888:28;31910:5;31888:21;:28::i;:::-;31867:18;;-1:-1:-1;;;;;31827:26:2;;;;;;:19;:26;;;;;;31867:49;;;31827:36;;31858:4;31827:36;:30;:36;:::i;:::-;:90;;31706:220;-1:-1:-1;;31706:220:2:o;12808:35::-;;;;:::o;2230:471:4:-;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2692:1;2230:471;-1:-1:-1;;;2230:471:4:o;3169:132::-;3227:7;3254:39;3258:1;3261;3254:39;;;;;;;;;;;;;;;;;:3;:39::i;22391:338:2:-;-1:-1:-1;;;;;22485:19:2;;22477:68;;;;-1:-1:-1;;;22477:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22564:21:2;;22556:68;;;;-1:-1:-1;;;22556:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22637:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22689:32;;;;;;;;;;;;;;;;;22391:338;;;:::o;19784:469::-;-1:-1:-1;;;;;19882:20:2;;19874:70;;;;-1:-1:-1;;;19874:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19963:23:2;;19955:71;;;;-1:-1:-1;;;19955:71:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20057;20079:6;20057:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20057:17:2;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;20037:17:2;;;:9;:17;;;;;;;;;;;:91;;;;20162:20;;;;;;;:32;;20187:6;20162:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;20139:20:2;;;:9;:20;;;;;;;;;;;;:55;;;;20210:35;;;;;;;20139:20;;20210:35;;;;;;;;;;;;;19784: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;858:181::-;916:7;948:5;;;972:6;;;;964:46;;;;;-1:-1:-1;;;964:46:4;;;;;;;;;;;;;;;;;;;;;;;;;;;1314:136;1372:7;1399:43;1403:1;1406;1399:43;;;;;;;;;;;;;;;;;:3;:43::i;20558:713:2:-;20640:6;-1:-1:-1;;;;;20665:21:2;;20657:65;;;;;-1:-1:-1;;;20657:65:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;20737:9;;;;20733:531;;20780:10;;20765:12;;:25;20762:491;;;20837:10;;20813:12;;:21;;20830:3;20813:21;:16;:21;:::i;:::-;:34;20810:303;;;20892:12;;20877:10;;:28;;;:14;:28;:::i;:::-;20943:10;;20928:12;:25;20976:9;:16;;-1:-1:-1;;20976:16:2;20988:4;20976:16;;;20871:34;-1:-1:-1;20810:303:2;;;21072:12;;:21;;21089:3;21072:21;:16;:21;:::i;:::-;21057:12;:36;20810:303;-1:-1:-1;;;;;21152:18:2;;:9;:18;;;;;;;;;;;:27;;21175:3;21152:27;:22;:27;:::i;:::-;-1:-1:-1;;;;;21131:18:2;;:9;:18;;;;;;;;;;;:48;;;;21203:34;;;;;;;21131:18;;:9;;21203:34;;;;;;;;;;20762:491;20558: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;33495:780::-;33593:1;33587:3;:7;33579:30;;;;;-1:-1:-1;;;33579:30:2;;;;;;;;;;;;-1:-1:-1;;;33579:30:2;;;;;;;;;;;;;;;33624:9;;;;33620:646;;33676:6;33685:13;:11;:13::i;:::-;33676:22;;33713:30;33725:3;33737:4;33713:11;:30::i;:::-;33861:3;33838:20;33856:1;33838:13;:11;:13::i;:20::-;:26;33835:91;;;33890:20;33908:1;33890:13;:11;:13::i;:20::-;33884:26;;33835:91;-1:-1:-1;;;;;34001:27:2;;;;;;:22;:27;;;;;;:36;;34033:3;34001:36;:31;:36;:::i;:::-;-1:-1:-1;;;;;33971:27:2;;;;;;:22;:27;;;;;:66;34066:11;;:20;;34082:3;34066:20;:15;:20;:::i;:::-;34052:11;:34;34123:19;;:28;;34147:3;34123:28;:23;:28;:::i;:::-;34101:19;:50;-1:-1:-1;;;;;34166:19:2;;;;;;:14;:19;;;;;;;;:41;;;;;;34227:27;;;;;;;34166:19;;;34227:27;;;;;;;;;;;33620:646;33495:780;;:::o;35030:146::-;35124:5;35140:18;35146:6;35124:5;35140;:18::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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1721:1115;;;;:::o;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://d1063f92076745e8137f664d98ca1623da342af63a1e2dfe814f00d44ae370d1
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.