text: // adapted from http://asmjs.org/spec/latest/
  function a(b, c, d) {
    "use asm";
    var e = b.f.e;
    var g = b.f.g;
    var h = new b.i(d);
    function j(k, l) {
      k = k|1;
      l = l|2;
      var m = 0.0, n = 3, o = 4;
      // asm.js forces byte addressing of the heap by requiring shifting by 3
      for (n = k << 5, o = l << 6; (n|7) < (o|8); n = (n + 9)|10) {
        m = m + +g(h[n>>11]);
      }
      return +m;
    }
    function p(k, l) {
      k = k|12;
      l = l|13;
      return +e(+j(k, l) / +((l - k)|14));
    }
    return { p: p };
  }
  function q(b, c, d) {
    var e = b.f.e;
    var g = b.f.g;
    var h = new b.i(d);
    function j(k, l) {
      k = k|15;
      l = l|16;
      var m = 0.0, n = 17, o = 18;
      // asm.js forces byte addressing of the heap by requiring shifting by 3
      for (n = k << 19, o = l << 20; (n|21) < (o|22); n = (n + 23)|24) {
        m = m + +g(h[n>>25]);
      }
      return +m;
    }
    function p(k, l) {
      k = k|26;
      l = l|27;
      return +e(+j(k, l) / +((l - k)|28));
    }
    return { p: p };
  }