public static DwgObjectCache Parse(BitReader reader, DwgVersionId version) { var objectCache = new DwgObjectCache(version); var lastHandle = 0; var lastLocation = 0; reader.StartCrcCheck(); var sectionSize = reader.ReadShortBigEndian(); while (sectionSize != 2) { var sectionStart = reader.Offset; var sectionEnd = sectionStart + sectionSize - 2; while (reader.Offset < sectionEnd) { // read data var handleOffset = reader.Read_MC(allowNegation: false); var locationOffset = reader.Read_MC(); var handle = lastHandle + handleOffset; var location = lastLocation + locationOffset; objectCache._handleToOffset.Add(handle, location); lastHandle = handle; lastLocation = location; } reader.ValidateCrc(initialValue: DwgHeaderVariables.InitialCrcValue, readCrcAsMsb: true); reader.StartCrcCheck(); sectionSize = reader.ReadShortBigEndian(); } reader.ValidateCrc(initialValue: DwgHeaderVariables.InitialCrcValue, readCrcAsMsb: true); return(objectCache); }