mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
CUERipper should remember drive offsets
This commit is contained in:
@@ -79,6 +79,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="CUERipperConfig.cs" />
|
||||||
<Compile Include="frmCUERipper.cs">
|
<Compile Include="frmCUERipper.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|||||||
103
CUERipper/CUERipperConfig.cs
Normal file
103
CUERipper/CUERipperConfig.cs
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Text;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace CUERipper
|
||||||
|
{
|
||||||
|
[XmlRoot("dictionary")]
|
||||||
|
public class SerializableDictionary<TKey, TValue>
|
||||||
|
: Dictionary<TKey, TValue>, IXmlSerializable
|
||||||
|
{
|
||||||
|
#region IXmlSerializable Members
|
||||||
|
public System.Xml.Schema.XmlSchema GetSchema()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReadXml(System.Xml.XmlReader reader)
|
||||||
|
{
|
||||||
|
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
|
||||||
|
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
|
||||||
|
|
||||||
|
bool wasEmpty = reader.IsEmptyElement;
|
||||||
|
reader.Read();
|
||||||
|
|
||||||
|
if (wasEmpty)
|
||||||
|
return;
|
||||||
|
|
||||||
|
while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
|
||||||
|
{
|
||||||
|
reader.ReadStartElement("item");
|
||||||
|
|
||||||
|
reader.ReadStartElement("key");
|
||||||
|
TKey key = (TKey)keySerializer.Deserialize(reader);
|
||||||
|
reader.ReadEndElement();
|
||||||
|
|
||||||
|
reader.ReadStartElement("value");
|
||||||
|
TValue value = (TValue)valueSerializer.Deserialize(reader);
|
||||||
|
reader.ReadEndElement();
|
||||||
|
|
||||||
|
this.Add(key, value);
|
||||||
|
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.MoveToContent();
|
||||||
|
}
|
||||||
|
reader.ReadEndElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void WriteXml(System.Xml.XmlWriter writer)
|
||||||
|
{
|
||||||
|
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
|
||||||
|
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
|
||||||
|
|
||||||
|
foreach (TKey key in this.Keys)
|
||||||
|
{
|
||||||
|
writer.WriteStartElement("item");
|
||||||
|
|
||||||
|
writer.WriteStartElement("key");
|
||||||
|
keySerializer.Serialize(writer, key);
|
||||||
|
writer.WriteEndElement();
|
||||||
|
|
||||||
|
writer.WriteStartElement("value");
|
||||||
|
TValue value = this[key];
|
||||||
|
valueSerializer.Serialize(writer, value);
|
||||||
|
writer.WriteEndElement();
|
||||||
|
|
||||||
|
writer.WriteEndElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
public class CUERipperConfig
|
||||||
|
{
|
||||||
|
public CUERipperConfig()
|
||||||
|
{
|
||||||
|
// Iterate through each property and call ResetValue()
|
||||||
|
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this))
|
||||||
|
{
|
||||||
|
property.ResetValue(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.DriveOffsets = new SerializableDictionary<string, int>();
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static XmlSerializer serializer = new XmlSerializer(typeof(CUERipperConfig));
|
||||||
|
|
||||||
|
[DefaultValue("flac")]
|
||||||
|
public string DefaultLosslessFormat { get; set; }
|
||||||
|
|
||||||
|
[DefaultValue("mp3")]
|
||||||
|
public string DefaultLossyFormat { get; set; }
|
||||||
|
|
||||||
|
[DefaultValue("lossy.flac")]
|
||||||
|
public string DefaultHybridFormat { get; set; }
|
||||||
|
|
||||||
|
public string DefaultDrive { get; set; }
|
||||||
|
|
||||||
|
public SerializableDictionary<string, int> DriveOffsets { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
1
CUERipper/frmCUERipper.Designer.cs
generated
1
CUERipper/frmCUERipper.Designer.cs
generated
@@ -274,6 +274,7 @@ namespace CUERipper
|
|||||||
0,
|
0,
|
||||||
-2147483648});
|
-2147483648});
|
||||||
this.numericWriteOffset.Name = "numericWriteOffset";
|
this.numericWriteOffset.Name = "numericWriteOffset";
|
||||||
|
this.numericWriteOffset.ValueChanged += new System.EventHandler(this.numericWriteOffset_ValueChanged);
|
||||||
//
|
//
|
||||||
// lblWriteOffset
|
// lblWriteOffset
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ using CUETools.Processor.Settings;
|
|||||||
using CUETools.Ripper;
|
using CUETools.Ripper;
|
||||||
using Freedb;
|
using Freedb;
|
||||||
using CUETools.Codecs;
|
using CUETools.Codecs;
|
||||||
|
using System.Xml;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
namespace CUERipper
|
namespace CUERipper
|
||||||
{
|
{
|
||||||
@@ -23,21 +25,23 @@ namespace CUERipper
|
|||||||
private Thread _workThread = null;
|
private Thread _workThread = null;
|
||||||
private StartStop _startStop;
|
private StartStop _startStop;
|
||||||
private CUEConfig _config;
|
private CUEConfig _config;
|
||||||
|
private CUERipperConfig cueRipperConfig;
|
||||||
private CUESheet cueSheet;
|
private CUESheet cueSheet;
|
||||||
private DriveInfo selectedDriveInfo;
|
private DriveInfo selectedDriveInfo;
|
||||||
private string _pathOut;
|
private string _pathOut;
|
||||||
string _defaultLosslessFormat, _defaultLossyFormat, _defaultHybridFormat;
|
|
||||||
private CUEControls.ShellIconMgr m_icon_mgr;
|
private CUEControls.ShellIconMgr m_icon_mgr;
|
||||||
private string defaultDrive;
|
|
||||||
private bool testAndCopy = false;
|
private bool testAndCopy = false;
|
||||||
internal CUERipperData data = new CUERipperData();
|
internal CUERipperData data = new CUERipperData();
|
||||||
|
public readonly static XmlSerializerNamespaces xmlEmptyNamespaces = new XmlSerializerNamespaces(new XmlQualifiedName[] { XmlQualifiedName.Empty });
|
||||||
|
public readonly static XmlWriterSettings xmlEmptySettings = new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true };
|
||||||
|
|
||||||
public frmCUERipper()
|
public frmCUERipper()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
_config = new CUEConfig();
|
_config = new CUEConfig();
|
||||||
_startStop = new StartStop();
|
_startStop = new StartStop();
|
||||||
m_icon_mgr = new CUEControls.ShellIconMgr();
|
cueRipperConfig = new CUERipperConfig();
|
||||||
|
m_icon_mgr = new CUEControls.ShellIconMgr();
|
||||||
m_icon_mgr.SetExtensionIcon(".flac", Properties.Resources.flac);
|
m_icon_mgr.SetExtensionIcon(".flac", Properties.Resources.flac);
|
||||||
m_icon_mgr.SetExtensionIcon(".wv", Properties.Resources.wv);
|
m_icon_mgr.SetExtensionIcon(".wv", Properties.Resources.wv);
|
||||||
m_icon_mgr.SetExtensionIcon(".ape", Properties.Resources.ape);
|
m_icon_mgr.SetExtensionIcon(".ape", Properties.Resources.ape);
|
||||||
@@ -141,9 +145,6 @@ namespace CUERipper
|
|||||||
|
|
||||||
SettingsReader sr = new SettingsReader("CUERipper", "settings.txt", Application.ExecutablePath);
|
SettingsReader sr = new SettingsReader("CUERipper", "settings.txt", Application.ExecutablePath);
|
||||||
_config.Load(sr);
|
_config.Load(sr);
|
||||||
_defaultLosslessFormat = sr.Load("DefaultLosslessFormat") ?? "flac";
|
|
||||||
_defaultLossyFormat = sr.Load("DefaultLossyFormat") ?? "mp3";
|
|
||||||
_defaultHybridFormat = sr.Load("DefaultHybridFormat") ?? "lossy.flac";
|
|
||||||
//_config.createEACLOG = sr.LoadBoolean("CreateEACLOG") ?? true;
|
//_config.createEACLOG = sr.LoadBoolean("CreateEACLOG") ?? true;
|
||||||
//_config.preserveHTOA = sr.LoadBoolean("PreserveHTOA") ?? false;
|
//_config.preserveHTOA = sr.LoadBoolean("PreserveHTOA") ?? false;
|
||||||
//_config.createM3U = sr.LoadBoolean("CreateM3U") ?? true;
|
//_config.createM3U = sr.LoadBoolean("CreateM3U") ?? true;
|
||||||
@@ -151,7 +152,19 @@ namespace CUERipper
|
|||||||
bindingSourceCR.DataSource = data;
|
bindingSourceCR.DataSource = data;
|
||||||
bnComboBoxDrives.ImageList = m_icon_mgr.ImageList;
|
bnComboBoxDrives.ImageList = m_icon_mgr.ImageList;
|
||||||
bnComboBoxFormat.ImageList = m_icon_mgr.ImageList;
|
bnComboBoxFormat.ImageList = m_icon_mgr.ImageList;
|
||||||
SetupControls();
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (TextReader reader = new StringReader(sr.Load("CUERipper")))
|
||||||
|
cueRipperConfig = CUERipperConfig.serializer.Deserialize(reader) as CUERipperConfig;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Trace.WriteLine(ex.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SetupControls();
|
||||||
|
|
||||||
int iFormat, nFormats = sr.LoadInt32("OutputPathUseTemplates", 0, 10) ?? 0;
|
int iFormat, nFormats = sr.LoadInt32("OutputPathUseTemplates", 0, 10) ?? 0;
|
||||||
for (iFormat = 0; iFormat < OutputPathUseTemplates.Length; iFormat++)
|
for (iFormat = 0; iFormat < OutputPathUseTemplates.Length; iFormat++)
|
||||||
@@ -164,7 +177,6 @@ namespace CUERipper
|
|||||||
bnComboBoxImage.SelectedIndex = sr.LoadInt32("ComboImage", 0, bnComboBoxImage.Items.Count - 1) ?? 0;
|
bnComboBoxImage.SelectedIndex = sr.LoadInt32("ComboImage", 0, bnComboBoxImage.Items.Count - 1) ?? 0;
|
||||||
trackBarSecureMode.Value = sr.LoadInt32("SecureMode", 0, trackBarSecureMode.Maximum - 1) ?? 1;
|
trackBarSecureMode.Value = sr.LoadInt32("SecureMode", 0, trackBarSecureMode.Maximum - 1) ?? 1;
|
||||||
trackBarSecureMode_Scroll(this, new EventArgs());
|
trackBarSecureMode_Scroll(this, new EventArgs());
|
||||||
defaultDrive = sr.Load("DefaultDrive");
|
|
||||||
this.checkBoxTestAndCopy.Checked = this.testAndCopy = sr.LoadBoolean("TestAndCopy") ?? this.testAndCopy;
|
this.checkBoxTestAndCopy.Checked = this.testAndCopy = sr.LoadBoolean("TestAndCopy") ?? this.testAndCopy;
|
||||||
|
|
||||||
Size SizeIncrement = new Size(sr.LoadInt32("WidthIncrement", 0, null) ?? 0, sr.LoadInt32("HeightIncrement", 0, null) ?? 0);
|
Size SizeIncrement = new Size(sr.LoadInt32("WidthIncrement", 0, null) ?? 0, sr.LoadInt32("HeightIncrement", 0, null) ?? 0);
|
||||||
@@ -228,8 +240,10 @@ namespace CUERipper
|
|||||||
reader.Close();
|
reader.Close();
|
||||||
if (reader.ARName != null)
|
if (reader.ARName != null)
|
||||||
{
|
{
|
||||||
int driveOffset;
|
int driveOffset;
|
||||||
if (AccurateRipVerify.FindDriveReadOffset(reader.ARName, out driveOffset))
|
if (cueRipperConfig.DriveOffsets.ContainsKey(reader.ARName))
|
||||||
|
reader.DriveOffset = cueRipperConfig.DriveOffsets[reader.ARName];
|
||||||
|
else if (AccurateRipVerify.FindDriveReadOffset(reader.ARName, out driveOffset))
|
||||||
reader.DriveOffset = driveOffset;
|
reader.DriveOffset = driveOffset;
|
||||||
else
|
else
|
||||||
reader.DriveOffset = 0;
|
reader.DriveOffset = 0;
|
||||||
@@ -241,7 +255,7 @@ namespace CUERipper
|
|||||||
data.Drives.RaiseListChangedEvents = true;
|
data.Drives.RaiseListChangedEvents = true;
|
||||||
data.Drives.ResetBindings();
|
data.Drives.ResetBindings();
|
||||||
for(int i = 0; i < bnComboBoxDrives.Items.Count; i++)
|
for(int i = 0; i < bnComboBoxDrives.Items.Count; i++)
|
||||||
if ((bnComboBoxDrives.Items[i] as DriveInfo).Path == defaultDrive)
|
if ((bnComboBoxDrives.Items[i] as DriveInfo).Path == cueRipperConfig.DefaultDrive)
|
||||||
bnComboBoxDrives.SelectedIndex = i;
|
bnComboBoxDrives.SelectedIndex = i;
|
||||||
_workThread = null;
|
_workThread = null;
|
||||||
SetupControls();
|
SetupControls();
|
||||||
@@ -824,7 +838,7 @@ namespace CUERipper
|
|||||||
selectedDriveInfo.drive.Close();
|
selectedDriveInfo.drive.Close();
|
||||||
|
|
||||||
selectedDriveInfo = bnComboBoxDrives.SelectedItem as DriveInfo;
|
selectedDriveInfo = bnComboBoxDrives.SelectedItem as DriveInfo;
|
||||||
defaultDrive = selectedDriveInfo.Path;
|
cueRipperConfig.DefaultDrive = selectedDriveInfo.Path;
|
||||||
|
|
||||||
toolStripStatusAr.Enabled = false;
|
toolStripStatusAr.Enabled = false;
|
||||||
toolStripStatusAr.Text = "";
|
toolStripStatusAr.Text = "";
|
||||||
@@ -851,7 +865,8 @@ namespace CUERipper
|
|||||||
cueSheet.Close();
|
cueSheet.Close();
|
||||||
cueSheet = null;
|
cueSheet = null;
|
||||||
}
|
}
|
||||||
numericWriteOffset.Value = selectedDriveInfo.drive.DriveOffset;
|
|
||||||
|
numericWriteOffset.Value = selectedDriveInfo.drive.DriveOffset;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
selectedDriveInfo.drive.Open(selectedDriveInfo.drive.Path[0]);
|
selectedDriveInfo.drive.Open(selectedDriveInfo.drive.Path[0]);
|
||||||
@@ -907,9 +922,6 @@ namespace CUERipper
|
|||||||
{
|
{
|
||||||
SettingsWriter sw = new SettingsWriter("CUERipper", "settings.txt", Application.ExecutablePath);
|
SettingsWriter sw = new SettingsWriter("CUERipper", "settings.txt", Application.ExecutablePath);
|
||||||
_config.Save(sw);
|
_config.Save(sw);
|
||||||
sw.Save("DefaultLosslessFormat", _defaultLosslessFormat);
|
|
||||||
sw.Save("DefaultLossyFormat", _defaultLossyFormat);
|
|
||||||
sw.Save("DefaultHybridFormat", _defaultHybridFormat);
|
|
||||||
//sw.Save("CreateEACLOG", _config.createEACLOG);
|
//sw.Save("CreateEACLOG", _config.createEACLOG);
|
||||||
//sw.Save("PreserveHTOA", _config.preserveHTOA);
|
//sw.Save("PreserveHTOA", _config.preserveHTOA);
|
||||||
//sw.Save("CreateM3U", _config.createM3U);
|
//sw.Save("CreateM3U", _config.createM3U);
|
||||||
@@ -925,8 +937,13 @@ namespace CUERipper
|
|||||||
for (int iFormat = bnComboBoxOutputFormat.Items.Count - 1; iFormat >= OutputPathUseTemplates.Length; iFormat--)
|
for (int iFormat = bnComboBoxOutputFormat.Items.Count - 1; iFormat >= OutputPathUseTemplates.Length; iFormat--)
|
||||||
sw.Save(string.Format("OutputPathUseTemplate{0}", iFormat - OutputPathUseTemplates.Length), bnComboBoxOutputFormat.Items[iFormat].ToString());
|
sw.Save(string.Format("OutputPathUseTemplate{0}", iFormat - OutputPathUseTemplates.Length), bnComboBoxOutputFormat.Items[iFormat].ToString());
|
||||||
|
|
||||||
if (defaultDrive != null)
|
using (TextWriter tw = new StringWriter())
|
||||||
sw.Save("DefaultDrive", defaultDrive);
|
using (XmlWriter xw = XmlTextWriter.Create(tw, xmlEmptySettings))
|
||||||
|
{
|
||||||
|
CUERipperConfig.serializer.Serialize(xw, cueRipperConfig, xmlEmptyNamespaces);
|
||||||
|
sw.SaveText("CUERipper", tw.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
sw.Close();
|
sw.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1084,13 +1101,13 @@ namespace CUERipper
|
|||||||
switch (SelectedOutputAudioType)
|
switch (SelectedOutputAudioType)
|
||||||
{
|
{
|
||||||
case AudioEncoderType.Lossless:
|
case AudioEncoderType.Lossless:
|
||||||
_defaultLosslessFormat = SelectedOutputAudioFormat;
|
cueRipperConfig.DefaultLosslessFormat = SelectedOutputAudioFormat;
|
||||||
break;
|
break;
|
||||||
case AudioEncoderType.Lossy:
|
case AudioEncoderType.Lossy:
|
||||||
_defaultLossyFormat = SelectedOutputAudioFormat;
|
cueRipperConfig.DefaultLossyFormat = SelectedOutputAudioFormat;
|
||||||
break;
|
break;
|
||||||
case AudioEncoderType.Hybrid:
|
case AudioEncoderType.Hybrid:
|
||||||
_defaultHybridFormat = SelectedOutputAudioFormat;
|
cueRipperConfig.DefaultHybridFormat = SelectedOutputAudioFormat;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1150,13 +1167,13 @@ namespace CUERipper
|
|||||||
switch (SelectedOutputAudioType)
|
switch (SelectedOutputAudioType)
|
||||||
{
|
{
|
||||||
case AudioEncoderType.Lossless:
|
case AudioEncoderType.Lossless:
|
||||||
select = _defaultLosslessFormat;
|
select = cueRipperConfig.DefaultLosslessFormat;
|
||||||
break;
|
break;
|
||||||
case AudioEncoderType.Lossy:
|
case AudioEncoderType.Lossy:
|
||||||
select = _defaultLossyFormat;
|
select = cueRipperConfig.DefaultLossyFormat;
|
||||||
break;
|
break;
|
||||||
case AudioEncoderType.Hybrid:
|
case AudioEncoderType.Hybrid:
|
||||||
select = _defaultHybridFormat;
|
select = cueRipperConfig.DefaultHybridFormat;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
data.Formats.RaiseListChangedEvents = true;
|
data.Formats.RaiseListChangedEvents = true;
|
||||||
@@ -1563,6 +1580,14 @@ namespace CUERipper
|
|||||||
ResizeList(listTracks, Title);
|
ResizeList(listTracks, Title);
|
||||||
ResizeList(listMetadata, columnHeaderValue);
|
ResizeList(listMetadata, columnHeaderValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void numericWriteOffset_ValueChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (selectedDriveInfo != null && selectedDriveInfo.drive.ARName != null)
|
||||||
|
{
|
||||||
|
cueRipperConfig.DriveOffsets[selectedDriveInfo.drive.ARName] = (int)numericWriteOffset.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class BackgroundWorkerArtworkArgs
|
internal class BackgroundWorkerArtworkArgs
|
||||||
|
|||||||
@@ -789,7 +789,7 @@
|
|||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
|
||||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy
|
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy
|
||||||
CQAAAk1TRnQBSQFMAgEBBAEAAdQBAQHUAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
CQAAAk1TRnQBSQFMAgEBBAEAAdwBAQHcAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||||
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||||
@@ -939,7 +939,7 @@
|
|||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
|
||||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAY
|
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAY
|
||||||
EgAAAk1TRnQBSQFMAgEBCwEAAdQBAQHUAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
EgAAAk1TRnQBSQFMAgEBCwEAAdwBAQHcAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||||
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||||
|
|||||||
Reference in New Issue
Block a user