public virtual string ComputeFailureHash(Exception failureException)
        {
            string result;

            WatsonExceptionReport.TryStringHashFromStackTrace(failureException, false, out result);
            return(result);
        }
        protected override void PrepareBucketingParameters()
        {
            Exception baseException = null;
            string    s             = null;
            string    text          = null;
            string    text2         = null;
            string    text3         = null;
            Version   v             = null;
            int       num           = 0;
            int       num2          = 0;
            string    text4         = null;

            if (this.exception != null)
            {
                text2 = this.exception.GetType().ToString();
                WatsonExceptionReport.TryStringHashFromStackTrace(this.exception, base.IsFlagSet(ReportOptions.DeepStackTraceHash), out text3);
                baseException = this.exception.GetBaseException();
                try
                {
                    string text5 = (baseException == null) ? null : baseException.StackTrace;
                    if (!string.IsNullOrEmpty(text5))
                    {
                        MatchCollection matchCollection = WatsonExceptionReport.regexFunctions.Matches(text5);
                        foreach (object obj in matchCollection)
                        {
                            Match match = (Match)obj;
                            if (match.Groups.Count == 2)
                            {
                                if (text == null)
                                {
                                    text = match.Groups[1].Value;
                                }
                                if (match.Groups[1].Value.Contains("Microsoft."))
                                {
                                    text = match.Groups[1].Value;
                                    if (text.IndexOf("throw", StringComparison.OrdinalIgnoreCase) <= 0 && text.IndexOf("failfast", StringComparison.OrdinalIgnoreCase) <= 0 && text.IndexOf("assert", StringComparison.OrdinalIgnoreCase) <= 0 && text.IndexOf("error", StringComparison.OrdinalIgnoreCase) <= 0)
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    if (text != null)
                    {
                        string text6 = text;
                        try
                        {
                            int num3 = text.LastIndexOf(Type.Delimiter + ".");
                            if (num3 < 0)
                            {
                                num3 = text.LastIndexOf(Type.Delimiter);
                            }
                            text6 = text.Substring(0, num3);
                        }
                        catch
                        {
                        }
                        Type type = Type.GetType(text6);
                        if (type == null)
                        {
                            foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
                            {
                                type = assembly.GetType(text6);
                                if (type != null)
                                {
                                    break;
                                }
                            }
                        }
                        if (type != null)
                        {
                            if (WatsonReport.IsAssemblyDynamic(type.Assembly))
                            {
                                s = "[Dynamic Assembly]";
                                v = new Version(0, 0, 0, 0);
                            }
                            else
                            {
                                try
                                {
                                    s = Path.GetFileName(type.Assembly.Location);
                                }
                                catch
                                {
                                }
                                try
                                {
                                    object[] customAttributes = type.Assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false);
                                    if (customAttributes.Length == 1)
                                    {
                                        AssemblyFileVersionAttribute assemblyFileVersionAttribute = customAttributes[0] as AssemblyFileVersionAttribute;
                                        if (assemblyFileVersionAttribute != null)
                                        {
                                            v = new Version(assemblyFileVersionAttribute.Version);
                                        }
                                    }
                                }
                                catch
                                {
                                }
                            }
                        }
                    }
                    PropertyInfo propertyInfo = (baseException == null) ? null : baseException.GetType().GetProperty("DiagCtx");
                    if (propertyInfo != null)
                    {
                        MethodInfo getMethod = propertyInfo.GetGetMethod();
                        object     obj2      = getMethod.Invoke(baseException, null);
                        this.lids = obj2.ToString();
                        MatchCollection matchCollection2 = WatsonExceptionReport.regexLids.Matches(this.lids);
                        foreach (object obj3 in matchCollection2)
                        {
                            Match match2 = (Match)obj3;
                            if (match2.Groups.Count >= 2)
                            {
                                string value = match2.Groups[0].Value;
                                num  = WatsonReport.ComputeHash(value, num);
                                num2 = Convert.ToInt32(match2.Groups[1].Value);
                                if (match2.Groups.Count == 4)
                                {
                                    text4 = match2.Groups[3].Value;
                                }
                            }
                        }
                        num &= 65535;
                    }
                    if (ExWatson.MsInternal)
                    {
                        base.CrashDetails = WatsonReport.GetValidString(this.GetExWatsonCrashDetailsString());
                    }
                }
                catch
                {
                }
            }
            if (baseException != null && baseException.TargetSite != null)
            {
                this.baseExceptionTargetSite = base.EvaluateOrDefault <string>(delegate
                {
                    RuntimeMethodHandle methodHandle = baseException.TargetSite.MethodHandle;
                    IntPtr value2 = baseException.TargetSite.MethodHandle.Value;
                    return(baseException.TargetSite.MethodHandle.Value.ToString());
                }, "unknown");
                this.baseExceptionAssemblyName = base.EvaluateOrDefault <string>(delegate
                {
                    if (baseException.TargetSite.Module == null)
                    {
                        return("unknown");
                    }
                    return(baseException.TargetSite.Module.Name ?? "unknown");
                }, "unknown");
                this.baseExceptionMethodName = base.EvaluateOrDefault <string>(delegate
                {
                    string text7 = null;
                    if (baseException.TargetSite.ReflectedType != null)
                    {
                        text7 = baseException.TargetSite.ReflectedType.FullName;
                    }
                    string name = baseException.TargetSite.Name;
                    if (text7 == null || name == null)
                    {
                        return("unknown");
                    }
                    return(text7 + "." + name);
                }, "unknown");
            }
            else
            {
                this.baseExceptionTargetSite   = "unknown";
                this.baseExceptionAssemblyName = "unknown";
                this.baseExceptionMethodName   = "unknown";
            }
            try
            {
                if (this.lids != null)
                {
                    text3 = text3 + "-" + Convert.ToString(num, 16);
                    this.baseExceptionAssemblyName = this.baseExceptionAssemblyName + "-" + num2;
                    if (text4 != null)
                    {
                        text2 = text2 + "-" + text4;
                    }
                }
            }
            catch
            {
            }
            base.SetBucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.ExceptionType, WatsonReport.GetValidString(text2));
            base.SetBucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.AssemblyName, WatsonReport.GetValidString(s));
            base.SetBucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.AssemblyVer, WatsonReport.ExchangeFormattedVersion(v));
            base.SetBucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.ExMethodName, WatsonReport.GetValidString(text));
            base.SetBucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.CallstackHash, WatsonReport.GetValidString(text3));
        }