public void Run()
        {
            Trace.TraceInformation("Document Set Manager Initiated");

            List   documentLibrary = DocumentWeb.Lists.GetByTitle(Config.DocumentLibrary);
            Folder rootFolder      = documentLibrary.RootFolder;

            Ctx.Load(documentLibrary);
            Ctx.Load(rootFolder, i => i.Folders, i => i.Name);
            Ctx.ExecuteQuery();

            foreach (KeyValuePair <string, string> folderToDocumentMap in Config.FolderToDocumentSetMapping)
            {
                Trace.TraceInformation($"Mapping: {folderToDocumentMap.Key} to {folderToDocumentMap.Value}. Major Versions Only: {Config.MajorVersionsOnly}");

                ContentType         documentSetCt = DocumentWeb.ContentTypes.GetByName(folderToDocumentMap.Value);
                Folder              folder        = rootFolder.Folders.GetByName(folderToDocumentMap.Key);
                DocumentSetTemplate dst           = DocumentSetTemplate.GetDocumentSetTemplate(Ctx, documentSetCt);
                Ctx.Load(documentSetCt);
                Ctx.Load(folder);
                Ctx.Load(dst, i => i.DefaultDocuments);
                Ctx.ExecuteQuery();

                Trace.TraceInformation($"Deleting existing documents from the {folderToDocumentMap.Value}");
                dst.Clear();

                CamlQuery cq = CreateAllFilesQuery();
                cq.FolderServerRelativeUrl = folder.ServerRelativeUrl;
                ListItemCollection documents = documentLibrary.GetItems(cq);

                Ctx.Load(documents, icol => icol.Include(i => i.File));
                Ctx.Load(documents, icol => icol.Include(i => i.ContentType));
                Ctx.Load(documents, icol => icol.Include(i => i.ContentType.Id));
                Ctx.ExecuteQuery();

                Trace.TraceInformation($"Returned {documents.Count} files for processing");

                int count = 0;
                foreach (ListItem document in documents)
                {
                    count++;
                    ContentType docCt = DocumentWeb.ContentTypes.GetByName(document.ContentType.Name);
                    Ctx.ExecuteQuery();

                    string contentTypeFolder = ContentTypeFolder(document, rootFolder, folder);
                    if (Config.ExcludedFolders.Contains(contentTypeFolder.TrimEnd('/'), StringComparer.CurrentCultureIgnoreCase))
                    {
                        Trace.TraceInformation($"{document.File.Name} not proceesed due to ExcludedFolder rule: {contentTypeFolder.TrimEnd('/')}");
                        continue;
                    }

                    Trace.TraceInformation($"Adding document {count}: {document.File.Name}");
                    dst.Add(document, folderToDocumentMap.Value, contentTypeFolder, docCt.Id, Config.MajorVersionsOnly);
                    dst.Update(true);
                    Ctx.ExecuteQuery();
                }
            }
        }