code: function(object, comparator, left, right)
      {
          function defaultComparator(a, b)
          {
              return a < b ? -1 : (a > b ? 1 : 0);
          }
          comparator = comparator || defaultComparator;
          var l = left || 0;
          var r = right !== undefined ? right : this.length;
          while (l < r) {
              var m = (l + r) >> 1;
              if (comparator(object, this[m]) > 0)
                  l = m + 1;
              else
                  r = m;
          }
          return r;
      }
docs: Return index of the leftmost element that is equal or greater
  than the specimen object. If there's no such element (i.e. all
  elements are smaller than the specimen) returns right bound.
  The function works for sorted array.
  When specified, |left| (inclusive) and |right| (exclusive) indices
  define the search window.
  
  @param {!T} object
  @param {function(!T,!S):number=} comparator
  @param {number=} left
  @param {number=} right
  @return {number}
  @this {Array.<!S>}
  @template T,S