docs: public String generateDictionary(int length, int context, final String seed, int lookahead, boolean destructive, boolean terminateAtNull) {
      String str = seed;
      String prefix = "";
      while (str.length() < length) {
        TrieNode node = prefix.isEmpty() ? inner.root() : inner.matchPredictor(prefix);
        if (null == node) {
          prefix = prefix.substring(1);
        }
        TrieNode nextNode = maxNextNode(node, lookahead);
        if (null == nextNode) break;
        if (destructive) nextNode.removeCursorCount();
        String next = nextNode.getString(node);
        str += next;
        prefix = str.substring(Math.max(str.length() - context, 0), str.length());
        if (next.isEmpty()) {
          if (prefix.isEmpty()) {
            break;
          }
          else {
            prefix = prefix.substring(1);
          }
        }
        if (nextNode.getChar() == NodewalkerCodec.END_OF_STRING) {
          if (terminateAtNull) {
            break;
          }
          else {
            prefix = "";
          }
        }
      }
      return str.substring(0, Math.min(length, str.length()));
    }