anchor.diff:    I, J, campCount: Integer;
     campName: TKMCampaignId;
     unlocked: Byte;
  -  hasScriptData: Boolean;
  +  hasScriptData, isViewed: Boolean;
     scriptDataSize: Cardinal;
   begin
     if not FileExists(aFileName) then Exit;
  
positive.code:     M.Read(campCount);
      for I := 0 to campCount - 1 do
      begin
        M.Read(campName, sizeOf(TKMCampaignId));
        M.Read(unlocked);
        C := CampaignById(campName);
        if C <> nil then
        begin
          C.Viewed := True;
          C.UnlockedMap := unlocked;
          for J := 0 to C.MapCount - 1 do
            M.Read(C.fMapsProgressData[J], SizeOf(C.fMapsProgressData[J]));
  
          C.ScriptData.Clear;
          if hasScriptData then
          begin
            M.Read(scriptDataSize);
            C.ScriptData.Write(Pointer(NativeUInt(M.Memory) + M.Position)^, scriptDataSize);
            M.Seek(scriptDataSize, soCurrent); //Seek past script data
          end;
        end;
      end;
  
negative.code:         M.Write(Cardinal(Campaigns[I].ScriptData.Size));
          M.Write(Campaigns[I].ScriptData.Memory^, Campaigns[I].ScriptData.Size);
        end;
      end;
  
      M.SaveToFile(filePath);
    finally
  