public static ForensicTimeline[] GetInstances(ShellLink[] input)
 {
     List<ForensicTimeline> list = new List<ForensicTimeline>();
     foreach (ShellLink s in input)
     {
         foreach (ForensicTimeline t in Get(s))
         {
             list.Add(t);
         }
     }
     return list.ToArray();
 }
        public static ForensicTimeline[] Get(ShellLink input)
        {
            List<ForensicTimeline> macs = new List<ForensicTimeline>();

            #region DetermineTime

            Dictionary<DateTime, ACTIVITY_TYPE> dictionary = new Dictionary<DateTime, ACTIVITY_TYPE>();

            // Creation Time
            dictionary[input.CreationTime] = ACTIVITY_TYPE.b;

            // Access Time
            if (dictionary.ContainsKey(input.AccessTime))
            {
                dictionary[input.AccessTime] = dictionary[input.AccessTime] | ACTIVITY_TYPE.a;
            }
            else
            {
                dictionary.Add(input.AccessTime, ACTIVITY_TYPE.a);
            }

            // Modified Time
            if (dictionary.ContainsKey(input.WriteTime))
            {
                dictionary[input.WriteTime] = dictionary[input.WriteTime] | ACTIVITY_TYPE.m;
            }
            else
            {
                dictionary.Add(input.WriteTime, ACTIVITY_TYPE.m);
            }

            #endregion DetermineTime

            foreach (var time in dictionary)
            {
                string activity = ToFriendlyString(time.Value);
                macs.Add(new ForensicTimeline(time.Key, activity, "ShellLink", "", input.LocalBasePath, input.ToString()));
            }

            return macs.ToArray();
        }