code: function Registrar(web3, ens = new ENS(web3), tld = 'eth', minLength = 7, callback) {
    this.web3 = web3;
  
    // prior to version 0.16, web3.sha3 didn't prepend '0x', to support both options
    // here we attach a sha3 method to the registrar object, and ensure that it
    // always prepends '0x'
    this.sha3 = function sha3withZeroX(...args) {
      const result = web3.sha3.apply(this, args);
      if (result[1] !== 'x') {
        return `0x${result}`;
      }
      return result;
    };
  
    this.ens = ens;
    this.tld = tld;
    this.minLength = minLength;
    this.rootNode = namehash(this.tld);
  
    const thisRegistrar = this;
  
    ens.owner(this.tld, (err, result) => {
      if (err) {
        callback(err, null);
      } else {
        this.address = result;
        this.contract = this.web3.eth.contract(interfaces.registrarInterface).at(result);
        this.contract.registryStarted((startingErr, startingDate) => {
          thisRegistrar.registryStarted = startingDate;
          callback(null, result);
        });
      }
    });
  }
docs: Constructs a new Registrar instance, providing an easy-to-use interface
  to the [Auction Registrar][docs], which governs the `.eth` namespace.
  
  @example
  var registrar = new Registrar(web3, ens, 'eth', 7,
  function (err, txid) {
  console.log(txid);
  }
  );
  
  @author Maurelian
  @date 2016
  @license LGPL
  
  @param {object} web3 A web3 instance to use to communicate with the blockchain.
  @param {address} address The address of the registrar.
  @param {integer} minLength The minimum length of a name require by the registrar.
  @param {string} tld The top level domain
  @param {string} ens The address of the ENS instance
  
  @returns {string} The registrar address