code: private LazyNode getOptionalValueToken(int index) throws LazyException{
  		if(index<0)throw new LazyException("Array undex can not be negative");
  		int num=0;
  		LazyNode child=root.child;
  		// If the value we are looking for is past our previous traversal point
  		// continue at the previous point
  		if(selectInt>-1 && index>=selectInt){
  			num=selectInt;
  			child=selectToken;
  		}
  		while(child!=null){
  			if(num==index){
  				// Store the traversal point and return the current token
  				selectInt=index;
  				selectToken=child;
  				return child;
  			}
  			num++;
  			child=child.next;
  		}
  		return null;
  	}
docs: Values for an array are attached as children on the token representing
  the array itself. This method finds the correct child for a given index
  and returns it.
  
  Since children are stored as a linked list, this method is likely to be
  a serious O(n) performance bottleneck for array access. To improve this
  for the most common case, we maintain a traversal index and pointer into
  the children - meaning that if you traverse the array from the beginning
  the complexity will be O(1) for each access request instead.
  
  @param index the location of the desired value
  @return the child for the given index or null if the index does not exist
  @throws LazyException if the index is out of bounds