code: public Pooled<T> get(LogTarget lt) throws APIException {
  		Pooled<T> pt;
  		synchronized (list) {
  			if (list.isEmpty()) {
  				pt = null;
  			} else {
  				pt = list.remove();
  				--count;
  				creator.reuse(pt.content);
  			}
  		}
  		if (pt == null) {
  			if (spares < max_range)
  				++spares;
  			pt = new Pooled<T>(creator.create(), this, lt);
  			lt.log("Pool created ", creator.toString());
  		} else {
  			if (spares > 1)
  				--spares;
  		}
  		return pt;
  	}
docs: This is the essential function for Pool. Get an Object "T" inside a
  "Pooled<T>" object. If there is a spare Object, then use it. If not, then
  create and pass back.
  
  If you don't have access to a LogTarget from Env, use LogTarget.NULL
  
  IMPORTANT: When the use of this object is done (and the object is still
  in a valid state), then "done()" should be called immediately to allow
  the object to be reused. That is the point of the Pool...
  
  If the Object is in an invalid state, then "toss()" should be used so the
  Pool doesn't pass on invalid objects to others.
  
  @param lt
  @return
  @throws APIException