code: func NewAllocatorCIDRRange(cidr *net.IPNet, allocatorFactory allocator.AllocatorFactory) *Range {
  	max := RangeSize(cidr)
  	base := bigForIP(cidr.IP)
  	rangeSpec := cidr.String()
  
  	r := Range{
  		net:  cidr,
  		base: base.Add(base, big.NewInt(1)), // don't use the network base
  		max:  maximum(0, int(max-2)),        // don't use the network broadcast,
  	}
  	r.alloc = allocatorFactory(r.max, rangeSpec)
  	return &r
  }
docs: // NewAllocatorCIDRRange creates a Range over a net.IPNet, calling allocatorFactory to construct the backing store.