@Override
	public void analyze()
	{
		// Wrap bytes in LisNodes. Note that we decode integers from each possible starting position, even though the same bytes then might be used more than once (with TIMESTAMP_BYTES > 1). It's just a heuristic...
		List<LisNode<Long>> lisNodes = new LinkedList<>();
		
		for (int i = 0; i < bytes.length - (TIMESTAMP_BYTES - 1); i++)
		{
			lisNodes.add(new LisNode<>(i, Tools.decodeUnsignedInteger(bytes, i, TIMESTAMP_BYTES)));
		}
		
		// Find LIS
		List<LisNode<Long>> lis = lis(lisNodes);
		
		// Walk through result
		for (LisNode<Long> node : lis)
		{
			if (PRINT_HITS)
			{
				System.out.println("DEBUG: Timestamp hit at index " + node.index + " with time " + node.value);
			}
			
			if ((RANGE_START == null || node.value >= RANGE_START) && (RANGE_END == null || node.value <= RANGE_END))
			{
				markByte(node.index + 0, 'T');
				markByte(node.index + 1, 'I');
				markByte(node.index + 2, 'M');
				markByte(node.index + 3, 'E');
			}
		}
	}