Contract 0x9118bd4230EAb074f98527658f3649aA26420568

 
Txn Hash Method
Block
From
To
Value
0x935e8c7245bfd2ef512249990e940d6ea0687110f6c5ae696cc6a3dd5fe36d120x6080604095608832020-02-26 18:51:10436 days 18 hrs ago0xc126c125a93c14fd4f667d430fab386d347513df IN  Contract Creation0 Ether0.002958032.3
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenDeployGateway

Compiler Version
v0.6.1+commit.e6f7d5a4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-02-27
*/

pragma solidity 0.6.1;
pragma experimental ABIEncoderV2;


interface Proxy {

  
  function execute(
    address _target,
    address _a,
    address _b,
    uint256 _c
  )
    external;
    
}

library SafeMath {

  
  string constant OVERFLOW = "008001";
  string constant SUBTRAHEND_GREATER_THEN_MINUEND = "008002";
  string constant DIVISION_BY_ZERO = "008003";

  
  function mul(
    uint256 _factor1,
    uint256 _factor2
  )
    internal
    pure
    returns (uint256 product)
  {
    
    
    
    if (_factor1 == 0)
    {
      return 0;
    }

    product = _factor1 * _factor2;
    require(product / _factor1 == _factor2, OVERFLOW);
  }

  
  function div(
    uint256 _dividend,
    uint256 _divisor
  )
    internal
    pure
    returns (uint256 quotient)
  {
    
    require(_divisor > 0, DIVISION_BY_ZERO);
    quotient = _dividend / _divisor;
    
  }

  
  function sub(
    uint256 _minuend,
    uint256 _subtrahend
  )
    internal
    pure
    returns (uint256 difference)
  {
    require(_subtrahend <= _minuend, SUBTRAHEND_GREATER_THEN_MINUEND);
    difference = _minuend - _subtrahend;
  }

  
  function add(
    uint256 _addend1,
    uint256 _addend2
  )
    internal
    pure
    returns (uint256 sum)
  {
    sum = _addend1 + _addend2;
    require(sum >= _addend1, OVERFLOW);
  }

  
  function mod(
    uint256 _dividend,
    uint256 _divisor
  )
    internal
    pure
    returns (uint256 remainder)
  {
    require(_divisor != 0, DIVISION_BY_ZERO);
    remainder = _dividend % _divisor;
  }

}

interface ERC165 {

  
  function supportsInterface(
    bytes4 _interfaceID
  )
    external
    view
    returns (bool);

}

contract SupportsInterface is
  ERC165
{

  
  mapping(bytes4 => bool) internal supportedInterfaces;

  
  constructor()
    public
  {
    supportedInterfaces[0x01ffc9a7] = true; 
  }

  
  function supportsInterface(
    bytes4 _interfaceID
  )
    external
    override
    view
    returns (bool)
  {
    return supportedInterfaces[_interfaceID];
  }

}

interface ERC20 {

  
  function name()
    external
    view
    returns (string memory _name);

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

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

  
  function totalSupply()
    external
    view
    returns (uint256 _totalSupply);

  
  function balanceOf(
    address _owner
  )
    external
    view
    returns (uint256 _balance);

  
  function transfer(
    address _to,
    uint256 _value
  )
    external
    returns (bool _success);

  
  function transferFrom(
    address _from,
    address _to,
    uint256 _value
  )
    external
    returns (bool _success);

  
  function approve(
    address _spender,
    uint256 _value
  )
    external
    returns (bool _success);

  
  function allowance(
    address _owner,
    address _spender
  )
    external
    view
    returns (uint256 _remaining);

  
  event Transfer(
    address indexed _from,
    address indexed _to,
    uint256 _value
  );

  
  event Approval(
    address indexed _owner,
    address indexed _spender,
    uint256 _value
  );

}

contract Token is
  ERC20,
  SupportsInterface
{
  using SafeMath for uint256;

  
  string constant NOT_ENOUGH_BALANCE = "001001";
  string constant NOT_ENOUGH_ALLOWANCE = "001002";

  
  string internal tokenName;

  
  string internal tokenSymbol;

  
  uint8 internal tokenDecimals;

  
  uint256 internal tokenTotalSupply;

  
  mapping (address => uint256) internal balances;

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

  
  event Transfer(
    address indexed _from,
    address indexed _to,
    uint256 _value
  );

  
  event Approval(
    address indexed _owner,
    address indexed _spender,
    uint256 _value
  );

  
  constructor()
    public
  {
    supportedInterfaces[0x36372b07] = true; 
    supportedInterfaces[0x06fdde03] = true; 
    supportedInterfaces[0x95d89b41] = true; 
    supportedInterfaces[0x313ce567] = true; 
  }

  
  function name()
    external
    override
    view
    returns (string memory _name)
  {
    _name = tokenName;
  }

  
  function symbol()
    external
    override
    view
    returns (string memory _symbol)
  {
    _symbol = tokenSymbol;
  }

  
  function decimals()
    external
    override
    view
    returns (uint8 _decimals)
  {
    _decimals = tokenDecimals;
  }

  
  function totalSupply()
    external
    override
    view
    returns (uint256 _totalSupply)
  {
    _totalSupply = tokenTotalSupply;
  }

  
  function balanceOf(
    address _owner
  )
    external
    override
    view
    returns (uint256 _balance)
  {
    _balance = balances[_owner];
  }

  
  function allowance(
    address _owner,
    address _spender
  )
    external
    override
    view
    returns (uint256 _remaining)
  {
    _remaining = allowed[_owner][_spender];
  }

  
  function transfer(
    address _to,
    uint256 _value
  )
    public
    override
    returns (bool _success)
  {
    require(_value <= balances[msg.sender], NOT_ENOUGH_BALANCE);

    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);

    emit Transfer(msg.sender, _to, _value);
    _success = true;
  }

  
  function approve(
    address _spender,
    uint256 _value
  )
    public
    override
    returns (bool _success)
  {
    allowed[msg.sender][_spender] = _value;

    emit Approval(msg.sender, _spender, _value);
    _success = true;
  }

  
  function transferFrom(
    address _from,
    address _to,
    uint256 _value
  )
    public
    override
    returns (bool _success)
  {
    require(_value <= balances[_from], NOT_ENOUGH_BALANCE);
    require(_value <= allowed[_from][msg.sender], NOT_ENOUGH_ALLOWANCE);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);

    emit Transfer(_from, _to, _value);
    _success = true;
  }

}

contract TokenCustom is
  Token
{
  constructor(
    string memory _name,
    string memory _symbol,
    uint256 _supply,
    uint8 _decimals,
    address _owner
  )
    public
  {
    tokenName = _name;
    tokenSymbol = _symbol;
    tokenDecimals = _decimals;
    tokenTotalSupply = _supply;
    balances[_owner] = tokenTotalSupply;
    emit Transfer(address(0), _owner, tokenTotalSupply);
  }
}

contract TokenDeployProxy {
  
  function deploy(
    string memory _name,
    string memory _symbol,
    uint256 _supply,
    uint8 _decimals,
    address _owner
  )
    public
    returns (address token)
  {
    token = address(
      new TokenCustom(
        _name, _symbol, _supply, _decimals, _owner
      )
    );
  }
}

contract Abilitable {
  using SafeMath for uint;

  
  string constant NOT_AUTHORIZED = "017001";
  string constant INVALID_INPUT = "017002";

  
  uint8 constant SUPER_ABILITY = 1;

  
  uint8 constant ALLOW_SUPER_ABILITY = 2;

  
  uint8 constant EMPTY_SLOT_1 = 4;

  
  uint8 constant EMPTY_SLOT_2 = 8;

  
  uint8 constant ALL_DEFAULT_ABILITIES = 15;

  
  mapping(address => uint256) public addressToAbility;

  
  event SetAbilities(
    address indexed _target,
    uint256 indexed _abilities
  );

  
  modifier hasAbilities(
    uint256 _abilities
  )
  {
    require(_abilities > 0, INVALID_INPUT);
    require(
      addressToAbility[msg.sender] & _abilities == _abilities,
      NOT_AUTHORIZED
    );
    _;
  }

  
  constructor()
    public
  {
    addressToAbility[msg.sender] = ALL_DEFAULT_ABILITIES;
  }

  
  function grantAbilities(
    address _target,
    uint256 _abilities
  )
    external
    hasAbilities(SUPER_ABILITY)
  {
    addressToAbility[_target] |= _abilities;
    emit SetAbilities(_target, addressToAbility[_target]);
  }

  
  function revokeAbilities(
    address _target,
    uint256 _abilities
  )
    external
    hasAbilities(SUPER_ABILITY)
  {
    addressToAbility[_target] &= ~_abilities;
    emit SetAbilities(_target, addressToAbility[_target]);
  }

  
  function setAbilities(
    address _target,
    uint256 _abilities
  )
    external
    hasAbilities(SUPER_ABILITY)
  {
    addressToAbility[_target] = _abilities;
    emit SetAbilities(_target, _abilities);
  }

  
  function isAble(
    address _target,
    uint256 _abilities
  )
    external
    view
    returns (bool)
  {
    require(_abilities > 0, INVALID_INPUT);
    return (addressToAbility[_target] & _abilities) == _abilities;
  }

}

contract TokenDeployGateway is
  Abilitable
{
  
  uint8 constant ABILITY_TO_SET_PROXY = 16;

  
  string constant INVALID_SIGNATURE_KIND = "011001";
  string constant TAKER_NOT_EQUAL_TO_SENDER = "011002";
  string constant CLAIM_EXPIRED = "011003";
  string constant INVALID_SIGNATURE = "011004";
  string constant DEPLOY_CANCELED = "011005";
  string constant DEPLOY_ALREADY_PERFORMED = "011006";
  string constant MAKER_NOT_EQUAL_TO_SENDER = "011007";

  
  enum SignatureKind
  {
    eth_sign,
    trezor,
    no_prefix
  }

  
  struct TokenData
  {
    string name;
    string symbol;
    uint256 supply;
    uint8 decimals;
    address owner;
  }

  
  struct TransferData
  {
    address token;
    address to;
    uint256 value;
  }

  
  struct SignatureData
  {
    bytes32 r;
    bytes32 s;
    uint8 v;
    SignatureKind kind;
  }

  
  struct DeployData
  {
    address maker;
    address taker;
    TokenData tokenData;
    TransferData transferData;
    uint256 seed;
    uint256 expiration;
  }

  
  TokenDeployProxy public tokenDeployProxy;

  
  Proxy public tokenTransferProxy;

  
  mapping(bytes32 => bool) public deployCancelled;

  
  mapping(bytes32 => bool) public deployPerformed;

  
  event Perform(
    address indexed _maker,
    address indexed _taker,
    address _createdContract,
    bytes32 _claim
  );

  
  event Cancel(
    address indexed _maker,
    address indexed _taker,
    bytes32 _claim
  );

  
  event ProxyChange(
    address _proxy
  );

  
  constructor(
    address _tokenDeployProxy,
    address _tokenTransferProxy
  )
    public
  {
    tokenDeployProxy = TokenDeployProxy(_tokenDeployProxy);
    tokenTransferProxy = Proxy(_tokenTransferProxy);
  }

  
  function setDeployProxy(
    address _tokenDeployProxy
  )
    external
    hasAbilities(ABILITY_TO_SET_PROXY)
  {
    tokenDeployProxy = TokenDeployProxy(_tokenDeployProxy);
    emit ProxyChange(_tokenDeployProxy);
  }

  
  function perform(
    DeployData memory _data,
    SignatureData memory _signature
  )
    public
  {
    require(_data.taker == msg.sender, TAKER_NOT_EQUAL_TO_SENDER);
    require(_data.expiration >= now, CLAIM_EXPIRED);

    bytes32 claim = getDeployDataClaim(_data);
    require(
      isValidSignature(
        _data.maker,
        claim,
        _signature
      ),
      INVALID_SIGNATURE
    );

    require(!deployCancelled[claim], DEPLOY_CANCELED);
    require(!deployPerformed[claim], DEPLOY_ALREADY_PERFORMED);

    deployPerformed[claim] = true;

    address token = _doActions(_data);

    emit Perform(
      _data.maker,
      _data.taker,
      token,
      claim
    );
  }

  
  function performAnyTaker(
    DeployData memory _data,
    SignatureData memory _signature
  )
    public
  {
    require(_data.expiration >= now, CLAIM_EXPIRED);

    bytes32 claim = getDeployDataClaim(_data);
    require(
      isValidSignature(
        _data.maker,
        claim,
        _signature
      ),
      INVALID_SIGNATURE
    );

    require(!deployCancelled[claim], DEPLOY_CANCELED);
    require(!deployPerformed[claim], DEPLOY_ALREADY_PERFORMED);

    deployPerformed[claim] = true;

    address token = _doActionsReplaceZeroAddress(_data);

    emit Perform(
      _data.maker,
      msg.sender,
      token,
      claim
    );
  }

  
  function cancel(
    DeployData memory _data
  )
    public
  {
    require(_data.maker == msg.sender, MAKER_NOT_EQUAL_TO_SENDER);

    bytes32 claim = getDeployDataClaim(_data);
    require(!deployPerformed[claim], DEPLOY_ALREADY_PERFORMED);

    deployCancelled[claim] = true;
    emit Cancel(
      _data.maker,
      _data.taker,
      claim
    );
  }

  
  function getDeployDataClaim(
    DeployData memory _deployData
  )
    public
    view
    returns (bytes32)
  {
    bytes32 tokendata = keccak256(
      abi.encodePacked(
        _deployData.tokenData.name,
        _deployData.tokenData.symbol,
        _deployData.tokenData.supply,
        _deployData.tokenData.decimals,
        _deployData.tokenData.owner
      )
    );

    bytes32 transferData = keccak256(
      abi.encodePacked(
        _deployData.transferData.token,
        _deployData.transferData.to,
        _deployData.transferData.value
      )
    );

    return keccak256(
      abi.encodePacked(
        address(this),
        _deployData.maker,
        _deployData.taker,
        tokendata,
        transferData,
        _deployData.seed,
        _deployData.expiration
      )
    );
  }

  
  function isValidSignature(
    address _signer,
    bytes32 _claim,
    SignatureData memory _signature
  )
    public
    pure
    returns (bool)
  {
    if (_signature.kind == SignatureKind.eth_sign)
    {
      return _signer == ecrecover(
        keccak256(
          abi.encodePacked(
            "\x19Ethereum Signed Message:\n32",
            _claim
          )
        ),
        _signature.v,
        _signature.r,
        _signature.s
      );
    } else if (_signature.kind == SignatureKind.trezor)
    {
      return _signer == ecrecover(
        keccak256(
          abi.encodePacked(
            "\x19Ethereum Signed Message:\n\x20",
            _claim
          )
        ),
        _signature.v,
        _signature.r,
        _signature.s
      );
    } else if (_signature.kind == SignatureKind.no_prefix)
    {
      return _signer == ecrecover(
        _claim,
        _signature.v,
        _signature.r,
        _signature.s
      );
    }

    revert(INVALID_SIGNATURE_KIND);
  }

  
  function _doActions(
    DeployData memory _deploy
  )
    private
    returns (address _token)
  {
    tokenTransferProxy.execute(
      _deploy.transferData.token,
      _deploy.maker,
      _deploy.transferData.to,
      _deploy.transferData.value
    );

    _token = tokenDeployProxy.deploy(
      _deploy.tokenData.name,
      _deploy.tokenData.symbol,
      _deploy.tokenData.supply,
      _deploy.tokenData.decimals,
      _deploy.tokenData.owner
    );
  }

  
  function _doActionsReplaceZeroAddress(
    DeployData memory _deploy
  )
    private
    returns (address _token)
  {
    if (_deploy.transferData.to == address(0))
    {
      _deploy.transferData.to = msg.sender;
    }

    tokenTransferProxy.execute(
      _deploy.transferData.token,
      _deploy.maker,
      _deploy.transferData.to,
      _deploy.transferData.value
    );

    _token = tokenDeployProxy.deploy(
      _deploy.tokenData.name,
      _deploy.tokenData.symbol,
      _deploy.tokenData.supply,
      _deploy.tokenData.decimals,
      _deploy.tokenData.owner
    );
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_tokenDeployProxy","type":"address"},{"internalType":"address","name":"_tokenTransferProxy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_maker","type":"address"},{"indexed":true,"internalType":"address","name":"_taker","type":"address"},{"indexed":false,"internalType":"bytes32","name":"_claim","type":"bytes32"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_maker","type":"address"},{"indexed":true,"internalType":"address","name":"_taker","type":"address"},{"indexed":false,"internalType":"address","name":"_createdContract","type":"address"},{"indexed":false,"internalType":"bytes32","name":"_claim","type":"bytes32"}],"name":"Perform","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_proxy","type":"address"}],"name":"ProxyChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_target","type":"address"},{"indexed":true,"internalType":"uint256","name":"_abilities","type":"uint256"}],"name":"SetAbilities","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToAbility","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"taker","type":"address"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"owner","type":"address"}],"internalType":"struct TokenDeployGateway.TokenData","name":"tokenData","type":"tuple"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TokenDeployGateway.TransferData","name":"transferData","type":"tuple"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"internalType":"struct TokenDeployGateway.DeployData","name":"_data","type":"tuple"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"deployCancelled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"deployPerformed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"taker","type":"address"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"owner","type":"address"}],"internalType":"struct TokenDeployGateway.TokenData","name":"tokenData","type":"tuple"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TokenDeployGateway.TransferData","name":"transferData","type":"tuple"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"internalType":"struct TokenDeployGateway.DeployData","name":"_deployData","type":"tuple"}],"name":"getDeployDataClaim","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_abilities","type":"uint256"}],"name":"grantAbilities","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_abilities","type":"uint256"}],"name":"isAble","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes32","name":"_claim","type":"bytes32"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"enum TokenDeployGateway.SignatureKind","name":"kind","type":"uint8"}],"internalType":"struct TokenDeployGateway.SignatureData","name":"_signature","type":"tuple"}],"name":"isValidSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"taker","type":"address"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"owner","type":"address"}],"internalType":"struct TokenDeployGateway.TokenData","name":"tokenData","type":"tuple"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TokenDeployGateway.TransferData","name":"transferData","type":"tuple"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"internalType":"struct TokenDeployGateway.DeployData","name":"_data","type":"tuple"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"enum TokenDeployGateway.SignatureKind","name":"kind","type":"uint8"}],"internalType":"struct TokenDeployGateway.SignatureData","name":"_signature","type":"tuple"}],"name":"perform","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"taker","type":"address"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"owner","type":"address"}],"internalType":"struct TokenDeployGateway.TokenData","name":"tokenData","type":"tuple"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TokenDeployGateway.TransferData","name":"transferData","type":"tuple"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"internalType":"struct TokenDeployGateway.DeployData","name":"_data","type":"tuple"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"enum TokenDeployGateway.SignatureKind","name":"kind","type":"uint8"}],"internalType":"struct TokenDeployGateway.SignatureData","name":"_signature","type":"tuple"}],"name":"performAnyTaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_abilities","type":"uint256"}],"name":"revokeAbilities","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_abilities","type":"uint256"}],"name":"setAbilities","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenDeployProxy","type":"address"}],"name":"setDeployProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenDeployProxy","outputs":[{"internalType":"contract TokenDeployProxy","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenTransferProxy","outputs":[{"internalType":"contract Proxy","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b506040516115ef3803806115ef83398101604081905261002f91610073565b336000908152602081905260409020600f9055600180546001600160a01b039384166001600160a01b031991821617909155600280549290931691161790556100c4565b60008060408385031215610085578182fd5b8251610090816100ac565b60208401519092506100a1816100ac565b809150509250929050565b6001600160a01b03811681146100c157600080fd5b50565b61151c806100d36000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80634e4631e711610097578063ba00a33011610066578063ba00a330146101e7578063c11e8b7a146101fa578063c9f600f71461020d578063f394b6df14610220576100f5565b80634e4631e71461019957806352af3ebd146101ac57806382901b7b146101cc5780638fa76d8d146101d4576100f5565b806315f0a1a6116100d357806315f0a1a61461014057806338d7d25c1461015357806341f343cd1461016657806345a32c8614610179576100f5565b80630ab319e8146100fa5780630eefdbad1461010f57806315ec3b8b1461012d575b600080fd5b61010d610108366004611164565b610233565b005b610117610301565b604051610124919061138c565b60405180910390f35b61010d61013b366004611164565b610310565b61010d61014e3660046111e2565b6103c5565b61010d6101613660046111e2565b6105df565b61010d6101743660046110ee565b610790565b61018c6101873660046110ee565b610854565b60405161012491906113ee565b61010d6101a73660046111a7565b610866565b6101bf6101ba36600461118f565b61097d565b60405161012491906113e3565b610117610992565b6101bf6101e2366004611126565b6109a1565b6101bf6101f5366004611164565b610b03565b61018c6102083660046111a7565b610b6b565b6101bf61021b36600461118f565b610c3c565b61010d61022e366004611164565b610c51565b60408051808201909152600681526518189b98181960d11b6020820152600190610261565b60405180910390fd5b503360009081526020818152604091829020548251808401909352600683526530313730303160d01b91830191909152821682146102b25760405162461bcd60e51b81526004016102589190611415565b506001600160a01b038316600081815260208190526040808220805486179081905590519092917fd1d59d2d212a435434e7a4a4676427610dfe2b6268b01e541d280d65bf3d6b9091a3505050565b6002546001600160a01b031681565b60408051808201825260068082526518189b98181960d11b6020928301523360009081528083528390205483518085019094529083526530313730303160d01b91830191909152600191908216821461037c5760405162461bcd60e51b81526004016102589190611415565b506001600160a01b038316600081815260208190526040808220859055518492917fd1d59d2d212a435434e7a4a4676427610dfe2b6268b01e541d280d65bf3d6b9091a3505050565b336001600160a01b031682602001516001600160a01b0316146040518060400160405280600681526020016518189898181960d11b8152509061041b5760405162461bcd60e51b81526004016102589190611415565b50428260a0015110156040518060400160405280600681526020016530313130303360d01b815250906104615760405162461bcd60e51b81526004016102589190611415565b50600061046d83610b6b565b905061047e836000015182846109a1565b604051806040016040528060068152602001650c0c4c4c0c0d60d21b815250906104bb5760405162461bcd60e51b81526004016102589190611415565b50600081815260036020908152604091829020548251808401909352600683526530313130303560d01b9183019190915260ff161561050d5760405162461bcd60e51b81526004016102589190611415565b50600081815260046020908152604091829020548251808401909352600683526518189898181b60d11b9183019190915260ff161561055f5760405162461bcd60e51b81526004016102589190611415565b506000818152600460205260408120805460ff1916600117905561058284610d0d565b905083602001516001600160a01b031684600001516001600160a01b03167f492318801c2cec532d47019a0b69f83b8d5b499a022b7adb6100a766050644f283856040516105d19291906113ca565b60405180910390a350505050565b428260a0015110156040518060400160405280600681526020016530313130303360d01b815250906106245760405162461bcd60e51b81526004016102589190611415565b50600061063083610b6b565b9050610641836000015182846109a1565b604051806040016040528060068152602001650c0c4c4c0c0d60d21b8152509061067e5760405162461bcd60e51b81526004016102589190611415565b50600081815260036020908152604091829020548251808401909352600683526530313130303560d01b9183019190915260ff16156106d05760405162461bcd60e51b81526004016102589190611415565b50600081815260046020908152604091829020548251808401909352600683526518189898181b60d11b9183019190915260ff16156107225760405162461bcd60e51b81526004016102589190611415565b506000818152600460205260408120805460ff1916600117905561074584610e2c565b9050336001600160a01b031684600001516001600160a01b03167f492318801c2cec532d47019a0b69f83b8d5b499a022b7adb6100a766050644f283856040516105d19291906113ca565b60408051808201825260068082526518189b98181960d11b6020928301523360009081528083528390205483518085019094529083526530313730303160d01b9183019190915260109190821682146107fc5760405162461bcd60e51b81526004016102589190611415565b50600180546001600160a01b0319166001600160a01b0384161790556040517f427ee0ec515416f6ef107d53338080aa8cdf1763bb545dfd1585d1d5a6f6872f9061084890849061138c565b60405180910390a15050565b60006020819052908152604090205481565b805160408051808201909152600681526530313130303760d01b6020820152906001600160a01b031633146108ae5760405162461bcd60e51b81526004016102589190611415565b5060006108ba82610b6b565b600081815260046020908152604091829020548251808401909352600683526518189898181b60d11b918301919091529192509060ff161561090f5760405162461bcd60e51b81526004016102589190611415565b50600081815260036020908152604091829020805460ff19166001179055830151835191516001600160a01b0391821692909116907f421b43caf093b5e58d1ea89ca0d80151eda923342cf3cfddf5eb6b30d4947ba0906109719085906113ee565b60405180910390a35050565b60036020526000908152604090205460ff1681565b6001546001600160a01b031681565b600080826060015160028111156109b457fe5b1415610a56576001836040516020016109cd919061132a565b6040516020818303038152906040528051906020012083604001518460000151856020015160405160008152602001604052604051610a0f94939291906113f7565b6020604051602081039080840390855afa158015610a31573d6000803e3d6000fd5b505050602060405103516001600160a01b0316846001600160a01b0316149050610afc565b600182606001516002811115610a6857fe5b1415610a81576001836040516020016109cd919061135b565b600282606001516002811115610a9357fe5b1415610ac85760018383604001518460000151856020015160405160008152602001604052604051610a0f94939291906113f7565b604080518082018252600681526530313130303160d01b6020820152905162461bcd60e51b81526102589190600401611415565b9392505050565b60008082116040518060400160405280600681526020016518189b98181960d11b81525090610b455760405162461bcd60e51b81526004016102589190611415565b50506001600160a01b038216600090815260208190526040902054811681145b92915050565b604080820151805160208083015183850151606085015160809095015195516000968796610b9c96959092016112cf565b60408051601f19818403018152828252805160209182012060608701518051818401519190940151919550600094610bd89493919291016112a6565b6040516020818303038152906040528051906020012090503084600001518560200151848488608001518960a00151604051602001610c1d979695949392919061125b565b6040516020818303038152906040528051906020012092505050919050565b60046020526000908152604090205460ff1681565b60408051808201825260068082526518189b98181960d11b6020928301523360009081528083528390205483518085019094529083526530313730303160d01b918301919091526001919082168214610cbd5760405162461bcd60e51b81526004016102589190611415565b506001600160a01b03831660008181526020819052604080822080548619169081905590519092917fd1d59d2d212a435434e7a4a4676427610dfe2b6268b01e541d280d65bf3d6b9091a3505050565b600254606082015180518351602083015160409384015193516311cd770360e11b81526000956001600160a01b03169463239aee0694610d5694909390929091906004016113a0565b600060405180830381600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b50506001546040808601518051602082015182840151606084015160809094015194516302b0cec960e11b81526001600160a01b0390961697506305619d929650610dda95929491939092909190600401611428565b602060405180830381600087803b158015610df457600080fd5b505af1158015610e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b65919081019061110a565b6060810151602001516000906001600160a01b0316610e52576060820151336020909101525b600254606083015180518451602083015160409384015193516311cd770360e11b81526001600160a01b039095169463239aee0694610d56949392916004016113a0565b600082601f830112610ea6578081fd5b813567ffffffffffffffff811115610ebc578182fd5b610ecf601f8201601f1916602001611477565b9150808252836020828501011115610ee657600080fd5b8060208401602084013760009082016020015292915050565b60006101008284031215610f11578081fd5b610f1b60c0611477565b90508135610f28816114ce565b81526020820135610f38816114ce565b6020820152604082013567ffffffffffffffff811115610f5757600080fd5b610f6384828501610fef565b604083015250610f76836060840161108e565b606082015260c0820135608082015260e082013560a082015292915050565b600060808284031215610fa6578081fd5b610fb06080611477565b90508135815260208201356020820152610fcd83604084016110dd565b6040820152606082013560038110610fe457600080fd5b606082015292915050565b600060a08284031215611000578081fd5b61100a60a0611477565b9050813567ffffffffffffffff8082111561102457600080fd5b61103085838601610e96565b8352602084013591508082111561104657600080fd5b5061105384828501610e96565b6020830152506040820135604082015261107083606084016110dd565b60608201526080820135611083816114ce565b608082015292915050565b60006060828403121561109f578081fd5b6110a96060611477565b905081356110b6816114ce565b815260208201356110c6816114ce565b806020830152506040820135604082015292915050565b803560ff81168114610b6557600080fd5b6000602082840312156110ff578081fd5b8135610afc816114ce565b60006020828403121561111b578081fd5b8151610afc816114ce565b600080600060c0848603121561113a578182fd5b8335611145816114ce565b92506020840135915061115b8560408601610f95565b90509250925092565b60008060408385031215611176578182fd5b8235611181816114ce565b946020939093013593505050565b6000602082840312156111a0578081fd5b5035919050565b6000602082840312156111b8578081fd5b813567ffffffffffffffff8111156111ce578182fd5b6111da84828501610eff565b949350505050565b60008060a083850312156111f4578182fd5b823567ffffffffffffffff81111561120a578283fd5b61121685828601610eff565b9250506112268460208501610f95565b90509250929050565b6000815180845261124781602086016020860161149e565b601f01601f19169290920160200192915050565b6001600160601b0319606098891b8116825296881b871660148201529490961b9094166028840152603c830191909152605c820152607c810191909152609c81019190915260bc0190565b6001600160601b0319606094851b811682529290931b9091166014830152602882015260480190565b600086516112e1818460208b0161149e565b86519083016112f4828260208b0161149e565b01948552505060f89190911b6001600160f81b031916602083015260601b6001600160601b031916602182015260350192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b7f19457468657265756d205369676e6564204d6573736167653a0a2000000000008152601b810191909152603b0190565b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610afc602083018461122f565b600060a0825261143b60a083018861122f565b828103602084015261144d818861122f565b6040840196909652505060ff9290921660608301526001600160a01b031660809091015292915050565b60405181810167ffffffffffffffff8111828210171561149657600080fd5b604052919050565b60005b838110156114b95781810151838201526020016114a1565b838111156114c8576000848401525b50505050565b6001600160a01b03811681146114e357600080fd5b5056fea2646970667358221220e0c6d7be6e6859867111bf5f83248a43f5370c8d01fda28b2baa69b506c3710f64736f6c63430006010033000000000000000000000000c9d0f2134a5381a370cd06e593747035b184e3c00000000000000000000000007bc5790fd0c23f45f29f893df2de8965a3e51f15

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

000000000000000000000000c9d0f2134a5381a370cd06e593747035b184e3c00000000000000000000000007bc5790fd0c23f45f29f893df2de8965a3e51f15

-----Decoded View---------------
Arg [0] : _tokenDeployProxy (address): 0xc9d0f2134a5381a370cd06e593747035b184e3c0
Arg [1] : _tokenTransferProxy (address): 0x7bc5790fd0c23f45f29f893df2de8965a3e51f15

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c9d0f2134a5381a370cd06e593747035b184e3c0
Arg [1] : 0000000000000000000000007bc5790fd0c23f45f29f893df2de8965a3e51f15


Deployed ByteCode Sourcemap

9036:6879:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9036:6879:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8065:238;;;;;;;;;:::i;:::-;;10167:31;;;:::i;:::-;;;;;;;;;;;;;;;;8563:220;;;;;;;;;:::i;11091:722::-;;;;;;;;;:::i;11823:679::-;;;;;;;;;:::i;10854:227::-;;;;;;;;;:::i;7570:51::-;;;;;;;;;:::i;:::-;;;;;;;;12512:372;;;;;;;;;:::i;10209:47::-;;;;;;;;;:::i;:::-;;;;;;;;10116:40;;;:::i;13749:1046::-;;;;;;;;;:::i;8793:234::-;;;;;;;;;:::i;12894:845::-;;;;;;;;;:::i;10267:47::-;;;;;;;;;:::i;8313:240::-;;;;;;;;;:::i;8065:238::-;7815:13;;;;;;;;;;;;-1:-1:-1;;;7815:13:0;;;;7373:1;;7791:38;;;;;;;;;;;-1:-1:-1;7869:10:0;7852:16;:28;;;;;;;;;;;;;7916:14;;;;;;;;;;;-1:-1:-1;;;7916:14:0;;;;;;;7852:41;;:55;;7836:101;;;;-1:-1:-1;;;7836:101:0;;;;;;;;;;-1:-1:-1;;;;;;8198:25:0;::::1;:16;:25:::0;;;::::1;::::0;;;;;;;:39;;;::::1;::::0;;;;8249:48;;8198:39;;:25;8249:48:::1;::::0;::::1;8065:238:::0;;;:::o;10167:31::-;;;-1:-1:-1;;;;;10167:31:0;;:::o;8563:220::-;7815:13;;;;;;;;;;;;-1:-1:-1;;;7815:13:0;;;;;7869:10;-1:-1:-1;7852:28:0;;;;;;;;;;7916:14;;;;;;;;;;;-1:-1:-1;;;7916:14:0;;;;;;;7373:1;;7916:14;7852:41;;:55;;7836:101;;;;-1:-1:-1;;;7836:101:0;;;;;;;;;;-1:-1:-1;;;;;;8694:25:0;::::1;:16;:25:::0;;;::::1;::::0;;;;;;;:38;;;8744:33;8722:10;;8694:25;8744:33:::1;::::0;::::1;8563:220:::0;;;:::o;11091:722::-;11226:10;-1:-1:-1;;;;;11211:25:0;:5;:11;;;-1:-1:-1;;;;;11211:25:0;;11238;;;;;;;;;;;;;-1:-1:-1;;;11238:25:0;;;11203:61;;;;;-1:-1:-1;;;11203:61:0;;;;;;;;;;;11299:3;11279:5;:16;;;:23;;11304:13;;;;;;;;;;;;;-1:-1:-1;;;11304:13:0;;;11271:47;;;;;-1:-1:-1;;;11271:47:0;;;;;;;;;;;11327:13;11343:25;11362:5;11343:18;:25::i;:::-;11327:41;;11391:84;11418:5;:11;;;11440:5;11456:10;11391:16;:84::i;:::-;11484:17;;;;;;;;;;;;;-1:-1:-1;;;11484:17:0;;;11375:133;;;;;-1:-1:-1;;;11375:133:0;;;;;;;;;;-1:-1:-1;11526:22:0;;;;:15;:22;;;;;;;;;;11550:15;;;;;;;;;;;-1:-1:-1;;;11550:15:0;;;;;;;11526:22;;11525:23;11517:49;;;;-1:-1:-1;;;11517:49:0;;;;;;;;;;-1:-1:-1;11582:22:0;;;;:15;:22;;;;;;;;;;11606:24;;;;;;;;;;;-1:-1:-1;;;11606:24:0;;;;;;;11582:22;;11581:23;11573:58;;;;-1:-1:-1;;;11573:58:0;;;;;;;;;;-1:-1:-1;11640:22:0;;;;:15;:22;;;;;:29;;-1:-1:-1;;11640:29:0;11665:4;11640:29;;;11694:17;11705:5;11694:10;:17::i;:::-;11678:33;;11761:5;:11;;;-1:-1:-1;;;;;11725:82:0;11741:5;:11;;;-1:-1:-1;;;;;11725:82:0;;11781:5;11795;11725:82;;;;;;;;;;;;;;;;11091:722;;;;:::o;11823:679::-;11971:3;11951:5;:16;;;:23;;11976:13;;;;;;;;;;;;;-1:-1:-1;;;11976:13:0;;;11943:47;;;;;-1:-1:-1;;;11943:47:0;;;;;;;;;;;11999:13;12015:25;12034:5;12015:18;:25::i;:::-;11999:41;;12063:84;12090:5;:11;;;12112:5;12128:10;12063:16;:84::i;:::-;12156:17;;;;;;;;;;;;;-1:-1:-1;;;12156:17:0;;;12047:133;;;;;-1:-1:-1;;;12047:133:0;;;;;;;;;;-1:-1:-1;12198:22:0;;;;:15;:22;;;;;;;;;;12222:15;;;;;;;;;;;-1:-1:-1;;;12222:15:0;;;;;;;12198:22;;12197:23;12189:49;;;;-1:-1:-1;;;12189:49:0;;;;;;;;;;-1:-1:-1;12254:22:0;;;;:15;:22;;;;;;;;;;12278:24;;;;;;;;;;;-1:-1:-1;;;12278:24:0;;;;;;;12254:22;;12253:23;12245:58;;;;-1:-1:-1;;;12245:58:0;;;;;;;;;;-1:-1:-1;12312:22:0;;;;:15;:22;;;;;:29;;-1:-1:-1;;12312:29:0;12337:4;12312:29;;;12366:35;12395:5;12366:28;:35::i;:::-;12350:51;;12451:10;-1:-1:-1;;;;;12415:81:0;12431:5;:11;;;-1:-1:-1;;;;;12415:81:0;;12470:5;12484;12415:81;;;;;;;;10854:227;7815:13;;;;;;;;;;;;-1:-1:-1;;;7815:13:0;;;;;7869:10;-1:-1:-1;7852:28:0;;;;;;;;;;7916:14;;;;;;;;;;;-1:-1:-1;;;7916:14:0;;;;;;;9129:2;;7916:14;7852:41;;:55;;7836:101;;;;-1:-1:-1;;;7836:101:0;;;;;;;;;;-1:-1:-1;10979:16:0::1;:54:::0;;-1:-1:-1;;;;;;10979:54:0::1;-1:-1:-1::0;;;;;10979:54:0;::::1;;::::0;;11045:30:::1;::::0;::::1;::::0;::::1;::::0;10979:54;;11045:30:::1;;;;;;;;;;10854:227:::0;;:::o;7570:51::-;;;;;;;;;;;;;;:::o;12512:372::-;12593:11;;12620:25;;;;;;;;;;;;-1:-1:-1;;;12620:25:0;;;;;-1:-1:-1;;;;;12593:25:0;12608:10;12593:25;12585:61;;;;-1:-1:-1;;;12585:61:0;;;;;;;;;;;12655:13;12671:25;12690:5;12671:18;:25::i;:::-;12712:22;;;;:15;:22;;;;;;;;;;12736:24;;;;;;;;;;;-1:-1:-1;;;12736:24:0;;;;;;;12655:41;;-1:-1:-1;12736:24:0;12712:22;;12711:23;12703:58;;;;-1:-1:-1;;;12703:58:0;;;;;;;;;;-1:-1:-1;12770:22:0;;;;:15;:22;;;;;;;;;:29;;-1:-1:-1;;12770:29:0;12795:4;12770:29;;;12846:11;;;12826;;12811:67;;-1:-1:-1;;;;;12811:67:0;;;;;;;;;;;;12786:5;;12811:67;;;;;;;;;;12512:372;;:::o;10209:47::-;;;;;;;;;;;;;;;:::o;10116:40::-;;;-1:-1:-1;;;;;10116:40:0;;:::o;13749:1046::-;13897:4;;13917:10;:15;;;:41;;;;;;;;;13913:838;;;13992:230;14114:6;14034:99;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14034:99:0;;;14012:132;;;;;;14155:10;:12;;;14178:10;:12;;;14201:10;:12;;;13992:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13992:230:0;;;;;;;;-1:-1:-1;;;;;13981:241:0;:7;-1:-1:-1;;;;;13981:241:0;;13974:248;;;;13913:838;14259:20;14240:10;:15;;;:39;;;;;;;;;14236:515;;;14313:232;14437:6;14355:101;;;;;;;;;14236:515;14582:23;14563:10;:15;;;:42;;;;;;;;;14559:192;;;14639:104;14659:6;14676:10;:12;;;14699:10;:12;;;14722:10;:12;;;14639:104;;;;;;;;;;;;;;;;;;;14559:192;14766:22;;;;;;;;;;;-1:-1:-1;;;14766:22:0;;;;14759:30;;-1:-1:-1;;;14759:30:0;;;;14766:22;14759:30;;;;13749:1046;;;;;;:::o;8793:234::-;8899:4;8936:1;8923:10;:14;8939:13;;;;;;;;;;;;;-1:-1:-1;;;8939:13:0;;;8915:38;;;;;-1:-1:-1;;;8915:38:0;;;;;;;;;;-1:-1:-1;;;;;;;8968:25:0;;:16;:25;;;;;;;;;;;:38;;8967:54;;8793:234;;;;;:::o;12894:845::-;13083:21;;;;;:26;;13120:28;;;;;13159;;;;13198:30;;;;13239:27;;;;;13056:219;;12999:7;;;;13056:219;;13083:26;13198:30;;13056:219;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;13056:219:0;;;13038:244;;49:4:-1;13038:244:0;;;;13359:24;;;;:30;;13400:27;;;;13438:30;;;;;13038:244;;-1:-1:-1;13291:20:0;;13332:145;;13359:30;13400:27;;13438:30;13332:145;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13332:145:0;;;13314:170;;;;;;13291:193;;13553:4;13569:11;:17;;;13597:11;:17;;;13625:9;13645:12;13668:11;:16;;;13695:11;:22;;;13518:208;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13518:208:0;;;13500:233;;;;;;13493:240;;;;12894:845;;;:::o;10267:47::-;;;;;;;;;;;;;;;:::o;8313:240::-;7815:13;;;;;;;;;;;;-1:-1:-1;;;7815:13:0;;;;;7869:10;-1:-1:-1;7852:28:0;;;;;;;;;;7916:14;;;;;;;;;;;-1:-1:-1;;;7916:14:0;;;;;;;7373:1;;7916:14;7852:41;;:55;;7836:101;;;;-1:-1:-1;;;7836:101:0;;;;;;;;;;-1:-1:-1;;;;;;8447:25:0;::::1;:16;:25:::0;;;::::1;::::0;;;;;;;:40;;8476:11;::::1;8447:40;::::0;;;;8499:48;;8447:40;;:25;8499:48:::1;::::0;::::1;8313:240:::0;;;:::o;14805:485::-;14915:18;;14950:20;;;;:26;;14985:13;;15007:23;;;;15039:26;;;;;14915:157;;-1:-1:-1;;;14915:157:0;;14889:14;;-1:-1:-1;;;;;14915:18:0;;:26;;:157;;14950:26;;14985:13;;15007:23;;15039:26;14915:157;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14915:157:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15090:16:0;;15122:17;;;;;:22;;15153:24;;;;15186;;;;15219:26;;;;15254:23;;;;;15090:194;;-1:-1:-1;;;15090:194:0;;-1:-1:-1;;;;;15090:16:0;;;;-1:-1:-1;15090:23:0;;-1:-1:-1;15090:194:0;;15122:22;;15153:24;;15186;;15219:26;;15254:23;15090:194;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15090:194:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15090:194:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15090:194:0;;;;;;;;15300:612;15432:20;;;;:23;;;15402:14;;-1:-1:-1;;;;;15432:37:0;15428:101;;15485:20;;;;15511:10;15485:23;;;;:36;15428:101;15537:18;;15572:20;;;;:26;;15607:13;;15629:23;;;;15661:26;;;;;15537:157;;-1:-1:-1;;;15537:157:0;;-1:-1:-1;;;;;15537:18:0;;;;:26;;:157;;15572:26;15607:13;15629:23;15537:157;;;;592:434:-1;;690:3;683:4;675:6;671:17;667:27;657:2;;-1:-1;;698:12;657:2;745:6;732:20;18718:18;18710:6;18707:30;18704:2;;;-1:-1;;18740:12;18704:2;767:61;18813:9;18794:17;;-1:-1;;18790:33;18881:4;18871:15;767:61;;;758:70;;848:6;841:5;834:21;952:3;18881:4;943:6;876;934:16;;931:25;928:2;;;969:1;;959:12;928:2;20594:6;18881:4;876:6;872:17;18881:4;910:5;906:16;20571:30;20650:1;20632:16;;;18881:4;20632:16;20625:27;910:5;650:376;-1:-1;;650:376;1077:1203;;1193:6;1181:9;1176:3;1172:19;1168:32;1165:2;;;-1:-1;;1203:12;1165:2;1231:20;1246:4;1231:20;;;1222:29;;85:6;72:20;97:33;124:5;97:33;;;1309:75;;1446:2;1500:22;;72:20;97:33;72:20;97:33;;;1446:2;1461:16;;1454:75;1623:2;1608:18;;1595:32;1647:18;1636:30;;1633:2;;;-1:-1;;1669:12;1633:2;1714:71;1781:3;1772:6;1761:9;1757:22;1714:71;;;1623:2;1700:5;1696:16;1689:97;;1888:74;1958:3;1855:2;1938:9;1934:22;1888:74;;;1855:2;1874:5;1870:16;1863:100;1246:4;2083:9;2079:22;4973:20;2051:4;2044:5;2040:16;2033:75;2175:3;2234:9;2230:22;4973:20;2202:4;2195:5;2191:16;2184:75;1159:1121;;;;;2333:766;;2452:4;2440:9;2435:3;2431:19;2427:30;2424:2;;;-1:-1;;2460:12;2424:2;2488:20;2452:4;2488:20;;;2479:29;;363:6;350:20;2569:16;2562:75;2695:2;2753:9;2749:22;350:20;2695:2;2714:5;2710:16;2703:75;2869:47;2912:3;2836:2;2892:9;2888:22;2869:47;;;2836:2;2855:5;2851:16;2844:73;2978:2;3053:9;3049:22;504:20;22043:1;22036:5;22033:12;22023:2;;22059:1;;22049:12;22023:2;2978;2993:16;;2986:92;2997:5;2418:681;-1:-1;;2418:681;3148:1088;;3259:4;3247:9;3242:3;3238:19;3234:30;3231:2;;;-1:-1;;3267:12;3231:2;3295:20;3259:4;3295:20;;;3286:29;;3378:17;3365:31;3416:18;;3408:6;3405:30;3402:2;;;3393:1;;3438:12;3402:2;3483:55;3534:3;3525:6;3514:9;3510:22;3483:55;;;3465:16;3458:81;3630:2;3619:9;3615:18;3602:32;3588:46;;3416:18;3646:6;3643:30;3640:2;;;3393:1;;3676:12;3640:2;;3721:55;3772:3;3763:6;3752:9;3748:22;3721:55;;;3630:2;3707:5;3703:16;3696:81;;3840:2;3898:9;3894:22;4973:20;3840:2;3859:5;3855:16;3848:75;4021:47;4064:3;3988:2;4044:9;4040:22;4021:47;;;3988:2;4007:5;4003:16;3996:73;4131:3;4190:9;4186:22;72:20;97:33;124:5;97:33;;;4131:3;4147:16;;4140:75;4151:5;3225:1011;-1:-1;;3225:1011;4288:611;;4402:4;4390:9;4385:3;4381:19;4377:30;4374:2;;;-1:-1;;4410:12;4374:2;4438:20;4402:4;4438:20;;;4429:29;;85:6;72:20;97:33;124:5;97:33;;;4516:75;;4650:2;4704:22;;72:20;97:33;72:20;97:33;;;4683:49;4650:2;4669:5;4665:16;4658:75;;4795:2;4853:9;4849:22;4973:20;4795:2;4814:5;4810:16;4803:75;4368:531;;;;;5043:126;5108:20;;19901:4;19890:16;;22256:33;;22246:2;;22303:1;;22293:12;5176:241;;5280:2;5268:9;5259:7;5255:23;5251:32;5248:2;;;-1:-1;;5286:12;5248:2;85:6;72:20;97:33;124:5;97:33;;5424:263;;5539:2;5527:9;5518:7;5514:23;5510:32;5507:2;;;-1:-1;;5545:12;5507:2;226:6;220:13;238:33;265:5;238:33;;5694:552;;;;5862:3;5850:9;5841:7;5837:23;5833:33;5830:2;;;-1:-1;;5869:12;5830:2;85:6;72:20;97:33;124:5;97:33;;;5921:63;-1:-1;6021:2;6060:22;;350:20;;-1:-1;6147:83;6222:7;6129:2;6198:22;;6147:83;;;6137:93;;5824:422;;;;;;6253:366;;;6374:2;6362:9;6353:7;6349:23;6345:32;6342:2;;;-1:-1;;6380:12;6342:2;85:6;72:20;97:33;124:5;97:33;;;6432:63;6532:2;6571:22;;;;4973:20;;-1:-1;;;6336:283;6626:241;;6730:2;6718:9;6709:7;6705:23;6701:32;6698:2;;;-1:-1;;6736:12;6698:2;-1:-1;350:20;;6692:175;-1:-1;6692:175;6874:381;;7005:2;6993:9;6984:7;6980:23;6976:32;6973:2;;;-1:-1;;7011:12;6973:2;7069:17;7056:31;7107:18;7099:6;7096:30;7093:2;;;-1:-1;;7129:12;7093:2;7159:80;7231:7;7222:6;7211:9;7207:22;7159:80;;;7149:90;6967:288;-1:-1;;;;6967:288;7262:567;;;7440:3;7428:9;7419:7;7415:23;7411:33;7408:2;;;-1:-1;;7447:12;7408:2;7505:17;7492:31;7543:18;7535:6;7532:30;7529:2;;;-1:-1;;7565:12;7529:2;7595:80;7667:7;7658:6;7647:9;7643:22;7595:80;;;7585:90;;;7730:83;7805:7;7712:2;7785:9;7781:22;7730:83;;;7720:93;;7402:427;;;;;;8843:339;;8980:5;18987:12;19144:6;19139:3;19132:19;9074:52;9119:6;19181:4;19176:3;19172:14;19181:4;9100:5;9096:16;9074:52;;;18813:9;21466:14;-1:-1;;21462:28;9138:39;;;;19181:4;9138:39;;8931:251;-1:-1;;8931:251;10910:1078;-1:-1;;;;;;21681:2;21677:14;;;;;8045:58;;21677:14;;;;;11294:2;11285:12;;8045:58;21677:14;;;;;;;11396:12;;;8045:58;11507:12;;;8297:37;;;;11618:12;;;8297:37;11729:12;;;8297:37;;;;11840:12;;;8297:37;;;;11951:12;;;11185:803;11995:522;-1:-1;;;;;;21681:2;21677:14;;;;;8045:58;;21677:14;;;;;;;12267:2;12258:12;;8045:58;12369:12;;;8297:37;12480:12;;;12158:359;12524:819;;9344:5;18987:12;9456:52;9501:6;9496:3;9489:4;9482:5;9478:16;9456:52;;;18987:12;;;9520:16;;9456:52;18987:12;9520:16;9489:4;9478:16;;9456:52;;;9520:16;8297:37;;;-1:-1;;21574:15;;;;;-1:-1;;;;;;21574:15;9489:4;13089:12;;10844:54;21681:2;21677:14;-1:-1;;;;;;21677:14;13196:11;;;8045:58;13306:12;;;12771:572;-1:-1;;12771:572;13350:511;9845:66;9825:87;;9809:2;9931:12;;8297:37;;;;13824:12;;;13558:303;13868:511;10254:66;10234:87;;10218:2;10340:12;;8297:37;;;;14342:12;;;14076:303;14386:213;-1:-1;;;;;19685:54;;;;7907:37;;14504:2;14489:18;;14475:124;14606:547;-1:-1;;;;;19685:54;;;7907:37;;19685:54;;;14973:2;14958:18;;7907:37;19685:54;;15056:2;15041:18;;7907:37;15139:2;15124:18;;8297:37;;;;14808:3;14793:19;;14779:374;15160:324;-1:-1;;;;;19685:54;;;;7907:37;;15470:2;15455:18;;8297:37;15306:2;15291:18;;15277:207;15491:201;19518:13;;19511:21;8180:34;;15603:2;15588:18;;15574:118;15699:213;8297:37;;;15817:2;15802:18;;15788:124;15919:539;8297:37;;;19901:4;19890:16;;;;16278:2;16263:18;;10712:35;16361:2;16346:18;;8297:37;16444:2;16429:18;;8297:37;16117:3;16102:19;;16088:370;16977:293;;17111:2;17132:17;17125:47;17186:74;17111:2;17100:9;17096:18;17246:6;17186:74;;17277:811;;17535:3;17557:17;17550:47;17611:74;17535:3;17524:9;17520:19;17671:6;17611:74;;;17733:9;17727:4;17723:20;17718:2;17707:9;17703:18;17696:48;17758:74;17827:4;17818:6;17758:74;;;17911:2;17896:18;;8297:37;;;;-1:-1;;19901:4;19890:16;;;;17990:2;17975:18;;10712:35;-1:-1;;;;;19685:54;18073:3;18058:19;;;7907:37;17750:82;17506:582;-1:-1;;17506:582;18315:256;18377:2;18371:9;18403:17;;;18478:18;18463:34;;18499:22;;;18460:62;18457:2;;;18535:1;;18525:12;18457:2;18377;18544:22;18355:216;;-1:-1;18355:216;20667:268;20732:1;20739:101;20753:6;20750:1;20747:13;20739:101;;;20820:11;;;20814:18;20801:11;;;20794:39;20775:2;20768:10;20739:101;;;20855:6;20852:1;20849:13;20846:2;;;20732:1;20911:6;20906:3;20902:16;20895:27;20846:2;;20716:219;;;;21709:117;-1:-1;;;;;19685:54;;21768:35;;21758:2;;21817:1;;21807:12;21758:2;21752:74;

Swarm Source

ipfs://e0c6d7be6e6859867111bf5f83248a43f5370c8d01fda28b2baa69b506c3710f
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.