anchor.diff:      return completer.future;
     }
   
  -  void _startResponseRangeFile(hetima.HetiSocket socket, hetima.HetimaFile file, int start, int end) {
  +  void _startResponseRangeFile(hetima.HetiSocket socket, hetima.HetimaFile file, String contentType, int start, int end) {
       hetima.ArrayBuilder response = new hetima.ArrayBuilder();
       file.getLength().then((int length) {
  -      if(end == -1||end>length-1) {
  -        end = length-1;
  +      if (end == -1 || end > length - 1) {
  +        end = length - 1;
         }
  -      int contentLength = end-start+1;
  +      int contentLength = end - start + 1;
         response.appendString("HTTP/1.1 206 Partial Content\r\n");
         response.appendString("Connection: close\r\n");
   //      response.appendString("Accept-Ranges: bytes\r\n");
         response.appendString("Content-Length: ${contentLength}\r\n");
  -      response.appendString("Content-Type: video/mp4\r\n");
  +      response.appendString("Content-Type: ${contentType}\r\n");
         response.appendString("Content-Range: bytes ${start}-${end}/${length}\r\n");
         response.appendString("\r\n");
         print(response.toText());
  
positive.code:     });
    }
  
    async.Future _startResponseHomePage(hetima.HetiSocket socket) {
      StringBuffer content = new StringBuffer();
      content.write("<html>");
      content.write("<body>");
      for (String r in _publicFileList.keys) {
        content.write("<div><a href=./${r}>${r}</div>");
        content.write("<video src=\"${r}\"><p>unsupport video tag</p></video>");
      }
      content.write("</body>");
      content.write("</html>");
  
  
negative.code:       });
      });
    }
  
    void _startResponseFile(hetima.HetiSocket socket, hetima.HetimaFile file) {
      hetima.ArrayBuilder response = new hetima.ArrayBuilder();
      file.getLength().then((int length) {
  