if (rate && (aMaxTotalProgress > 0)) { var rem = (aMaxTotalProgress - aCurTotalProgress) / rate; rem = parseInt(rem + .5);  status = this._replaceInsert(status, 3, this._formatSeconds(rem, this.doc) + " " + this._remain); 
let (remain) { if ((aDownload.speed > 0) && (aMaxTotalProgress > 0)) remain = this._formatSeconds((aMaxTotalProgress - aCurTotalProgress) / aDownload.speed) + " " + this._remain; else remain = this._unknownTimeLeft;   status = this._replaceInsert(status, 4, remain); 
  onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress,                              aCurTotalProgress, aMaxTotalProgress, aDownload)  {    var overallProgress = aCurTotalProgress;    // Get current time.    var now = (new Date()).getTime();        // If interval hasn't elapsed, ignore it.    if (now - this.lastUpdate < interval && aMaxTotalProgress != "-1" &&          parseInt(aCurTotalProgress) < parseInt(aMaxTotalProgress)) {      return;    }    // Update this time.    this.lastUpdate = now;    var downloadID = "dl" + aDownload.id;    var download = this.doc.getElementById(downloadID);    // Calculate percentage.    var percent;    if (aMaxTotalProgress > 0) {      percent = Math.floor((overallProgress*100.0)/aMaxTotalProgress);      if (percent > 100)        percent = 100;      // Advance progress meter.      if (download) {        download.setAttribute("progress", percent);        download.setAttribute("progressmode", "normal");                onUpdateProgress();      }    }    else {      percent = -1;      // Progress meter should be barber-pole in this case.      download.setAttribute("progressmode", "undetermined");    }    // Now that we've set the progress and the time, update the UI with     // all the the pertinent information (bytes transferred, bytes total,    // download rate, time remaining).     var status = this._statusFormat;    // Insert the progress so far using the formatting routine.     var KBProgress = parseInt(overallProgress/1024 + .5);    var KBTotal = parseInt(aMaxTotalProgress/1024 + .5);    var kbProgress = this._formatKBytes(KBProgress, KBTotal);    status = this._replaceInsert(status, 1, kbProgress);    if (download)      download.setAttribute("status-internal", kbProgress);    var rate = aDownload.speed;    if (rate) {      // rate is bytes/sec      var kRate = rate / 1024; // K bytes/sec;      kRate = parseInt( kRate * 10 + .5 ); // xxx (3 digits)      // Don't update too often!      if (kRate != this.priorRate) {        if (this.rateChanges++ == this.rateChangeLimit) {            // Time to update download rate.            this.priorRate = kRate;            this.rateChanges = 0;        }        else {          // Stick with old rate for a bit longer.          kRate = this.priorRate;        }      }      else        this.rateChanges = 0;      var fraction = kRate % 10;      kRate = parseInt((kRate - fraction) / 10);      // Insert 3 is the download rate (in kilobytes/sec).      if (kRate < 100)        kRate += "." + fraction;      status = this._replaceInsert(status, 2, kRate);    }    else      status = this._replaceInsert(status, 2, "??.?");    // Update time remaining.    if (rate && (aMaxTotalProgress > 0)) {      var rem = (aMaxTotalProgress - aCurTotalProgress) / rate;      rem = parseInt(rem + .5);            status = this._replaceInsert(status, 3, this._formatSeconds(rem, this.doc) + " " + this._remain);    }    else      status = this._replaceInsert(status, 3, this._unknownFilesize);        if (download)      download.setAttribute("status", status);  },
5459	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/5459/f7eb33d7a3cde8d05f592f480bcb7f60feab542a/DownloadProgressListener.js/clean/toolkit/mozapps/downloads/content/DownloadProgressListener.js