internal static ReconciliationCookie GetReconciliationCookie(ProvisioningReconciliationConfig provisioningReconciliationConfig, Task.TaskErrorLoggingDelegate errorLogger)
        {
            ITopologyConfigurationSession topologyConfigurationSession = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromRootOrgScopeSet(), 42, "GetReconciliationCookie", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Common\\ProvisioningReconciliationHelper.cs");
            ReconciliationCookie          reconciliationCookie         = null;

            if (provisioningReconciliationConfig.ReconciliationCookies != null && provisioningReconciliationConfig.ReconciliationCookies.Count > 0)
            {
                string empty = string.Empty;
                bool   flag  = false;
                using (MultiValuedProperty <ReconciliationCookie> .Enumerator enumerator = provisioningReconciliationConfig.ReconciliationCookies.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        ReconciliationCookie reconciliationCookie2 = enumerator.Current;
                        if (reconciliationCookie2.Version == ProvisioningReconciliationHelper.CurrentCookieVersion && ProvisioningReconciliationHelper.IsServerSuitable(reconciliationCookie2.InvocationId, topologyConfigurationSession, out empty, out flag))
                        {
                            reconciliationCookie = new ReconciliationCookie(reconciliationCookie2.Version, empty, reconciliationCookie2.InvocationId, reconciliationCookie2.HighestCommittedUsn);
                            if (flag)
                            {
                                break;
                            }
                        }
                    }
                    goto IL_E8;
                }
            }
            Fqdn[] domainControllersInLocalSite = ProvisioningReconciliationHelper.GetDomainControllersInLocalSite(errorLogger);
            if (domainControllersInLocalSite != null)
            {
                foreach (Fqdn fqdn in domainControllersInLocalSite)
                {
                    reconciliationCookie = ProvisioningReconciliationHelper.GetReconciliationCookieForDomainController(fqdn, topologyConfigurationSession, errorLogger);
                    if (reconciliationCookie != null)
                    {
                        break;
                    }
                }
            }
IL_E8:
            if (reconciliationCookie != null)
            {
                return(reconciliationCookie);
            }
            errorLogger(new TaskException(Strings.ErrorNoActiveDCForProvisioningReconciliationCookie), (ErrorCategory)1001, null);
            return(null);
        }
        private static ReconciliationCookie GetReconciliationCookieForDomainController(Fqdn fqdn, ITopologyConfigurationSession configSession, Task.TaskErrorLoggingDelegate errorLogger)
        {
            ADServer adserver = configSession.FindDCByFqdn(fqdn);

            if (adserver != null)
            {
                LocalizedString empty = LocalizedString.Empty;
                string          text;
                if (SuitabilityVerifier.IsServerSuitableIgnoreExceptions(adserver.DnsHostName, true, null, out text, out empty))
                {
                    ITopologyConfigurationSession sessionForDC = ProvisioningReconciliationHelper.GetSessionForDC(adserver);
                    RootDse rootDse          = sessionForDC.GetRootDse();
                    Guid    invocationIdByDC = sessionForDC.GetInvocationIdByDC(adserver);
                    return(new ReconciliationCookie(ProvisioningReconciliationHelper.CurrentCookieVersion, adserver.DnsHostName, invocationIdByDC, rootDse.HighestCommittedUSN));
                }
            }
            return(null);
        }