// Token: 0x06000058 RID: 88 RVA: 0x00003368 File Offset: 0x00001568
 private void Deserialize(Stream stream)
 {
     using (BinaryReader binaryReader = new BinaryReader(stream))
     {
         this.ReadAndValidateFieldType(binaryReader, 'V', Strings.MissingVersion);
         this.Version = this.BinaryRead <ushort>(new Func <ushort>(binaryReader.ReadUInt16), Strings.MissingVersion);
         this.ReadAndValidateFieldType(binaryReader, 'A', Strings.MissingAuthenticationType);
         string             value = this.BinaryRead <string>(new Func <string>(binaryReader.ReadString), Strings.MissingAuthenticationType);
         AuthenticationType authenticationType;
         if (!Enum.TryParse <AuthenticationType>(value, out authenticationType))
         {
             ExTraceGlobals.UserTokenTracer.TraceError <AuthenticationType>(0L, "Invalid authentication type {0}", authenticationType);
             throw new UserTokenException(Strings.InvalidDelegatedPrincipal(value));
         }
         this.AuthenticationType = authenticationType;
         this.ReadAndValidateFieldType(binaryReader, 'D', Strings.MissingDelegatedPrincipal);
         string             text = this.ReadNullableString(binaryReader, Strings.MissingDelegatedPrincipal);
         DelegatedPrincipal delegatedPrincipal = null;
         if (text != null && !DelegatedPrincipal.TryParseDelegatedString(text, out delegatedPrincipal))
         {
             ExTraceGlobals.UserTokenTracer.TraceError <string>(0L, "Invalid delegated principal {0}", text);
             throw new UserTokenException(Strings.InvalidDelegatedPrincipal(text));
         }
         this.DelegatedPrincipal = delegatedPrincipal;
         this.ReadAndValidateFieldType(binaryReader, 'L', Strings.MissingWindowsLiveId);
         this.WindowsLiveId = this.ReadNullableString(binaryReader, Strings.MissingWindowsLiveId);
         this.ReadAndValidateFieldType(binaryReader, 'N', Strings.MissingUserName);
         this.UserName = this.ReadNullableString(binaryReader, Strings.MissingUserName);
         this.ReadAndValidateFieldType(binaryReader, 'U', Strings.MissingUserSid);
         string text2 = this.ReadNullableString(binaryReader, Strings.MissingUserSid);
         if (text2 != null)
         {
             try
             {
                 this.UserSid = new SecurityIdentifier(text2);
             }
             catch (ArgumentException innerException)
             {
                 ExTraceGlobals.UserTokenTracer.TraceError <string>(0L, "Invalid user sid {0}", text2);
                 throw new UserTokenException(Strings.InvalidUserSid(text2), innerException);
             }
         }
         this.ReadAndValidateFieldType(binaryReader, 'P', Strings.MissingPartitionId);
         string      text3       = this.ReadNullableString(binaryReader, Strings.MissingPartitionId);
         PartitionId partitionId = null;
         if (text3 != null && !PartitionId.TryParse(text3, out partitionId))
         {
             ExTraceGlobals.UserTokenTracer.TraceError <string>(0L, "Invalid partition id {0}", text3);
             throw new UserTokenException(Strings.InvalidPartitionId(text3));
         }
         this.PartitionId = partitionId;
         this.ReadAndValidateFieldType(binaryReader, 'O', Strings.MissingOrganization);
         string text4 = this.ReadNullableString(binaryReader, Strings.MissingOrganization);
         if (text4 != null)
         {
             byte[] bytes;
             try
             {
                 bytes = Convert.FromBase64String(text4);
             }
             catch (FormatException innerException2)
             {
                 ExTraceGlobals.UserTokenTracer.TraceError <string>(0L, "Invalid organization id {0}", text4);
                 throw new UserTokenException(Strings.InvalidOrganization(text4), innerException2);
             }
             OrganizationId organization;
             if (!OrganizationId.TryCreateFromBytes(bytes, Encoding.UTF8, out organization))
             {
                 ExTraceGlobals.UserTokenTracer.TraceError <string>(0L, "Invalid organization id {0}", text4);
                 throw new UserTokenException(Strings.InvalidOrganization(text4));
             }
             this.Organization = organization;
         }
         this.ReadAndValidateFieldType(binaryReader, 'M', Strings.MissingManagedOrganization);
         this.ManagedOrganization = this.ReadNullableString(binaryReader, Strings.MissingManagedOrganization);
         this.ReadAndValidateFieldType(binaryReader, 'W', Strings.MissingAppPasswordUsed);
         this.AppPasswordUsed = this.BinaryRead <bool>(new Func <bool>(binaryReader.ReadBoolean), Strings.MissingAppPasswordUsed);
         int num = (int)(binaryReader.BaseStream.Length - binaryReader.BaseStream.Position);
         if (num > 0)
         {
             byte[] array = binaryReader.ReadBytes(num);
             array = this.Decompress(array);
             this.CommonAccessToken = CommonAccessToken.Deserialize(Encoding.UTF8.GetString(array));
         }
         else
         {
             this.CommonAccessToken = null;
         }
     }
 }