false
true
0

Contract Address Details

0x674C6Ad92Fd080e4004b2312b45f796a192D27a0

Token
Neutrino USD (USDN)
Creator
0x90f850–4dcd7d at 0x0a8a49–8d5fde
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
20,231 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26611779
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
USDN




Optimization enabled
true
Compiler version
v0.6.8+commit.0bbfe453




Optimization runs
200
EVM Version
istanbul




Verified at
2026-02-20T14:53:22.913977Z

USDN.sol

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.8;

interface Staking {
  function deposit(address account, uint256 amount) external returns (bool);

  function withdraw(address account) external returns (bool);

  function stake(uint256 reward) external returns (bool);

  event Reward(uint256 id, uint256 amount);
}

interface ERC20 {

  function totalSupply() external view returns (uint256);

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

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

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

  function increaseAllowance(address spender, uint256 addedValue) external returns (bool);

  function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);

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

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

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

abstract contract Ownable {
  address private _owner;
  address private _admin;

  constructor () public {
    _owner = msg.sender;
    _admin = msg.sender;
  }

  modifier onlyOwner() {
    require(_owner == msg.sender || _admin == msg.sender, "Ownable: caller is not the owner or admin");
    _;
  }

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

abstract contract Deprecateble is Ownable {
  bool internal deprecated;

  modifier onlyNotDeprecated() {
    require(!deprecated, "Deprecateble: contract is deprecated");
    _;
  }

  function deprecate() external onlyOwner {
    deprecated = true;
    emit Deprecate(msg.sender);
  }

  event Deprecate(address indexed account);
}

abstract contract StandartToken is Staking, ERC20, Ownable, Deprecateble {
  uint256[] private _percents;
  uint256 private _liquidTotalSupply;
  uint256 private _liquidDeposit;
  uint256 constant private PERCENT_FACTOR = 10 ** 12;

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

  constructor () public {
    _percents.push(PERCENT_FACTOR);
  }

  function deposit(address account, uint256 amount) external onlyOwner onlyNotDeprecated override virtual returns (bool)  {
    require(amount > 0, "amount should be > 0");
    require(account != address(0), "deposit to the zero address");

    uint256 liquidDeposit = _liquidDeposit;
    require(liquidDeposit + amount >= liquidDeposit, "addition overflow for deposit");
    _liquidDeposit = liquidDeposit + amount;

    uint256 oldDeposit = _deposits[account];
    if (oldDeposit == 0) {
      _balances[account] = balanceOf(account);
      _rewardIndexForAccount[account] = _percents.length - 1;
      _deposits[account] = amount;
    } else {
      uint256 rewardIndex = _rewardIndexForAccount[account];
      if (rewardIndex == _percents.length - 1) {
        require(oldDeposit + amount >= oldDeposit, "addition overflow for deposit");
        _deposits[account] = oldDeposit + amount;
      } else {
        _balances[account] = balanceOf(account);
        _rewardIndexForAccount[account] = _percents.length - 1;
        _deposits[account] = amount;
      }
    }

    emit Transfer(address(0), account, amount);
    return true;
  }

  function stake(uint256 reward) external onlyOwner onlyNotDeprecated override virtual returns (bool) {
    require(reward > 0, "reward should be > 0");

    uint256 liquidTotalSupply = _liquidTotalSupply;
    uint256 liquidDeposit = _liquidDeposit;

    if (liquidTotalSupply == 0) {
      _percents.push(PERCENT_FACTOR);
    } else {
      uint256 oldPercent = _percents[_percents.length - 1];
      uint256 percent = reward * PERCENT_FACTOR / liquidTotalSupply;
      require(percent + PERCENT_FACTOR >= percent, "addition overflow for percent");
      uint256 newPercent = percent + PERCENT_FACTOR;
      _percents.push(newPercent * oldPercent / PERCENT_FACTOR);

      require(liquidTotalSupply + reward >= liquidTotalSupply, "addition overflow for total supply + reward");
      liquidTotalSupply = liquidTotalSupply + reward;
    }

    require(liquidTotalSupply + liquidDeposit >= liquidTotalSupply, "addition overflow for total supply");
    _liquidTotalSupply = liquidTotalSupply + liquidDeposit;
    _liquidDeposit = 0;

    emit Reward(_percents.length, reward);
    return true;
  }

  function withdraw(address account) external onlyOwner onlyNotDeprecated override virtual returns (bool) {
    uint256 oldDeposit = _deposits[account];
    uint256 rewardIndex = _rewardIndexForAccount[account];

    if (rewardIndex == _percents.length - 1) {
      uint256 balance = _balances[account];
      require(balance <= _liquidTotalSupply, "subtraction overflow for total supply");
      _liquidTotalSupply = _liquidTotalSupply - balance;

      require(oldDeposit <= _liquidDeposit, "subtraction overflow for liquid deposit");
      _liquidDeposit = _liquidDeposit - oldDeposit;

      require(balance + oldDeposit >= balance, "addition overflow for total balance + oldDeposit");
      emit Transfer(account, address(0), balance + oldDeposit);
    } else {
      uint256 balance = balanceOf(account);
      uint256 liquidTotalSupply = _liquidTotalSupply;
      require(balance <= liquidTotalSupply, "subtraction overflow for total supply");
      _liquidTotalSupply = liquidTotalSupply - balance;
      emit Transfer(account, address(0), balance);
    }

    _balances[account] = 0;
    _deposits[account] = 0;
    return true;
  }

  // ERC20
  function totalSupply() external view override virtual returns (uint256) {
    uint256 liquidTotalSupply = _liquidTotalSupply;
    uint256 liquidDeposit = _liquidDeposit;

    require(liquidTotalSupply + liquidDeposit >= liquidTotalSupply, "addition overflow for total supply");
    return liquidTotalSupply + liquidDeposit;
  }

  function balanceOf(address account) public view override virtual returns (uint256) {
    uint256 balance = _balances[account];
    uint256 oldDeposit = _deposits[account];

    if (balance == 0 && oldDeposit == 0) {
      return 0;
    }

    uint256 rewardIndex = _rewardIndexForAccount[account];
    if (rewardIndex == _percents.length - 1) {
      require(balance + oldDeposit >= balance, "addition overflow for balance");
      return balance + oldDeposit;
    }

    if (oldDeposit == 0) {
      uint256 profit = _percents[_percents.length - 1];
      return profit * balance / _percents[rewardIndex];
    } else {
      uint256 newBalance = balance * _percents[_percents.length - 1] / _percents[rewardIndex];
      uint256 profit = oldDeposit * _percents[_percents.length - 1] / _percents[rewardIndex + 1];
      require(profit + newBalance >= newBalance, "addition overflow for balance");
      return profit + newBalance;
    }
  }

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

  function _approve(address owner, address spender, uint256 amount) internal onlyNotDeprecated virtual {
    require(owner != address(0), "ERC20: approve from the zero address");
    require(spender != address(0), "ERC20: approve to the zero address");

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

  function approve(address spender, uint256 amount) external override virtual returns (bool) {
    _approve(msg.sender, spender, amount);
    return true;
  }

  function increaseAllowance(address spender, uint256 addedValue) external override virtual returns (bool) {
    uint256 temp = _allowances[msg.sender][spender];
    require(temp + addedValue >= temp, "addition overflow");
    _approve(msg.sender, spender, temp + addedValue);
    return true;
  }

  function decreaseAllowance(address spender, uint256 subtractedValue) external override virtual returns (bool) {
    uint256 temp = _allowances[msg.sender][spender];
    require(subtractedValue <= temp, "ERC20: decreased allowance below zero");
    _approve(msg.sender, spender, temp - subtractedValue);
    return true;
  }

  function transfer(address recipient, uint256 amount) external override virtual returns (bool) {
    _transfer(msg.sender, recipient, amount);
    return true;
  }

  function transferFrom(address sender, address recipient, uint256 amount) external override virtual returns (bool) {
    _transfer(sender, recipient, amount);

    uint256 temp = _allowances[sender][msg.sender];
    require(amount <= temp, "ERC20: transfer amount exceeds allowance");
    _approve(sender, msg.sender, temp - amount);
    return true;
  }

  function _transfer(address sender, address recipient, uint256 amount) internal onlyNotDeprecated virtual {
    require(amount > 0, "amount should be > 0");
    require(sender != address(0), "ERC20: transfer from the zero address");
    require(recipient != address(0), "ERC20: transfer to the zero address");

    uint256 oldDeposit = _deposits[sender];
    uint256 rewardIndex = _rewardIndexForAccount[sender];
    uint256 depositDiff = 0;

    if (oldDeposit == 0 || rewardIndex != _percents.length - 1) {
      uint256 senderBalance = balanceOf(sender);
      require(amount <= senderBalance, "ERC20: transfer amount exceeds balance");
      _balances[sender] = senderBalance - amount;

      _deposits[sender] = 0;
      _rewardIndexForAccount[sender] = _percents.length - 1;
    } else {
      if (amount <= oldDeposit) {
        _deposits[sender] = oldDeposit - amount;
        depositDiff = amount;
      } else {
        uint256 senderBalance = _balances[sender];
        require(amount - oldDeposit <= senderBalance, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - (amount - oldDeposit);
        _deposits[sender] = 0;
        depositDiff = oldDeposit;
      }
    }

    oldDeposit = _deposits[recipient];
    rewardIndex = _rewardIndexForAccount[recipient];
    if (oldDeposit == 0 || rewardIndex != _percents.length - 1) {
      uint256 recipientBalance = balanceOf(recipient);
      require((amount - depositDiff) + recipientBalance >= recipientBalance, "ERC20: addition overflow for recipient balance");
      _balances[recipient] = recipientBalance + (amount - depositDiff);
      _rewardIndexForAccount[recipient] = _percents.length - 1;
      _deposits[recipient] = depositDiff;
    } else {
      uint256 recipientBalance = _balances[recipient];
      _balances[recipient] = recipientBalance + (amount - depositDiff);
      _deposits[recipient] = oldDeposit + depositDiff;
    }

    emit Transfer(sender, recipient, amount);
  }
}

contract USDN is StandartToken {
  function name() external pure returns (string memory) {
    return "Neutrino USD";
  }

  function symbol() external pure returns (string memory) {
    return "USDN";
  }

  function decimals() external pure returns (uint8) {
    return 18;
  }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"USDN.sol":"USDN"}}
              

Contract ABI

[{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Deprecate","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Reward","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"deposit","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deprecate","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"stake","inputs":[{"type":"uint256","name":"reward","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"withdraw","inputs":[{"type":"address","name":"account","internalType":"address"}]}]
              

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b50600080546001600160a01b03199081163390811783556001805490921617815560028054918201815590915264e8d4a510007f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910155611a26806100776000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806351cff8d911610097578063a694fc3a11610066578063a694fc3a14610312578063a9059cbb1461032f578063dd62ed3e1461035b578063f2fde38b1461038957610100565b806351cff8d91461029257806370a08231146102b857806395d89b41146102de578063a457c2d7146102e657610100565b806323b872dd116100d357806323b872dd146101e6578063313ce5671461021c578063395093511461023a57806347e7ef241461026657610100565b806306fdde0314610105578063095ea7b3146101825780630fcc0c28146101c257806318160ddd146101cc575b600080fd5b61010d6103af565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101ae6004803603604081101561019857600080fd5b506001600160a01b0381351690602001356103d5565b604080519115158252519081900360200190f35b6101ca6103eb565b005b6101d4610489565b60408051918252519081900360200190f35b6101ae600480360360608110156101fc57600080fd5b506001600160a01b038135811691602081013590911690604001356104da565b610224610562565b6040805160ff9092168252519081900360200190f35b6101ae6004803603604081101561025057600080fd5b506001600160a01b038135169060200135610567565b6101ae6004803603604081101561027c57600080fd5b506001600160a01b0381351690602001356105ed565b6101ae600480360360208110156102a857600080fd5b50356001600160a01b0316610920565b6101d4600480360360208110156102ce57600080fd5b50356001600160a01b0316610bdb565b61010d610de6565b6101ae600480360360408110156102fc57600080fd5b506001600160a01b038135169060200135610e04565b6101ae6004803603602081101561032857600080fd5b5035610e74565b6101ae6004803603604081101561034557600080fd5b506001600160a01b03813516906020013561114b565b6101d46004803603604081101561037157600080fd5b506001600160a01b0381358116916020013516611158565b6101ca6004803603602081101561039f57600080fd5b50356001600160a01b0316611183565b60408051808201909152600c81526b13995d5d1c9a5b9bc81554d160a21b602082015290565b60006103e2338484611248565b50600192915050565b6000546001600160a01b031633148061040e57506001546001600160a01b031633145b6104495760405162461bcd60e51b81526004018080602001828103825260298152602001806118806029913960400191505060405180910390fd5b6001805460ff60a01b1916600160a01b17905560405133907fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e90600090a2565b600354600454600091908082018211156104d45760405162461bcd60e51b81526004018080602001828103825260228152602001806118f66022913960400191505060405180910390fd5b01905090565b60006104e784848461137d565b6001600160a01b03841660009081526008602090815260408083203384529091529020548083111561054a5760405162461bcd60e51b81526004018080602001828103825260288152602001806118a96028913960400191505060405180910390fd5b6105578533858403611248565b506001949350505050565b601290565b3360009081526008602090815260408083206001600160a01b03861684529091528120548281018111156105d6576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b6105e33385858401611248565b5060019392505050565b600080546001600160a01b031633148061061157506001546001600160a01b031633145b61064c5760405162461bcd60e51b81526004018080602001828103825260298152602001806118806029913960400191505060405180910390fd5b600154600160a01b900460ff16156106955760405162461bcd60e51b81526004018080602001828103825260248152602001806119cd6024913960400191505060405180910390fd5b600082116106e1576040805162461bcd60e51b81526020600482015260146024820152730616d6f756e742073686f756c64206265203e20360641b604482015290519081900360640190fd5b6001600160a01b03831661073c576040805162461bcd60e51b815260206004820152601b60248201527f6465706f73697420746f20746865207a65726f20616464726573730000000000604482015290519081900360640190fd5b600454828101811115610796576040805162461bcd60e51b815260206004820152601d60248201527f6164646974696f6e206f766572666c6f7720666f72206465706f736974000000604482015290519081900360640190fd5b8083016004556001600160a01b03841660009081526006602052604090205480610801576107c385610bdb565b6001600160a01b03861660009081526005602090815260408083209390935560025460078252838320600019909101905560069052208490556108e6565b6001600160a01b038516600090815260076020526040902054600254600019018114156108a15781858301101561087f576040805162461bcd60e51b815260206004820152601d60248201527f6164646974696f6e206f766572666c6f7720666f72206465706f736974000000604482015290519081900360640190fd5b6001600160a01b038616600090815260066020526040902082860190556108e4565b6108aa86610bdb565b6001600160a01b03871660009081526005602090815260408083209390935560025460078252838320600019909101905560069052208590555b505b6040805185815290516001600160a01b0387169160009160008051602061193f8339815191529181900360200190a3506001949350505050565b600080546001600160a01b031633148061094457506001546001600160a01b031633145b61097f5760405162461bcd60e51b81526004018080602001828103825260298152602001806118806029913960400191505060405180910390fd5b600154600160a01b900460ff16156109c85760405162461bcd60e51b81526004018080602001828103825260248152602001806119cd6024913960400191505060405180910390fd5b6001600160a01b03821660009081526006602090815260408083205460079092529091205460025460001901811415610b22576001600160a01b038416600090815260056020526040902054600354811115610a555760405162461bcd60e51b81526004018080602001828103825260258152602001806118d16025913960400191505060405180910390fd5b600380548290039055600454831115610a9f5760405162461bcd60e51b81526004018080602001828103825260278152602001806119186027913960400191505060405180910390fd5b8260045403600481905550808382011015610aeb5760405162461bcd60e51b81526004018080602001828103825260308152602001806117896030913960400191505060405180910390fd5b60408051828501815290516000916001600160a01b0388169160008051602061193f8339815191529181900360200190a350610baa565b6000610b2d85610bdb565b60035490915080821115610b725760405162461bcd60e51b81526004018080602001828103825260258152602001806118d16025913960400191505060405180910390fd5b8181036003556040805183815290516000916001600160a01b0389169160008051602061193f8339815191529181900360200190a350505b5050506001600160a01b0381166000908152600560209081526040808320839055600690915281205560015b919050565b6001600160a01b038116600090815260056020908152604080832054600690925282205481158015610c0b575080155b15610c1b57600092505050610bd6565b6001600160a01b03841660009081526007602052604090205460025460001901811415610ca257828284011015610c99576040805162461bcd60e51b815260206004820152601d60248201527f6164646974696f6e206f766572666c6f7720666f722062616c616e6365000000604482015290519081900360640190fd5b50019050610bd6565b81610cf85760028054600091906000198101908110610cbd57fe5b9060005260206000200154905060028281548110610cd757fe5b906000526020600020015484820281610cec57fe5b04945050505050610bd6565b600060028281548110610d0757fe5b600091825260209091200154600280546000198101908110610d2557fe5b9060005260206000200154850281610d3957fe5b049050600060028360010181548110610d4e57fe5b600091825260209091200154600280546000198101908110610d6c57fe5b9060005260206000200154850281610d8057fe5b049050818282011015610dda576040805162461bcd60e51b815260206004820152601d60248201527f6164646974696f6e206f766572666c6f7720666f722062616c616e6365000000604482015290519081900360640190fd5b019350610bd692505050565b6040805180820190915260048152632aa9a22760e11b602082015290565b3360009081526008602090815260408083206001600160a01b038616845290915281205480831115610e675760405162461bcd60e51b81526004018080602001828103825260258152602001806119a86025913960400191505060405180910390fd5b6105e33385858403611248565b600080546001600160a01b0316331480610e9857506001546001600160a01b031633145b610ed35760405162461bcd60e51b81526004018080602001828103825260298152602001806118806029913960400191505060405180910390fd5b600154600160a01b900460ff1615610f1c5760405162461bcd60e51b81526004018080602001828103825260248152602001806119cd6024913960400191505060405180910390fd5b60008211610f68576040805162461bcd60e51b815260206004820152601460248201527307265776172642073686f756c64206265203e20360641b604482015290519081900360640190fd5b60035460045481610fb3576002805460018101825560009190915264e8d4a510007f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909101556110b8565b60028054600091906000198101908110610fc957fe5b9060005260206000200154905060008364e8d4a51000870281610fe857fe5b0490508064e8d4a5100082011015611047576040805162461bcd60e51b815260206004820152601d60248201527f6164646974696f6e206f766572666c6f7720666f722070657263656e74000000604482015290519081900360640190fd5b64e8d4a51000818101906002908483028254600181018455600093845260209093209190049101558685018511156110b05760405162461bcd60e51b815260040180806020018281038252602b815260200180611855602b913960400191505060405180910390fd5b505050908301905b8181830110156110f95760405162461bcd60e51b81526004018080602001828103825260228152602001806118f66022913960400191505060405180910390fd5b8181016003556000600455600254604080519182526020820186905280517f45cad8c10023de80f4c0672ff6c283b671e11aa93c92b9380cdf060d2790da529281900390910190a15060019392505050565b60006103e233848461137d565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6000546001600160a01b03163314806111a657506001546001600160a01b031633145b6111e15760405162461bcd60e51b81526004018080602001828103825260298152602001806118806029913960400191505060405180910390fd5b6001600160a01b0381166112265760405162461bcd60e51b81526004018080602001828103825260268152602001806117b96026913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600154600160a01b900460ff16156112915760405162461bcd60e51b81526004018080602001828103825260248152602001806119cd6024913960400191505060405180910390fd5b6001600160a01b0383166112d65760405162461bcd60e51b81526004018080602001828103825260248152602001806119846024913960400191505060405180910390fd5b6001600160a01b03821661131b5760405162461bcd60e51b81526004018080602001828103825260228152602001806117df6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600154600160a01b900460ff16156113c65760405162461bcd60e51b81526004018080602001828103825260248152602001806119cd6024913960400191505060405180910390fd5b60008111611412576040805162461bcd60e51b81526020600482015260146024820152730616d6f756e742073686f756c64206265203e20360641b604482015290519081900360640190fd5b6001600160a01b0383166114575760405162461bcd60e51b815260040180806020018281038252602581526020018061195f6025913960400191505060405180910390fd5b6001600160a01b03821661149c5760405162461bcd60e51b81526004018080602001828103825260238152602001806117666023913960400191505060405180910390fd5b6001600160a01b038316600090815260066020908152604080832054600790925282205490918215806114d55750600254600019018214155b1561156a5760006114e587610bdb565b9050808511156115265760405162461bcd60e51b81526004018080602001828103825260268152602001806118016026913960400191505060405180910390fd5b6001600160a01b038716600090815260056020908152604080832093889003909355600681528282208290556002546007909152919020600019909101905561161e565b82841161159557506001600160a01b038516600090815260066020526040902083830390558261161e565b6001600160a01b0386166000908152600560205260409020548385038110156115ef5760405162461bcd60e51b81526004018080602001828103825260268152602001806118016026913960400191505060405180910390fd5b6001600160a01b0387166000908152600560209081526040808320878903909403909355600690529081205550815b6001600160a01b038516600090815260066020908152604080832054600790925290912054909350915082158061165b5750600254600019018214155b156116f457600061166b86610bdb565b905080818387030110156116b05760405162461bcd60e51b815260040180806020018281038252602e815260200180611827602e913960400191505060405180910390fd5b6001600160a01b0386166000908152600560209081526040808320858903949094019093556002546007825283832060001990910190556006905220819055611724565b6001600160a01b038516600090815260056020908152604080832080548589030190556006909152902083820190555b846001600160a01b0316866001600160a01b031660008051602061193f833981519152866040518082815260200191505060405180910390a350505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573736164646974696f6e206f766572666c6f7720666f7220746f74616c2062616c616e6365202b206f6c644465706f7369744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a206164646974696f6e206f766572666c6f7720666f7220726563697069656e742062616c616e63656164646974696f6e206f766572666c6f7720666f7220746f74616c20737570706c79202b207265776172644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572206f722061646d696e45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63657375627472616374696f6e206f766572666c6f7720666f7220746f74616c20737570706c796164646974696f6e206f766572666c6f7720666f7220746f74616c20737570706c797375627472616374696f6e206f766572666c6f7720666f72206c6971756964206465706f736974ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f446570726563617465626c653a20636f6e74726163742069732064657072656361746564a26469706673582212209257874fed3a071998833d8e81f6f0ea91a9d98817e402b507e08b74760e499864736f6c63430006080033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c806351cff8d911610097578063a694fc3a11610066578063a694fc3a14610312578063a9059cbb1461032f578063dd62ed3e1461035b578063f2fde38b1461038957610100565b806351cff8d91461029257806370a08231146102b857806395d89b41146102de578063a457c2d7146102e657610100565b806323b872dd116100d357806323b872dd146101e6578063313ce5671461021c578063395093511461023a57806347e7ef241461026657610100565b806306fdde0314610105578063095ea7b3146101825780630fcc0c28146101c257806318160ddd146101cc575b600080fd5b61010d6103af565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101ae6004803603604081101561019857600080fd5b506001600160a01b0381351690602001356103d5565b604080519115158252519081900360200190f35b6101ca6103eb565b005b6101d4610489565b60408051918252519081900360200190f35b6101ae600480360360608110156101fc57600080fd5b506001600160a01b038135811691602081013590911690604001356104da565b610224610562565b6040805160ff9092168252519081900360200190f35b6101ae6004803603604081101561025057600080fd5b506001600160a01b038135169060200135610567565b6101ae6004803603604081101561027c57600080fd5b506001600160a01b0381351690602001356105ed565b6101ae600480360360208110156102a857600080fd5b50356001600160a01b0316610920565b6101d4600480360360208110156102ce57600080fd5b50356001600160a01b0316610bdb565b61010d610de6565b6101ae600480360360408110156102fc57600080fd5b506001600160a01b038135169060200135610e04565b6101ae6004803603602081101561032857600080fd5b5035610e74565b6101ae6004803603604081101561034557600080fd5b506001600160a01b03813516906020013561114b565b6101d46004803603604081101561037157600080fd5b506001600160a01b0381358116916020013516611158565b6101ca6004803603602081101561039f57600080fd5b50356001600160a01b0316611183565b60408051808201909152600c81526b13995d5d1c9a5b9bc81554d160a21b602082015290565b60006103e2338484611248565b50600192915050565b6000546001600160a01b031633148061040e57506001546001600160a01b031633145b6104495760405162461bcd60e51b81526004018080602001828103825260298152602001806118806029913960400191505060405180910390fd5b6001805460ff60a01b1916600160a01b17905560405133907fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e90600090a2565b600354600454600091908082018211156104d45760405162461bcd60e51b81526004018080602001828103825260228152602001806118f66022913960400191505060405180910390fd5b01905090565b60006104e784848461137d565b6001600160a01b03841660009081526008602090815260408083203384529091529020548083111561054a5760405162461bcd60e51b81526004018080602001828103825260288152602001806118a96028913960400191505060405180910390fd5b6105578533858403611248565b506001949350505050565b601290565b3360009081526008602090815260408083206001600160a01b03861684529091528120548281018111156105d6576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b6105e33385858401611248565b5060019392505050565b600080546001600160a01b031633148061061157506001546001600160a01b031633145b61064c5760405162461bcd60e51b81526004018080602001828103825260298152602001806118806029913960400191505060405180910390fd5b600154600160a01b900460ff16156106955760405162461bcd60e51b81526004018080602001828103825260248152602001806119cd6024913960400191505060405180910390fd5b600082116106e1576040805162461bcd60e51b81526020600482015260146024820152730616d6f756e742073686f756c64206265203e20360641b604482015290519081900360640190fd5b6001600160a01b03831661073c576040805162461bcd60e51b815260206004820152601b60248201527f6465706f73697420746f20746865207a65726f20616464726573730000000000604482015290519081900360640190fd5b600454828101811115610796576040805162461bcd60e51b815260206004820152601d60248201527f6164646974696f6e206f766572666c6f7720666f72206465706f736974000000604482015290519081900360640190fd5b8083016004556001600160a01b03841660009081526006602052604090205480610801576107c385610bdb565b6001600160a01b03861660009081526005602090815260408083209390935560025460078252838320600019909101905560069052208490556108e6565b6001600160a01b038516600090815260076020526040902054600254600019018114156108a15781858301101561087f576040805162461bcd60e51b815260206004820152601d60248201527f6164646974696f6e206f766572666c6f7720666f72206465706f736974000000604482015290519081900360640190fd5b6001600160a01b038616600090815260066020526040902082860190556108e4565b6108aa86610bdb565b6001600160a01b03871660009081526005602090815260408083209390935560025460078252838320600019909101905560069052208590555b505b6040805185815290516001600160a01b0387169160009160008051602061193f8339815191529181900360200190a3506001949350505050565b600080546001600160a01b031633148061094457506001546001600160a01b031633145b61097f5760405162461bcd60e51b81526004018080602001828103825260298152602001806118806029913960400191505060405180910390fd5b600154600160a01b900460ff16156109c85760405162461bcd60e51b81526004018080602001828103825260248152602001806119cd6024913960400191505060405180910390fd5b6001600160a01b03821660009081526006602090815260408083205460079092529091205460025460001901811415610b22576001600160a01b038416600090815260056020526040902054600354811115610a555760405162461bcd60e51b81526004018080602001828103825260258152602001806118d16025913960400191505060405180910390fd5b600380548290039055600454831115610a9f5760405162461bcd60e51b81526004018080602001828103825260278152602001806119186027913960400191505060405180910390fd5b8260045403600481905550808382011015610aeb5760405162461bcd60e51b81526004018080602001828103825260308152602001806117896030913960400191505060405180910390fd5b60408051828501815290516000916001600160a01b0388169160008051602061193f8339815191529181900360200190a350610baa565b6000610b2d85610bdb565b60035490915080821115610b725760405162461bcd60e51b81526004018080602001828103825260258152602001806118d16025913960400191505060405180910390fd5b8181036003556040805183815290516000916001600160a01b0389169160008051602061193f8339815191529181900360200190a350505b5050506001600160a01b0381166000908152600560209081526040808320839055600690915281205560015b919050565b6001600160a01b038116600090815260056020908152604080832054600690925282205481158015610c0b575080155b15610c1b57600092505050610bd6565b6001600160a01b03841660009081526007602052604090205460025460001901811415610ca257828284011015610c99576040805162461bcd60e51b815260206004820152601d60248201527f6164646974696f6e206f766572666c6f7720666f722062616c616e6365000000604482015290519081900360640190fd5b50019050610bd6565b81610cf85760028054600091906000198101908110610cbd57fe5b9060005260206000200154905060028281548110610cd757fe5b906000526020600020015484820281610cec57fe5b04945050505050610bd6565b600060028281548110610d0757fe5b600091825260209091200154600280546000198101908110610d2557fe5b9060005260206000200154850281610d3957fe5b049050600060028360010181548110610d4e57fe5b600091825260209091200154600280546000198101908110610d6c57fe5b9060005260206000200154850281610d8057fe5b049050818282011015610dda576040805162461bcd60e51b815260206004820152601d60248201527f6164646974696f6e206f766572666c6f7720666f722062616c616e6365000000604482015290519081900360640190fd5b019350610bd692505050565b6040805180820190915260048152632aa9a22760e11b602082015290565b3360009081526008602090815260408083206001600160a01b038616845290915281205480831115610e675760405162461bcd60e51b81526004018080602001828103825260258152602001806119a86025913960400191505060405180910390fd5b6105e33385858403611248565b600080546001600160a01b0316331480610e9857506001546001600160a01b031633145b610ed35760405162461bcd60e51b81526004018080602001828103825260298152602001806118806029913960400191505060405180910390fd5b600154600160a01b900460ff1615610f1c5760405162461bcd60e51b81526004018080602001828103825260248152602001806119cd6024913960400191505060405180910390fd5b60008211610f68576040805162461bcd60e51b815260206004820152601460248201527307265776172642073686f756c64206265203e20360641b604482015290519081900360640190fd5b60035460045481610fb3576002805460018101825560009190915264e8d4a510007f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909101556110b8565b60028054600091906000198101908110610fc957fe5b9060005260206000200154905060008364e8d4a51000870281610fe857fe5b0490508064e8d4a5100082011015611047576040805162461bcd60e51b815260206004820152601d60248201527f6164646974696f6e206f766572666c6f7720666f722070657263656e74000000604482015290519081900360640190fd5b64e8d4a51000818101906002908483028254600181018455600093845260209093209190049101558685018511156110b05760405162461bcd60e51b815260040180806020018281038252602b815260200180611855602b913960400191505060405180910390fd5b505050908301905b8181830110156110f95760405162461bcd60e51b81526004018080602001828103825260228152602001806118f66022913960400191505060405180910390fd5b8181016003556000600455600254604080519182526020820186905280517f45cad8c10023de80f4c0672ff6c283b671e11aa93c92b9380cdf060d2790da529281900390910190a15060019392505050565b60006103e233848461137d565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6000546001600160a01b03163314806111a657506001546001600160a01b031633145b6111e15760405162461bcd60e51b81526004018080602001828103825260298152602001806118806029913960400191505060405180910390fd5b6001600160a01b0381166112265760405162461bcd60e51b81526004018080602001828103825260268152602001806117b96026913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600154600160a01b900460ff16156112915760405162461bcd60e51b81526004018080602001828103825260248152602001806119cd6024913960400191505060405180910390fd5b6001600160a01b0383166112d65760405162461bcd60e51b81526004018080602001828103825260248152602001806119846024913960400191505060405180910390fd5b6001600160a01b03821661131b5760405162461bcd60e51b81526004018080602001828103825260228152602001806117df6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600154600160a01b900460ff16156113c65760405162461bcd60e51b81526004018080602001828103825260248152602001806119cd6024913960400191505060405180910390fd5b60008111611412576040805162461bcd60e51b81526020600482015260146024820152730616d6f756e742073686f756c64206265203e20360641b604482015290519081900360640190fd5b6001600160a01b0383166114575760405162461bcd60e51b815260040180806020018281038252602581526020018061195f6025913960400191505060405180910390fd5b6001600160a01b03821661149c5760405162461bcd60e51b81526004018080602001828103825260238152602001806117666023913960400191505060405180910390fd5b6001600160a01b038316600090815260066020908152604080832054600790925282205490918215806114d55750600254600019018214155b1561156a5760006114e587610bdb565b9050808511156115265760405162461bcd60e51b81526004018080602001828103825260268152602001806118016026913960400191505060405180910390fd5b6001600160a01b038716600090815260056020908152604080832093889003909355600681528282208290556002546007909152919020600019909101905561161e565b82841161159557506001600160a01b038516600090815260066020526040902083830390558261161e565b6001600160a01b0386166000908152600560205260409020548385038110156115ef5760405162461bcd60e51b81526004018080602001828103825260268152602001806118016026913960400191505060405180910390fd5b6001600160a01b0387166000908152600560209081526040808320878903909403909355600690529081205550815b6001600160a01b038516600090815260066020908152604080832054600790925290912054909350915082158061165b5750600254600019018214155b156116f457600061166b86610bdb565b905080818387030110156116b05760405162461bcd60e51b815260040180806020018281038252602e815260200180611827602e913960400191505060405180910390fd5b6001600160a01b0386166000908152600560209081526040808320858903949094019093556002546007825283832060001990910190556006905220819055611724565b6001600160a01b038516600090815260056020908152604080832080548589030190556006909152902083820190555b846001600160a01b0316866001600160a01b031660008051602061193f833981519152866040518082815260200191505060405180910390a350505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573736164646974696f6e206f766572666c6f7720666f7220746f74616c2062616c616e6365202b206f6c644465706f7369744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a206164646974696f6e206f766572666c6f7720666f7220726563697069656e742062616c616e63656164646974696f6e206f766572666c6f7720666f7220746f74616c20737570706c79202b207265776172644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572206f722061646d696e45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63657375627472616374696f6e206f766572666c6f7720666f7220746f74616c20737570706c796164646974696f6e206f766572666c6f7720666f7220746f74616c20737570706c797375627472616374696f6e206f766572666c6f7720666f72206c6971756964206465706f736974ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f446570726563617465626c653a20636f6e74726163742069732064657072656361746564a26469706673582212209257874fed3a071998833d8e81f6f0ea91a9d98817e402b507e08b74760e499864736f6c63430006080033