From cc6072d2dc3785c8a2f042cc8f97714bee587ee4 Mon Sep 17 00:00:00 2001
From: dennydai <10000@daihan.me>
Date: Thu, 27 Feb 2020 10:51:40 -0500
Subject: [PATCH] initial commit
---
.gitignore | 353 ++++++++++++++++++++++
iClicker.sln | 25 ++
iClicker/App.config | 6 +
iClicker/Program.cs | 122 ++++++++
iClicker/Properties/AssemblyInfo.cs | 36 +++
iClicker/Properties/Resources.Designer.cs | 63 ++++
iClicker/Properties/Resources.resx | 101 +++++++
iClicker/TextTemplate.ico | Bin 0 -> 43451 bytes
iClicker/iClicker.csproj | 103 +++++++
9 files changed, 809 insertions(+)
create mode 100644 .gitignore
create mode 100644 iClicker.sln
create mode 100644 iClicker/App.config
create mode 100644 iClicker/Program.cs
create mode 100644 iClicker/Properties/AssemblyInfo.cs
create mode 100644 iClicker/Properties/Resources.Designer.cs
create mode 100644 iClicker/Properties/Resources.resx
create mode 100644 iClicker/TextTemplate.ico
create mode 100644 iClicker/iClicker.csproj
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a57fdbb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,353 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*[.json, .xml, .info]
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
\ No newline at end of file
diff --git a/iClicker.sln b/iClicker.sln
new file mode 100644
index 0000000..71ac335
--- /dev/null
+++ b/iClicker.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29613.14
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iClicker", "iClicker\iClicker.csproj", "{F940473E-21CD-4B50-A0C9-FACA9B2C8514}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F940473E-21CD-4B50-A0C9-FACA9B2C8514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F940473E-21CD-4B50-A0C9-FACA9B2C8514}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F940473E-21CD-4B50-A0C9-FACA9B2C8514}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F940473E-21CD-4B50-A0C9-FACA9B2C8514}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {0E5CE50C-09C4-4BF8-AA95-D564C0DC1915}
+ EndGlobalSection
+EndGlobal
diff --git a/iClicker/App.config b/iClicker/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/iClicker/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/iClicker/Program.cs b/iClicker/Program.cs
new file mode 100644
index 0000000..22f1457
--- /dev/null
+++ b/iClicker/Program.cs
@@ -0,0 +1,122 @@
+using System;
+using System.Collections;
+using System.Drawing;
+using System.IO.Ports;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace iClicker {
+ class Program {
+ static ArrayList[] answerLists = new ArrayList[5];
+ static bool answerListsUpdated = true;
+ static int mostAnswer;
+
+ static NotifyIcon notifyIcon = new NotifyIcon();
+ static bool consoleVisibility = true;
+ static String channel = "#AA";
+ static void Main(String[] args) {
+ if (args.Length < 1) return;
+ if (args.Length == 2) channel = "#" + args[1].ToUpper();
+
+ for (int i = 0; i < 5; i++) answerLists[i] = new ArrayList();
+
+ // notify icon menu
+ notifyIcon.Visible = true;
+ SetConsoleWindowVisibility(false);
+ notifyIcon.DoubleClick += (s, e) => { consoleVisibility = !consoleVisibility; SetConsoleWindowVisibility(consoleVisibility); };
+ var contextMenu = new ContextMenuStrip();
+ contextMenu.Items.Add("Reset", null, (s, e) => { for (int i = 0; i < 5; i++) answerLists[i].Clear(); answerListsUpdated = true; });
+ contextMenu.Items.Add("Exit", null, (s, e) => { Application.Exit(); });
+ notifyIcon.ContextMenuStrip = contextMenu;
+
+ SerialPort mySerialPort = new SerialPort(args[0].ToUpper());
+
+ mySerialPort.BaudRate = 115200;
+ mySerialPort.Parity = Parity.None;
+ mySerialPort.StopBits = StopBits.One;
+ mySerialPort.DataBits = 8;
+ mySerialPort.Handshake = Handshake.None;
+ mySerialPort.RtsEnable = true;
+ mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
+
+ mySerialPort.Open();
+
+ mySerialPort.WriteLine(channel);
+
+ System.Timers.Timer timer = new System.Timers.Timer(1000);
+ timer.Elapsed += async (sender, e) => await Task.Run(() => updateResult());
+ timer.Start();
+
+ Application.Run();
+ mySerialPort.Close();
+ }
+ private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) {
+ SerialPort sp = (SerialPort)sender;
+ String indata = sp.ReadExisting();
+ if (indata[0] == '$') { // received answer
+ char ans = indata[1];
+ String id = indata.Substring(2, 8);
+ if (ans >= 'A' && ans <= 'E') {
+ for (int i = 0; i < 5; i++) answerLists[i].Remove(id);
+ answerLists[ans - 'A'].Add(id);
+ answerListsUpdated = true;
+ }
+ }
+ }
+ private static void updateResult() {
+ if (!answerListsUpdated) return;
+ Console.Clear();
+ notifyIcon.Text = "";
+ int total = answerLists[0].Count + answerLists[1].Count + answerLists[2].Count + answerLists[3].Count + answerLists[4].Count;
+ if (total == 0) total = 1;
+
+ mostAnswer = 0;
+ for (int i = 1; i < 5; i++)
+ if (answerLists[i].Count > answerLists[mostAnswer].Count) mostAnswer = i;
+
+ for (int i = 0; i < 5; i++) {
+ if (i == mostAnswer) Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine("{0}: {1}\t{2} {3:F}%", (char)(i + 'A'), answerLists[i].Count, new String('▄', answerLists[i].Count * 50 / total), answerLists[i].Count * 100.0 / total);
+ if (i == mostAnswer) Console.ForegroundColor = ConsoleColor.White;
+ }
+
+ for (int i = 0; i < 5; i++) {
+ if (i == mostAnswer) notifyIcon.Text += String.Format(" - ");
+ notifyIcon.Text += String.Format("{0}: {1:F}%\n", (char)(i + 'A'), answerLists[i].Count * 100.0 / total);
+ }
+
+ updateIcon(((char)(mostAnswer + 'A')).ToString(), answerLists[mostAnswer].Count * 100 / total + "%");
+
+ answerListsUpdated = false;
+ }
+ public static void SetConsoleWindowVisibility(bool visible) {
+ IntPtr hWnd = FindWindow(null, Console.Title);
+ if (hWnd != IntPtr.Zero) {
+ if (visible) ShowWindow(hWnd, 1); //1 = SW_SHOWNORMAL
+ else ShowWindow(hWnd, 0); //0 = SW_HIDE
+ }
+ }
+
+ public static void updateIcon(String line1, String line2) {
+ Font line1Font = new Font("Arial Black", 128, FontStyle.Regular, GraphicsUnit.Pixel);
+ Font line2Font = new Font("Arial Black", 104, FontStyle.Regular, GraphicsUnit.Pixel);
+ Brush brushToUse = new SolidBrush(Color.White);
+ Bitmap bitmapText = new Bitmap(256, 256);
+ Graphics g = System.Drawing.Graphics.FromImage(bitmapText);
+
+ IntPtr hIcon;
+
+ g.Clear(Color.Transparent);
+ g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit;
+ g.DrawString(line1, line1Font, brushToUse, 56, 0);
+ g.DrawString(line2, line2Font, brushToUse, 0, 140);
+ hIcon = (bitmapText.GetHicon());
+ notifyIcon.Icon = System.Drawing.Icon.FromHandle(hIcon);
+ }
+
+ [DllImport("user32.dll")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
+ [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
+
+ }
+}
\ No newline at end of file
diff --git a/iClicker/Properties/AssemblyInfo.cs b/iClicker/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..f17a779
--- /dev/null
+++ b/iClicker/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("iClicker")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("iClicker")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[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("f940473e-21cd-4b50-a0c9-faca9b2c8514")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/iClicker/Properties/Resources.Designer.cs b/iClicker/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..6678521
--- /dev/null
+++ b/iClicker/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace iClicker.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("iClicker.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/iClicker/Properties/Resources.resx b/iClicker/Properties/Resources.resx
new file mode 100644
index 0000000..4fdb1b6
--- /dev/null
+++ b/iClicker/Properties/Resources.resx
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/iClicker/TextTemplate.ico b/iClicker/TextTemplate.ico
new file mode 100644
index 0000000000000000000000000000000000000000..0925e5623a23db64db9e21e73350fd97c9ecce55
GIT binary patch
literal 43451
zcmeHQ30xD$_n#a
&P26Qo&`9t
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
+
+
+
+ Debug
+ AnyCPU
+ {F940473E-21CD-4B50-A0C9-FACA9B2C8514}
+ Exe
+ iClicker
+ iClicker
+ v4.7.2
+ 512
+ true
+ true
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.7.2 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
\ No newline at end of file