docs: private String nextAT() {
      // skip preceding space chars, they can present after
      // comma or semicolon (compatibility with RFC 1779)
      for (; pos < length && chars[pos] == ' '; pos++) {
      }
      if (pos == length) {
        return null; // reached the end of DN
      }
  
      // mark the beginning of attribute type
      beg = pos;
  
      // attribute type chars
      pos++;
      for (; pos < length && chars[pos] != '=' && chars[pos] != ' '; pos++) {
        // we don't follow exact BNF syntax here:
        // accept any char except space and '='
      }
      if (pos >= length) {
        throw new IllegalStateException("Unexpected end of DN: " + dn);
      }
  
      // mark the end of attribute type
      end = pos;
  
      // skip trailing space chars between attribute type and '='
      // (compatibility with RFC 1779)
      if (chars[pos] == ' ') {
        for (; pos < length && chars[pos] != '=' && chars[pos] == ' '; pos++) {
        }
  
        if (chars[pos] != '=' || pos == length) {
          throw new IllegalStateException("Unexpected end of DN: " + dn);
        }
      }
  
      pos++; //skip '=' char
  
      // skip space chars between '=' and attribute value
      // (compatibility with RFC 1779)
      for (; pos < length && chars[pos] == ' '; pos++) {
      }
  
      // in case of oid attribute type skip its prefix: "oid." or "OID."
      // (compatibility with RFC 1779)
      if ((end - beg > 4) && (chars[beg + 3] == '.')
          && (chars[beg] == 'O' || chars[beg] == 'o')
          && (chars[beg + 1] == 'I' || chars[beg + 1] == 'i')
          && (chars[beg + 2] == 'D' || chars[beg + 2] == 'd')) {
        beg += 4;
      }
  
      return new String(chars, beg, end - beg);
    }