From 01db6ea0e93d09d5b6594bdf129ae5e42fa59b2d Mon Sep 17 00:00:00 2001 From: Nathan Crawford Date: Wed, 12 Sep 2007 02:25:22 +0000 Subject: [PATCH] Found values for color table up to 61, added embroideryInfo to project --- embroideryInfo/PesFile.cs | 326 ++++++++++++++++++ embroideryInfo/Program.cs | 33 ++ embroideryInfo/Properties/AssemblyInfo.cs | 33 ++ embroideryInfo/bin/Release/embroideryInfo.exe | Bin 0 -> 20480 bytes embroideryInfo/embroideryInfo.csproj | 49 +++ embroideryReader.sln | 6 + embroideryReader/Form1.cs | 21 +- embroideryReader/PesFile.cs | 64 ++-- embroideryReader/Properties/AssemblyInfo.cs | 4 +- .../bin/Release/embroideryReader.exe | Bin 32768 -> 32768 bytes .../bin/Release/embroideryReader.pdb | Bin 48640 -> 48640 bytes .../bin/Release/emroideryTester.exe | Bin 20480 -> 20480 bytes .../bin/Release/emroideryTester.pdb | Bin 19968 -> 28160 bytes 13 files changed, 486 insertions(+), 50 deletions(-) create mode 100644 embroideryInfo/PesFile.cs create mode 100644 embroideryInfo/Program.cs create mode 100644 embroideryInfo/Properties/AssemblyInfo.cs create mode 100644 embroideryInfo/bin/Release/embroideryInfo.exe create mode 100644 embroideryInfo/embroideryInfo.csproj diff --git a/embroideryInfo/PesFile.cs b/embroideryInfo/PesFile.cs new file mode 100644 index 0000000..da498a1 --- /dev/null +++ b/embroideryInfo/PesFile.cs @@ -0,0 +1,326 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; + +namespace embroideryReader +{ + public class stitchBlock + { + public System.Drawing.Color color; + public Int32 colorIndex; + public Int32 stitchesTotal; + public Point[] stitches; + public stitchBlock() + { + color = System.Drawing.Color.Black; + //stitches = new List(); + } + } + + public struct intPair + { + public int a; + public int b; + } + + public class PesFile + { + //private long bytesRead = 0; + System.IO.BinaryReader fileIn; + Random rnd = new Random(); + int stitchCount = 0; + int stitchesLeft = 0; + int skipStitches = 0; + //int minX = int.MaxValue; + //int minY = int.MaxValue; + //int maxX = int.MinValue; + //int maxY = int.MinValue; + int imageWidth; + int imageHeight; + int lastColorIndex = -1; + string _filename; + public List pesHeader = new List(); + public List embOneHeader = new List(); + public List csewsegHeader = new List(); + public List blocks = new List(); + public List afterStictchesTable = new List(); + + Int64 startStitches = 0; + + bool _readyToUse = false; + + public PesFile(string filename) + { + OpenFile(filename); + } + + private void OpenFile(string filename) + { + //string message = ""; + _filename = filename; + //string filename; + //openFileDialog1.ShowDialog(); + //filename = openFileDialog1.FileName; + //if (!System.IO.File.Exists(filename)) + //{ + // return; + //} + //fileIn = new System.IO.BinaryReader(System.IO.File.Open("118866.pes", System.IO.FileMode.Open)); + //fileIn = new System.IO.BinaryReader(System.IO.File.Open("144496.pes", System.IO.FileMode.Open)); + fileIn = new System.IO.BinaryReader(System.IO.File.Open(filename, System.IO.FileMode.Open)); + //charIn = fileIn.ReadChar(); + for (int i = 0; i < 8; i++)//8 bytes + { + //message += fileIn.ReadChar(); + //bytesRead++; + fileIn.ReadChar(); + } + //message += Environment.NewLine; + for (int i = 0; i < 8; i++)//16 bytes + { + pesHeader.Add(fileIn.ReadInt16()); + //message += fileIn.ReadInt16().ToString(); + //message += Environment.NewLine; + //bytesRead += 2; + } + for (int i = 0; i < 7; i++)//7 bytes + { + //message += fileIn.ReadChar(); + //bytesRead++; + fileIn.ReadChar(); + } + //message += Environment.NewLine; + //MessageBox.Show(message); + + //message = ""; + //int headerValNum = 1; + Int16 tmpval; + for (int i = 0; i < 33; i++) //read 66 bytes + { + tmpval = fileIn.ReadInt16(); + embOneHeader.Add(tmpval); + switch (i) + { + case 23: + imageWidth = tmpval; + break; + case 24: + imageHeight = tmpval; + break; + } + + //message += tmpval.ToString(); + //if (headerValNum % 3 == 0) + //{ + // message += Environment.NewLine; + //} + //else + //{ + // message += "\t| "; + //} + //headerValNum++; + //message += "\t| "; + //message += fileIn.ReadInt16().ToString(); + //message += "\t| "; + //message += fileIn.ReadInt16().ToString(); + //message += Environment.NewLine; + //bytesRead += 6; + } + //MessageBox.Show(message); + + //message = ""; + for (int i = 0; i < 7; i++)//7 bytes + { + //message += fileIn.ReadChar(); + //bytesRead++; + fileIn.ReadChar(); + } + //MessageBox.Show(message); + + //message = ""; + //MessageBox.Show(fileIn.BaseStream.Position.ToString()); + for (int i = 0; i < 7; i++)//14 bytes + { + //message += fileIn.ReadInt16(); + //message += Environment.NewLine; + //bytesRead += 2; + csewsegHeader.Add(fileIn.ReadInt16()); + + } + startStitches = fileIn.BaseStream.Position; + + //start of point pairs + List currentBlock = new List(); + Color currentColor = Color.Black; + Int32 tmpStitchCount = 0; + stitchesLeft = 10; //give it kickstart to get over the beginning + while (stitchesLeft >= 0) + { + int tmpx; + int tmpy; + Int32 realx; + Int32 realy; + if (fileIn.BaseStream.Position + 4 < fileIn.BaseStream.Length) + { + realx = fileIn.ReadInt16(); + realy = fileIn.ReadInt16(); + if (realx == -32765) + { + + if (realy == 1) //end of block + { + stitchBlock tmp = new stitchBlock(); + tmp.stitches = new Point[currentBlock.Count]; + currentBlock.CopyTo(tmp.stitches); + if (blocks.Count > 0 && blocks[blocks.Count - 1].colorIndex != lastColorIndex)//don't need to change the color if next block is the same + { + tmp.color = currentColor; + currentColor = System.Drawing.Color.FromArgb((rnd.Next(0, 255)), (rnd.Next(0, 255)), (rnd.Next(0, 255))); + } + tmp.colorIndex = lastColorIndex; + tmp.stitchesTotal = tmpStitchCount; + blocks.Add(tmp); + tmpStitchCount = 0; + currentBlock = new List(); + } + lastColorIndex = fileIn.ReadInt16(); + stitchesLeft = fileIn.ReadInt16(); + tmpStitchCount += stitchesLeft; + if (realy == 1) + { + skipStitches = stitchesLeft;//skip these stiches, since they just seem to get in the way + } + } + else + { + tmpx = realx;//x is ok + tmpy = realy + imageHeight;//y needs to be translated + if (skipStitches > 0) + { + skipStitches--; + } + else + { + currentBlock.Add(new System.Drawing.Point(tmpx, tmpy)); + } + stitchCount++; + stitchesLeft--; + } + } + } + + //color index table + intPair tmpPair = new intPair(); + tmpPair.a = fileIn.ReadInt16(); + tmpPair.b = fileIn.ReadInt16(); + while (tmpPair.a != 0) + { + afterStictchesTable.Add(tmpPair); + tmpPair = new intPair(); + tmpPair.a = fileIn.ReadInt16(); + tmpPair.b = fileIn.ReadInt16(); + } + fileIn.Close(); + _readyToUse = true; + } + + public int GetWidth() + { + return imageWidth; + } + + public int GetHeight() + { + return imageHeight; + } + + public string GetFileName() + { + if (_filename == null) + { + return ""; + } + else + { + return _filename; + } + } + + public void saveDebugInfo() + { + System.IO.StreamWriter outfile = new System.IO.StreamWriter(System.IO.Path.ChangeExtension(_filename, ".txt")); + string name = ""; + outfile.WriteLine("pes header"); + for (int i = 0; i < pesHeader.Count; i++) + { + name = (i + 1).ToString(); + outfile.WriteLine(name + "\t" + pesHeader[i].ToString()); + } + outfile.WriteLine("embone header"); + for (int i = 0; i < embOneHeader.Count; i++) + { + switch (i + 1) + { + case 24: + name = "width"; + break; + case 25: + name = "height"; + break; + default: + name = (i + 1).ToString(); + break; + } + + outfile.WriteLine(name + "\t" + embOneHeader[i].ToString()); + } + outfile.WriteLine("csewseg header"); + for (int i = 0; i < csewsegHeader.Count; i++) + { + + switch (i + 1) + { + case 4: + name = "base x"; + outfile.WriteLine(name + "\t" + csewsegHeader[i].ToString()); + break; + case 5: + name = "base y"; + outfile.WriteLine(name + "\t" + csewsegHeader[i].ToString() + " (" + (csewsegHeader[i] + imageHeight).ToString() + ")"); + break; + case 6: + name = "start x"; + outfile.WriteLine(name + "\t" + csewsegHeader[i].ToString()); + break; + case 7: + name = "start y"; + outfile.WriteLine(name + "\t" + csewsegHeader[i].ToString() + " (" + (csewsegHeader[i] + imageHeight).ToString() + ")"); + break; + default: + name = (i + 1).ToString(); + outfile.WriteLine(name + "\t" + csewsegHeader[i].ToString()); + break; + } + //outfile.WriteLine(name + "\t" + csewsegHeader[i].ToString()); + } + outfile.WriteLine("stitches start: " + startStitches.ToString()); + outfile.WriteLine("block info"); + for (int i = 0; i < this.blocks.Count; i++) + { + outfile.WriteLine((i + 1).ToString() + "\t" + blocks[i].colorIndex.ToString() + "\t" + blocks[i].stitchesTotal.ToString()); + } + outfile.WriteLine("after stitches table"); + for (int i = 0; i < afterStictchesTable.Count; i++) + { + outfile.WriteLine((i + 1).ToString() + "\t" + afterStictchesTable[i].a.ToString() + ", " + afterStictchesTable[i].b.ToString()); + } + outfile.Close(); + } + + public bool isReadyToUse() + { + return _readyToUse; + } + } +} diff --git a/embroideryInfo/Program.cs b/embroideryInfo/Program.cs new file mode 100644 index 0000000..bd0c2cc --- /dev/null +++ b/embroideryInfo/Program.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace embroideryInfo +{ + class Program + { + static void Main(string[] args) + { + if (args.Length > 0) + { + try + { + embroideryReader.PesFile design = new embroideryReader.PesFile(args[0]); + design.saveDebugInfo(); + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + } + else + { + Console.WriteLine("Specify input file"); + for (int x = 0; x < args.Length; x++) + { + Console.WriteLine(args[x]); + } + } + } + } +} diff --git a/embroideryInfo/Properties/AssemblyInfo.cs b/embroideryInfo/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6eaf13e --- /dev/null +++ b/embroideryInfo/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("embroideryInfo")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("embroideryInfo")] +[assembly: AssemblyCopyright("Copyright © 2007")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4f0ed79b-33dc-4066-9a65-6d44d2b94332")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/embroideryInfo/bin/Release/embroideryInfo.exe b/embroideryInfo/bin/Release/embroideryInfo.exe new file mode 100644 index 0000000000000000000000000000000000000000..c4b95e2ecc33ea7be67e995cfa9d7f95e0e7e4f7 GIT binary patch literal 20480 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 + + Debug + AnyCPU + 8.0.50727 + 2.0 + {1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362} + Exe + Properties + embroideryInfo + embroideryInfo + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/embroideryReader.sln b/embroideryReader.sln index 8671bc8..fc121cf 100644 --- a/embroideryReader.sln +++ b/embroideryReader.sln @@ -5,6 +5,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryReader", "embroid EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "emroideryTester", "emroideryTester\emroideryTester.csproj", "{A80DF4D8-967D-4352-9E1D-F22D23236BE2}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryInfo", "embroideryInfo\embroideryInfo.csproj", "{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -19,6 +21,10 @@ Global {A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU {A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU {A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Release|Any CPU.Build.0 = Release|Any CPU + {1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/embroideryReader/Form1.cs b/embroideryReader/Form1.cs index 63ed397..8b58957 100644 --- a/embroideryReader/Form1.cs +++ b/embroideryReader/Form1.cs @@ -299,14 +299,21 @@ namespace embroideryReader } //_form2 = new Form2(); //_form2.design = new PesFile(filename); - design = new PesFile(filename); - this.Text = System.IO.Path.GetFileName(filename) + " - Embroidery Reader"; - //_form2.DrawArea = new Bitmap(_form2.design.GetWidth(), _form2.design.GetHeight()); - DrawArea = new Bitmap(design.GetWidth(), design.GetHeight()); - setPanelSize(design.GetWidth(), design.GetHeight()); + try + { + design = new PesFile(filename); + this.Text = System.IO.Path.GetFileName(filename) + " - Embroidery Reader"; + //_form2.DrawArea = new Bitmap(_form2.design.GetWidth(), _form2.design.GetHeight()); + DrawArea = new Bitmap(design.GetWidth(), design.GetHeight()); + setPanelSize(design.GetWidth(), design.GetHeight()); - //_form2.Show(); - finishDesign(); + //_form2.Show(); + finishDesign(); + } + catch (Exception ex) + { + MessageBox.Show("An error occured while reading the design file:" + Environment.NewLine + ex.ToString()); + } } private void openToolStripMenuItem_Click(object sender, EventArgs e) diff --git a/embroideryReader/PesFile.cs b/embroideryReader/PesFile.cs index 643931b..da498a1 100644 --- a/embroideryReader/PesFile.cs +++ b/embroideryReader/PesFile.cs @@ -8,7 +8,7 @@ namespace embroideryReader public class stitchBlock { public System.Drawing.Color color; - public Int32 unknownNumber; + public Int32 colorIndex; public Int32 stitchesTotal; public Point[] stitches; public stitchBlock() @@ -38,7 +38,7 @@ namespace embroideryReader //int maxY = int.MinValue; int imageWidth; int imageHeight; - int lastStrangeNum = -1; + int lastColorIndex = -1; string _filename; public List pesHeader = new List(); public List embOneHeader = new List(); @@ -48,6 +48,8 @@ namespace embroideryReader Int64 startStitches = 0; + bool _readyToUse = false; + public PesFile(string filename) { OpenFile(filename); @@ -147,12 +149,8 @@ namespace embroideryReader } startStitches = fileIn.BaseStream.Position; - //MessageBox.Show(message); //start of point pairs - //message = ""; - //long startPos = fileIn.BaseStream.Position; - //bytesRead = fileIn.BaseStream.Position; List currentBlock = new List(); Color currentColor = Color.Black; Int32 tmpStitchCount = 0; @@ -170,23 +168,23 @@ namespace embroideryReader if (realx == -32765) { - if (realy == 1) //probably means change color + if (realy == 1) //end of block { - //_form2.drawPen = new Pen(Color.FromArgb((rnd.Next(0, 255)), (rnd.Next(0, 255)), (rnd.Next(0, 255))), 4); - //_form2.prevPoint = new Point(-1, -1); stitchBlock tmp = new stitchBlock(); tmp.stitches = new Point[currentBlock.Count]; currentBlock.CopyTo(tmp.stitches); - tmp.color = currentColor; - tmp.unknownNumber = lastStrangeNum; + if (blocks.Count > 0 && blocks[blocks.Count - 1].colorIndex != lastColorIndex)//don't need to change the color if next block is the same + { + tmp.color = currentColor; + currentColor = System.Drawing.Color.FromArgb((rnd.Next(0, 255)), (rnd.Next(0, 255)), (rnd.Next(0, 255))); + } + tmp.colorIndex = lastColorIndex; tmp.stitchesTotal = tmpStitchCount; blocks.Add(tmp); tmpStitchCount = 0; currentBlock = new List(); - currentColor = System.Drawing.Color.FromArgb((rnd.Next(0, 255)), (rnd.Next(0, 255)), (rnd.Next(0, 255))); } - lastStrangeNum = fileIn.ReadInt16();//don't know what this is, maybe stitching speed? Seems to be 1/100 sec values - //timer1.Interval = lastStrangeNum * 10; + lastColorIndex = fileIn.ReadInt16(); stitchesLeft = fileIn.ReadInt16(); tmpStitchCount += stitchesLeft; if (realy == 1) @@ -198,7 +196,6 @@ namespace embroideryReader { tmpx = realx;//x is ok tmpy = realy + imageHeight;//y needs to be translated - //bytesRead += 4; if (skipStitches > 0) { skipStitches--; @@ -206,35 +203,14 @@ namespace embroideryReader else { currentBlock.Add(new System.Drawing.Point(tmpx, tmpy)); - //_form2.addPoint(new Point(tmpx, tmpy)); - //if (realx < minX) - //{ - // minX = realx; - //} - //if (realx > maxX) - //{ - // maxX = realx; - //} - //if (realy < minY) - //{ - // minY = realy; - //} - //if (realy > maxY) - //{ - // maxY = realy; - //} } stitchCount++; stitchesLeft--; } - //label1.Text = "file pos: " + fileIn.BaseStream.Position.ToString() + ", last values: " + realx.ToString() + ", " + realy.ToString() + ", total stiches: " + stitchCount.ToString() + ", stitches til next section: " + (stitchesLeft + 1).ToString() + ", min, max vals: " + minX.ToString() + "," + minY.ToString() + ";" + maxX.ToString() + "," + maxY.ToString() + ", strangenum: " + lastStrangeNum; - //if (stitchesLeft < 0) - //{ - // timer1.Enabled = false; - // fileIn.Close(); - //} } } + + //color index table intPair tmpPair = new intPair(); tmpPair.a = fileIn.ReadInt16(); tmpPair.b = fileIn.ReadInt16(); @@ -242,10 +218,11 @@ namespace embroideryReader { afterStictchesTable.Add(tmpPair); tmpPair = new intPair(); - tmpPair.a = fileIn.ReadInt16();//strange number - tmpPair.b = fileIn.ReadInt16();//file block that strange number end at. Not the same as stichBlock. + tmpPair.a = fileIn.ReadInt16(); + tmpPair.b = fileIn.ReadInt16(); } fileIn.Close(); + _readyToUse = true; } public int GetWidth() @@ -331,7 +308,7 @@ namespace embroideryReader outfile.WriteLine("block info"); for (int i = 0; i < this.blocks.Count; i++) { - outfile.WriteLine((i + 1).ToString() + "\t" + blocks[i].unknownNumber.ToString() + "\t" + blocks[i].stitchesTotal.ToString()); + outfile.WriteLine((i + 1).ToString() + "\t" + blocks[i].colorIndex.ToString() + "\t" + blocks[i].stitchesTotal.ToString()); } outfile.WriteLine("after stitches table"); for (int i = 0; i < afterStictchesTable.Count; i++) @@ -340,5 +317,10 @@ namespace embroideryReader } outfile.Close(); } + + public bool isReadyToUse() + { + return _readyToUse; + } } } diff --git a/embroideryReader/Properties/AssemblyInfo.cs b/embroideryReader/Properties/AssemblyInfo.cs index 600dd28..9029394 100644 --- a/embroideryReader/Properties/AssemblyInfo.cs +++ b/embroideryReader/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("1.0.0.447")] -[assembly: AssemblyFileVersion("1.0.0.447")] +[assembly: AssemblyVersion("1.0.0.461")] +[assembly: AssemblyFileVersion("1.0.0.461")] diff --git a/embroideryReader/bin/Release/embroideryReader.exe b/embroideryReader/bin/Release/embroideryReader.exe index cdd6c14712a546fd84c3a6ad65bba00474e1d39b..988d5d56f220bb6154ceaf4134c567bbd610e3cb 100644 GIT binary patch delta 6654 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 delta 6277 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 TrXPCb(uw`)t)Hg$)H?nTr~!X^ diff --git a/embroideryReader/bin/Release/embroideryReader.pdb b/embroideryReader/bin/Release/embroideryReader.pdb index b060da343d80f6495afa09ea02dcbd354bf91b6f..8615f1298ad1e57d187e9f8caa1b706f92d03ba4 100644 GIT binary patch delta 8218 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 Kr|+97#{UFJl)EJW delta 8035 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 I_C2QkFP_bw=Kufz diff --git a/emroideryTester/bin/Release/emroideryTester.exe b/emroideryTester/bin/Release/emroideryTester.exe index 6b57307c7d8589e98a315a98ad33202f70739e47..3bc83851f7ac0d38032e8853c4a394a4b4c65617 100644 GIT binary patch delta 73 zcmZozz}T>WaY6_4J>BOUy9-qXes9fec(=9KZx@&Rr;M1LLYsNi8kj(`llwI!Mc3S^ cyZuMD)v+<)l}?Yc$TB7d28QI#do`TZ0l=;v-T(jq delta 73 zcmZozz}T>WaY6_4{<}{%b{DD&1XOPbtz>s_Te9l#n!86IZ`jPE*1!ako!qY>DY~0C dC@%A8wBy30VwS!i^@)rO3=Gbj_i8w+0|3@!A5;JU diff --git a/emroideryTester/bin/Release/emroideryTester.pdb b/emroideryTester/bin/Release/emroideryTester.pdb index e561157215548a11bcc42f0083333ced70e8c68d..a31eee9845de6abb586b91dd8f9559e5fdb8273a 100644 GIT binary patch delta 3429 zcmcInZETZO6u!6Xx{hsyZlkPUqhlLmpL8wj%4F-hb=VmlQyC62$@r*jTG&_%j)1O4 zNidSQ_M%Qjvn(j6Xw(Kn42cR+6cuMsLIMUbM$sS=L;^CH&w2ZHj2Zc%@odkYd+)hl z@44rkdl%ZyLnnBDo|ZGlDuFWqNpUns^*L7!Oja;N>3x_yBMI{m(~6#B2xjSKp8L_umUvC6hJFBc#Vl^C~3s=-hu`rN+!SzWCPOy3y=fM z0CIsmARm|s6aYm)AutOl21>&2pN3LXBO33N3rp7?EZF9s_4D_pMpy1y{X6bmJTj$~ zYu<71d1%*64Njxq^Z zjZTsT?h&Fr;zUDQF#3d&afWH=k&K;RM4K9*4U$mV0?Yx%NqE7V5nZcjwXRo;B#B{b zcjBGUwujvZggVP2+U<#=w4@rksK3O8u*u+topRBKA7HuLJpbwR#6MxB4I+ma{K~aK;5oq%xLgHh{I*H=5 z-1=(RO0uhi6-hG;Q+z>^VkG^YiashF0*z*!fqQ(*R&H3>)e`WD)1`%#qe*l=@pQ%#xDMYXfylt4#qM4dS(!O{n*np#%E`_8~d<`}9b0dZe!y+u>Dru?l>d87VZ4l_Qks zYslN;{T9i6X-rry7lGsLRF1dXrFI9Ki}~hYz9yh_+?-pTXs(3P21VsKMHn&fLVFe3 z%~A}LpXC8DzvR);^2P+=&Dr~|qgEkm^U5eJyYu>aq$(>?rHq=Y1{8V=e9{Rl1pL4j zU=Y|B)n?gwq(;pZBDu!MKNR^j3zYrOq@;@7t}M}C<5BjWOr}b%xLVVwWVQ^d7{v-# zgR=W|JymLO@X@obw|N>J(^mja+YVA&Li~&GqV`(Ls_KH zq|`PK@B#~gcEB&R6_xipv5W_31}N`z06`!GYy}2@9l+bbKHyW}8{iah7T8u+&c7)6 zX+Amb?h}t5A2DxsKi2$9$=2M=S4W~|&t5LR^;8$%xL+tiAll*hx4MAMdZ_)tCQM8o z-i1^|@)iu8uVbq}+aE%n#C-z_Rr|k8k<9RgG&N=o%Xn)5&9S^TgNbfPGc5EIVCJ zvo{usDdj;G(QL=FTv6`8gX$36H&qXdY|*iTPp07!(ha*e10~q!FdVviY6jbc{g7C| zP%-tKjp7X#9vU?^omP4ekQTX1I^4Y-<9vR&Va(_4x=i*1b%X=~a)e!VlG-VPt{L@{ z$KHD6s-*V5rlC`j#J766{J5iw#Me_62zCZnbkzB~Ry@RP^F4DNPP<*Kb>+L#**D~D zkXE(4%qzE;r#bc3Q=?lraZ~C79;r|G3k8<@W7q!{SsPc}Hgueg;ba0~p delta 741 zcmaKqOK1~O6o%(aZo-&MY*GZHF^?t+p+Y^k)Y6qdd~?rx=H5FKD=_g8 zCfnVjAP5~qo#2X?ZMJ2A1=B7501S#QYd1x=U3u0fVs1!AU({i`E`NiAm3RVPHdnJi zWiOl~=f@Y%re;bv*!|ykF7Sa|JO?!RBh1ROu1Y9HgVfys!!NPt^a(gM)`??UE2{ns z&IJ-=+stMEIt;j}b%pouP-e^iL+dc*JTzgPxJN!O?I&Il|1?cOho1UrgqTwyyS6$t zBmH^W%h6d0p2%6Sjm#Yn!u){LeD=LS7Ena{AV`@ioZCyeX)0k*XG ziD$fcaj>7|K7ZkvUUU9j8L&8%bG)bR1!<4Bcbs)xJBp9BBF41@I<*mO1{~N|2+Ojt zu`NCI&iB6?erEdA8tjv3{O+w&eAGe)=?p)0^Mv#obhY5yLlF;gi0+C1QC(JgkXkK* zprEg~7ovEi7>JN7gorR GhUG7bm%!@)