public Dictionary <uint, Section> Parse(BinaryReader binaryReader, List <SectionHeader> sectionHeaders,
                                                Dictionary <uint, Func <Section> > sectionTypes)
        {
            Dictionary <uint, Section> parsedSections = new Dictionary <uint, Section>();

            foreach (SectionHeader sectionHeader in sectionHeaders)
            {
                Section section = new Unknown();
                if (sectionTypes.ContainsKey(sectionHeader.type))
                {
                    section = sectionTypes[sectionHeader.type]();
                }
                binaryReader.BaseStream.Position = sectionHeader.offset + 12L;
                LogSection(section, sectionHeader);
                section.StreamReadData(binaryReader, sectionHeader);
                parsedSections.Add(sectionHeader.id, section);
            }

            return(parsedSections);
        }