diff --git a/.gitignore b/.gitignore
index 8961ce21f170309bae02d0b72ada31aa5ec7235a..ec34b920c62338335146d60ed112e9c5115c65e9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,6 +45,20 @@ Builds/VisualStudio2012/open-ephys.vcxproj.user
 Builds/VisualStudio2012/windowState.xml
 Builds/VisualStudio2012/pipetest.bit
 
+Builds/VisualStudio2013/Debug
+Builds/VisualStudio2013/Release
+Builds/VisualStudio2013/Debug64
+Builds/VisualStudio2013/Release64
+Builds/VisualStudio2013/x64
+Builds/VisualStudio2013/ipch
+Builds/VisualStudio2013/open-ephys.sdf
+Builds/VisualStudio2013/open-ephys.opensdf
+Builds/VisualStudio2013/open-ephys.suo
+Builds/VisualStudio2013/open-ephys.v11.suo
+Builds/VisualStudio2013/open-ephys.vcxproj.user
+Builds/VisualStudio2013/windowState.xml
+Builds/VisualStudio2013/pipetest.bit
+
 Builds/VisualStudio2010/Debug
 Builds/VisualStudio2010/Release
 Builds/VisualStudio2010/ipch
diff --git a/Builds/Linux/Makefile b/Builds/Linux/Makefile
index efe7e5bda398f1d4a8ec5b3569e132f88aef73eb..ddb257dede2b362df391be32f65510ef09ac27df 100644
--- a/Builds/Linux/Makefile
+++ b/Builds/Linux/Makefile
@@ -1,30 +1,32 @@
 # Automatically generated makefile, created by the Introjucer
 # Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project!
 
+# (this disables dependency generation if multiple architectures are set)
+DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)
+
 ifndef CONFIG
   CONFIG=Debug
 endif
 
-ifeq ($(TARGET_ARCH),)
-  TARGET_ARCH := -march=native
-endif
-
-# (this disables dependency generation if multiple architectures are set)
-DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)
-
 ifeq ($(CONFIG),Debug)
   BINDIR := build
   LIBDIR := build
   OBJDIR := build/intermediate/Debug
   OUTDIR := build
-  CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O3
-  CXXFLAGS += $(CFLAGS) -export-dynamic -g -pg -std=c++0x
-  LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -L/usr/local/include -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt -pg -ldl -lXext -lGLU 
+
+  ifeq ($(TARGET_ARCH),)
+    TARGET_ARCH := -march=native
+  endif
+
+  CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=0.3.2" -D "JUCE_APP_VERSION_HEX=0x302" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules
+  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O3 -export-dynamic -g -pg -std=c++0x
+  CXXFLAGS += $(CFLAGS)
+  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -L/usr/local/include -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt -pg -ldl -lXext -lGLU -lhdf5 -lhdf5_cpp
   LDDEPS :=
-  RESFLAGS :=  -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode
+  RESFLAGS :=  -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=0.3.2" -D "JUCE_APP_VERSION_HEX=0x302" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules
   TARGET := open-ephys
   BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)
+  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)
 endif
 
 ifeq ($(CONFIG),Release)
@@ -32,94 +34,37 @@ ifeq ($(CONFIG),Release)
   LIBDIR := build
   OBJDIR := build/intermediate/Release
   OUTDIR := build
-  CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3
-  CXXFLAGS += $(CFLAGS) -export-dynamic -g -pg -std=c++0x
-  LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt -pg -ldl -lXext -lGLU 
+
+  ifeq ($(TARGET_ARCH),)
+    TARGET_ARCH := -march=native
+  endif
+
+  CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=0.3.2" -D "JUCE_APP_VERSION_HEX=0x302" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules
+  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 -export-dynamic -g -pg -std=c++0x
+  CXXFLAGS += $(CFLAGS)
+  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt -pg -ldl -lXext -lGLU -lhdf5 -lhdf5_cpp
   LDDEPS :=
-  RESFLAGS :=  -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode
+  RESFLAGS :=  -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=0.3.2" -D "JUCE_APP_VERSION_HEX=0x302" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules
   TARGET := open-ephys-release
   BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)
+  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)
 endif
 
 OBJECTS := \
   $(OBJDIR)/AccessClass_de9602d5.o \
   $(OBJDIR)/PracticalSocket_2574ecc8.o \
-  $(OBJDIR)/Bessel_63b88b81.o \
-  $(OBJDIR)/Biquad_479045c5.o \
-  $(OBJDIR)/Butterworth_a752fb81.o \
-  $(OBJDIR)/Cascade_7ab417a7.o \
-  $(OBJDIR)/ChebyshevI_f2af4063.o \
-  $(OBJDIR)/ChebyshevII_649cfe90.o \
-  $(OBJDIR)/Custom_e24db5a8.o \
-  $(OBJDIR)/Design_3ed2fd75.o \
-  $(OBJDIR)/Documentation_c5f0da2d.o \
-  $(OBJDIR)/Elliptic_8ad9a5b9.o \
-  $(OBJDIR)/Filter_e4029a2f.o \
-  $(OBJDIR)/Legendre_89451537.o \
-  $(OBJDIR)/Param_13628c80.o \
-  $(OBJDIR)/PoleFilter_e04f707.o \
-  $(OBJDIR)/RBJ_418b612d.o \
-  $(OBJDIR)/RootFinder_239a995f.o \
-  $(OBJDIR)/State_22979684.o \
   $(OBJDIR)/AudioComponent_521bd9c9.o \
-  $(OBJDIR)/SerialInput_855a46b1.o \
-  $(OBJDIR)/FileReader_18023b0e.o \
-  $(OBJDIR)/ChannelMappingNode_d9219b9c.o \
-  $(OBJDIR)/PulsePalOutput_9f4ef492.o \
-  $(OBJDIR)/ReferenceNode_519d3b68.o \
-  $(OBJDIR)/PhaseDetector_7193f7dc.o \
-  $(OBJDIR)/AudioResamplingNode_3dbffa2d.o \
-  $(OBJDIR)/Channel_33a3e5fe.o \
-  $(OBJDIR)/PulsePal_14932a18.o \
-  $(OBJDIR)/ofArduino_12f202a5.o \
-  $(OBJDIR)/ofSerial_c3b0a9e1.o \
-  $(OBJDIR)/EventDetector_4807aa7b.o \
-  $(OBJDIR)/FPGAOutput_73b5ffd4.o \
-  $(OBJDIR)/ArduinoOutput_391e90c4.o \
-  $(OBJDIR)/Parameter_ae008024.o \
-  $(OBJDIR)/SpikeDisplayNode_9c52e4ad.o \
-  $(OBJDIR)/WiFiOutput_fa464ec5.o \
-  $(OBJDIR)/LfpDisplayNode_30ef22fd.o \
-  $(OBJDIR)/RecordControl_3e1c6062.o \
-  $(OBJDIR)/Merger_2f90542e.o \
-  $(OBJDIR)/Splitter_6e27a57b.o \
-  $(OBJDIR)/SpikeObject_24e8c655.o \
-  $(OBJDIR)/SpikeDisplayCanvas_b208ff6e.o \
-  $(OBJDIR)/DataWindow_83ce6754.o \
-  $(OBJDIR)/LfpDisplayCanvas_4a58e87e.o \
-  $(OBJDIR)/SpikeDetector_300d85e7.o \
-  $(OBJDIR)/AudioNode_94606ff3.o \
-  $(OBJDIR)/EventNode_95c842b7.o \
-  $(OBJDIR)/LfpTriggeredAverageEditor_101d75b.o \
-  $(OBJDIR)/SerialInputEditor_c00f31f5.o \
-  $(OBJDIR)/ElectrodeButtons_a6064cc.o \
-  $(OBJDIR)/ChannelMappingEditor_dd803b0.o \
-  $(OBJDIR)/FileReaderEditor_16fd7744.o \
-  $(OBJDIR)/PhaseDetectorEditor_f53aa520.o \
-  $(OBJDIR)/PulsePalOutputEditor_ab5be148.o \
-  $(OBJDIR)/RHD2000Editor_d7ddd6b.o \
-  $(OBJDIR)/RecordControlEditor_244084cb.o \
-  $(OBJDIR)/ReferenceNodeEditor_19ee0fac.o \
-  $(OBJDIR)/ResamplingNodeEditor_f2d6f061.o \
-  $(OBJDIR)/FPGAOutputEditor_cfe00f8a.o \
-  $(OBJDIR)/ArduinoOutputEditor_1118f008.o \
-  $(OBJDIR)/ChannelSelector_c1430874.o \
-  $(OBJDIR)/ParameterEditor_91f62ae8.o \
-  $(OBJDIR)/SpikeDisplayEditor_e1812c1.o \
-  $(OBJDIR)/VisualizerEditor_3672b003.o \
-  $(OBJDIR)/MergerEditor_d1fcc0df.o \
-  $(OBJDIR)/ImageIcon_c89b23a6.o \
-  $(OBJDIR)/WiFiOutputEditor_1d3ba5bb.o \
-  $(OBJDIR)/EventNodeEditor_2198733b.o \
-  $(OBJDIR)/SignalGeneratorEditor_3223ac0a.o \
-  $(OBJDIR)/LfpDisplayEditor_99d75351.o \
-  $(OBJDIR)/SourceNodeEditor_8d813122.o \
-  $(OBJDIR)/SplitterEditor_c2199b6c.o \
-  $(OBJDIR)/SpikeDetectorEditor_2fb63eeb.o \
-  $(OBJDIR)/AudioEditor_fb2c6555.o \
-  $(OBJDIR)/FilterEditor_dfe1f39d.o \
-  $(OBJDIR)/GenericEditor_becb2ad6.o \
+  $(OBJDIR)/ArduinoOutput_d5a968de.o \
+  $(OBJDIR)/ArduinoOutputEditor_e1b7e52b.o \
+  $(OBJDIR)/AudioEditor_3931be27.o \
+  $(OBJDIR)/AudioNode_3db3557c.o \
+  $(OBJDIR)/AudioResamplingNode_bdba71b0.o \
+  $(OBJDIR)/Channel_5cb2d4d2.o \
+  $(OBJDIR)/ChannelMappingEditor_9b145f15.o \
+  $(OBJDIR)/ChannelMappingNode_ec0559ea.o \
+  $(OBJDIR)/EcubeEditor_ba242592.o \
+  $(OBJDIR)/RHD2000Editor_dbd5a24.o \
+  $(OBJDIR)/EcubeThread_d0477baf.o \
   $(OBJDIR)/okFrontPanelDLL_87687880.o \
   $(OBJDIR)/rhd2000datablock_722d8dae.o \
   $(OBJDIR)/rhd2000evalboard_e0b412d5.o \
@@ -129,13 +74,92 @@ OBJECTS := \
   $(OBJDIR)/FPGAThread_a8dc34ed.o \
   $(OBJDIR)/DataBuffer_6ae4f549.o \
   $(OBJDIR)/DataThread_b2a47a13.o \
-  $(OBJDIR)/RecordNode_2b7a1a2.o \
-  $(OBJDIR)/SignalGenerator_a9cf4806.o \
-  $(OBJDIR)/ResamplingNode_27a58a6b.o \
-  $(OBJDIR)/FilterNode_817e9c9.o \
-  $(OBJDIR)/SourceNode_c2d6336c.o \
-  $(OBJDIR)/GenericProcessor_733760aa.o \
-  $(OBJDIR)/ProcessorGraph_68b34a0b.o \
+  $(OBJDIR)/Bessel_7e54cb27.o \
+  $(OBJDIR)/Biquad_622c856b.o \
+  $(OBJDIR)/Butterworth_6aca939b.o \
+  $(OBJDIR)/Cascade_b39fccc1.o \
+  $(OBJDIR)/ChebyshevI_e0373d09.o \
+  $(OBJDIR)/ChebyshevII_281496aa.o \
+  $(OBJDIR)/Custom_fce9f54e.o \
+  $(OBJDIR)/Design_596f3d1b.o \
+  $(OBJDIR)/Documentation_89e2d3c7.o \
+  $(OBJDIR)/Elliptic_6f6493df.o \
+  $(OBJDIR)/Filter_fe9ed9d5.o \
+  $(OBJDIR)/Legendre_6dd0035d.o \
+  $(OBJDIR)/Param_4e0cc01a.o \
+  $(OBJDIR)/PoleFilter_fb8cf3ad.o \
+  $(OBJDIR)/RBJ_6081b347.o \
+  $(OBJDIR)/RootFinder_11229605.o \
+  $(OBJDIR)/State_5d41ca1e.o \
+  $(OBJDIR)/ChannelSelector_c1430874.o \
+  $(OBJDIR)/ElectrodeButtons_a6064cc.o \
+  $(OBJDIR)/GenericEditor_becb2ad6.o \
+  $(OBJDIR)/ImageIcon_c89b23a6.o \
+  $(OBJDIR)/VisualizerEditor_3672b003.o \
+  $(OBJDIR)/EventDetector_d0f4d00c.o \
+  $(OBJDIR)/EventNode_857d5604.o \
+  $(OBJDIR)/EventNodeEditor_2652ddd1.o \
+  $(OBJDIR)/FileReader_e4a9ccaa.o \
+  $(OBJDIR)/FileReaderEditor_e1193ff7.o \
+  $(OBJDIR)/FilterEditor_93e366f5.o \
+  $(OBJDIR)/FilterNode_d2b4d9ca.o \
+  $(OBJDIR)/FPGAOutput_9ccd34ea.o \
+  $(OBJDIR)/FPGAOutputEditor_749d7837.o \
+  $(OBJDIR)/GenericProcessor_3e79932a.o \
+  $(OBJDIR)/LfpDisplayCanvas_9bbf9660.o \
+  $(OBJDIR)/LfpDisplayEditor_e7c32ff5.o \
+  $(OBJDIR)/LfpDisplayNode_fdf2e2ca.o \
+  $(OBJDIR)/LfpTriggeredAverageCanvas_5ba95b5e.o \
+  $(OBJDIR)/LfpTriggeredAverageEditor_a7acf4f3.o \
+  $(OBJDIR)/LfpTriggeredAverageNode_2ee5cf48.o \
+  $(OBJDIR)/Merger_53fb4e4a.o \
+  $(OBJDIR)/MergerEditor_e36b0997.o \
+  $(OBJDIR)/MessageCenter_bd1ba084.o \
+  $(OBJDIR)/MessageCenterEditor_afaf4851.o \
+  $(OBJDIR)/ParameterEditor_112258eb.o \
+  $(OBJDIR)/Parameter_b3e5ac9e.o \
+  $(OBJDIR)/PhaseDetector_8a25ed0e.o \
+  $(OBJDIR)/PhaseDetectorEditor_eaec855b.o \
+  $(OBJDIR)/ProcessorGraph_8c3a250a.o \
+  $(OBJDIR)/PulsePalOutput_f41ce62a.o \
+  $(OBJDIR)/PulsePalOutputEditor_3d333977.o \
+  $(OBJDIR)/RecordControl_ecb8ada4.o \
+  $(OBJDIR)/RecordControlEditor_4355fd71.o \
+  $(OBJDIR)/EngineConfigWindow_4fd44ceb.o \
+  $(OBJDIR)/HDF5FileFormat_be712135.o \
+  $(OBJDIR)/HDF5Recording_d14f7b19.o \
+  $(OBJDIR)/OriginalRecording_d6dc3293.o \
+  $(OBJDIR)/RecordEngine_97ef83aa.o \
+  $(OBJDIR)/RecordNode_cc21a82a.o \
+  $(OBJDIR)/ReferenceNode_97454f26.o \
+  $(OBJDIR)/ReferenceNodeEditor_7d0ff573.o \
+  $(OBJDIR)/ResamplingNode_9825590a.o \
+  $(OBJDIR)/ResamplingNodeEditor_8b120457.o \
+  $(OBJDIR)/PulsePal_14932a18.o \
+  $(OBJDIR)/ofArduino_12f202a5.o \
+  $(OBJDIR)/ofSerial_c3b0a9e1.o \
+  $(OBJDIR)/SerialInput_f5b197b8.o \
+  $(OBJDIR)/SerialInputEditor_46740885.o \
+  $(OBJDIR)/SignalGenerator_993274e2.o \
+  $(OBJDIR)/SignalGeneratorEditor_b8e0de2f.o \
+  $(OBJDIR)/SourceNode_de3985ea.o \
+  $(OBJDIR)/SourceNodeEditor_cdc90937.o \
+  $(OBJDIR)/SpikeDetector_50b619e4.o \
+  $(OBJDIR)/SpikeDetectorEditor_502139b1.o \
+  $(OBJDIR)/SpikeDisplayCanvas_2219bd20.o \
+  $(OBJDIR)/SpikeDisplayEditor_6e1d56b5.o \
+  $(OBJDIR)/SpikeDisplayNode_be27b98a.o \
+  $(OBJDIR)/SpikeSortBoxes_17f37282.o \
+  $(OBJDIR)/SpikeSorter_5f160cae.o \
+  $(OBJDIR)/SpikeSorterCanvas_f0ead366.o \
+  $(OBJDIR)/SpikeSorterEditor_3cee6cfb.o \
+  $(OBJDIR)/Splitter_889c68aa.o \
+  $(OBJDIR)/SplitterEditor_93a6dbf7.o \
+  $(OBJDIR)/DataWindow_83ce6754.o \
+  $(OBJDIR)/SpikeObject_24e8c655.o \
+  $(OBJDIR)/WiFiOutput_416d244a.o \
+  $(OBJDIR)/WiFiOutputEditor_ada45f97.o \
+  $(OBJDIR)/EcubeDialogComponent_2ec3bd57.o \
   $(OBJDIR)/CustomArrowButton_206e4278.o \
   $(OBJDIR)/GraphViewer_e43fd2ce.o \
   $(OBJDIR)/EditorViewportButtons_29af2a5c.o \
@@ -145,7 +169,6 @@ OBJECTS := \
   $(OBJDIR)/CustomLookAndFeel_53a8fcdb.o \
   $(OBJDIR)/InfoLabel_a2051bf4.o \
   $(OBJDIR)/DataViewport_2cf95d2c.o \
-  $(OBJDIR)/MessageCenter_748a1cca.o \
   $(OBJDIR)/ControlPanel_a895ede3.o \
   $(OBJDIR)/UIComponent_d667ba37.o \
   $(OBJDIR)/MainWindow_499ac812.o \
@@ -177,9 +200,7 @@ $(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES)
 
 clean:
 	@echo Cleaning open-ephys
-	-@rm -f $(OUTDIR)/$(TARGET)
-	-@rm -rf $(OBJDIR)/*
-	-@rm -rf $(OBJDIR)
+	@$(CLEANCMD)
 
 strip:
 	@echo Stripping open-ephys
@@ -195,459 +216,539 @@ $(OBJDIR)/PracticalSocket_2574ecc8.o: ../../Source/Network/PracticalSocket.cpp
 	@echo "Compiling PracticalSocket.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Bessel_63b88b81.o: ../../Source/Dsp/Bessel.cpp
+$(OBJDIR)/AudioComponent_521bd9c9.o: ../../Source/Audio/AudioComponent.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling AudioComponent.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/ArduinoOutput_d5a968de.o: ../../Source/Processors/ArduinoOutput/ArduinoOutput.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling ArduinoOutput.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/ArduinoOutputEditor_e1b7e52b.o: ../../Source/Processors/ArduinoOutput/ArduinoOutputEditor.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling ArduinoOutputEditor.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/AudioEditor_3931be27.o: ../../Source/Processors/AudioNode/AudioEditor.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling AudioEditor.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/AudioNode_3db3557c.o: ../../Source/Processors/AudioNode/AudioNode.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling AudioNode.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/AudioResamplingNode_bdba71b0.o: ../../Source/Processors/AudioResamplingNode/AudioResamplingNode.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling AudioResamplingNode.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/Channel_5cb2d4d2.o: ../../Source/Processors/Channel/Channel.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling Channel.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/ChannelMappingEditor_9b145f15.o: ../../Source/Processors/ChannelMappingNode/ChannelMappingEditor.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling ChannelMappingEditor.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/ChannelMappingNode_ec0559ea.o: ../../Source/Processors/ChannelMappingNode/ChannelMappingNode.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling ChannelMappingNode.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/EcubeEditor_ba242592.o: ../../Source/Processors/DataThreads/EcubeEditor.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling EcubeEditor.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/RHD2000Editor_dbd5a24.o: ../../Source/Processors/DataThreads/RHD2000Editor.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling RHD2000Editor.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/EcubeThread_d0477baf.o: ../../Source/Processors/DataThreads/EcubeThread.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling EcubeThread.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/okFrontPanelDLL_87687880.o: ../../Source/Processors/DataThreads/rhythm-api/okFrontPanelDLL.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling okFrontPanelDLL.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/rhd2000datablock_722d8dae.o: ../../Source/Processors/DataThreads/rhythm-api/rhd2000datablock.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling rhd2000datablock.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/rhd2000evalboard_e0b412d5.o: ../../Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling rhd2000evalboard.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/rhd2000registers_cf6cd63b.o: ../../Source/Processors/DataThreads/rhythm-api/rhd2000registers.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling rhd2000registers.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/RHD2000Thread_23e0b041.o: ../../Source/Processors/DataThreads/RHD2000Thread.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling RHD2000Thread.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/FileReaderThread_933ea08.o: ../../Source/Processors/DataThreads/FileReaderThread.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling FileReaderThread.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/FPGAThread_a8dc34ed.o: ../../Source/Processors/DataThreads/FPGAThread.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling FPGAThread.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/DataBuffer_6ae4f549.o: ../../Source/Processors/DataThreads/DataBuffer.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling DataBuffer.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/DataThread_b2a47a13.o: ../../Source/Processors/DataThreads/DataThread.cpp
+	-@mkdir -p $(OBJDIR)
+	@echo "Compiling DataThread.cpp"
+	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
+$(OBJDIR)/Bessel_7e54cb27.o: ../../Source/Processors/Dsp/Bessel.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Bessel.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Biquad_479045c5.o: ../../Source/Dsp/Biquad.cpp
+$(OBJDIR)/Biquad_622c856b.o: ../../Source/Processors/Dsp/Biquad.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Biquad.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Butterworth_a752fb81.o: ../../Source/Dsp/Butterworth.cpp
+$(OBJDIR)/Butterworth_6aca939b.o: ../../Source/Processors/Dsp/Butterworth.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Butterworth.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Cascade_7ab417a7.o: ../../Source/Dsp/Cascade.cpp
+$(OBJDIR)/Cascade_b39fccc1.o: ../../Source/Processors/Dsp/Cascade.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Cascade.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ChebyshevI_f2af4063.o: ../../Source/Dsp/ChebyshevI.cpp
+$(OBJDIR)/ChebyshevI_e0373d09.o: ../../Source/Processors/Dsp/ChebyshevI.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling ChebyshevI.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ChebyshevII_649cfe90.o: ../../Source/Dsp/ChebyshevII.cpp
+$(OBJDIR)/ChebyshevII_281496aa.o: ../../Source/Processors/Dsp/ChebyshevII.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling ChebyshevII.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Custom_e24db5a8.o: ../../Source/Dsp/Custom.cpp
+$(OBJDIR)/Custom_fce9f54e.o: ../../Source/Processors/Dsp/Custom.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Custom.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Design_3ed2fd75.o: ../../Source/Dsp/Design.cpp
+$(OBJDIR)/Design_596f3d1b.o: ../../Source/Processors/Dsp/Design.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Design.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Documentation_c5f0da2d.o: ../../Source/Dsp/Documentation.cpp
+$(OBJDIR)/Documentation_89e2d3c7.o: ../../Source/Processors/Dsp/Documentation.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Documentation.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Elliptic_8ad9a5b9.o: ../../Source/Dsp/Elliptic.cpp
+$(OBJDIR)/Elliptic_6f6493df.o: ../../Source/Processors/Dsp/Elliptic.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Elliptic.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Filter_e4029a2f.o: ../../Source/Dsp/Filter.cpp
+$(OBJDIR)/Filter_fe9ed9d5.o: ../../Source/Processors/Dsp/Filter.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Filter.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Legendre_89451537.o: ../../Source/Dsp/Legendre.cpp
+$(OBJDIR)/Legendre_6dd0035d.o: ../../Source/Processors/Dsp/Legendre.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Legendre.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Param_13628c80.o: ../../Source/Dsp/Param.cpp
+$(OBJDIR)/Param_4e0cc01a.o: ../../Source/Processors/Dsp/Param.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling Param.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/PoleFilter_e04f707.o: ../../Source/Dsp/PoleFilter.cpp
+$(OBJDIR)/PoleFilter_fb8cf3ad.o: ../../Source/Processors/Dsp/PoleFilter.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling PoleFilter.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/RBJ_418b612d.o: ../../Source/Dsp/RBJ.cpp
+$(OBJDIR)/RBJ_6081b347.o: ../../Source/Processors/Dsp/RBJ.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling RBJ.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/RootFinder_239a995f.o: ../../Source/Dsp/RootFinder.cpp
+$(OBJDIR)/RootFinder_11229605.o: ../../Source/Processors/Dsp/RootFinder.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling RootFinder.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/State_22979684.o: ../../Source/Dsp/State.cpp
+$(OBJDIR)/State_5d41ca1e.o: ../../Source/Processors/Dsp/State.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling State.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/AudioComponent_521bd9c9.o: ../../Source/Audio/AudioComponent.cpp
-	-@mkdir -p $(OBJDIR)
-	@echo "Compiling AudioComponent.cpp"
-	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
-
-$(OBJDIR)/SerialInput_855a46b1.o: ../../Source/Processors/SerialInput.cpp
+$(OBJDIR)/ChannelSelector_c1430874.o: ../../Source/Processors/Editors/ChannelSelector.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SerialInput.cpp"
+	@echo "Compiling ChannelSelector.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/FileReader_18023b0e.o: ../../Source/Processors/FileReader.cpp
+$(OBJDIR)/ElectrodeButtons_a6064cc.o: ../../Source/Processors/Editors/ElectrodeButtons.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling FileReader.cpp"
+	@echo "Compiling ElectrodeButtons.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ChannelMappingNode_d9219b9c.o: ../../Source/Processors/ChannelMappingNode.cpp
+$(OBJDIR)/GenericEditor_becb2ad6.o: ../../Source/Processors/Editors/GenericEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ChannelMappingNode.cpp"
+	@echo "Compiling GenericEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/PulsePalOutput_9f4ef492.o: ../../Source/Processors/PulsePalOutput.cpp
+$(OBJDIR)/ImageIcon_c89b23a6.o: ../../Source/Processors/Editors/ImageIcon.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling PulsePalOutput.cpp"
+	@echo "Compiling ImageIcon.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ReferenceNode_519d3b68.o: ../../Source/Processors/ReferenceNode.cpp
+$(OBJDIR)/VisualizerEditor_3672b003.o: ../../Source/Processors/Editors/VisualizerEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ReferenceNode.cpp"
+	@echo "Compiling VisualizerEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/PhaseDetector_7193f7dc.o: ../../Source/Processors/PhaseDetector.cpp
+$(OBJDIR)/EventDetector_d0f4d00c.o: ../../Source/Processors/EventDetector/EventDetector.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling PhaseDetector.cpp"
+	@echo "Compiling EventDetector.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/AudioResamplingNode_3dbffa2d.o: ../../Source/Processors/AudioResamplingNode.cpp
+$(OBJDIR)/EventNode_857d5604.o: ../../Source/Processors/EventNode/EventNode.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling AudioResamplingNode.cpp"
+	@echo "Compiling EventNode.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Channel_33a3e5fe.o: ../../Source/Processors/Channel.cpp
+$(OBJDIR)/EventNodeEditor_2652ddd1.o: ../../Source/Processors/EventNode/EventNodeEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling Channel.cpp"
+	@echo "Compiling EventNodeEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/PulsePal_14932a18.o: ../../Source/Processors/Serial/PulsePal.cpp
+$(OBJDIR)/FileReader_e4a9ccaa.o: ../../Source/Processors/FileReader/FileReader.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling PulsePal.cpp"
+	@echo "Compiling FileReader.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ofArduino_12f202a5.o: ../../Source/Processors/Serial/ofArduino.cpp
+$(OBJDIR)/FileReaderEditor_e1193ff7.o: ../../Source/Processors/FileReader/FileReaderEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ofArduino.cpp"
+	@echo "Compiling FileReaderEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ofSerial_c3b0a9e1.o: ../../Source/Processors/Serial/ofSerial.cpp
+$(OBJDIR)/FilterEditor_93e366f5.o: ../../Source/Processors/FilterNode/FilterEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ofSerial.cpp"
+	@echo "Compiling FilterEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/EventDetector_4807aa7b.o: ../../Source/Processors/EventDetector.cpp
+$(OBJDIR)/FilterNode_d2b4d9ca.o: ../../Source/Processors/FilterNode/FilterNode.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling EventDetector.cpp"
+	@echo "Compiling FilterNode.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/FPGAOutput_73b5ffd4.o: ../../Source/Processors/FPGAOutput.cpp
+$(OBJDIR)/FPGAOutput_9ccd34ea.o: ../../Source/Processors/FPGAOutput/FPGAOutput.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling FPGAOutput.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ArduinoOutput_391e90c4.o: ../../Source/Processors/ArduinoOutput.cpp
+$(OBJDIR)/FPGAOutputEditor_749d7837.o: ../../Source/Processors/FPGAOutput/FPGAOutputEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ArduinoOutput.cpp"
+	@echo "Compiling FPGAOutputEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/Parameter_ae008024.o: ../../Source/Processors/Parameter.cpp
+$(OBJDIR)/GenericProcessor_3e79932a.o: ../../Source/Processors/GenericProcessor/GenericProcessor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling Parameter.cpp"
+	@echo "Compiling GenericProcessor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SpikeDisplayNode_9c52e4ad.o: ../../Source/Processors/SpikeDisplayNode.cpp
+$(OBJDIR)/LfpDisplayCanvas_9bbf9660.o: ../../Source/Processors/LfpDisplayNode/LfpDisplayCanvas.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SpikeDisplayNode.cpp"
+	@echo "Compiling LfpDisplayCanvas.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/WiFiOutput_fa464ec5.o: ../../Source/Processors/WiFiOutput.cpp
+$(OBJDIR)/LfpDisplayEditor_e7c32ff5.o: ../../Source/Processors/LfpDisplayNode/LfpDisplayEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling WiFiOutput.cpp"
+	@echo "Compiling LfpDisplayEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/LfpDisplayNode_30ef22fd.o: ../../Source/Processors/LfpDisplayNode.cpp
+$(OBJDIR)/LfpDisplayNode_fdf2e2ca.o: ../../Source/Processors/LfpDisplayNode/LfpDisplayNode.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling LfpDisplayNode.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/RecordControl_3e1c6062.o: ../../Source/Processors/Utilities/RecordControl.cpp
-	-@mkdir -p $(OBJDIR)
-	@echo "Compiling RecordControl.cpp"
-	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
-
-$(OBJDIR)/Merger_2f90542e.o: ../../Source/Processors/Utilities/Merger.cpp
-	-@mkdir -p $(OBJDIR)
-	@echo "Compiling Merger.cpp"
-	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
-
-$(OBJDIR)/Splitter_6e27a57b.o: ../../Source/Processors/Utilities/Splitter.cpp
+$(OBJDIR)/LfpTriggeredAverageCanvas_5ba95b5e.o: ../../Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling Splitter.cpp"
+	@echo "Compiling LfpTriggeredAverageCanvas.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SpikeObject_24e8c655.o: ../../Source/Processors/Visualization/SpikeObject.cpp
+$(OBJDIR)/LfpTriggeredAverageEditor_a7acf4f3.o: ../../Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SpikeObject.cpp"
-	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
-
-$(OBJDIR)/SpikeDisplayCanvas_b208ff6e.o: ../../Source/Processors/Visualization/SpikeDisplayCanvas.cpp
-	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SpikeDisplayCanvas.cpp"
+	@echo "Compiling LfpTriggeredAverageEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/DataWindow_83ce6754.o: ../../Source/Processors/Visualization/DataWindow.cpp
+$(OBJDIR)/LfpTriggeredAverageNode_2ee5cf48.o: ../../Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling DataWindow.cpp"
+	@echo "Compiling LfpTriggeredAverageNode.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/LfpDisplayCanvas_4a58e87e.o: ../../Source/Processors/Visualization/LfpDisplayCanvas.cpp
+$(OBJDIR)/Merger_53fb4e4a.o: ../../Source/Processors/Merger/Merger.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling LfpDisplayCanvas.cpp"
+	@echo "Compiling Merger.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SpikeDetector_300d85e7.o: ../../Source/Processors/SpikeDetector.cpp
+$(OBJDIR)/MergerEditor_e36b0997.o: ../../Source/Processors/Merger/MergerEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SpikeDetector.cpp"
+	@echo "Compiling MergerEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/AudioNode_94606ff3.o: ../../Source/Processors/AudioNode.cpp
+$(OBJDIR)/MessageCenter_bd1ba084.o: ../../Source/Processors/MessageCenter/MessageCenter.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling AudioNode.cpp"
+	@echo "Compiling MessageCenter.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/EventNode_95c842b7.o: ../../Source/Processors/EventNode.cpp
+$(OBJDIR)/MessageCenterEditor_afaf4851.o: ../../Source/Processors/MessageCenter/MessageCenterEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling EventNode.cpp"
+	@echo "Compiling MessageCenterEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/LfpTriggeredAverageEditor_101d75b.o: ../../Source/Processors/Editors/LfpTriggeredAverageEditor.cpp
+$(OBJDIR)/ParameterEditor_112258eb.o: ../../Source/Processors/Parameter/ParameterEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling LfpTriggeredAverageEditor.cpp"
+	@echo "Compiling ParameterEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SerialInputEditor_c00f31f5.o: ../../Source/Processors/Editors/SerialInputEditor.cpp
+$(OBJDIR)/Parameter_b3e5ac9e.o: ../../Source/Processors/Parameter/Parameter.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SerialInputEditor.cpp"
+	@echo "Compiling Parameter.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ElectrodeButtons_a6064cc.o: ../../Source/Processors/Editors/ElectrodeButtons.cpp
+$(OBJDIR)/PhaseDetector_8a25ed0e.o: ../../Source/Processors/PhaseDetector/PhaseDetector.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ElectrodeButtons.cpp"
+	@echo "Compiling PhaseDetector.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ChannelMappingEditor_dd803b0.o: ../../Source/Processors/Editors/ChannelMappingEditor.cpp
+$(OBJDIR)/PhaseDetectorEditor_eaec855b.o: ../../Source/Processors/PhaseDetector/PhaseDetectorEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ChannelMappingEditor.cpp"
+	@echo "Compiling PhaseDetectorEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/FileReaderEditor_16fd7744.o: ../../Source/Processors/Editors/FileReaderEditor.cpp
+$(OBJDIR)/ProcessorGraph_8c3a250a.o: ../../Source/Processors/ProcessorGraph/ProcessorGraph.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling FileReaderEditor.cpp"
+	@echo "Compiling ProcessorGraph.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/PhaseDetectorEditor_f53aa520.o: ../../Source/Processors/Editors/PhaseDetectorEditor.cpp
+$(OBJDIR)/PulsePalOutput_f41ce62a.o: ../../Source/Processors/PulsePalOutput/PulsePalOutput.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling PhaseDetectorEditor.cpp"
+	@echo "Compiling PulsePalOutput.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/PulsePalOutputEditor_ab5be148.o: ../../Source/Processors/Editors/PulsePalOutputEditor.cpp
+$(OBJDIR)/PulsePalOutputEditor_3d333977.o: ../../Source/Processors/PulsePalOutput/PulsePalOutputEditor.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling PulsePalOutputEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/RHD2000Editor_d7ddd6b.o: ../../Source/Processors/Editors/RHD2000Editor.cpp
+$(OBJDIR)/RecordControl_ecb8ada4.o: ../../Source/Processors/RecordControl/RecordControl.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling RHD2000Editor.cpp"
+	@echo "Compiling RecordControl.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/RecordControlEditor_244084cb.o: ../../Source/Processors/Editors/RecordControlEditor.cpp
+$(OBJDIR)/RecordControlEditor_4355fd71.o: ../../Source/Processors/RecordControl/RecordControlEditor.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling RecordControlEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ReferenceNodeEditor_19ee0fac.o: ../../Source/Processors/Editors/ReferenceNodeEditor.cpp
-	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ReferenceNodeEditor.cpp"
-	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
-
-$(OBJDIR)/ResamplingNodeEditor_f2d6f061.o: ../../Source/Processors/Editors/ResamplingNodeEditor.cpp
+$(OBJDIR)/EngineConfigWindow_4fd44ceb.o: ../../Source/Processors/RecordNode/EngineConfigWindow.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ResamplingNodeEditor.cpp"
+	@echo "Compiling EngineConfigWindow.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/FPGAOutputEditor_cfe00f8a.o: ../../Source/Processors/Editors/FPGAOutputEditor.cpp
+$(OBJDIR)/HDF5FileFormat_be712135.o: ../../Source/Processors/RecordNode/HDF5FileFormat.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling FPGAOutputEditor.cpp"
+	@echo "Compiling HDF5FileFormat.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ArduinoOutputEditor_1118f008.o: ../../Source/Processors/Editors/ArduinoOutputEditor.cpp
+$(OBJDIR)/HDF5Recording_d14f7b19.o: ../../Source/Processors/RecordNode/HDF5Recording.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ArduinoOutputEditor.cpp"
+	@echo "Compiling HDF5Recording.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ChannelSelector_c1430874.o: ../../Source/Processors/Editors/ChannelSelector.cpp
+$(OBJDIR)/OriginalRecording_d6dc3293.o: ../../Source/Processors/RecordNode/OriginalRecording.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ChannelSelector.cpp"
+	@echo "Compiling OriginalRecording.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ParameterEditor_91f62ae8.o: ../../Source/Processors/Editors/ParameterEditor.cpp
+$(OBJDIR)/RecordEngine_97ef83aa.o: ../../Source/Processors/RecordNode/RecordEngine.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ParameterEditor.cpp"
+	@echo "Compiling RecordEngine.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SpikeDisplayEditor_e1812c1.o: ../../Source/Processors/Editors/SpikeDisplayEditor.cpp
+$(OBJDIR)/RecordNode_cc21a82a.o: ../../Source/Processors/RecordNode/RecordNode.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SpikeDisplayEditor.cpp"
+	@echo "Compiling RecordNode.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/VisualizerEditor_3672b003.o: ../../Source/Processors/Editors/VisualizerEditor.cpp
+$(OBJDIR)/ReferenceNode_97454f26.o: ../../Source/Processors/ReferenceNode/ReferenceNode.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling VisualizerEditor.cpp"
+	@echo "Compiling ReferenceNode.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/MergerEditor_d1fcc0df.o: ../../Source/Processors/Editors/MergerEditor.cpp
+$(OBJDIR)/ReferenceNodeEditor_7d0ff573.o: ../../Source/Processors/ReferenceNode/ReferenceNodeEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling MergerEditor.cpp"
+	@echo "Compiling ReferenceNodeEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ImageIcon_c89b23a6.o: ../../Source/Processors/Editors/ImageIcon.cpp
+$(OBJDIR)/ResamplingNode_9825590a.o: ../../Source/Processors/ResamplingNode/ResamplingNode.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ImageIcon.cpp"
+	@echo "Compiling ResamplingNode.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/WiFiOutputEditor_1d3ba5bb.o: ../../Source/Processors/Editors/WiFiOutputEditor.cpp
+$(OBJDIR)/ResamplingNodeEditor_8b120457.o: ../../Source/Processors/ResamplingNode/ResamplingNodeEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling WiFiOutputEditor.cpp"
+	@echo "Compiling ResamplingNodeEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/EventNodeEditor_2198733b.o: ../../Source/Processors/Editors/EventNodeEditor.cpp
+$(OBJDIR)/PulsePal_14932a18.o: ../../Source/Processors/Serial/PulsePal.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling EventNodeEditor.cpp"
+	@echo "Compiling PulsePal.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SignalGeneratorEditor_3223ac0a.o: ../../Source/Processors/Editors/SignalGeneratorEditor.cpp
+$(OBJDIR)/ofArduino_12f202a5.o: ../../Source/Processors/Serial/ofArduino.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SignalGeneratorEditor.cpp"
+	@echo "Compiling ofArduino.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/LfpDisplayEditor_99d75351.o: ../../Source/Processors/Editors/LfpDisplayEditor.cpp
+$(OBJDIR)/ofSerial_c3b0a9e1.o: ../../Source/Processors/Serial/ofSerial.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling LfpDisplayEditor.cpp"
+	@echo "Compiling ofSerial.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SourceNodeEditor_8d813122.o: ../../Source/Processors/Editors/SourceNodeEditor.cpp
+$(OBJDIR)/SerialInput_f5b197b8.o: ../../Source/Processors/SerialInput/SerialInput.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SourceNodeEditor.cpp"
+	@echo "Compiling SerialInput.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SplitterEditor_c2199b6c.o: ../../Source/Processors/Editors/SplitterEditor.cpp
+$(OBJDIR)/SerialInputEditor_46740885.o: ../../Source/Processors/SerialInput/SerialInputEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SplitterEditor.cpp"
+	@echo "Compiling SerialInputEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SpikeDetectorEditor_2fb63eeb.o: ../../Source/Processors/Editors/SpikeDetectorEditor.cpp
+$(OBJDIR)/SignalGenerator_993274e2.o: ../../Source/Processors/SignalGenerator/SignalGenerator.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SpikeDetectorEditor.cpp"
+	@echo "Compiling SignalGenerator.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/AudioEditor_fb2c6555.o: ../../Source/Processors/Editors/AudioEditor.cpp
+$(OBJDIR)/SignalGeneratorEditor_b8e0de2f.o: ../../Source/Processors/SignalGenerator/SignalGeneratorEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling AudioEditor.cpp"
+	@echo "Compiling SignalGeneratorEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/FilterEditor_dfe1f39d.o: ../../Source/Processors/Editors/FilterEditor.cpp
+$(OBJDIR)/SourceNode_de3985ea.o: ../../Source/Processors/SourceNode/SourceNode.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling FilterEditor.cpp"
+	@echo "Compiling SourceNode.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/GenericEditor_becb2ad6.o: ../../Source/Processors/Editors/GenericEditor.cpp
+$(OBJDIR)/SourceNodeEditor_cdc90937.o: ../../Source/Processors/SourceNode/SourceNodeEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling GenericEditor.cpp"
+	@echo "Compiling SourceNodeEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/okFrontPanelDLL_87687880.o: ../../Source/Processors/DataThreads/rhythm-api/okFrontPanelDLL.cpp
+$(OBJDIR)/SpikeDetector_50b619e4.o: ../../Source/Processors/SpikeDetector/SpikeDetector.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling okFrontPanelDLL.cpp"
+	@echo "Compiling SpikeDetector.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/rhd2000datablock_722d8dae.o: ../../Source/Processors/DataThreads/rhythm-api/rhd2000datablock.cpp
+$(OBJDIR)/SpikeDetectorEditor_502139b1.o: ../../Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling rhd2000datablock.cpp"
+	@echo "Compiling SpikeDetectorEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/rhd2000evalboard_e0b412d5.o: ../../Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.cpp
+$(OBJDIR)/SpikeDisplayCanvas_2219bd20.o: ../../Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling rhd2000evalboard.cpp"
+	@echo "Compiling SpikeDisplayCanvas.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/rhd2000registers_cf6cd63b.o: ../../Source/Processors/DataThreads/rhythm-api/rhd2000registers.cpp
+$(OBJDIR)/SpikeDisplayEditor_6e1d56b5.o: ../../Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling rhd2000registers.cpp"
+	@echo "Compiling SpikeDisplayEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/RHD2000Thread_23e0b041.o: ../../Source/Processors/DataThreads/RHD2000Thread.cpp
+$(OBJDIR)/SpikeDisplayNode_be27b98a.o: ../../Source/Processors/SpikeDisplayNode/SpikeDisplayNode.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling RHD2000Thread.cpp"
+	@echo "Compiling SpikeDisplayNode.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/FileReaderThread_933ea08.o: ../../Source/Processors/DataThreads/FileReaderThread.cpp
+$(OBJDIR)/SpikeSortBoxes_17f37282.o: ../../Source/Processors/SpikeSorter/SpikeSortBoxes.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling FileReaderThread.cpp"
+	@echo "Compiling SpikeSortBoxes.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/FPGAThread_a8dc34ed.o: ../../Source/Processors/DataThreads/FPGAThread.cpp
+$(OBJDIR)/SpikeSorter_5f160cae.o: ../../Source/Processors/SpikeSorter/SpikeSorter.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling FPGAThread.cpp"
+	@echo "Compiling SpikeSorter.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/DataBuffer_6ae4f549.o: ../../Source/Processors/DataThreads/DataBuffer.cpp
+$(OBJDIR)/SpikeSorterCanvas_f0ead366.o: ../../Source/Processors/SpikeSorter/SpikeSorterCanvas.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling DataBuffer.cpp"
+	@echo "Compiling SpikeSorterCanvas.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/DataThread_b2a47a13.o: ../../Source/Processors/DataThreads/DataThread.cpp
+$(OBJDIR)/SpikeSorterEditor_3cee6cfb.o: ../../Source/Processors/SpikeSorter/SpikeSorterEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling DataThread.cpp"
+	@echo "Compiling SpikeSorterEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/RecordNode_2b7a1a2.o: ../../Source/Processors/RecordNode.cpp
+$(OBJDIR)/Splitter_889c68aa.o: ../../Source/Processors/Splitter/Splitter.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling RecordNode.cpp"
+	@echo "Compiling Splitter.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SignalGenerator_a9cf4806.o: ../../Source/Processors/SignalGenerator.cpp
+$(OBJDIR)/SplitterEditor_93a6dbf7.o: ../../Source/Processors/Splitter/SplitterEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SignalGenerator.cpp"
+	@echo "Compiling SplitterEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ResamplingNode_27a58a6b.o: ../../Source/Processors/ResamplingNode.cpp
+$(OBJDIR)/DataWindow_83ce6754.o: ../../Source/Processors/Visualization/DataWindow.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ResamplingNode.cpp"
+	@echo "Compiling DataWindow.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/FilterNode_817e9c9.o: ../../Source/Processors/FilterNode.cpp
+$(OBJDIR)/SpikeObject_24e8c655.o: ../../Source/Processors/Visualization/SpikeObject.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling FilterNode.cpp"
+	@echo "Compiling SpikeObject.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/SourceNode_c2d6336c.o: ../../Source/Processors/SourceNode.cpp
+$(OBJDIR)/WiFiOutput_416d244a.o: ../../Source/Processors/WiFiOutput/WiFiOutput.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling SourceNode.cpp"
+	@echo "Compiling WiFiOutput.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/GenericProcessor_733760aa.o: ../../Source/Processors/GenericProcessor.cpp
+$(OBJDIR)/WiFiOutputEditor_ada45f97.o: ../../Source/Processors/WiFiOutput/WiFiOutputEditor.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling GenericProcessor.cpp"
+	@echo "Compiling WiFiOutputEditor.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/ProcessorGraph_68b34a0b.o: ../../Source/Processors/ProcessorGraph.cpp
+$(OBJDIR)/EcubeDialogComponent_2ec3bd57.o: ../../Source/UI/EcubeDialogComponent.cpp
 	-@mkdir -p $(OBJDIR)
-	@echo "Compiling ProcessorGraph.cpp"
+	@echo "Compiling EcubeDialogComponent.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
 $(OBJDIR)/CustomArrowButton_206e4278.o: ../../Source/UI/CustomArrowButton.cpp
@@ -695,11 +796,6 @@ $(OBJDIR)/DataViewport_2cf95d2c.o: ../../Source/UI/DataViewport.cpp
 	@echo "Compiling DataViewport.cpp"
 	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
 
-$(OBJDIR)/MessageCenter_748a1cca.o: ../../Source/UI/MessageCenter.cpp
-	-@mkdir -p $(OBJDIR)
-	@echo "Compiling MessageCenter.cpp"
-	@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
-
 $(OBJDIR)/ControlPanel_a895ede3.o: ../../Source/UI/ControlPanel.cpp
 	-@mkdir -p $(OBJDIR)
 	@echo "Compiling ControlPanel.cpp"
diff --git a/Builds/Linux/build/libokFrontPanel.so b/Builds/Linux/build/libokFrontPanel.so
index 6eb1a88a56608f52474e05e824176e04535e4a9e..f8c6386c193b5822adc9a585a0445c1e5efa2c95 100755
Binary files a/Builds/Linux/build/libokFrontPanel.so and b/Builds/Linux/build/libokFrontPanel.so differ
diff --git a/Builds/MacOSX/Info.plist b/Builds/MacOSX/Info.plist
index 6ca85538f90062ec259a6f370c526d4795119164..1462805bd0e24f7a5d9bb1b84d6a1552dbfcf79c 100644
--- a/Builds/MacOSX/Info.plist
+++ b/Builds/MacOSX/Info.plist
@@ -16,9 +16,9 @@
     <key>CFBundleSignature</key>
     <string>????</string>
     <key>CFBundleShortVersionString</key>
-    <string>0.3.1</string>
+    <string>0.3.2</string>
     <key>CFBundleVersion</key>
-    <string>0.3.1</string>
+    <string>0.3.2</string>
     <key>NSHumanReadableCopyright</key>
     <string>Open Ephys</string>
     <key>NSHighResolutionCapable</key>
diff --git a/Builds/MacOSX/open-ephys.xcodeproj/project.pbxproj b/Builds/MacOSX/open-ephys.xcodeproj/project.pbxproj
index 46cdbcc7af78a86a0056faf8f6ccbf44d5eaec0e..a4af177b4721522963e88fdb78474ce370e1bc6c 100644
--- a/Builds/MacOSX/open-ephys.xcodeproj/project.pbxproj
+++ b/Builds/MacOSX/open-ephys.xcodeproj/project.pbxproj
@@ -9,146 +9,161 @@
 /* Begin PBXBuildFile section */
 		002427B013C43CE3E6D4E9B5 /* juce_opengl.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5915DB02FB7CA8CEC1BF38A9 /* juce_opengl.mm */; };
 		004E78BC139419671A9EA137 /* MainWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E08E877C3A6283CF5C803957 /* MainWindow.cpp */; };
-		00A0D05390DB9F2B74DDAA78 /* Bessel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1989E86F8DFDE34887AC0326 /* Bessel.cpp */; };
+		01646F263C203BB412580CB8 /* LfpTriggeredAverageNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA12F07F4F9C872C18A2817B /* LfpTriggeredAverageNode.cpp */; };
+		0203D029CE7420984F737E51 /* FilterEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 414969AEF838522C9FE1B807 /* FilterEditor.cpp */; };
+		027A01C5025DEA9DAFF605D3 /* SpikeSorterEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F46365D8E42099148B843C95 /* SpikeSorterEditor.cpp */; };
 		029C3B11BE586DA100895A60 /* ElectrodeButtons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28CCF04CCC028BAE0AEE5840 /* ElectrodeButtons.cpp */; };
+		031957790B288A3ABED26A87 /* ChebyshevII.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B58436E2B47FC6BB349129F /* ChebyshevII.cpp */; };
 		06BCB79AE267E5841F641E38 /* juce_cryptography.mm in Sources */ = {isa = PBXBuildFile; fileRef = 488D1B00C9E5FE4DAB035EDF /* juce_cryptography.mm */; };
-		0836C50051EF59BF91D7B12D /* LfpDisplayEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A91849BE6B96EB8C0663469 /* LfpDisplayEditor.cpp */; };
+		07868E8D0C1A0BB3A94E87AB /* Custom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F603678D95461916B9D971AA /* Custom.cpp */; };
 		09673DA3B4D6EA61DEFC0C46 /* DataViewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 47A3942AC30A3212C01F1CAF /* DataViewport.cpp */; };
+		0A8D8C2D02858F0F08356EA9 /* OriginalRecording.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E39CC410838072043E3C30DC /* OriginalRecording.cpp */; };
 		0AE243437B40602D35435C32 /* AudioComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B04D87ED6AA4897B6CD3CCF6 /* AudioComponent.cpp */; };
-		0CEFF81CD8861F959DB13362 /* RecordControlEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1552007C6C6AF750278C5BE5 /* RecordControlEditor.cpp */; };
 		0D3DFADD627629AD52668186 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39F287BE4C0B4F3BD4A949FD /* Accelerate.framework */; };
-		11D82BA398E9433440B76F66 /* PhaseDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9FFD9560522567A033226BD7 /* PhaseDetector.cpp */; };
-		129ADFA8B25DE091AFA2D9E3 /* Custom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D8D895B3AD895C6E7FD446BF /* Custom.cpp */; };
+		0E036CEA1285F9B162A07356 /* HDF5FileFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F552E7A463C6207BC3E74C06 /* HDF5FileFormat.cpp */; };
+		0E62780F9978861D5D2BCF71 /* LfpTriggeredAverageCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CC9134D38EBEC67112CA7502 /* LfpTriggeredAverageCanvas.cpp */; };
 		13F1111511DD01E843E631CA /* ProcessorList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79C91DDF3BC3F15D0338E504 /* ProcessorList.cpp */; };
 		14BDAEA656AAFA60334CC55C /* AccessClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 420B0E95F1300ABFDC125DBF /* AccessClass.cpp */; };
-		1691EC0AC4C7083D65B925E2 /* FPGAOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9D78F50147005EDB0E89E2B4 /* FPGAOutput.cpp */; };
+		15C43033BAB27663B4226539 /* PulsePalOutputEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE0EA2212323DEFEBA3D078F /* PulsePalOutputEditor.cpp */; };
 		19BB86C918F89D1377F8A0E1 /* SpikeObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5894D40A0E8FA6E9B3EBF9D9 /* SpikeObject.cpp */; };
+		1A415CE073017DDDA7F2E234 /* FPGAOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4448875C40EAB061B2F8A289 /* FPGAOutput.cpp */; };
 		1B620FC17AAECA4C5DE741E2 /* DataWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 66463AB11EA4D6341C32F27E /* DataWindow.cpp */; };
-		21539690A9A5DD20AFAF41D3 /* SignalGeneratorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9136BD46BE1E28A96FBBD440 /* SignalGeneratorEditor.cpp */; };
+		1D0D651813C4A1DCBE811242 /* SignalGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 748F08ACA463113F570C51AC /* SignalGenerator.cpp */; };
+		2416F9D9E4D89A706514FC25 /* Cascade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E5FA033C407367AE0793258B /* Cascade.cpp */; };
+		24800AF87AD21CE652552EDE /* FileReaderEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56F810EF10E01535A417B671 /* FileReaderEditor.cpp */; };
 		24CC7E9A7E87F762D4AB0467 /* DataThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92602D7166325C7232B85EDD /* DataThread.cpp */; };
-		285FF16149C85F2793EBCBAE /* Design.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B93450006102A0093F5EACB /* Design.cpp */; };
-		2B29D90B985E9EB788472EFE /* SplitterEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D51315B4241B019BE43EE4F1 /* SplitterEditor.cpp */; };
-		2B4A80DCF867DC025C21966B /* Merger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4867923F31CC3EDC9B1A5BE5 /* Merger.cpp */; };
+		2B90821075BA2DF4565644D4 /* Design.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCB5B6CEF112FC911B90E6E2 /* Design.cpp */; };
 		2D2BDB63CBD0BED07FF9E44B /* RecentFilesMenuTemplate.nib in Resources */ = {isa = PBXBuildFile; fileRef = BBE1DB78E35135B41537DCB5 /* RecentFilesMenuTemplate.nib */; };
 		3130878C465F3294A89CA142 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E31563D2E7DDD8315F369233 /* IOKit.framework */; };
 		3162B66BC8118715AAA527D7 /* UIComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D2A3B4CDD296B4CEC6902FD7 /* UIComponent.cpp */; };
-		352F3875222B1D233013AAF9 /* ReferenceNodeEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C39C584DA6F507E773687EE /* ReferenceNodeEditor.cpp */; };
 		38568B2E6C61E2F07173B568 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C868329EBC1BBA606AB2EB88 /* AudioToolbox.framework */; };
-		3933895CA488855A23943F61 /* ParameterEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46E3A634686BFEF787229582 /* ParameterEditor.cpp */; };
-		3A2E957EB8D117C535F119E9 /* ArduinoOutputEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD76E8111A738A8F3717060 /* ArduinoOutputEditor.cpp */; };
+		395F1886484CA576C63B7112 /* RecordControlEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56242BB33B53F133914517BD /* RecordControlEditor.cpp */; };
+		3B05807D08271664EEC4977C /* MessageCenterEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AEFC8A0A9A35F50E59FDE678 /* MessageCenterEditor.cpp */; };
+		3BAE3A1FD0834E798B8602BF /* FilterNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AA19ECEFE2B49832ECEED2F /* FilterNode.cpp */; };
 		3D0C7CA4AD9E3963D52E89BD /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D685CFEA6344360FBFC355B6 /* DiscRecording.framework */; };
+		3E7939ABAA984EE8BFC8CEDD /* Parameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F5D51C5F8174E3824EF8B42 /* Parameter.cpp */; };
 		3FF289281D3318A7BA8BB44D /* juce_audio_processors.mm in Sources */ = {isa = PBXBuildFile; fileRef = B20469D88488F0809126CC80 /* juce_audio_processors.mm */; };
-		4AD3281B0CCF122A25E33667 /* Biquad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22801F75289646F6A85E5583 /* Biquad.cpp */; };
+		411543734DA2029A3030D903 /* State.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20BB146B925C4D4AD43BA479 /* State.cpp */; };
+		44D7379F739C19C7B78B95F5 /* EventDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5C843AC83A36BE87E3F97F8 /* EventDetector.cpp */; };
+		44DB81313BDDF1ECB6AD33FE /* AudioNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1F22CC8D992B8B49D57DDB3F /* AudioNode.cpp */; };
+		469E1EF233BCD61F44687C0F /* RootFinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E122ECCE167A03BDF2D282FE /* RootFinder.cpp */; };
+		4910924155F31E96B9BAD050 /* Splitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9068FF0373FA8321C33C42C /* Splitter.cpp */; };
+		4EF2825142BBAA76FD55FE26 /* MessageCenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC1543B1F822FEEDCB9AC26D /* MessageCenter.cpp */; };
 		4FA2949D3023FC2E377AFFB6 /* unibody-8.otf in Resources */ = {isa = PBXBuildFile; fileRef = 61317B5191E05925F232E18C /* unibody-8.otf */; };
-		4FEC4EC2796E37A3B11B50B9 /* Filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 587FCA2485B9C89C2A99C23A /* Filter.cpp */; };
 		512D7D16D0A95BDD0D6D6E45 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FD13AA663EEE7CC2F83033D /* WebKit.framework */; };
+		527EB48A4A9C2F4FF1BC4FB2 /* ArduinoOutputEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E850C14F13F9855CE1E14C1A /* ArduinoOutputEditor.cpp */; };
 		52AE3F7AEED81BA9ED5C4830 /* ChannelSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E216D095C98F850A5FB6FB0F /* ChannelSelector.cpp */; };
-		52E0D9DC7F5C4703257D8BEB /* ChannelMappingEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B083B1375828610D55F12CF3 /* ChannelMappingEditor.cpp */; };
-		5570682BF1A39FB3E3FAC182 /* LfpDisplayCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A94E809624F99387E600399 /* LfpDisplayCanvas.cpp */; };
-		55CD2E9F373B69C3E8363B78 /* SourceNodeEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6328434A329C353DB8D9512C /* SourceNodeEditor.cpp */; };
+		55227B30828797A8DCB0B91D /* ArduinoOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95A64508FF3D0140D3001A19 /* ArduinoOutput.cpp */; };
+		56C42E2DD0B4905488948796 /* Filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 388D5CAFAE66CCCB8ADA594C /* Filter.cpp */; };
 		582C224AA50C9395810C8E27 /* ofSerial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 308F614D30DCB9AE3767C928 /* ofSerial.cpp */; };
 		58D3FF3B1F462634167BDFB5 /* ControlPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 610E487E060C42B52FD5AAC9 /* ControlPanel.cpp */; };
 		58E0EC510F2A88E14AE55439 /* juce_gui_extra.mm in Sources */ = {isa = PBXBuildFile; fileRef = 27DC0E650D6D54DF29E6DB68 /* juce_gui_extra.mm */; };
-		591CED1277A8C945EF60841C /* MessageCenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7BD2C39F13FDE202141C4B41 /* MessageCenter.cpp */; };
-		5AE42EF7A713B1EC0ACF9EDE /* FilterNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B0E8FAD5AC445F612E3468B9 /* FilterNode.cpp */; };
-		6029B20DF2BD523AC0F78896 /* FilterEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D90290A0AA2C36CE757E46D5 /* FilterEditor.cpp */; };
-		6272253EB0051C1F215CD4D9 /* PulsePalOutputEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 25A9484825F1B93ABC0E577F /* PulsePalOutputEditor.cpp */; };
-		627C7B84F5FD275FAF43663A /* WiFiOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D41C43686CDE35E86A389D7 /* WiFiOutput.cpp */; };
+		58EC9F834448B334410385EB /* SpikeSorterCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DF620BE87EA9F7F25A1144A /* SpikeSorterCanvas.cpp */; };
+		5C597B1A42C8CB3940CBDDA9 /* EcubeThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AFBAE04615D379A18B133090 /* EcubeThread.cpp */; };
 		6306AA945375749C4FE834E6 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C89EC72FF6A7118EF459DC3 /* Main.cpp */; };
+		63B3CC385B0988C7ABA3B07B /* FPGAOutputEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB4D72F040FF59BED08826EC /* FPGAOutputEditor.cpp */; };
+		64FC0EA0C132341C1C3E98E1 /* AudioResamplingNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41E88094E8D929866A6DCA9A /* AudioResamplingNode.cpp */; };
 		6510492BAE00C95DC620F493 /* juce_core.mm in Sources */ = {isa = PBXBuildFile; fileRef = A6A579E4E4AEA865BC71148C /* juce_core.mm */; };
-		66F3B79BDF9BFB631D7E3584 /* RecordNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4E2CAAF556D557B24182414 /* RecordNode.cpp */; };
+		66308BBB808DBB920AB3CBAB /* SerialInputEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D38B76951D31D96F1B71E0F /* SerialInputEditor.cpp */; };
+		66507CA290B4730FE77B7ABC /* ChebyshevI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D60B35D4E32DAE001056D4D5 /* ChebyshevI.cpp */; };
+		66DE280C28A69B2002C40A86 /* SplitterEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 607CC2BFCB0622B3348FA1AD /* SplitterEditor.cpp */; };
 		6702EEA4E99D503C0EE933C4 /* GenericEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3AE8303545E28D793312F46 /* GenericEditor.cpp */; };
-		685151FF4FB872983524A5C3 /* SpikeDisplayNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DAA04A0FD47097893712B241 /* SpikeDisplayNode.cpp */; };
-		69630D3ECA4D6014EE3734CD /* State.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1CB526B75E406851FA918C6 /* State.cpp */; };
+		68EBB4CEB08BD3DEAC450B95 /* FileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34834859523571912C55AC94 /* FileReader.cpp */; };
+		69B5045877D4C674E8A4967F /* ResamplingNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E102C308B0722DFFFEFF2415 /* ResamplingNode.cpp */; };
 		6A13D8F42A330E2C410B43E3 /* EditorViewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E875E681E18D693D5ADB2FB /* EditorViewport.cpp */; };
 		6B67D7B6301182C7621294B6 /* FPGAThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA23A1334E4CFA77BC18A153 /* FPGAThread.cpp */; };
+		6C0A7B0D658E39227319148F /* RBJ.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAD15233FFB64C1608A60250 /* RBJ.cpp */; };
+		6D00BABD3FE1AA0EAA267C1C /* Merger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07B84F46CF90D04BB6B673C5 /* Merger.cpp */; };
+		6D8A9AC5ECC0F2D26304849E /* SpikeDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 89CDE7ED25D0EB7452486E85 /* SpikeDetector.cpp */; };
 		7015D104F55D5B128341CEA8 /* juce_graphics.mm in Sources */ = {isa = PBXBuildFile; fileRef = BBDFB328C3D5FC72A0446E6A /* juce_graphics.mm */; };
 		702C9BFCE865CB6C6B8BFB0D /* rhd2000registers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DB3B3197F8C1E5EE159D6FC /* rhd2000registers.cpp */; };
-		704484388E63CDE33491E1AB /* EventDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39464D2A22940DA2DDCCCFC6 /* EventDetector.cpp */; };
-		7077270005BA819E3D5654B5 /* PulsePalOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DBB295F412798131D3F04045 /* PulsePalOutput.cpp */; };
-		71111DE81104B1536ECB6DFB /* SourceNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ECA6FDB1366BE7EC30F1539B /* SourceNode.cpp */; };
 		739573501D1D440A72C5C2E5 /* RHD2000Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3FB0EA0264580F6B00D993B /* RHD2000Thread.cpp */; };
-		784125612E2B7AC6CD89D835 /* EventNodeEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70151263C4CB8A4F79431E11 /* EventNodeEditor.cpp */; };
+		7398C5E00B9093F78C697706 /* Butterworth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 777D9B0FE3C110ADA980BD09 /* Butterworth.cpp */; };
+		74A14124A3B0C5FB13583B57 /* SourceNodeEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 326F8386BCD4E4189D0CC00F /* SourceNodeEditor.cpp */; };
+		74D0CA6935D890153FB58C56 /* WiFiOutputEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3734FF118787377E4C8741D1 /* WiFiOutputEditor.cpp */; };
 		790911EDF00A4BF77327D99A /* PulsePal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48E12736F471C43C959AD15C /* PulsePal.cpp */; };
+		79FC643530710BF2885932C1 /* ReferenceNodeEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4D435D25CFC019E0FCF4A1 /* ReferenceNodeEditor.cpp */; };
+		7B69E73AF79BB2B10BAA559C /* SourceNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 242B80832B3C8FF4F3CC18F1 /* SourceNode.cpp */; };
 		7F188166D38DA7FB23311413 /* ImageIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04C6B933E1603B4D0916570D /* ImageIcon.cpp */; };
-		80E5365461A5A7A32C48C563 /* EventNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F94DD42C7BBF81C101D3F605 /* EventNode.cpp */; };
-		85A60568B3DC342C76B4E679 /* GenericProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AE038CACE48AF85C4FB1ED5 /* GenericProcessor.cpp */; };
-		88B896EB9793E0C44410D981 /* PhaseDetectorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 75B1E4EFCDA9A506CFEDB09F /* PhaseDetectorEditor.cpp */; };
+		82160D8346428EC9F641FAD6 /* PulsePalOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 183701B0661B6FE784C6A75F /* PulsePalOutput.cpp */; };
+		8352817FEDC7542D3E65B49A /* AudioEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA4EAC64A750D0C3DEE83C5D /* AudioEditor.cpp */; };
+		846EF153B423E09BC5BFDAFD /* SerialInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C01F867D43DF7B1D98B887E /* SerialInput.cpp */; };
+		84BB28DDFF317D243DDC7FA2 /* SpikeDisplayCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6EC29963717E95428D7D2 /* SpikeDisplayCanvas.cpp */; };
 		89FCE8890946693CD5FC4A70 /* okFrontPanelDLL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 235A8987D99A191D07208D2F /* okFrontPanelDLL.cpp */; };
-		8A5BACA019DA9B0EFAD5CE93 /* ProcessorGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 555D34D0CD8776EE5996CC3A /* ProcessorGraph.cpp */; };
+		8ED8249C48B1BB53F617A789 /* Param.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40F90FEFBD575E8A67DF68EB /* Param.cpp */; };
+		8F39AD3F7938EFE82D06E89F /* EcubeDialogComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF28CAB9C7531EF7422602E1 /* EcubeDialogComponent.cpp */; };
 		9212DC2AEE118398CC970DDF /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 243817BA562AD7FA76C834C9 /* CoreMIDI.framework */; };
 		9227961C07C0EE73E89C90B5 /* juce_audio_devices.mm in Sources */ = {isa = PBXBuildFile; fileRef = 65F4459CC1832883FFF6C166 /* juce_audio_devices.mm */; };
+		9252537C12447F047243DEE9 /* Bessel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 041038F6E67FE0409D8ECC74 /* Bessel.cpp */; };
 		955561F4FF4484648FDB9F73 /* FileReaderThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1718EC50691D8421EC00F8B3 /* FileReaderThread.cpp */; };
 		95AE939ADE096394CCD2526F /* EditorViewportButtons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9F3B3184EC6D42CEA35D6ED8 /* EditorViewportButtons.cpp */; };
-		992137E90F9D41522FD56875 /* MergerEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29FD7B383C5DDACAA7B8DFD3 /* MergerEditor.cpp */; };
-		996F9E4989EB47941D8100DA /* SignalGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5522973FA48A13C6BED293FE /* SignalGenerator.cpp */; };
+		9635A954DB8FDD6E19B977C3 /* SpikeSortBoxes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92F51CF12E0C21F38D5E61E8 /* SpikeSortBoxes.cpp */; };
+		97105BCBC5B1BE4E86D48899 /* ResamplingNodeEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DFE30C901793E56A7E3A22 /* ResamplingNodeEditor.cpp */; };
 		9A80E3D1D1758A31D2169497 /* CustomLookAndFeel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3774BBCA6CB133D9A854CF71 /* CustomLookAndFeel.cpp */; };
-		9D17609E468FC65EB70ED7F4 /* RBJ.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A21A229CFACC67E31F4F727 /* RBJ.cpp */; };
 		9E30156DBCE4EAF9EFAF0AC4 /* juce_audio_utils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 56728EC77C65482B9C86FF4D /* juce_audio_utils.mm */; };
-		9E8544C3983B3203530B5A49 /* Parameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CD2370F8F4A44446558A08FB /* Parameter.cpp */; };
+		9F431DA23C92CA0F8E3A2A28 /* LfpDisplayCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9BF6DA66C22FFF5C4D41991 /* LfpDisplayCanvas.cpp */; };
 		A0DAD4E5F7583349DC9275F2 /* juce_data_structures.mm in Sources */ = {isa = PBXBuildFile; fileRef = DBCA7E2FFCFD1354DD19DDD6 /* juce_data_structures.mm */; };
+		A14CA9089A09267E95C93E1D /* SpikeDisplayEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F0C721AB2973FAD23C7F47B /* SpikeDisplayEditor.cpp */; };
 		A269A876BDF3B7011FA4C681 /* juce_gui_basics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 23609D430A25F54723269E91 /* juce_gui_basics.mm */; };
 		A2EE65335FB2810C04ECBFAF /* juce_audio_formats.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6B28CEAF75E22F2CCCACBCC7 /* juce_audio_formats.mm */; };
-		A3CF90DE56808A47519FC101 /* SerialInputEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07BEF02C2B930DF7847C2921 /* SerialInputEditor.cpp */; };
-		A44FEA7117CFE2F06B9889B4 /* Legendre.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C4B0DF8094C90543A65E03E3 /* Legendre.cpp */; };
-		A454D138EC507C01D299AB0F /* WiFiOutputEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C79249376E3FDF10615E16EA /* WiFiOutputEditor.cpp */; };
+		A4A2DF3FA65BAB4322FE5E74 /* HDF5Recording.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36332333DBF8363163F454E6 /* HDF5Recording.cpp */; };
+		A5A90525A975EC3B1E40086E /* ReferenceNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9B10885C9D93CEF580EF167 /* ReferenceNode.cpp */; };
 		A94130738A9973148544664A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5A00ACFA3D76168F22F1205 /* Cocoa.framework */; };
 		AA16BE5A6BBD024C8FCFCDA8 /* VisualizerEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAA3B9396EA62166234DAEF1 /* VisualizerEditor.cpp */; };
-		AD032CEA5DBE4D4C76D3D2D1 /* ArduinoOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D38E60AC4854B6E1EDE488EB /* ArduinoOutput.cpp */; };
+		AD371C6F383F03EF392B6581 /* MergerEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BAA5B3AD1A27F8C4D37A6869 /* MergerEditor.cpp */; };
+		AD588F05EDFE59FD48A3F9B8 /* PoleFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C736D7B85CCD9EC40C5D0AF /* PoleFilter.cpp */; };
 		AD7D05519200FB0EE1C7617A /* BinaryData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A512C5B237A77EF6FB8E11A0 /* BinaryData.cpp */; };
-		AE06672D2CBF8F64465B2126 /* RootFinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3F69480D6145C77992FA59BA /* RootFinder.cpp */; };
-		AF26E388BF6536803E762CB1 /* RHD2000Editor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45D78C8EF660EECE64BAA33F /* RHD2000Editor.cpp */; };
-		AF67C81811F18FCE6AA9C895 /* SpikeDisplayEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC95CD1D830F6D85ADB3B9D /* SpikeDisplayEditor.cpp */; };
-		B226387EB0FCE3BE6773FF61 /* Cascade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 09BCBD414282A3AA4F66A3A5 /* Cascade.cpp */; };
-		B3B08037F49EC7540586828F /* ChebyshevI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC2CFF4DA5CE431FCC628BA3 /* ChebyshevI.cpp */; };
-		B6C73582C501D8C3C03A4860 /* ChebyshevII.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B767A249792EB15A87054409 /* ChebyshevII.cpp */; };
-		B89453078EB0A8107F39EDF3 /* SerialInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86688D712937F3D08918C68B /* SerialInput.cpp */; };
+		AD938EF313A6AC879CA4BED7 /* Elliptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52070E1171C046E4949ADFE5 /* Elliptic.cpp */; };
+		AEDA8F23648EABF79215B566 /* RecordEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F716728550EBD8FA7B9CA7EF /* RecordEngine.cpp */; };
+		AEE1F2B70ED51F7AFEF4E93B /* WiFiOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B25949076F9BB831C5862415 /* WiFiOutput.cpp */; };
+		AFC645928D103D9FA51481CA /* SpikeDetectorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0F10367EBD3945780342A37 /* SpikeDetectorEditor.cpp */; };
+		B081F3F4FA6D8C35E2EEE778 /* Biquad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB5C14E82DE06F767EAD62F9 /* Biquad.cpp */; };
+		B49852F77C0C392C159A1914 /* GenericProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5654EAA7B65445CF1340983 /* GenericProcessor.cpp */; };
+		B806F023DF817BB2D59FEEFD /* RecordNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 949422DF0532222450E95926 /* RecordNode.cpp */; };
+		B88BCF2522AD283DDC0B4F16 /* RHD2000Editor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAFA97C9B7C7635298E274DB /* RHD2000Editor.cpp */; };
+		B9718533E5255AEC3F6C7B2F /* SpikeSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D45EF9812FBC284BCB7EEB7C /* SpikeSorter.cpp */; };
 		BA608CEFC85F7AB9E30E0EB3 /* CustomArrowButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F960CC94B136201BDA148EEA /* CustomArrowButton.cpp */; };
-		BBE886EA79C50D0D68A5A753 /* PoleFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65312FAD0900119CDF6CF414 /* PoleFilter.cpp */; };
-		BE54C019A73BBAE05BFD7D17 /* ResamplingNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A98A22CF5F208ED6DBE08063 /* ResamplingNode.cpp */; };
-		BF3254F07C15D467D6DB3FEF /* AudioEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 10BE33089BA6F3468F36CD6C /* AudioEditor.cpp */; };
-		C0E966234C8AF91C19CF6EA4 /* Param.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3F6C67E29CDEDF2EF61C054F /* Param.cpp */; };
+		BAC379C03C2E7995F2393EF5 /* ProcessorGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CB63EE1552BBFDEB1DADB0A /* ProcessorGraph.cpp */; };
+		BD091BDB684BB28E0F953B8B /* RecordControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E849E3966302E7D4D06712F5 /* RecordControl.cpp */; };
+		BFAC940E5771516A92281F96 /* SignalGeneratorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0915EBE101DD5974F692755B /* SignalGeneratorEditor.cpp */; };
+		BFFD23BD72ECEC9E54936061 /* LfpDisplayEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88C69F0563A99BD2F7BF5FBB /* LfpDisplayEditor.cpp */; };
 		C2475E008FEB33B3EA7B6C7F /* juce_audio_basics.mm in Sources */ = {isa = PBXBuildFile; fileRef = DF3C9A1DD67E879E4E0A2727 /* juce_audio_basics.mm */; };
-		C3406F00595AEFF068EDB162 /* FPGAOutputEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 169F1B20FC9FFE88C53D2735 /* FPGAOutputEditor.cpp */; };
-		C59764685E62E7C4D323F84B /* LfpDisplayNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA535EA158451360B7B8AE52 /* LfpDisplayNode.cpp */; };
-		C6F08BF3EF53274A42BB88EB /* Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9BC055494F9FEE3F90630541 /* Channel.cpp */; };
+		C45009DBCD71E9E234BFCE97 /* Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA8CC6FD54A9F20DA755F2EA /* Channel.cpp */; };
+		C59D4B35ABCF3BE6D0A0665E /* PhaseDetectorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3FE8C41480F07050CC21635F /* PhaseDetectorEditor.cpp */; };
 		C853FCE2F6C91B3643322CF0 /* PracticalSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9F577889CB6C54A2F7B1CA80 /* PracticalSocket.cpp */; };
 		C8D7AC0B88A9A2C182B2B752 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBB769DEBCD6468C13A3CD25 /* Carbon.framework */; };
+		C9678AAD3560E89CCE8FA529 /* EcubeEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80A19F69D9B205BCC0ABA293 /* EcubeEditor.cpp */; };
 		C9AC286A46B3A1318F298DEF /* rhd2000datablock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ECB5A75A81B90327F58CBD9E /* rhd2000datablock.cpp */; };
+		C9F9AE4CB2009DFFD7D7A67F /* PhaseDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F10D1D2F5ED2E7F9A997D4C /* PhaseDetector.cpp */; };
 		CA4DCF67B48352BE633A616D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C055D09224D84121A3EBB29F /* QuartzCore.framework */; };
 		CAB9D9DEF279F93132B45F90 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80C1B737D2C2CB519D1787D7 /* QTKit.framework */; };
-		CB470032BC92A30906C96258 /* Elliptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 392408C1943AC6234BAAC743 /* Elliptic.cpp */; };
-		D0873C347977633B4421B94D /* SpikeDetectorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A252FE4E6A360CBC4AF694B3 /* SpikeDetectorEditor.cpp */; };
-		D0E9E20F9D8FDA700BB6D820 /* Splitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C4730CAFED4F6292B575318 /* Splitter.cpp */; };
-		D19775DC99C67AD20F98EF17 /* Documentation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90FCB43DA2FF766597DA75E /* Documentation.cpp */; };
+		D1F0765F1497D5228ABCA63C /* EventNodeEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F6BE430A8D1C6240286ED75B /* EventNodeEditor.cpp */; };
 		D499273B65D901D0A101CAAA /* GraphViewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E5C1D021C0FD6FAD082C5D75 /* GraphViewer.cpp */; };
 		DA836EC803E4FF4EDEBE6386 /* rhd2000evalboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D2BAC4320470CF68743F58E /* rhd2000evalboard.cpp */; };
-		DD77A0AB68C932F294B753C2 /* LfpTriggeredAverageEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B7819A5759B54D91E334447 /* LfpTriggeredAverageEditor.cpp */; };
+		DC1D91C883B609DBEF7A4235 /* Legendre.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 78A1CE918B3E7ADD87DA4350 /* Legendre.cpp */; };
 		DDDFAE2042D8AD20CC78CE3C /* ofArduino.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3753B3B311AE0A9F4CC5AD40 /* ofArduino.cpp */; };
-		DE758AF46844DF951655966C /* AudioNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B27F558F42AC78F0E564B5AF /* AudioNode.cpp */; };
+		DED0D08EFA1EFF4F1D4D3BEF /* SpikeDisplayNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC9E30922A14330704FB2573 /* SpikeDisplayNode.cpp */; };
 		E100912B2FCE36A30D097C95 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C21DBFB38865E5AFE367C6F /* OpenGL.framework */; };
-		E4DA638CDD4DD574A6CD843E /* RecordControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 258938780F93A7CF41366F26 /* RecordControl.cpp */; };
+		E1247DDF1C88D99691499E52 /* EngineConfigWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7DB22AC6407EEA88F3FFA16D /* EngineConfigWindow.cpp */; };
+		E13848868678C0655147C59D /* LfpTriggeredAverageEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20DBF92457AF75C0698D1B26 /* LfpTriggeredAverageEditor.cpp */; };
+		E18FD0CB21E95A6E81286611 /* Documentation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E5098D437FC0612291567AC /* Documentation.cpp */; };
 		E5CBEA12D7AD7788C9BF5737 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27313EA12BC45638321922CA /* CoreAudio.framework */; };
+		E6038800731F7C747D181A51 /* ChannelMappingEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0105584D551FED59203CC84 /* ChannelMappingEditor.cpp */; };
 		E85DA5FC9A162F129ABA7113 /* SignalChainManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0987F7E90136D0E08A606A22 /* SignalChainManager.cpp */; };
-		EA46BA3970E958013FF85690 /* FileReaderEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0097003751A59A11FA8C5B /* FileReaderEditor.cpp */; };
-		EA6A1BDDF81818D516B93DD6 /* ChannelMappingNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5654BDD4FBFF01AC3F17FA0D /* ChannelMappingNode.cpp */; };
-		ED8CB527B27C67E9E4DA027C /* SpikeDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC3B7E4E25505D9044BFACC7 /* SpikeDetector.cpp */; };
-		EDEE5E21F0C9BDB7DB796083 /* AudioResamplingNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76F569AE7B444D8F69EE0E86 /* AudioResamplingNode.cpp */; };
-		EE56A6BBBFA4A27A4BCF7279 /* SpikeDisplayCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7D4C9E3ED3763847C087F46 /* SpikeDisplayCanvas.cpp */; };
-		F0EC60AEFAFF3D289F8110BE /* ResamplingNodeEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5ABE6BDCA91410BA92A7BD9 /* ResamplingNodeEditor.cpp */; };
-		F25EC78DCCC9CCEE805AE011 /* FileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9215DC26F511C58DEE009209 /* FileReader.cpp */; };
+		F2586A2DCEF44961AEA247E8 /* ParameterEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 934B37E2BECD69E6E27051F6 /* ParameterEditor.cpp */; };
 		F4397EAE00E0B9F96C8B6C07 /* InfoLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17E13CCDA0C82F92EAB05BE6 /* InfoLabel.cpp */; };
-		F505DF3C2BA492B5A2F28D05 /* Butterworth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B47B3368AA1A182B0CA1AB26 /* Butterworth.cpp */; };
+		F4808CE43E77C8EC285A39DC /* EventNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2592795DB135E0F2C04406F3 /* EventNode.cpp */; };
 		FA2A052548AAD146F3F5AD83 /* juce_video.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4A7695E93CE32F4E95042FCB /* juce_video.mm */; };
+		FA882EEE408CBBDC7BD90F14 /* LfpDisplayNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C64C490BD7FE9E57D6C682D /* LfpDisplayNode.cpp */; };
 		FAE745870674A07A65690433 /* DataBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 788F8B7719B70465762B634B /* DataBuffer.cpp */; };
 		FCB767F14565886C9D823916 /* juce_events.mm in Sources */ = {isa = PBXBuildFile; fileRef = C29E664781AA2396C8D59543 /* juce_events.mm */; };
 		FD4865450F4C47FF3C6327FE /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56169D835A3E3029D6E3904C /* QuickTime.framework */; };
-		FDCFDC9CC6D7A82131190FB0 /* ReferenceNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BBD9C2AED6F500D090069007 /* ReferenceNode.cpp */; };
+		FFCA1C44C024BCA1878F49FE /* ChannelMappingNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 25CEC111DFEC71FA6828257F /* ChannelMappingNode.cpp */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
 		0052A4FD257928E5D83927E6 /* juce_WavAudioFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_WavAudioFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp; sourceTree = SOURCE_ROOT; };
-		00A54510EFB9B0966D0B430C /* PulsePalOutputEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PulsePalOutputEditor.h; path = ../../Source/Processors/Editors/PulsePalOutputEditor.h; sourceTree = SOURCE_ROOT; };
+		012F05BBF926C8F39AC7871B /* GenericProcessor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GenericProcessor.h; path = ../../Source/Processors/GenericProcessor/GenericProcessor.h; sourceTree = SOURCE_ROOT; };
 		01859D6E7D95E44BD8E17D91 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_cryptography/juce_module_info; sourceTree = SOURCE_ROOT; };
 		018F4E079EB12A78C4F8F773 /* juce_MidiBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MidiBuffer.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiBuffer.h; sourceTree = SOURCE_ROOT; };
 		01C313C323E5CB995C939E0B /* juce_Component.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Component.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Component.cpp; sourceTree = SOURCE_ROOT; };
@@ -157,12 +172,12 @@
 		0242AB5BCD8C002DC2E30BAC /* juce_MidiOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MidiOutput.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiOutput.h; sourceTree = SOURCE_ROOT; };
 		027C1143CC66EA8F73C39A74 /* juce_ThreadWithProgressWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ThreadWithProgressWindow.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h; sourceTree = SOURCE_ROOT; };
 		0287B009511521BEAAE8A52C /* DataThread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DataThread.h; path = ../../Source/Processors/DataThreads/DataThread.h; sourceTree = SOURCE_ROOT; };
-		028D4D3C0862B4B1312E2395 /* SourceNodeEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SourceNodeEditor.h; path = ../../Source/Processors/Editors/SourceNodeEditor.h; sourceTree = SOURCE_ROOT; };
 		02DA588D3B873F1971ACD912 /* juce_FlacAudioFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FlacAudioFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp; sourceTree = SOURCE_ROOT; };
 		0316B49B86725305C70783CA /* juce_AudioPluginFormatManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioPluginFormatManager.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp; sourceTree = SOURCE_ROOT; };
 		033AE5DE19F0EEDC47D41C80 /* juce_FileChooserDialogBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileChooserDialogBox.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp; sourceTree = SOURCE_ROOT; };
 		0384C68082FE4EAA41C8FBC2 /* juce_SharedResourcePointer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SharedResourcePointer.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_SharedResourcePointer.h; sourceTree = SOURCE_ROOT; };
 		03D7B457E0915E43A6AFF4B4 /* juce_AudioUnitPluginFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioUnitPluginFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h; sourceTree = SOURCE_ROOT; };
+		041038F6E67FE0409D8ECC74 /* Bessel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Bessel.cpp; path = ../../Source/Processors/Dsp/Bessel.cpp; sourceTree = SOURCE_ROOT; };
 		04C474E0F2F7FDEC714A673C /* juce_PathIterator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PathIterator.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathIterator.cpp; sourceTree = SOURCE_ROOT; };
 		04C6B933E1603B4D0916570D /* ImageIcon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ImageIcon.cpp; path = ../../Source/Processors/Editors/ImageIcon.cpp; sourceTree = SOURCE_ROOT; };
 		04ED2387517934A84ACF9865 /* juce_BubbleComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BubbleComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp; sourceTree = SOURCE_ROOT; };
@@ -174,7 +189,8 @@
 		06072EC6BCD3B7D8C17C2402 /* juce_AudioProcessor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioProcessor.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp; sourceTree = SOURCE_ROOT; };
 		078625CF5C083AD538D23401 /* juce_AudioCDReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioCDReader.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp; sourceTree = SOURCE_ROOT; };
 		0790CCE2FCFDFA6944DFC402 /* juce_PopupMenu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PopupMenu.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.cpp; sourceTree = SOURCE_ROOT; };
-		07BEF02C2B930DF7847C2921 /* SerialInputEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SerialInputEditor.cpp; path = ../../Source/Processors/Editors/SerialInputEditor.cpp; sourceTree = SOURCE_ROOT; };
+		07A8ED74417654C40F9EFEFC /* FPGAOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FPGAOutput.h; path = ../../Source/Processors/FPGAOutput/FPGAOutput.h; sourceTree = SOURCE_ROOT; };
+		07B84F46CF90D04BB6B673C5 /* Merger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Merger.cpp; path = ../../Source/Processors/Merger/Merger.cpp; sourceTree = SOURCE_ROOT; };
 		07FD5E530E9E6BFB2ACA4B8C /* juce_audio_formats.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_audio_formats.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/juce_audio_formats.h; sourceTree = SOURCE_ROOT; };
 		081E86FE0B991469CFA8D7EA /* juce_CPlusPlusCodeTokeniser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CPlusPlusCodeTokeniser.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp; sourceTree = SOURCE_ROOT; };
 		085F51FEE5C5FDAA321090A0 /* juce_CachedComponentImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CachedComponentImage.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/components/juce_CachedComponentImage.h; sourceTree = SOURCE_ROOT; };
@@ -182,20 +198,20 @@
 		08907A4BA0D5628476D19C48 /* juce_RelativePointPath.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativePointPath.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp; sourceTree = SOURCE_ROOT; };
 		08A7A7FD7D77C0657270E9BF /* juce_DrawableText.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableText.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableText.cpp; sourceTree = SOURCE_ROOT; };
 		08DAD5894A480950C66F5873 /* juce_ArrowButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ArrowButton.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.h; sourceTree = SOURCE_ROOT; };
+		0915EBE101DD5974F692755B /* SignalGeneratorEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SignalGeneratorEditor.cpp; path = ../../Source/Processors/SignalGenerator/SignalGeneratorEditor.cpp; sourceTree = SOURCE_ROOT; };
 		09160DF53438B400BFE85E07 /* juce_InputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_InputSource.h; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_InputSource.h; sourceTree = SOURCE_ROOT; };
 		0987F7E90136D0E08A606A22 /* SignalChainManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SignalChainManager.cpp; path = ../../Source/UI/SignalChainManager.cpp; sourceTree = SOURCE_ROOT; };
 		09A159213372995F3CCEB85B /* juce_String.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_String.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_String.h; sourceTree = SOURCE_ROOT; };
-		09BCBD414282A3AA4F66A3A5 /* Cascade.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Cascade.cpp; path = ../../Source/Dsp/Cascade.cpp; sourceTree = SOURCE_ROOT; };
 		0A2AD4AB14F93364EFB9611E /* miso-regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file.ttf; name = "miso-regular.ttf"; path = "../../Resources/Fonts/miso-regular.ttf"; sourceTree = SOURCE_ROOT; };
 		0A351ED88CF00C0697701E73 /* juce_Logger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Logger.h; path = ../../JuceLibraryCode/modules/juce_core/logging/juce_Logger.h; sourceTree = SOURCE_ROOT; };
 		0A413228C75C046CE683E0E6 /* juce_String.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_String.cpp; path = ../../JuceLibraryCode/modules/juce_core/text/juce_String.cpp; sourceTree = SOURCE_ROOT; };
 		0A42FFB89531588E51762D3E /* juce_android_Audio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Audio.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_android_Audio.cpp; sourceTree = SOURCE_ROOT; };
 		0A46EF94E558D5E19F96E646 /* juce_Timer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Timer.cpp; path = ../../JuceLibraryCode/modules/juce_events/timers/juce_Timer.cpp; sourceTree = SOURCE_ROOT; };
+		0A6D08BC1B5ACA62F35AF5CD /* Biquad.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Biquad.h; path = ../../Source/Processors/Dsp/Biquad.h; sourceTree = SOURCE_ROOT; };
 		0A8BC957DBEE226346C1EA25 /* juce_BigInteger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BigInteger.cpp; path = ../../JuceLibraryCode/modules/juce_core/maths/juce_BigInteger.cpp; sourceTree = SOURCE_ROOT; };
 		0AA8F001A50408977E76ED96 /* juce_RecentlyOpenedFilesList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RecentlyOpenedFilesList.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp; sourceTree = SOURCE_ROOT; };
 		0AAFE3F4D106138401C190C5 /* juce_GlowEffect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GlowEffect.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.cpp; sourceTree = SOURCE_ROOT; };
 		0B2502A656E77E00AF15A343 /* juce_ApplicationCommandInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandInfo.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h; sourceTree = SOURCE_ROOT; };
-		0B2B7732073D56E484950C8D /* RecordControlEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RecordControlEditor.h; path = ../../Source/Processors/Editors/RecordControlEditor.h; sourceTree = SOURCE_ROOT; };
 		0B382285EEDD8A3FDB45C074 /* juce_ThreadPool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ThreadPool.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_ThreadPool.h; sourceTree = SOURCE_ROOT; };
 		0B5B63E563EFA7E816DE3DCA /* juce_OutputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OutputStream.h; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_OutputStream.h; sourceTree = SOURCE_ROOT; };
 		0BB4380EDFEAAE0DAB255B90 /* juce_BlowFish.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BlowFish.cpp; path = ../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_BlowFish.cpp; sourceTree = SOURCE_ROOT; };
@@ -203,7 +219,6 @@
 		0BF3932F3EA1149C2F7E31F9 /* juce_IPAddress.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_IPAddress.cpp; path = ../../JuceLibraryCode/modules/juce_core/network/juce_IPAddress.cpp; sourceTree = SOURCE_ROOT; };
 		0C646E9950FB580B21E1F2BD /* juce_WindowsMediaAudioFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_WindowsMediaAudioFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp; sourceTree = SOURCE_ROOT; };
 		0CCB1C4D687001E04DE1DD9C /* juce_SubregionStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SubregionStream.cpp; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_SubregionStream.cpp; sourceTree = SOURCE_ROOT; };
-		0CCE619599DB39323E49FF3C /* ResamplingNodeEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ResamplingNodeEditor.h; path = ../../Source/Processors/Editors/ResamplingNodeEditor.h; sourceTree = SOURCE_ROOT; };
 		0D3C20D1F00B7B1381E6B987 /* juce_TabbedButtonBar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TabbedButtonBar.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp; sourceTree = SOURCE_ROOT; };
 		0D884C2CF25F23CE6B99B2A1 /* juce_Singleton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Singleton.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_Singleton.h; sourceTree = SOURCE_ROOT; };
 		0D8ECE32F7D0FE74185F6EF4 /* juce_PropertyPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PropertyPanel.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyPanel.h; sourceTree = SOURCE_ROOT; };
@@ -213,13 +228,11 @@
 		0E4B0B8425DBA19B6F3FE4BF /* juce_UIViewComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_UIViewComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/embedding/juce_UIViewComponent.h; sourceTree = SOURCE_ROOT; };
 		0E98E81084F183B8426EDA7F /* juce_DynamicObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DynamicObject.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_DynamicObject.h; sourceTree = SOURCE_ROOT; };
 		0FA84E49DB493BCC886A355F /* juce_MD5.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MD5.h; path = ../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_MD5.h; sourceTree = SOURCE_ROOT; };
-		0FDD7551AC98348D4A98ADC7 /* ProcessorGraph.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ProcessorGraph.h; path = ../../Source/Processors/ProcessorGraph.h; sourceTree = SOURCE_ROOT; };
 		0FE8ACC50ED8E7FFC9E6B9B4 /* ControlPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ControlPanel.h; path = ../../Source/UI/ControlPanel.h; sourceTree = SOURCE_ROOT; };
 		105B1452DF6CE1D80D69A9D1 /* ProcessorList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ProcessorList.h; path = ../../Source/UI/ProcessorList.h; sourceTree = SOURCE_ROOT; };
 		106E81B939C6B35E34DD71FE /* juce_CodeEditorComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CodeEditorComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h; sourceTree = SOURCE_ROOT; };
-		1086169B0EE86E04B64575C2 /* Dsp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Dsp.h; path = ../../Source/Dsp/Dsp.h; sourceTree = SOURCE_ROOT; };
 		108DF32ADFBA5CA48F928A92 /* juce_File.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_File.h; path = ../../JuceLibraryCode/modules/juce_core/files/juce_File.h; sourceTree = SOURCE_ROOT; };
-		10BE33089BA6F3468F36CD6C /* AudioEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioEditor.cpp; path = ../../Source/Processors/Editors/AudioEditor.cpp; sourceTree = SOURCE_ROOT; };
+		10AC8A3D981DAE425D24F9F1 /* EventNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EventNode.h; path = ../../Source/Processors/EventNode/EventNode.h; sourceTree = SOURCE_ROOT; };
 		113404D3FDE3745DF1E8D014 /* juce_ReadWriteLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ReadWriteLock.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_ReadWriteLock.h; sourceTree = SOURCE_ROOT; };
 		1191BF3048664183033BFF89 /* juce_DropShadowEffect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadowEffect.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/effects/juce_DropShadowEffect.cpp; sourceTree = SOURCE_ROOT; };
 		1194EE0956A9645270582979 /* juce_android_Messaging.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Messaging.cpp; path = ../../JuceLibraryCode/modules/juce_events/native/juce_android_Messaging.cpp; sourceTree = SOURCE_ROOT; };
@@ -227,9 +240,11 @@
 		11D619EEF63C1827EA91F593 /* juce_UndoManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_UndoManager.cpp; path = ../../JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoManager.cpp; sourceTree = SOURCE_ROOT; };
 		1246C8A62803B7E115713705 /* juce_LocalisedStrings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LocalisedStrings.cpp; path = ../../JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.cpp; sourceTree = SOURCE_ROOT; };
 		12B5243A9435FABAFBE20165 /* juce_Quaternion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Quaternion.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_Quaternion.h; sourceTree = SOURCE_ROOT; };
-		12B5DDCB6E5ECD93A4C55BB5 /* LfpDisplayCanvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LfpDisplayCanvas.h; path = ../../Source/Processors/Visualization/LfpDisplayCanvas.h; sourceTree = SOURCE_ROOT; };
+		12F73B770FFDEA8696710E86 /* SerialInput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SerialInput.h; path = ../../Source/Processors/SerialInput/SerialInput.h; sourceTree = SOURCE_ROOT; };
 		1307DAE32BA702565A67D127 /* juce_MidiFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiFile.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiFile.cpp; sourceTree = SOURCE_ROOT; };
 		13212C01A5E138553FAFBE9C /* juce_Drawable.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Drawable.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_Drawable.cpp; sourceTree = SOURCE_ROOT; };
+		1322A008F022AF76593EAA9A /* Common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Common.h; path = ../../Source/Processors/Dsp/Common.h; sourceTree = SOURCE_ROOT; };
+		13A33B5CF55BDF7BDC9D1D0C /* SpikeDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeDetector.h; path = ../../Source/Processors/SpikeDetector/SpikeDetector.h; sourceTree = SOURCE_ROOT; };
 		13D9868B08E941F6827E157C /* juce_ResizableWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ResizableWindow.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.h; sourceTree = SOURCE_ROOT; };
 		13D9DC48F19699485F9888A4 /* juce_PathIterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PathIterator.h; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathIterator.h; sourceTree = SOURCE_ROOT; };
 		1463D2DAB3A1D8CEE825056A /* juce_AudioCDReader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioCDReader.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h; sourceTree = SOURCE_ROOT; };
@@ -238,27 +253,26 @@
 		14F594C425F332F455A16D35 /* okFrontPanelDLL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = okFrontPanelDLL.h; path = "../../Source/Processors/DataThreads/rhythm-api/okFrontPanelDLL.h"; sourceTree = SOURCE_ROOT; };
 		14FE601229C9A40C6E182F28 /* juce_mac_MouseCursor.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_MouseCursor.mm; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_MouseCursor.mm; sourceTree = SOURCE_ROOT; };
 		1518D2BA7FCAF267EF1F02E6 /* juce_win32_Windowing.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Windowing.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_Windowing.cpp; sourceTree = SOURCE_ROOT; };
-		154303EE3929F26B93792187 /* SourceNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SourceNode.h; path = ../../Source/Processors/SourceNode.h; sourceTree = SOURCE_ROOT; };
-		1552007C6C6AF750278C5BE5 /* RecordControlEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RecordControlEditor.cpp; path = ../../Source/Processors/Editors/RecordControlEditor.cpp; sourceTree = SOURCE_ROOT; };
+		154D5631EEFF8883BD385EB7 /* Elliptic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Elliptic.h; path = ../../Source/Processors/Dsp/Elliptic.h; sourceTree = SOURCE_ROOT; };
 		15870472BA2B1779521A21BD /* ElectrodeButtons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ElectrodeButtons.h; path = ../../Source/Processors/Editors/ElectrodeButtons.h; sourceTree = SOURCE_ROOT; };
 		159790C750B1F8B485DBB499 /* juce_win32_FileChooser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_FileChooser.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp; sourceTree = SOURCE_ROOT; };
 		161E095C716133CB255B6CCD /* juce_MidiKeyboardState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MidiKeyboardState.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiKeyboardState.h; sourceTree = SOURCE_ROOT; };
 		167524110873F9888CF1B9E8 /* juce_ApplicationCommandID.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandID.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandID.h; sourceTree = SOURCE_ROOT; };
 		168823A9EBD85BFBFD2CE2EE /* RadioButtons-03.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons-03.png"; path = "../../Resources/Images/Icons/RadioButtons-03.png"; sourceTree = SOURCE_ROOT; };
-		169F1B20FC9FFE88C53D2735 /* FPGAOutputEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FPGAOutputEditor.cpp; path = ../../Source/Processors/Editors/FPGAOutputEditor.cpp; sourceTree = SOURCE_ROOT; };
 		1712916024EC787B6C231732 /* RadioButtons_selected_over-03.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_selected_over-03.png"; path = "../../Resources/Images/Icons/RadioButtons_selected_over-03.png"; sourceTree = SOURCE_ROOT; };
 		1718EC50691D8421EC00F8B3 /* FileReaderThread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FileReaderThread.cpp; path = ../../Source/Processors/DataThreads/FileReaderThread.cpp; sourceTree = SOURCE_ROOT; };
 		1719507D8A73EA71F1C3F306 /* cpmono-plain-serialized */ = {isa = PBXFileReference; lastKnownFileType = file; name = "cpmono-plain-serialized"; path = "../../Resources/Fonts/cpmono-plain-serialized"; sourceTree = SOURCE_ROOT; };
 		172FA5C9EC4B16BC0C45F269 /* juce_Variant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Variant.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_Variant.h; sourceTree = SOURCE_ROOT; };
 		174842EA681FA29BE38A6272 /* juce_ButtonPropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ButtonPropertyComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
 		1777330D3BDAE99A93F98943 /* juce_Font.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Font.h; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Font.h; sourceTree = SOURCE_ROOT; };
+		1785D37A95AF0D67F69F29B6 /* ResamplingNodeEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ResamplingNodeEditor.h; path = ../../Source/Processors/ResamplingNode/ResamplingNodeEditor.h; sourceTree = SOURCE_ROOT; };
 		178AD28BF5BC92B58A3A3539 /* juce_MixerAudioSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MixerAudioSource.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_MixerAudioSource.h; sourceTree = SOURCE_ROOT; };
 		17B29FF3D3EA14EF2BE149BB /* juce_ComponentBoundsConstrainer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentBoundsConstrainer.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp; sourceTree = SOURCE_ROOT; };
 		17CACEC7EA0A4B55A06A0993 /* juce_MidiDataConcatenator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MidiDataConcatenator.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h; sourceTree = SOURCE_ROOT; };
-		17CE6B2913E72ED8727ECD56 /* AudioResamplingNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioResamplingNode.h; path = ../../Source/Processors/AudioResamplingNode.h; sourceTree = SOURCE_ROOT; };
 		17E13CCDA0C82F92EAB05BE6 /* InfoLabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = InfoLabel.cpp; path = ../../Source/UI/InfoLabel.cpp; sourceTree = SOURCE_ROOT; };
 		17FB020EFEAED8493D3CB121 /* juce_ToolbarItemComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarItemComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h; sourceTree = SOURCE_ROOT; };
 		1819C1C4DE5FEEDEA143E3D2 /* juce_mac_MainMenu.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_MainMenu.mm; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_MainMenu.mm; sourceTree = SOURCE_ROOT; };
+		183701B0661B6FE784C6A75F /* PulsePalOutput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PulsePalOutput.cpp; path = ../../Source/Processors/PulsePalOutput/PulsePalOutput.cpp; sourceTree = SOURCE_ROOT; };
 		18A730DF335EEB3A4D13FDCA /* juce_MessageManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MessageManager.cpp; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.cpp; sourceTree = SOURCE_ROOT; };
 		18B410DA5435C02C82BA13F8 /* juce_BooleanPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BooleanPropertyComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h; sourceTree = SOURCE_ROOT; };
 		18C2F9CA38393D106FB834E2 /* juce_AudioPluginFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioPluginFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp; sourceTree = SOURCE_ROOT; };
@@ -266,19 +280,18 @@
 		19043050D1DADAEAB48FB803 /* juce_AudioCDBurner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioCDBurner.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h; sourceTree = SOURCE_ROOT; };
 		19148DBA36B94FA639DF3A72 /* CustomLookAndFeel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CustomLookAndFeel.h; path = ../../Source/UI/CustomLookAndFeel.h; sourceTree = SOURCE_ROOT; };
 		193FED8339417E8E6264957A /* juce_ElementComparator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ElementComparator.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_ElementComparator.h; sourceTree = SOURCE_ROOT; };
-		1989E86F8DFDE34887AC0326 /* Bessel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Bessel.cpp; path = ../../Source/Dsp/Bessel.cpp; sourceTree = SOURCE_ROOT; };
 		19A8A8E1BF043B390E02C429 /* juce_linux_Messaging.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Messaging.cpp; path = ../../JuceLibraryCode/modules/juce_events/native/juce_linux_Messaging.cpp; sourceTree = SOURCE_ROOT; };
 		19AB6653E818B409554C5606 /* juce_ScopedValueSetter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedValueSetter.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_ScopedValueSetter.h; sourceTree = SOURCE_ROOT; };
+		19B08AF9187EC45ECDE87602 /* AudioNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioNode.h; path = ../../Source/Processors/AudioNode/AudioNode.h; sourceTree = SOURCE_ROOT; };
 		1A22BB28E65B6D6636CCEBF1 /* RadioButtons_selected_over-02.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_selected_over-02.png"; path = "../../Resources/Images/Icons/RadioButtons_selected_over-02.png"; sourceTree = SOURCE_ROOT; };
 		1A5E3078685AC97ADC098693 /* juce_JSON.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_JSON.cpp; path = ../../JuceLibraryCode/modules/juce_core/javascript/juce_JSON.cpp; sourceTree = SOURCE_ROOT; };
-		1AD76E8111A738A8F3717060 /* ArduinoOutputEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ArduinoOutputEditor.cpp; path = ../../Source/Processors/Editors/ArduinoOutputEditor.cpp; sourceTree = SOURCE_ROOT; };
 		1AEEC114AFAB6E81205FBCD1 /* juce_AttributedString.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AttributedString.h; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_AttributedString.h; sourceTree = SOURCE_ROOT; };
 		1B27BF1CF3F235A55CD5107D /* juce_ResamplingAudioSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResamplingAudioSource.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp; sourceTree = SOURCE_ROOT; };
 		1BF01252E3A30560525CE057 /* juce_win32_WebBrowserComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_WebBrowserComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp; sourceTree = SOURCE_ROOT; };
 		1C4227B9237C06B69587F551 /* juce_LookAndFeel_V3.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LookAndFeel_V3.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp; sourceTree = SOURCE_ROOT; };
 		1C474C73937D98E9D3FFEEC0 /* juce_FilePreviewComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FilePreviewComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h; sourceTree = SOURCE_ROOT; };
 		1C639F4C139C8D7753AA9BB6 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_gui_extra/juce_module_info; sourceTree = SOURCE_ROOT; };
-		1C93ECD2B04F39923E66B529 /* ReferenceNodeEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ReferenceNodeEditor.h; path = ../../Source/Processors/Editors/ReferenceNodeEditor.h; sourceTree = SOURCE_ROOT; };
+		1C64C490BD7FE9E57D6C682D /* LfpDisplayNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LfpDisplayNode.cpp; path = ../../Source/Processors/LfpDisplayNode/LfpDisplayNode.cpp; sourceTree = SOURCE_ROOT; };
 		1CB0D7AC988EDEC838A1C546 /* juce_AudioSampleBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioSampleBuffer.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h; sourceTree = SOURCE_ROOT; };
 		1CCC1D4213B17ABF6222EC82 /* juce_PropertiesFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertiesFile.cpp; path = ../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp; sourceTree = SOURCE_ROOT; };
 		1CFA355CD6811C253C72BDDA /* juce_KeyPressMappingSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KeyPressMappingSet.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h; sourceTree = SOURCE_ROOT; };
@@ -287,46 +300,46 @@
 		1D7FEC587CFE464A21830C4D /* juce_win32_SystemTrayIcon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_SystemTrayIcon.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp; sourceTree = SOURCE_ROOT; };
 		1DF5FD417930A62110DF0419 /* juce_ModalComponentManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ModalComponentManager.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ModalComponentManager.cpp; sourceTree = SOURCE_ROOT; };
 		1E9FE44F0CCC6604B5469412 /* juce_KeyMappingEditorComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyMappingEditorComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp; sourceTree = SOURCE_ROOT; };
-		1EC95CD1D830F6D85ADB3B9D /* SpikeDisplayEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeDisplayEditor.cpp; path = ../../Source/Processors/Editors/SpikeDisplayEditor.cpp; sourceTree = SOURCE_ROOT; };
 		1F12D1392E5DF34C3A3C445D /* juce_NewLine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NewLine.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_NewLine.h; sourceTree = SOURCE_ROOT; };
+		1F22CC8D992B8B49D57DDB3F /* AudioNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioNode.cpp; path = ../../Source/Processors/AudioNode/AudioNode.cpp; sourceTree = SOURCE_ROOT; };
 		1F63169D680CA9A2A56EA488 /* juce_XMLCodeTokeniser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_XMLCodeTokeniser.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp; sourceTree = SOURCE_ROOT; };
 		205E9A5C31827555F1CAC30D /* juce_OpenGL_osx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGL_osx.h; path = ../../JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_osx.h; sourceTree = SOURCE_ROOT; };
 		208DCD7025D0DF2740C01E4A /* juce_TextPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextPropertyComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		20BB146B925C4D4AD43BA479 /* State.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = State.cpp; path = ../../Source/Processors/Dsp/State.cpp; sourceTree = SOURCE_ROOT; };
+		20DBF92457AF75C0698D1B26 /* LfpTriggeredAverageEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LfpTriggeredAverageEditor.cpp; path = ../../Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageEditor.cpp; sourceTree = SOURCE_ROOT; };
 		20EB4F22A76954F2986F364A /* juce_mac_Windowing.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Windowing.mm; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_Windowing.mm; sourceTree = SOURCE_ROOT; };
 		215B159836CE40810964B773 /* juce_Uuid.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Uuid.h; path = ../../JuceLibraryCode/modules/juce_core/misc/juce_Uuid.h; sourceTree = SOURCE_ROOT; };
 		215E1BD79B5870D5356810F0 /* Visualizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Visualizer.h; path = ../../Source/Processors/Visualization/Visualizer.h; sourceTree = SOURCE_ROOT; };
 		217032322A2570ABAC47194C /* juce_Image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Image.h; path = ../../JuceLibraryCode/modules/juce_graphics/images/juce_Image.h; sourceTree = SOURCE_ROOT; };
-		2196ED9DD4262C60135E77F5 /* LfpTriggeredAverageEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LfpTriggeredAverageEditor.h; path = ../../Source/Processors/Editors/LfpTriggeredAverageEditor.h; sourceTree = SOURCE_ROOT; };
 		21A0260D2DB039B81DF4970C /* juce_FileSearchPath.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileSearchPath.cpp; path = ../../JuceLibraryCode/modules/juce_core/files/juce_FileSearchPath.cpp; sourceTree = SOURCE_ROOT; };
 		21C11A58CAA0F9E86AA204EC /* juce_Slider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Slider.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h; sourceTree = SOURCE_ROOT; };
 		21D3C1095D2B5A834D998B74 /* juce_android_OpenSL.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_OpenSL.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_android_OpenSL.cpp; sourceTree = SOURCE_ROOT; };
 		222AC2E9BEFE12BE7FF88879 /* juce_Thread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Thread.cpp; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_Thread.cpp; sourceTree = SOURCE_ROOT; };
-		22801F75289646F6A85E5583 /* Biquad.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Biquad.cpp; path = ../../Source/Dsp/Biquad.cpp; sourceTree = SOURCE_ROOT; };
-		229989EC8A6F145C81348CA9 /* PhaseDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PhaseDetector.h; path = ../../Source/Processors/PhaseDetector.h; sourceTree = SOURCE_ROOT; };
+		22FAA3DA9944AA853D66114F /* LfpTriggeredAverageCanvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LfpTriggeredAverageCanvas.h; path = ../../Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.h; sourceTree = SOURCE_ROOT; };
 		235A8987D99A191D07208D2F /* okFrontPanelDLL.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = okFrontPanelDLL.cpp; path = "../../Source/Processors/DataThreads/rhythm-api/okFrontPanelDLL.cpp"; sourceTree = SOURCE_ROOT; };
 		23609D430A25F54723269E91 /* juce_gui_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_gui_basics.mm; path = ../../JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.mm; sourceTree = SOURCE_ROOT; };
 		23A6BA852B71DAAF3F709428 /* RHD2000Thread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RHD2000Thread.h; path = ../../Source/Processors/DataThreads/RHD2000Thread.h; sourceTree = SOURCE_ROOT; };
 		23C7EA9C89CC98A5EFEC12FA /* juce_GZIPCompressorOutputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GZIPCompressorOutputStream.h; path = ../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPCompressorOutputStream.h; sourceTree = SOURCE_ROOT; };
 		23D82A4C165DD596474F30E4 /* juce_ColourSelector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ColourSelector.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.h; sourceTree = SOURCE_ROOT; };
-		23EAFAEA6457DB4E452F8715 /* SignalGenerator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SignalGenerator.h; path = ../../Source/Processors/SignalGenerator.h; sourceTree = SOURCE_ROOT; };
 		23F048594D4C9AD8C3399877 /* juce_android_SystemStats.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_SystemStats.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_android_SystemStats.cpp; sourceTree = SOURCE_ROOT; };
+		242B80832B3C8FF4F3CC18F1 /* SourceNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SourceNode.cpp; path = ../../Source/Processors/SourceNode/SourceNode.cpp; sourceTree = SOURCE_ROOT; };
 		243817BA562AD7FA76C834C9 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
 		24D86195580EFB86AC084DCC /* cpmono_extra_light.otf */ = {isa = PBXFileReference; lastKnownFileType = file.otf; name = cpmono_extra_light.otf; path = ../../Resources/Fonts/cpmono_extra_light.otf; sourceTree = SOURCE_ROOT; };
 		25433DB6D2EAEBB307EFB960 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_graphics/juce_module_info; sourceTree = SOURCE_ROOT; };
 		2560987BB222D7CED27EAC87 /* juce_WildcardFileFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WildcardFileFilter.h; path = ../../JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.h; sourceTree = SOURCE_ROOT; };
 		256E22D98B16B09BD521C4A4 /* juce_AudioProcessorEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioProcessorEditor.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h; sourceTree = SOURCE_ROOT; };
-		258938780F93A7CF41366F26 /* RecordControl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RecordControl.cpp; path = ../../Source/Processors/Utilities/RecordControl.cpp; sourceTree = SOURCE_ROOT; };
-		25A9484825F1B93ABC0E577F /* PulsePalOutputEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PulsePalOutputEditor.cpp; path = ../../Source/Processors/Editors/PulsePalOutputEditor.cpp; sourceTree = SOURCE_ROOT; };
-		25ABEB43042E98C668A16432 /* SpikeDisplayEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeDisplayEditor.h; path = ../../Source/Processors/Editors/SpikeDisplayEditor.h; sourceTree = SOURCE_ROOT; };
+		2592795DB135E0F2C04406F3 /* EventNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EventNode.cpp; path = ../../Source/Processors/EventNode/EventNode.cpp; sourceTree = SOURCE_ROOT; };
+		25B79E00075CCF59F0A4A7D7 /* RecordEngine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RecordEngine.h; path = ../../Source/Processors/RecordNode/RecordEngine.h; sourceTree = SOURCE_ROOT; };
+		25CEC111DFEC71FA6828257F /* ChannelMappingNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ChannelMappingNode.cpp; path = ../../Source/Processors/ChannelMappingNode/ChannelMappingNode.cpp; sourceTree = SOURCE_ROOT; };
 		25DCA4D0E86DFB51AF637D21 /* juce_win32_Midi.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Midi.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_Midi.cpp; sourceTree = SOURCE_ROOT; };
 		25F7BEADC001FA3D1EA9B32C /* juce_DrawablePath.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawablePath.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawablePath.cpp; sourceTree = SOURCE_ROOT; };
 		261B5AA82F2A86CC5500D8D2 /* ArduinoIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ArduinoIcon.png; path = ../../Resources/Images/Icons/ArduinoIcon.png; sourceTree = SOURCE_ROOT; };
-		265EDA19C88E74249FD66609 /* SignalGeneratorEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SignalGeneratorEditor.h; path = ../../Source/Processors/Editors/SignalGeneratorEditor.h; sourceTree = SOURCE_ROOT; };
 		266FC6DA3123E576811DD828 /* juce_FlacAudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FlacAudioFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h; sourceTree = SOURCE_ROOT; };
 		26FF78F12CCB8725C0DAF9C2 /* juce_MidiInput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MidiInput.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiInput.h; sourceTree = SOURCE_ROOT; };
 		27313EA12BC45638321922CA /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
 		27548017AB2ABAF17E1D5DF5 /* juce_FileInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileInputSource.h; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_FileInputSource.h; sourceTree = SOURCE_ROOT; };
 		27DC0E650D6D54DF29E6DB68 /* juce_gui_extra.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_gui_extra.mm; path = ../../JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.mm; sourceTree = SOURCE_ROOT; };
+		27FB12D08303BEC9CD15E317 /* SerialInputEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SerialInputEditor.h; path = ../../Source/Processors/SerialInput/SerialInputEditor.h; sourceTree = SOURCE_ROOT; };
 		2847E92BB432EEB9D5A59260 /* juce_StringArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StringArray.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_StringArray.h; sourceTree = SOURCE_ROOT; };
 		284F3E94F0C96EA1DD89E606 /* juce_FileFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileFilter.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp; sourceTree = SOURCE_ROOT; };
 		28847C807E6B05303FB8FB34 /* juce_mac_Strings.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Strings.mm; path = ../../JuceLibraryCode/modules/juce_core/native/juce_mac_Strings.mm; sourceTree = SOURCE_ROOT; };
@@ -334,67 +347,69 @@
 		28D5AEEEFC4FA8877419C829 /* juce_posix_NamedPipe.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_posix_NamedPipe.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_posix_NamedPipe.cpp; sourceTree = SOURCE_ROOT; };
 		2924B990E35D3B51AA245978 /* juce_MessageListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MessageListener.h; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_MessageListener.h; sourceTree = SOURCE_ROOT; };
 		29381F22B8FDF48C3EAC3A9F /* juce_OpenGLPixelFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OpenGLPixelFormat.cpp; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp; sourceTree = SOURCE_ROOT; };
-		29D7893C278FFE00782637B6 /* Bessel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Bessel.h; path = ../../Source/Dsp/Bessel.h; sourceTree = SOURCE_ROOT; };
-		29FD7B383C5DDACAA7B8DFD3 /* MergerEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MergerEditor.cpp; path = ../../Source/Processors/Editors/MergerEditor.cpp; sourceTree = SOURCE_ROOT; };
 		2A3230DEAAC86A9090950703 /* juce_Path.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Path.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Path.cpp; sourceTree = SOURCE_ROOT; };
 		2AB1CC4252DB09507ED31482 /* juce_Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Application.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/application/juce_Application.cpp; sourceTree = SOURCE_ROOT; };
 		2AE12F85965B8BE4A0E12F67 /* juce_PropertiesFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PropertiesFile.h; path = ../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.h; sourceTree = SOURCE_ROOT; };
 		2B134713E91426120A994CB7 /* juce_Random.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Random.cpp; path = ../../JuceLibraryCode/modules/juce_core/maths/juce_Random.cpp; sourceTree = SOURCE_ROOT; };
 		2B19F2DE42A91F56C2380F9A /* juce_Expression.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Expression.cpp; path = ../../JuceLibraryCode/modules/juce_core/maths/juce_Expression.cpp; sourceTree = SOURCE_ROOT; };
-		2B93450006102A0093F5EACB /* Design.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Design.cpp; path = ../../Source/Dsp/Design.cpp; sourceTree = SOURCE_ROOT; };
 		2BC005B37A0FB3179C2F3AC7 /* juce_CoreAudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CoreAudioFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h; sourceTree = SOURCE_ROOT; };
-		2C4730CAFED4F6292B575318 /* Splitter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Splitter.cpp; path = ../../Source/Processors/Utilities/Splitter.cpp; sourceTree = SOURCE_ROOT; };
 		2C89EC72FF6A7118EF459DC3 /* Main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = SOURCE_ROOT; };
 		2D1BF69121265C83C7937EB6 /* juce_AudioIODevice.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioIODevice.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODevice.h; sourceTree = SOURCE_ROOT; };
 		2D20F49E12A7D313049E0258 /* juce_ScopedWriteLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedWriteLock.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_ScopedWriteLock.h; sourceTree = SOURCE_ROOT; };
 		2D2BAC4320470CF68743F58E /* rhd2000evalboard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rhd2000evalboard.cpp; path = "../../Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.cpp"; sourceTree = SOURCE_ROOT; };
-		2D41C43686CDE35E86A389D7 /* WiFiOutput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = WiFiOutput.cpp; path = ../../Source/Processors/WiFiOutput.cpp; sourceTree = SOURCE_ROOT; };
 		2D577016FEEE23DD5703C924 /* juce_DialogWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DialogWindow.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DialogWindow.cpp; sourceTree = SOURCE_ROOT; };
 		2DA0032B6DF10345C4842BF5 /* juce_CharacterFunctions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharacterFunctions.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_CharacterFunctions.h; sourceTree = SOURCE_ROOT; };
+		2F0C721AB2973FAD23C7F47B /* SpikeDisplayEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeDisplayEditor.cpp; path = ../../Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.cpp; sourceTree = SOURCE_ROOT; };
 		2F2EDBE0623561191234AF21 /* juce_LAMEEncoderAudioFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LAMEEncoderAudioFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.cpp; sourceTree = SOURCE_ROOT; };
 		2F8252D3FF527D6559B12615 /* juce_LowLevelGraphicsSoftwareRenderer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LowLevelGraphicsSoftwareRenderer.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp; sourceTree = SOURCE_ROOT; };
 		2F9BB379BCFCFE0D88CC0408 /* juce_AudioProcessorGraph.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioProcessorGraph.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h; sourceTree = SOURCE_ROOT; };
 		2FE6DAFB634FF3C20F1D6FD7 /* juce_CaretComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CaretComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_CaretComponent.h; sourceTree = SOURCE_ROOT; };
 		2FF422D0633A28558D0227EC /* juce_ComponentBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentBuilder.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBuilder.h; sourceTree = SOURCE_ROOT; };
 		301783FC4E3B19CA3C0AC85B /* juce_LowLevelGraphicsSoftwareRenderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LowLevelGraphicsSoftwareRenderer.h; path = ../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h; sourceTree = SOURCE_ROOT; };
-		3063CF211ABB734A9FD452EC /* Custom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Custom.h; path = ../../Source/Dsp/Custom.h; sourceTree = SOURCE_ROOT; };
-		3067867C8C0F6CF6F086A6FC /* FileReaderEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FileReaderEditor.h; path = ../../Source/Processors/Editors/FileReaderEditor.h; sourceTree = SOURCE_ROOT; };
 		308F614D30DCB9AE3767C928 /* ofSerial.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ofSerial.cpp; path = ../../Source/Processors/Serial/ofSerial.cpp; sourceTree = SOURCE_ROOT; };
 		313970BBDAAA4EDC8B322F3A /* juce_ComponentMovementWatcher.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentMovementWatcher.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp; sourceTree = SOURCE_ROOT; };
 		314955FB1E6DD74C71EB8907 /* juce_AudioFormatReaderSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatReaderSource.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h; sourceTree = SOURCE_ROOT; };
 		316FB94579DA666A388F429A /* juce_WildcardFileFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WildcardFileFilter.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h; sourceTree = SOURCE_ROOT; };
 		31A3925602D128195100B74D /* juce_ApplicationProperties.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationProperties.cpp; path = ../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp; sourceTree = SOURCE_ROOT; };
 		31BE5E435604D33173940048 /* juce_ToggleButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToggleButton.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToggleButton.cpp; sourceTree = SOURCE_ROOT; };
+		31FB49244DF85E2ACCFBDF2B /* PhaseDetectorEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PhaseDetectorEditor.h; path = ../../Source/Processors/PhaseDetector/PhaseDetectorEditor.h; sourceTree = SOURCE_ROOT; };
 		31FDA03EF1B527B336FA6263 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_events/juce_module_info; sourceTree = SOURCE_ROOT; };
+		326F8386BCD4E4189D0CC00F /* SourceNodeEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SourceNodeEditor.cpp; path = ../../Source/Processors/SourceNode/SourceNodeEditor.cpp; sourceTree = SOURCE_ROOT; };
 		32976762B1DB850DB65B9504 /* juce_FileInputSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileInputSource.cpp; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_FileInputSource.cpp; sourceTree = SOURCE_ROOT; };
 		32A1325430309CF4114C9618 /* juce_GenericAudioProcessorEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GenericAudioProcessorEditor.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp; sourceTree = SOURCE_ROOT; };
 		32B658D7A44849A6F640AF37 /* miso-bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file.ttf; name = "miso-bold.ttf"; path = "../../Resources/Fonts/miso-bold.ttf"; sourceTree = SOURCE_ROOT; };
 		32CEF6C84CD06B18035B035C /* RadioButtons_selected-05.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_selected-05.png"; path = "../../Resources/Images/Icons/RadioButtons_selected-05.png"; sourceTree = SOURCE_ROOT; };
 		32D568631762765C07D4BF0D /* juce_NSViewComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NSViewComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/embedding/juce_NSViewComponent.h; sourceTree = SOURCE_ROOT; };
 		33A69BDDCFCD4A4DC14A9961 /* juce_KeyPress.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyPress.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyPress.cpp; sourceTree = SOURCE_ROOT; };
+		34834859523571912C55AC94 /* FileReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FileReader.cpp; path = ../../Source/Processors/FileReader/FileReader.cpp; sourceTree = SOURCE_ROOT; };
 		349C9FCEDC32E73DCB7AE806 /* juce_WindowsRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WindowsRegistry.h; path = ../../JuceLibraryCode/modules/juce_core/misc/juce_WindowsRegistry.h; sourceTree = SOURCE_ROOT; };
+		34CF4D00D785338941AB9590 /* SpikeDisplayEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeDisplayEditor.h; path = ../../Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.h; sourceTree = SOURCE_ROOT; };
 		353937A4E68C8C6916C6D1F9 /* juce_FileBrowserComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBrowserComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp; sourceTree = SOURCE_ROOT; };
 		35AEAE0CC0B546625E163B9B /* sine_wave.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sine_wave.png; path = ../../Resources/Images/Icons/sine_wave.png; sourceTree = SOURCE_ROOT; };
+		35BB20110BAC6346AA605BF9 /* PhaseDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PhaseDetector.h; path = ../../Source/Processors/PhaseDetector/PhaseDetector.h; sourceTree = SOURCE_ROOT; };
 		35C0963BAB9A82F12CDC9F76 /* juce_NamedValueSet.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_NamedValueSet.cpp; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_NamedValueSet.cpp; sourceTree = SOURCE_ROOT; };
-		361D8C54B3E54766CBC48046 /* Biquad.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Biquad.h; path = ../../Source/Dsp/Biquad.h; sourceTree = SOURCE_ROOT; };
 		361E3A46C9BFAD1530593487 /* juce_PopupMenu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PopupMenu.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h; sourceTree = SOURCE_ROOT; };
+		362898B655ABFFA23A69BBFA /* ParameterEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ParameterEditor.h; path = ../../Source/Processors/Parameter/ParameterEditor.h; sourceTree = SOURCE_ROOT; };
+		36332333DBF8363163F454E6 /* HDF5Recording.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HDF5Recording.cpp; path = ../../Source/Processors/RecordNode/HDF5Recording.cpp; sourceTree = SOURCE_ROOT; };
 		3663C981D28BF165C1B601A7 /* juce_OptionalScopedPointer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OptionalScopedPointer.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_OptionalScopedPointer.h; sourceTree = SOURCE_ROOT; };
 		36A9736F04AAA2F8E9D711BB /* juce_SpinLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SpinLock.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_SpinLock.h; sourceTree = SOURCE_ROOT; };
+		3734FF118787377E4C8741D1 /* WiFiOutputEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = WiFiOutputEditor.cpp; path = ../../Source/Processors/WiFiOutput/WiFiOutputEditor.cpp; sourceTree = SOURCE_ROOT; };
 		3753B3B311AE0A9F4CC5AD40 /* ofArduino.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ofArduino.cpp; path = ../../Source/Processors/Serial/ofArduino.cpp; sourceTree = SOURCE_ROOT; };
 		3774BBCA6CB133D9A854CF71 /* CustomLookAndFeel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CustomLookAndFeel.cpp; path = ../../Source/UI/CustomLookAndFeel.cpp; sourceTree = SOURCE_ROOT; };
 		381F5DC605AE69088004DF80 /* PipelineB-01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "PipelineB-01.png"; path = "../../Resources/Images/Buttons/PipelineB-01.png"; sourceTree = SOURCE_ROOT; };
-		38313692308D501E4CADF1D5 /* Layout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Layout.h; path = ../../Source/Dsp/Layout.h; sourceTree = SOURCE_ROOT; };
+		3846F3FA0FC28CE322073E94 /* Utilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Utilities.h; path = ../../Source/Processors/Dsp/Utilities.h; sourceTree = SOURCE_ROOT; };
+		385F66531BAB16BA754E901E /* SplitterEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SplitterEditor.h; path = ../../Source/Processors/Splitter/SplitterEditor.h; sourceTree = SOURCE_ROOT; };
 		38711221C089A16CC29E93D2 /* juce_ActionListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ActionListener.h; path = ../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionListener.h; sourceTree = SOURCE_ROOT; };
+		388D5CAFAE66CCCB8ADA594C /* Filter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Filter.cpp; path = ../../Source/Processors/Dsp/Filter.cpp; sourceTree = SOURCE_ROOT; };
 		38A9627672C2562DBE257A05 /* cpmono-extralight-serialized */ = {isa = PBXFileReference; lastKnownFileType = file; name = "cpmono-extralight-serialized"; path = "../../Resources/Fonts/cpmono-extralight-serialized"; sourceTree = SOURCE_ROOT; };
 		38B5A37F33AE3FB2014BF095 /* juce_StringArray.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StringArray.cpp; path = ../../JuceLibraryCode/modules/juce_core/text/juce_StringArray.cpp; sourceTree = SOURCE_ROOT; };
+		38E1C53CF5BB38247BCAA909 /* SignalGeneratorEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SignalGeneratorEditor.h; path = ../../Source/Processors/SignalGenerator/SignalGeneratorEditor.h; sourceTree = SOURCE_ROOT; };
 		38E493BFC36AC80B1CDAAF35 /* juce_TreeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TreeView.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.h; sourceTree = SOURCE_ROOT; };
 		390856DF83DAC70909D5B397 /* juce_Button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Button.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h; sourceTree = SOURCE_ROOT; };
 		390EA3109658E8C51EFC8F61 /* juce_PluginDirectoryScanner.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PluginDirectoryScanner.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp; sourceTree = SOURCE_ROOT; };
-		392408C1943AC6234BAAC743 /* Elliptic.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Elliptic.cpp; path = ../../Source/Dsp/Elliptic.cpp; sourceTree = SOURCE_ROOT; };
 		393801D2B91773D376D874B0 /* juce_ImageButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageButton.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.h; sourceTree = SOURCE_ROOT; };
 		39422C7D01635DD9C00B5136 /* juce_mac_CoreMidi.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_CoreMidi.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp; sourceTree = SOURCE_ROOT; };
-		39464D2A22940DA2DDCCCFC6 /* EventDetector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EventDetector.cpp; path = ../../Source/Processors/EventDetector.cpp; sourceTree = SOURCE_ROOT; };
-		39D2C460FE587C5F564495A0 /* SerialInputEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SerialInputEditor.h; path = ../../Source/Processors/Editors/SerialInputEditor.h; sourceTree = SOURCE_ROOT; };
+		398BF0B03B719107E6093F98 /* EngineConfigWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EngineConfigWindow.h; path = ../../Source/Processors/RecordNode/EngineConfigWindow.h; sourceTree = SOURCE_ROOT; };
 		39F287BE4C0B4F3BD4A949FD /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
 		3A2C762575D9728B1F822ED3 /* juce_AsyncUpdater.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AsyncUpdater.cpp; path = ../../JuceLibraryCode/modules/juce_events/broadcasters/juce_AsyncUpdater.cpp; sourceTree = SOURCE_ROOT; };
 		3A6E9EC3DA618EBA06B9DEEB /* juce_AudioSubsectionReader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioSubsectionReader.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioSubsectionReader.h; sourceTree = SOURCE_ROOT; };
@@ -402,7 +417,6 @@
 		3A71F2C959CA7DD3C33DC411 /* juce_mac_CarbonViewWrapperComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_mac_CarbonViewWrapperComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h; sourceTree = SOURCE_ROOT; };
 		3A9826A8C3B668BCC760BEB7 /* juce_gui_basics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_gui_basics.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.h; sourceTree = SOURCE_ROOT; };
 		3AC9B61C10692BBA96D2F775 /* juce_OpenGL_android.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGL_android.h; path = ../../JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_android.h; sourceTree = SOURCE_ROOT; };
-		3AE038CACE48AF85C4FB1ED5 /* GenericProcessor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GenericProcessor.cpp; path = ../../Source/Processors/GenericProcessor.cpp; sourceTree = SOURCE_ROOT; };
 		3AFF1BE2EC512169120121CF /* juce_IPAddress.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_IPAddress.h; path = ../../JuceLibraryCode/modules/juce_core/network/juce_IPAddress.h; sourceTree = SOURCE_ROOT; };
 		3B307527FC3241258EA68519 /* juce_ToneGeneratorAudioSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ToneGeneratorAudioSource.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h; sourceTree = SOURCE_ROOT; };
 		3BC3A723444252E177C1B1BD /* juce_AudioFormatWriter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatWriter.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatWriter.h; sourceTree = SOURCE_ROOT; };
@@ -411,35 +425,40 @@
 		3C1E0B87DA3E9AC60D2894F7 /* juce_TableListBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TableListBox.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableListBox.h; sourceTree = SOURCE_ROOT; };
 		3C92F249799E7CBF41FABEA0 /* juce_mac_WebBrowserComponent.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_WebBrowserComponent.mm; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm; sourceTree = SOURCE_ROOT; };
 		3D100F6FDB04756402F3BCC9 /* juce_mac_CoreGraphicsContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_mac_CoreGraphicsContext.h; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h; sourceTree = SOURCE_ROOT; };
+		3D782D1796455167CE41CCAB /* Design.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Design.h; path = ../../Source/Processors/Dsp/Design.h; sourceTree = SOURCE_ROOT; };
 		3DA70F9AAA904543B519874B /* juce_AudioPluginInstance.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioPluginInstance.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioPluginInstance.h; sourceTree = SOURCE_ROOT; };
 		3E0942A2D72F50FDE27C14AE /* juce_StretchableObjectResizer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableObjectResizer.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp; sourceTree = SOURCE_ROOT; };
 		3E22E947444B5849011B6C4E /* juce_MouseInputSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseInputSource.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp; sourceTree = SOURCE_ROOT; };
 		3E5E427D405905C53A37283D /* juce_SystemAudioVolume.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SystemAudioVolume.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h; sourceTree = SOURCE_ROOT; };
-		3EAE25787DBFBA8EFC42A277 /* RecordNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RecordNode.h; path = ../../Source/Processors/RecordNode.h; sourceTree = SOURCE_ROOT; };
 		3EAF57CE45DBACE2F88DA4C5 /* juce_FileChooser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileChooser.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp; sourceTree = SOURCE_ROOT; };
 		3EE92345839A4E5F608D82AC /* juce_Sampler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Sampler.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/sampler/juce_Sampler.h; sourceTree = SOURCE_ROOT; };
 		3F56A025C4D83EBDB66E3676 /* juce_AppleRemote.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AppleRemote.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_AppleRemote.h; sourceTree = SOURCE_ROOT; };
-		3F69480D6145C77992FA59BA /* RootFinder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RootFinder.cpp; path = ../../Source/Dsp/RootFinder.cpp; sourceTree = SOURCE_ROOT; };
-		3F6C67E29CDEDF2EF61C054F /* Param.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Param.cpp; path = ../../Source/Dsp/Param.cpp; sourceTree = SOURCE_ROOT; };
 		3F8DFB0DB8B82F0C2CFBCA05 /* juce_BufferingAudioSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BufferingAudioSource.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp; sourceTree = SOURCE_ROOT; };
 		3FA24B406E4A9F9F54421C6A /* juce_ChannelRemappingAudioSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ChannelRemappingAudioSource.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h; sourceTree = SOURCE_ROOT; };
 		3FB80C5CFD953986778DCBA2 /* juce_linux_Files.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Files.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_linux_Files.cpp; sourceTree = SOURCE_ROOT; };
 		3FC794735FA8DDA39A62224B /* UIComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = UIComponent.h; path = ../../Source/UI/UIComponent.h; sourceTree = SOURCE_ROOT; };
+		3FE8C41480F07050CC21635F /* PhaseDetectorEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PhaseDetectorEditor.cpp; path = ../../Source/Processors/PhaseDetector/PhaseDetectorEditor.cpp; sourceTree = SOURCE_ROOT; };
 		3FFC2A3429D8B1D957D18CA7 /* MergerB-02.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "MergerB-02.png"; path = "../../Resources/Images/Buttons/MergerB-02.png"; sourceTree = SOURCE_ROOT; };
 		3FFD5E5D5C1D8B48DBBB9D18 /* juce_Result.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Result.cpp; path = ../../JuceLibraryCode/modules/juce_core/misc/juce_Result.cpp; sourceTree = SOURCE_ROOT; };
 		402BC572EE3E8EC418946CE0 /* juce_AudioTransportSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioTransportSource.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioTransportSource.h; sourceTree = SOURCE_ROOT; };
 		405298E6CE1C80EC7CC43A87 /* juce_FileTreeComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileTreeComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h; sourceTree = SOURCE_ROOT; };
 		40C22F3CD61DDB9C7B3DCCA6 /* juce_KeyListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KeyListener.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyListener.h; sourceTree = SOURCE_ROOT; };
+		40F90FEFBD575E8A67DF68EB /* Param.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Param.cpp; path = ../../Source/Processors/Dsp/Param.cpp; sourceTree = SOURCE_ROOT; };
 		4133FE7830C52BBA035D82B8 /* juce_TimeSliceThread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TimeSliceThread.cpp; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_TimeSliceThread.cpp; sourceTree = SOURCE_ROOT; };
+		414969AEF838522C9FE1B807 /* FilterEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FilterEditor.cpp; path = ../../Source/Processors/FilterNode/FilterEditor.cpp; sourceTree = SOURCE_ROOT; };
 		414D8E6E4EE98E66C2583A50 /* juce_TextPropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextPropertyComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
 		416B99B14B44CB16B725C4B2 /* juce_StretchableObjectResizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StretchableObjectResizer.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h; sourceTree = SOURCE_ROOT; };
 		41AF61914A96159E9EA194B0 /* juce_linux_Clipboard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Clipboard.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Clipboard.cpp; sourceTree = SOURCE_ROOT; };
+		41E88094E8D929866A6DCA9A /* AudioResamplingNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioResamplingNode.cpp; path = ../../Source/Processors/AudioResamplingNode/AudioResamplingNode.cpp; sourceTree = SOURCE_ROOT; };
 		420843E39C285B620B220C1D /* juce_LeakedObjectDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LeakedObjectDetector.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_LeakedObjectDetector.h; sourceTree = SOURCE_ROOT; };
 		420B0E95F1300ABFDC125DBF /* AccessClass.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AccessClass.cpp; path = ../../Source/AccessClass.cpp; sourceTree = SOURCE_ROOT; };
 		42BF0530EADF336E58D39CD3 /* juce_FloatVectorOperations.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FloatVectorOperations.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h; sourceTree = SOURCE_ROOT; };
 		43420911407CC35CE2A02B38 /* juce_StretchableLayoutManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableLayoutManager.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp; sourceTree = SOURCE_ROOT; };
 		434E153E6C8337C1E4A2709A /* juce_ButtonPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ButtonPropertyComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		442F01DC974E1EAC57450906 /* PoleFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PoleFilter.h; path = ../../Source/Processors/Dsp/PoleFilter.h; sourceTree = SOURCE_ROOT; };
 		4434939E139A45962C8CFB4C /* juce_DrawableShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableShape.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableShape.cpp; sourceTree = SOURCE_ROOT; };
+		4448875C40EAB061B2F8A289 /* FPGAOutput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FPGAOutput.cpp; path = ../../Source/Processors/FPGAOutput/FPGAOutput.cpp; sourceTree = SOURCE_ROOT; };
+		449B26D1265BB91B331EFF84 /* HDF5FileFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HDF5FileFormat.h; path = ../../Source/Processors/RecordNode/HDF5FileFormat.h; sourceTree = SOURCE_ROOT; };
 		44E04E5F584A8BFAD062A09D /* juce_ShapeButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ShapeButton.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ShapeButton.h; sourceTree = SOURCE_ROOT; };
 		45258533F9F65AC96D3080B3 /* juce_MultiTouchMapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MultiTouchMapper.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_MultiTouchMapper.h; sourceTree = SOURCE_ROOT; };
 		4540694F9744C9F4D29149CE /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_opengl/juce_module_info; sourceTree = SOURCE_ROOT; };
@@ -448,11 +467,9 @@
 		458A112D564ED066211FD482 /* juce_ToneGeneratorAudioSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToneGeneratorAudioSource.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp; sourceTree = SOURCE_ROOT; };
 		45A66E543B62A2C32AB3BA23 /* juce_AudioDeviceSelectorComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioDeviceSelectorComponent.h; path = ../../JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h; sourceTree = SOURCE_ROOT; };
 		45D440B69BDB210B17CD424B /* juce_ImageComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.h; sourceTree = SOURCE_ROOT; };
-		45D78C8EF660EECE64BAA33F /* RHD2000Editor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RHD2000Editor.cpp; path = ../../Source/Processors/Editors/RHD2000Editor.cpp; sourceTree = SOURCE_ROOT; };
 		4608E765A643BC0CB2C1BB02 /* juce_CriticalSection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CriticalSection.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_CriticalSection.h; sourceTree = SOURCE_ROOT; };
 		463A302B39C7815EB981CEBD /* juce_Point.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Point.h; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Point.h; sourceTree = SOURCE_ROOT; };
 		4650B5724FE3C0608FB07A04 /* juce_TextLayout.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextLayout.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_TextLayout.cpp; sourceTree = SOURCE_ROOT; };
-		46E3A634686BFEF787229582 /* ParameterEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ParameterEditor.cpp; path = ../../Source/Processors/Editors/ParameterEditor.cpp; sourceTree = SOURCE_ROOT; };
 		46EF49B14DF7357A8287D9D8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
 		47041E3794FA20F67F39AE63 /* juce_ChildProcess.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChildProcess.cpp; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_ChildProcess.cpp; sourceTree = SOURCE_ROOT; };
 		475824F60D47C28C392954A7 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_audio_processors/juce_module_info; sourceTree = SOURCE_ROOT; };
@@ -462,53 +479,55 @@
 		47EE021D6C891095140ED7A9 /* juce_ios_UIViewComponentPeer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_ios_UIViewComponentPeer.mm; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm; sourceTree = SOURCE_ROOT; };
 		482A60A44EE6CB84FCB9DC88 /* juce_AudioThumbnailBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioThumbnailBase.h; path = ../../JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnailBase.h; sourceTree = SOURCE_ROOT; };
 		483ABD5C1CF789943AB4AFB6 /* juce_ComponentPeer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentPeer.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.h; sourceTree = SOURCE_ROOT; };
-		4867923F31CC3EDC9B1A5BE5 /* Merger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Merger.cpp; path = ../../Source/Processors/Utilities/Merger.cpp; sourceTree = SOURCE_ROOT; };
 		488D1B00C9E5FE4DAB035EDF /* juce_cryptography.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_cryptography.mm; path = ../../JuceLibraryCode/modules/juce_cryptography/juce_cryptography.mm; sourceTree = SOURCE_ROOT; };
 		48E12736F471C43C959AD15C /* PulsePal.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PulsePal.cpp; path = ../../Source/Processors/Serial/PulsePal.cpp; sourceTree = SOURCE_ROOT; };
 		48E4FA55FD4440AF44EEA437 /* juce_linux_FileChooser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_FileChooser.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp; sourceTree = SOURCE_ROOT; };
 		48F6281AB92B232E5187D00C /* SignalChainManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SignalChainManager.h; path = ../../Source/UI/SignalChainManager.h; sourceTree = SOURCE_ROOT; };
-		4939A8B8300394AAD0926C0B /* Legendre.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Legendre.h; path = ../../Source/Dsp/Legendre.h; sourceTree = SOURCE_ROOT; };
 		496180D5D96088CBB59035B1 /* juce_DrawableShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableShape.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableShape.h; sourceTree = SOURCE_ROOT; };
 		4978EF4C5F506F3289BC0D99 /* juce_SubregionStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SubregionStream.h; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_SubregionStream.h; sourceTree = SOURCE_ROOT; };
 		499A12199A8A8C5AEDAA47E4 /* juce_FilenameComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FilenameComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h; sourceTree = SOURCE_ROOT; };
 		49D837FD08100AF0DB797DB4 /* juce_SparseSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SparseSet.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_SparseSet.h; sourceTree = SOURCE_ROOT; };
-		49FA151B1837E543D18858EB /* FilterEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FilterEditor.h; path = ../../Source/Processors/Editors/FilterEditor.h; sourceTree = SOURCE_ROOT; };
 		4A28A492852AEFBF508C1FC1 /* juce_RelativePointPath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativePointPath.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePointPath.h; sourceTree = SOURCE_ROOT; };
 		4A7695E93CE32F4E95042FCB /* juce_video.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_video.mm; path = ../../JuceLibraryCode/modules/juce_video/juce_video.mm; sourceTree = SOURCE_ROOT; };
-		4A94E809624F99387E600399 /* LfpDisplayCanvas.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LfpDisplayCanvas.cpp; path = ../../Source/Processors/Visualization/LfpDisplayCanvas.cpp; sourceTree = SOURCE_ROOT; };
 		4AD95B75DC581E32650FEDF6 /* juce_IIRFilterAudioSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_IIRFilterAudioSource.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp; sourceTree = SOURCE_ROOT; };
 		4AE1520FF569371665090B39 /* juce_AiffAudioFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AiffAudioFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp; sourceTree = SOURCE_ROOT; };
 		4AE36D25675E32A897F97BFA /* juce_TabbedComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TabbedComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.cpp; sourceTree = SOURCE_ROOT; };
-		4B0097003751A59A11FA8C5B /* FileReaderEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FileReaderEditor.cpp; path = ../../Source/Processors/Editors/FileReaderEditor.cpp; sourceTree = SOURCE_ROOT; };
 		4B3DBFE485F45E62C53A90B8 /* juce_MenuBarModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MenuBarModel.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarModel.h; sourceTree = SOURCE_ROOT; };
+		4B58436E2B47FC6BB349129F /* ChebyshevII.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ChebyshevII.cpp; path = ../../Source/Processors/Dsp/ChebyshevII.cpp; sourceTree = SOURCE_ROOT; };
 		4B5998D72503BD73D28E828A /* juce_osx_MessageQueue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_osx_MessageQueue.h; path = ../../JuceLibraryCode/modules/juce_events/native/juce_osx_MessageQueue.h; sourceTree = SOURCE_ROOT; };
 		4B74A7F0FDCE3E1706E5B320 /* juce_ApplicationCommandTarget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationCommandTarget.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp; sourceTree = SOURCE_ROOT; };
 		4BB38A2CD55BF23C7C3E3387 /* juce_ToolbarItemPalette.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToolbarItemPalette.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp; sourceTree = SOURCE_ROOT; };
 		4BB75F40F2BA3278C7D98909 /* juce_VST3Headers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_VST3Headers.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VST3Headers.h; sourceTree = SOURCE_ROOT; };
+		4C01F867D43DF7B1D98B887E /* SerialInput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SerialInput.cpp; path = ../../Source/Processors/SerialInput/SerialInput.cpp; sourceTree = SOURCE_ROOT; };
 		4C3EA47E012B2D63ADE599DD /* juce_PathStrokeType.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PathStrokeType.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathStrokeType.cpp; sourceTree = SOURCE_ROOT; };
 		4C4E2282C145D13C86CB23FA /* juce_OpenGLHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLHelpers.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLHelpers.h; sourceTree = SOURCE_ROOT; };
 		4C81E05B39376F54775A1027 /* juce_Colour.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Colour.h; path = ../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colour.h; sourceTree = SOURCE_ROOT; };
 		4CA9556E9C18029A47F34C7C /* juce_LAMEEncoderAudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LAMEEncoderAudioFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.h; sourceTree = SOURCE_ROOT; };
+		4CB63EE1552BBFDEB1DADB0A /* ProcessorGraph.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ProcessorGraph.cpp; path = ../../Source/Processors/ProcessorGraph/ProcessorGraph.cpp; sourceTree = SOURCE_ROOT; };
 		4CCA36B2A6C4821E493E74D2 /* juce_AudioFormatReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioFormatReader.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp; sourceTree = SOURCE_ROOT; };
 		4CF403118BBAAD5B6763542A /* juce_OpenGLContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OpenGLContext.cpp; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLContext.cpp; sourceTree = SOURCE_ROOT; };
 		4D67518E9223C1C19BD4EF2E /* juce_linux_Threads.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Threads.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_linux_Threads.cpp; sourceTree = SOURCE_ROOT; };
 		4D84A3A970FB67566A1E5B0B /* juce_KnownPluginList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KnownPluginList.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/scanning/juce_KnownPluginList.h; sourceTree = SOURCE_ROOT; };
 		4D8F94CA49DB11E07918B4C9 /* juce_UnitTest.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_UnitTest.cpp; path = ../../JuceLibraryCode/modules/juce_core/unit_tests/juce_UnitTest.cpp; sourceTree = SOURCE_ROOT; };
 		4E520E7960CC5098C2352E70 /* juce_MouseCursor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseCursor.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.h; sourceTree = SOURCE_ROOT; };
-		4E6EE225098D32E7D5DE60B2 /* SpikeDisplayCanvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeDisplayCanvas.h; path = ../../Source/Processors/Visualization/SpikeDisplayCanvas.h; sourceTree = SOURCE_ROOT; };
 		4E71B355F2BABAF69CC4114D /* juce_ConcertinaPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ConcertinaPanel.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h; sourceTree = SOURCE_ROOT; };
 		4EC254B133A7AAE377B9B3AE /* juce_LassoComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LassoComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_LassoComponent.h; sourceTree = SOURCE_ROOT; };
+		4F10D1D2F5ED2E7F9A997D4C /* PhaseDetector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PhaseDetector.cpp; path = ../../Source/Processors/PhaseDetector/PhaseDetector.cpp; sourceTree = SOURCE_ROOT; };
 		4F31D61C0C2AB3472C6C1429 /* juce_MACAddress.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MACAddress.cpp; path = ../../JuceLibraryCode/modules/juce_core/network/juce_MACAddress.cpp; sourceTree = SOURCE_ROOT; };
 		4F4234DC14D3689C22655D0C /* juce_ComponentListener.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentListener.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.cpp; sourceTree = SOURCE_ROOT; };
 		4F4E8E3B32DB7A91B41C9FFA /* MergerB-01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "MergerB-01.png"; path = "../../Resources/Images/Buttons/MergerB-01.png"; sourceTree = SOURCE_ROOT; };
+		4F5D51C5F8174E3824EF8B42 /* Parameter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Parameter.cpp; path = ../../Source/Processors/Parameter/Parameter.cpp; sourceTree = SOURCE_ROOT; };
 		4FD13AA663EEE7CC2F83033D /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
 		50DB7E5C152DDD03F2FA4C2D /* BebasNeue.otf */ = {isa = PBXFileReference; lastKnownFileType = file.otf; name = BebasNeue.otf; path = ../../Resources/Fonts/BebasNeue.otf; sourceTree = SOURCE_ROOT; };
 		50DD8D693741DD18106C0BA7 /* juce_ComponentListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentListener.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.h; sourceTree = SOURCE_ROOT; };
 		510ACDAD798813D7FC110197 /* juce_TabbedComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TabbedComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.h; sourceTree = SOURCE_ROOT; };
 		511C443A0A806706A772E981 /* juce_Primes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Primes.cpp; path = ../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_Primes.cpp; sourceTree = SOURCE_ROOT; };
+		513D20023796491A24EC58A7 /* WiFiOutputEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WiFiOutputEditor.h; path = ../../Source/Processors/WiFiOutput/WiFiOutputEditor.h; sourceTree = SOURCE_ROOT; };
 		515213CC3271E8DEA8125D33 /* juce_DynamicLibrary.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DynamicLibrary.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_DynamicLibrary.h; sourceTree = SOURCE_ROOT; };
 		515C4C8AC20EA25F3DEF2336 /* juce_LuaCodeTokeniser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LuaCodeTokeniser.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h; sourceTree = SOURCE_ROOT; };
 		51926BEEA63BF141D93A5B36 /* juce_RelativePoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativePoint.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePoint.cpp; sourceTree = SOURCE_ROOT; };
+		51BB55D1CE1667CD340E8358 /* EventNodeEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EventNodeEditor.h; path = ../../Source/Processors/EventNode/EventNodeEditor.h; sourceTree = SOURCE_ROOT; };
+		52070E1171C046E4949ADFE5 /* Elliptic.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Elliptic.cpp; path = ../../Source/Processors/Dsp/Elliptic.cpp; sourceTree = SOURCE_ROOT; };
 		5265AD5F97C9E813E14937A7 /* juce_RectanglePlacement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RectanglePlacement.h; path = ../../JuceLibraryCode/modules/juce_graphics/placement/juce_RectanglePlacement.h; sourceTree = SOURCE_ROOT; };
 		5284E69CC601457D5C7C1063 /* juce_linux_SystemTrayIcon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_SystemTrayIcon.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp; sourceTree = SOURCE_ROOT; };
 		52A41F90D055C90C902CC9CD /* juce_LookAndFeel_V2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LookAndFeel_V2.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp; sourceTree = SOURCE_ROOT; };
@@ -517,21 +536,24 @@
 		5343D594AA7D444A7C6AD924 /* juce_GZIPDecompressorInputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GZIPDecompressorInputStream.h; path = ../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPDecompressorInputStream.h; sourceTree = SOURCE_ROOT; };
 		5379FC603780F30A2F05FE78 /* juce_AsyncUpdater.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AsyncUpdater.h; path = ../../JuceLibraryCode/modules/juce_events/broadcasters/juce_AsyncUpdater.h; sourceTree = SOURCE_ROOT; };
 		53C8A2696FE4389E4AB4441C /* juce_Slider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Slider.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.cpp; sourceTree = SOURCE_ROOT; };
+		540CD9ED0C719DB1DAECA37E /* WiFiOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WiFiOutput.h; path = ../../Source/Processors/WiFiOutput/WiFiOutput.h; sourceTree = SOURCE_ROOT; };
 		54339ADDCB6F8E9E7721A986 /* juce_android_Windowing.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Windowing.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_android_Windowing.cpp; sourceTree = SOURCE_ROOT; };
-		5522973FA48A13C6BED293FE /* SignalGenerator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SignalGenerator.cpp; path = ../../Source/Processors/SignalGenerator.cpp; sourceTree = SOURCE_ROOT; };
-		555D34D0CD8776EE5996CC3A /* ProcessorGraph.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ProcessorGraph.cpp; path = ../../Source/Processors/ProcessorGraph.cpp; sourceTree = SOURCE_ROOT; };
+		54B7796F6DCF5531789CCF43 /* Types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Types.h; path = ../../Source/Processors/Dsp/Types.h; sourceTree = SOURCE_ROOT; };
 		55811E331B55E0547326CF22 /* juce_TopLevelWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TopLevelWindow.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp; sourceTree = SOURCE_ROOT; };
 		558E925DAC57ADF8810559AC /* juce_linux_Windowing.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Windowing.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Windowing.cpp; sourceTree = SOURCE_ROOT; };
+		55DFE30C901793E56A7E3A22 /* ResamplingNodeEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ResamplingNodeEditor.cpp; path = ../../Source/Processors/ResamplingNode/ResamplingNodeEditor.cpp; sourceTree = SOURCE_ROOT; };
 		55EBFCA56B915C8CD043365C /* juce_win32_DirectWriteTypeLayout.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DirectWriteTypeLayout.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp; sourceTree = SOURCE_ROOT; };
 		55F7467B96E236DD558228C9 /* juce_CharPointer_UTF8.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharPointer_UTF8.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF8.h; sourceTree = SOURCE_ROOT; };
 		560A28C1966B1817873CF764 /* juce_MidiMessageSequence.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiMessageSequence.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp; sourceTree = SOURCE_ROOT; };
 		56169D835A3E3029D6E3904C /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; };
+		56242BB33B53F133914517BD /* RecordControlEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RecordControlEditor.cpp; path = ../../Source/Processors/RecordControl/RecordControlEditor.cpp; sourceTree = SOURCE_ROOT; };
 		562E4A50364EEDC3AA2AACB8 /* juce_RelativeTime.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativeTime.h; path = ../../JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.h; sourceTree = SOURCE_ROOT; };
 		563F35B171FAF2540923CE45 /* juce_AudioDataConverters.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioDataConverters.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp; sourceTree = SOURCE_ROOT; };
 		564380494D23DB70680FB0B5 /* juce_TreeView.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TreeView.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.cpp; sourceTree = SOURCE_ROOT; };
-		5654BDD4FBFF01AC3F17FA0D /* ChannelMappingNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ChannelMappingNode.cpp; path = ../../Source/Processors/ChannelMappingNode.cpp; sourceTree = SOURCE_ROOT; };
 		565EEC8F429ABF5F9A867137 /* juce_MouseEvent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseEvent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseEvent.cpp; sourceTree = SOURCE_ROOT; };
 		56728EC77C65482B9C86FF4D /* juce_audio_utils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_audio_utils.mm; path = ../../JuceLibraryCode/modules/juce_audio_utils/juce_audio_utils.mm; sourceTree = SOURCE_ROOT; };
+		56D5BE8BFA1F07F5EFF1DFE8 /* ChebyshevI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ChebyshevI.h; path = ../../Source/Processors/Dsp/ChebyshevI.h; sourceTree = SOURCE_ROOT; };
+		56F810EF10E01535A417B671 /* FileReaderEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FileReaderEditor.cpp; path = ../../Source/Processors/FileReader/FileReaderEditor.cpp; sourceTree = SOURCE_ROOT; };
 		570299171BCE863C54FBBA54 /* juce_ConcertinaPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ConcertinaPanel.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp; sourceTree = SOURCE_ROOT; };
 		57941E5B2E1FF6028A68D4A7 /* RadioButtons-02.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons-02.png"; path = "../../Resources/Images/Icons/RadioButtons-02.png"; sourceTree = SOURCE_ROOT; };
 		57C6DD2537116B30FB948A08 /* juce_RSAKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RSAKey.h; path = ../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_RSAKey.h; sourceTree = SOURCE_ROOT; };
@@ -541,18 +563,16 @@
 		581287A24510A9EACEE09CE4 /* juce_DocumentWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DocumentWindow.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.h; sourceTree = SOURCE_ROOT; };
 		586448E180F8ACBF5A1565B0 /* juce_gui_extra.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_gui_extra.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.h; sourceTree = SOURCE_ROOT; };
 		586B1E0743FFBE9081A25F4F /* juce_CodeEditorComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CodeEditorComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp; sourceTree = SOURCE_ROOT; };
-		587FCA2485B9C89C2A99C23A /* Filter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Filter.cpp; path = ../../Source/Dsp/Filter.cpp; sourceTree = SOURCE_ROOT; };
 		5894D40A0E8FA6E9B3EBF9D9 /* SpikeObject.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeObject.cpp; path = ../../Source/Processors/Visualization/SpikeObject.cpp; sourceTree = SOURCE_ROOT; };
 		58958CC3F750D383261E2FBC /* juce_SliderPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SliderPropertyComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		589657244185109F68A6B5A2 /* ChannelMappingNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ChannelMappingNode.h; path = ../../Source/Processors/ChannelMappingNode/ChannelMappingNode.h; sourceTree = SOURCE_ROOT; };
 		5915DB02FB7CA8CEC1BF38A9 /* juce_opengl.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_opengl.mm; path = ../../JuceLibraryCode/modules/juce_opengl/juce_opengl.mm; sourceTree = SOURCE_ROOT; };
 		59389DC8664617FD51740F36 /* juce_DirectShowComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DirectShowComponent.h; path = ../../JuceLibraryCode/modules/juce_video/playback/juce_DirectShowComponent.h; sourceTree = SOURCE_ROOT; };
 		5962848AA3DD93A29EFF5B94 /* juce_data_structures.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_data_structures.h; path = ../../JuceLibraryCode/modules/juce_data_structures/juce_data_structures.h; sourceTree = SOURCE_ROOT; };
 		5A746CDDE80FEA2E45B5BA66 /* juce_mac_AppleRemote.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_AppleRemote.mm; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_AppleRemote.mm; sourceTree = SOURCE_ROOT; };
 		5A7D81B70480B40EEBC2FF54 /* juce_MessageListener.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MessageListener.cpp; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_MessageListener.cpp; sourceTree = SOURCE_ROOT; };
-		5A8D46BEB81DDF24462E3D92 /* PoleFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PoleFilter.h; path = ../../Source/Dsp/PoleFilter.h; sourceTree = SOURCE_ROOT; };
 		5AB3809F029824EE2DE0A798 /* juce_ImageFileFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageFileFormat.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageFileFormat.cpp; sourceTree = SOURCE_ROOT; };
 		5ADFF3180990F786CDC56AB0 /* juce_VST3PluginFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_VST3PluginFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h; sourceTree = SOURCE_ROOT; };
-		5B2A4DD7133CDE5AEC24CC07 /* GenericProcessor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GenericProcessor.h; path = ../../Source/Processors/GenericProcessor.h; sourceTree = SOURCE_ROOT; };
 		5B2CDF3CF10A92F6CA45F3DE /* juce_AudioPlayHead.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioPlayHead.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioPlayHead.h; sourceTree = SOURCE_ROOT; };
 		5B411F4FCF0F69798C9E4A88 /* juce_ScrollBar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScrollBar.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.h; sourceTree = SOURCE_ROOT; };
 		5B6B25AA065FB6CDE7D6C507 /* juce_ApplicationProperties.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationProperties.h; path = ../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_ApplicationProperties.h; sourceTree = SOURCE_ROOT; };
@@ -562,32 +582,34 @@
 		5C5E4C396CD83C46F58644A2 /* triangle_wave.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = triangle_wave.png; path = ../../Resources/Images/Icons/triangle_wave.png; sourceTree = SOURCE_ROOT; };
 		5C7EEDD80F88872A87FD561B /* juce_AudioFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormat.cpp; sourceTree = SOURCE_ROOT; };
 		5CE99545433261F3B4A46252 /* juce_AudioFormatReaderSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioFormatReaderSource.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp; sourceTree = SOURCE_ROOT; };
+		5CF96A7BBD6C4DE4D059E4A4 /* Legendre.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Legendre.h; path = ../../Source/Processors/Dsp/Legendre.h; sourceTree = SOURCE_ROOT; };
 		5D9792840E8050DCC766B368 /* juce_OpenGLRenderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLRenderer.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLRenderer.h; sourceTree = SOURCE_ROOT; };
 		5DB3B3197F8C1E5EE159D6FC /* rhd2000registers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rhd2000registers.cpp; path = "../../Source/Processors/DataThreads/rhythm-api/rhd2000registers.cpp"; sourceTree = SOURCE_ROOT; };
 		5DB6A07B827D62571BB51943 /* juce_Justification.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Justification.h; path = ../../JuceLibraryCode/modules/juce_graphics/placement/juce_Justification.h; sourceTree = SOURCE_ROOT; };
 		5DC1AF69A773401DB1E8FB32 /* juce_RelativeTime.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeTime.cpp; path = ../../JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.cpp; sourceTree = SOURCE_ROOT; };
 		5E0F8A60411A03461FD687CE /* juce_GroupComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GroupComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.h; sourceTree = SOURCE_ROOT; };
 		5E1EFF4EEA5684FA00CAA353 /* juce_ResizableBorderComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ResizableBorderComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h; sourceTree = SOURCE_ROOT; };
+		5E5098D437FC0612291567AC /* Documentation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Documentation.cpp; path = ../../Source/Processors/Dsp/Documentation.cpp; sourceTree = SOURCE_ROOT; };
+		5E5736CB6D96D5271F1A7597 /* AudioResamplingNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioResamplingNode.h; path = ../../Source/Processors/AudioResamplingNode/AudioResamplingNode.h; sourceTree = SOURCE_ROOT; };
 		5E663D5A55F191AB92A1383F /* juce_FileInputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileInputStream.h; path = ../../JuceLibraryCode/modules/juce_core/files/juce_FileInputStream.h; sourceTree = SOURCE_ROOT; };
 		5E94E897783BEEFE61E61A2C /* juce_android_WebBrowserComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_WebBrowserComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp; sourceTree = SOURCE_ROOT; };
-		5EA61EDD64BE1E401DD0AA5E /* SpikeDisplayNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeDisplayNode.h; path = ../../Source/Processors/SpikeDisplayNode.h; sourceTree = SOURCE_ROOT; };
+		5EA566ED87CC02EA6DF1993B /* FilterEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FilterEditor.h; path = ../../Source/Processors/FilterNode/FilterEditor.h; sourceTree = SOURCE_ROOT; };
 		5EA661C13CB7197A45F20028 /* PipelineB-02.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "PipelineB-02.png"; path = "../../Resources/Images/Buttons/PipelineB-02.png"; sourceTree = SOURCE_ROOT; };
-		5F64FDAFCA899A16C7FDDBCA /* AudioNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioNode.h; path = ../../Source/Processors/AudioNode.h; sourceTree = SOURCE_ROOT; };
 		5F6DCA68A982E930389644FD /* juce_linux_Network.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Network.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_linux_Network.cpp; sourceTree = SOURCE_ROOT; };
 		5FEBF3F722DB6191BF659816 /* juce_ArrowButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ArrowButton.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.cpp; sourceTree = SOURCE_ROOT; };
 		5FEFF62D585CF777C950E569 /* juce_LookAndFeel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LookAndFeel.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp; sourceTree = SOURCE_ROOT; };
 		601654292170CD2D60E912A6 /* juce_linux_ALSA.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_ALSA.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_ALSA.cpp; sourceTree = SOURCE_ROOT; };
 		603764889DE750F8E87F6428 /* juce_win32_Direct2DGraphicsContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Direct2DGraphicsContext.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp; sourceTree = SOURCE_ROOT; };
 		605C7ACB09E7739EBE4F1539 /* juce_AudioSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioSource.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_AudioSource.h; sourceTree = SOURCE_ROOT; };
+		607CC2BFCB0622B3348FA1AD /* SplitterEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SplitterEditor.cpp; path = ../../Source/Processors/Splitter/SplitterEditor.cpp; sourceTree = SOURCE_ROOT; };
 		60B1BDA3E9E14F9515963082 /* juce_BasicNativeHeaders.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BasicNativeHeaders.h; path = ../../JuceLibraryCode/modules/juce_core/native/juce_BasicNativeHeaders.h; sourceTree = SOURCE_ROOT; };
 		610E487E060C42B52FD5AAC9 /* ControlPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ControlPanel.cpp; path = ../../Source/UI/ControlPanel.cpp; sourceTree = SOURCE_ROOT; };
 		61317B5191E05925F232E18C /* unibody-8.otf */ = {isa = PBXFileReference; lastKnownFileType = file.otf; name = "unibody-8.otf"; path = "../../Resources/Fonts/unibody-8.otf"; sourceTree = SOURCE_ROOT; };
 		61481DD4AAC7731CE984937D /* juce_OpenGLExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLExtensions.h; path = ../../JuceLibraryCode/modules/juce_opengl/native/juce_OpenGLExtensions.h; sourceTree = SOURCE_ROOT; };
 		617F5DFAAE97F48FA996A781 /* juce_DrawableRectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableRectangle.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableRectangle.h; sourceTree = SOURCE_ROOT; };
 		61B0CBF705D5FC0431776286 /* juce_OpenGLShaderProgram.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OpenGLShaderProgram.cpp; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp; sourceTree = SOURCE_ROOT; };
+		623684E73A6005C7BB2717A6 /* PulsePalOutputEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PulsePalOutputEditor.h; path = ../../Source/Processors/PulsePalOutput/PulsePalOutputEditor.h; sourceTree = SOURCE_ROOT; };
 		627956A7A1CB15251D02C8C5 /* juce_ScopedXLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedXLock.h; path = ../../JuceLibraryCode/modules/juce_events/native/juce_ScopedXLock.h; sourceTree = SOURCE_ROOT; };
-		6328434A329C353DB8D9512C /* SourceNodeEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SourceNodeEditor.cpp; path = ../../Source/Processors/Editors/SourceNodeEditor.cpp; sourceTree = SOURCE_ROOT; };
-		6340B1D2FECEABBBE6C0DE28 /* Types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Types.h; path = ../../Source/Dsp/Types.h; sourceTree = SOURCE_ROOT; };
 		63AF6BE7FE2A9E7882743B4F /* juce_mac_Network.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Network.mm; path = ../../JuceLibraryCode/modules/juce_core/native/juce_mac_Network.mm; sourceTree = SOURCE_ROOT; };
 		63F4150ABBA43B2215230034 /* juce_IIRFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_IIRFilter.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/effects/juce_IIRFilter.h; sourceTree = SOURCE_ROOT; };
 		642325267C5F1AC2F65B647D /* juce_AnimatedPositionBehaviours.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AnimatedPositionBehaviours.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h; sourceTree = SOURCE_ROOT; };
@@ -595,7 +617,6 @@
 		649F22404167E0D0EA244196 /* juce_Toolbar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Toolbar.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.cpp; sourceTree = SOURCE_ROOT; };
 		6514FD7E6C5EC12735E49FBC /* juce_mac_FileChooser.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_FileChooser.mm; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_FileChooser.mm; sourceTree = SOURCE_ROOT; };
 		651E9B78A5139F7A5BCA4D90 /* juce_PropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertyComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
-		65312FAD0900119CDF6CF414 /* PoleFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PoleFilter.cpp; path = ../../Source/Dsp/PoleFilter.cpp; sourceTree = SOURCE_ROOT; };
 		6535D85C084292220330EDD9 /* juce_ResamplingAudioSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ResamplingAudioSource.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h; sourceTree = SOURCE_ROOT; };
 		65751E743D5EFD4066E50746 /* juce_LagrangeInterpolator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LagrangeInterpolator.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.h; sourceTree = SOURCE_ROOT; };
 		6589EAEF497ABA76A295B121 /* juce_VSTPluginFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_VSTPluginFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h; sourceTree = SOURCE_ROOT; };
@@ -613,10 +634,11 @@
 		66FE597910F6A68CBB6FA055 /* juce_MemoryInputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryInputStream.cpp; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryInputStream.cpp; sourceTree = SOURCE_ROOT; };
 		670987D88775D6B240C34820 /* juce_NotificationType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NotificationType.h; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_NotificationType.h; sourceTree = SOURCE_ROOT; };
 		674FDCCEF6A1379A0F689004 /* juce_ComponentBoundsConstrainer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentBoundsConstrainer.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h; sourceTree = SOURCE_ROOT; };
+		677CC8DA903C77D8ECBAE26D /* Params.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Params.h; path = ../../Source/Processors/Dsp/Params.h; sourceTree = SOURCE_ROOT; };
+		679BBE9F6C930A1941BA7944 /* ReferenceNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ReferenceNode.h; path = ../../Source/Processors/ReferenceNode/ReferenceNode.h; sourceTree = SOURCE_ROOT; };
 		67BB47E709B643D4C01AB34C /* juce_AudioDeviceSelectorComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioDeviceSelectorComponent.cpp; path = ../../JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp; sourceTree = SOURCE_ROOT; };
 		6832130272774CD542793762 /* juce_mac_CoreGraphicsContext.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_CoreGraphicsContext.mm; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm; sourceTree = SOURCE_ROOT; };
 		686FA8DDF2848517CBFB9E4A /* juce_MouseCursor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseCursor.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.cpp; sourceTree = SOURCE_ROOT; };
-		6880C148A38A5C8D0092E358 /* Merger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Merger.h; path = ../../Source/Processors/Utilities/Merger.h; sourceTree = SOURCE_ROOT; };
 		6917A53BAA3CA2819E4C10BF /* juce_ToolbarItemComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToolbarItemComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp; sourceTree = SOURCE_ROOT; };
 		693E9C5C9A435F791921DAAE /* juce_AudioDeviceManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioDeviceManager.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp; sourceTree = SOURCE_ROOT; };
 		696F2DC49934E6F01A2DF9FE /* juce_FileTreeComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileTreeComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp; sourceTree = SOURCE_ROOT; };
@@ -637,25 +659,28 @@
 		6CA98F8581CEAE2DC9AEBCE9 /* juce_CallbackMessage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CallbackMessage.h; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_CallbackMessage.h; sourceTree = SOURCE_ROOT; };
 		6CBD8647DB17F1B58B14A3BC /* juce_win32_AudioCDBurner.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_AudioCDBurner.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp; sourceTree = SOURCE_ROOT; };
 		6D34DD9AB987A67BADE71C65 /* RadioButtons-05.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons-05.png"; path = "../../Resources/Images/Icons/RadioButtons-05.png"; sourceTree = SOURCE_ROOT; };
+		6D38B76951D31D96F1B71E0F /* SerialInputEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SerialInputEditor.cpp; path = ../../Source/Processors/SerialInput/SerialInputEditor.cpp; sourceTree = SOURCE_ROOT; };
 		6D4BA4399FDEB6D2195B257D /* juce_SplashScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SplashScreen.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SplashScreen.h; sourceTree = SOURCE_ROOT; };
+		6D4D435D25CFC019E0FCF4A1 /* ReferenceNodeEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ReferenceNodeEditor.cpp; path = ../../Source/Processors/ReferenceNode/ReferenceNodeEditor.cpp; sourceTree = SOURCE_ROOT; };
 		6D4DFC260B2966E3EBFC0C79 /* juce_SliderPropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SliderPropertyComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
-		6D59D5780ECD2CC9703CB499 /* Butterworth.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Butterworth.h; path = ../../Source/Dsp/Butterworth.h; sourceTree = SOURCE_ROOT; };
 		6D619C7A3A14981DC4EFF223 /* juce_IIRFilterAudioSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_IIRFilterAudioSource.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h; sourceTree = SOURCE_ROOT; };
 		6D77949E9C7C9B5A7795C0E0 /* juce_PathStrokeType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PathStrokeType.h; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathStrokeType.h; sourceTree = SOURCE_ROOT; };
 		6DA8EC2F779DEBB701FE33CA /* juce_win32_HiddenMessageWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_HiddenMessageWindow.h; path = ../../JuceLibraryCode/modules/juce_events/native/juce_win32_HiddenMessageWindow.h; sourceTree = SOURCE_ROOT; };
 		6DCDFF2618CFEECEACE87630 /* juce_android_GraphicsContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_GraphicsContext.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_android_GraphicsContext.cpp; sourceTree = SOURCE_ROOT; };
 		6DD526F86CBF2C3B3487FFE1 /* juce_ComponentBuilder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentBuilder.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp; sourceTree = SOURCE_ROOT; };
+		6DF620BE87EA9F7F25A1144A /* SpikeSorterCanvas.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeSorterCanvas.cpp; path = ../../Source/Processors/SpikeSorter/SpikeSorterCanvas.cpp; sourceTree = SOURCE_ROOT; };
 		6E2F243D8F70CC92391204A4 /* juce_MultiDocumentPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MultiDocumentPanel.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h; sourceTree = SOURCE_ROOT; };
 		6EA1CC7DACDDBA863179521A /* juce_TemporaryFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TemporaryFile.cpp; path = ../../JuceLibraryCode/modules/juce_core/files/juce_TemporaryFile.cpp; sourceTree = SOURCE_ROOT; };
 		6EF4EFD6D74D2573AC6B6A6F /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_audio_devices/juce_module_info; sourceTree = SOURCE_ROOT; };
 		6F9B89F7AD0E13887871D4FE /* SourceDrop.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = SourceDrop.png; path = ../../Resources/Images/Icons/SourceDrop.png; sourceTree = SOURCE_ROOT; };
 		6FE8B0DD6116E6A3456ECF09 /* juce_ios_UIViewComponent.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_ios_UIViewComponent.mm; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm; sourceTree = SOURCE_ROOT; };
 		700597338DEC9AB65C4C8A5E /* juce_DrawableText.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableText.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableText.h; sourceTree = SOURCE_ROOT; };
-		70151263C4CB8A4F79431E11 /* EventNodeEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EventNodeEditor.cpp; path = ../../Source/Processors/Editors/EventNodeEditor.cpp; sourceTree = SOURCE_ROOT; };
+		70651FEF347D8DE167B68EB8 /* FilterNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FilterNode.h; path = ../../Source/Processors/FilterNode/FilterNode.h; sourceTree = SOURCE_ROOT; };
 		70BF68C222D1E0A0368EB845 /* juce_ApplicationCommandManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationCommandManager.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp; sourceTree = SOURCE_ROOT; };
 		70ECB490BD59F59D003F3BEE /* juce_android_CameraDevice.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_CameraDevice.cpp; path = ../../JuceLibraryCode/modules/juce_video/native/juce_android_CameraDevice.cpp; sourceTree = SOURCE_ROOT; };
 		70F06DBCA3948BCC1062E36F /* ChannelSelector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ChannelSelector.h; path = ../../Source/Processors/Editors/ChannelSelector.h; sourceTree = SOURCE_ROOT; };
 		71CF8F6995DF1BA2038C21D6 /* juce_AlertWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AlertWindow.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h; sourceTree = SOURCE_ROOT; };
+		721B60E285ADAC54829028B9 /* ArduinoOutputEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ArduinoOutputEditor.h; path = ../../Source/Processors/ArduinoOutput/ArduinoOutputEditor.h; sourceTree = SOURCE_ROOT; };
 		7291F19253205B1A5138908E /* juce_DynamicObject.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DynamicObject.cpp; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_DynamicObject.cpp; sourceTree = SOURCE_ROOT; };
 		72C33BA70B9EE82E39F1EC6C /* juce_MP3AudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MP3AudioFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.h; sourceTree = SOURCE_ROOT; };
 		72FCE41894123FC5DB01566B /* juce_OpenGL_win32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGL_win32.h; path = ../../JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_win32.h; sourceTree = SOURCE_ROOT; };
@@ -663,30 +688,33 @@
 		7387114E34496F4606550863 /* juce_HyperlinkButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_HyperlinkButton.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp; sourceTree = SOURCE_ROOT; };
 		73ACB7A051EDE5F676E35FFD /* juce_PerformanceCounter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PerformanceCounter.cpp; path = ../../JuceLibraryCode/modules/juce_core/time/juce_PerformanceCounter.cpp; sourceTree = SOURCE_ROOT; };
 		73C69D948D33899821536025 /* juce_SystemTrayIconComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SystemTrayIconComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h; sourceTree = SOURCE_ROOT; };
-		748AF0975561FFFE51DF5F58 /* PhaseDetectorEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PhaseDetectorEditor.h; path = ../../Source/Processors/Editors/PhaseDetectorEditor.h; sourceTree = SOURCE_ROOT; };
 		748E62D05C8FFF74DCA234C7 /* juce_ThreadPool.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ThreadPool.cpp; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_ThreadPool.cpp; sourceTree = SOURCE_ROOT; };
+		748F08ACA463113F570C51AC /* SignalGenerator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SignalGenerator.cpp; path = ../../Source/Processors/SignalGenerator/SignalGenerator.cpp; sourceTree = SOURCE_ROOT; };
 		74A81014471CC0EB0D5E6571 /* juce_ValueTree.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ValueTree.cpp; path = ../../JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTree.cpp; sourceTree = SOURCE_ROOT; };
+		74BAC33D6BC1D961F04DCC72 /* Channel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Channel.h; path = ../../Source/Processors/Channel/Channel.h; sourceTree = SOURCE_ROOT; };
 		74DE857CEFA10BC49FF591DB /* juce_Synthesiser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Synthesiser.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h; sourceTree = SOURCE_ROOT; };
 		753B81CCB5A6B6929679E7B7 /* juce_Application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Application.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/application/juce_Application.h; sourceTree = SOURCE_ROOT; };
 		7555A13E69B99B1B6C7295FD /* juce_InputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InputStream.cpp; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_InputStream.cpp; sourceTree = SOURCE_ROOT; };
 		758BC480F153DEA79304366B /* ofArduino.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ofArduino.h; path = ../../Source/Processors/Serial/ofArduino.h; sourceTree = SOURCE_ROOT; };
 		75A4EEE127FAB86D65FF5F6E /* juce_RelativeCoordinatePositioner.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeCoordinatePositioner.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp; sourceTree = SOURCE_ROOT; };
-		75B1E4EFCDA9A506CFEDB09F /* PhaseDetectorEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PhaseDetectorEditor.cpp; path = ../../Source/Processors/Editors/PhaseDetectorEditor.cpp; sourceTree = SOURCE_ROOT; };
 		75E0C433EC27CFB712CD9F75 /* juce_PluginListComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PluginListComponent.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginListComponent.h; sourceTree = SOURCE_ROOT; };
 		75FCE8908DD9055F90E93716 /* juce_ResizableBorderComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableBorderComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp; sourceTree = SOURCE_ROOT; };
 		76140C0485FDDA98C3D98E2A /* juce_OldSchoolLookAndFeel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OldSchoolLookAndFeel.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp; sourceTree = SOURCE_ROOT; };
 		766923F74E30FF5D6B12E7CE /* juce_DrawableComposite.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableComposite.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.h; sourceTree = SOURCE_ROOT; };
 		76E89CBE70BF8F2476B7AA34 /* juce_SortedSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SortedSet.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_SortedSet.h; sourceTree = SOURCE_ROOT; };
-		76F569AE7B444D8F69EE0E86 /* AudioResamplingNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioResamplingNode.cpp; path = ../../Source/Processors/AudioResamplingNode.cpp; sourceTree = SOURCE_ROOT; };
 		7719FB81DDF23CF0164B131D /* juce_BlowFish.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BlowFish.h; path = ../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_BlowFish.h; sourceTree = SOURCE_ROOT; };
+		777D9B0FE3C110ADA980BD09 /* Butterworth.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Butterworth.cpp; path = ../../Source/Processors/Dsp/Butterworth.cpp; sourceTree = SOURCE_ROOT; };
 		778333877EFD6EC62129D803 /* juce_ConnectedChildProcess.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ConnectedChildProcess.h; path = ../../JuceLibraryCode/modules/juce_events/interprocess/juce_ConnectedChildProcess.h; sourceTree = SOURCE_ROOT; };
 		77B3E84324445076F1F907E9 /* juce_win32_Threads.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Threads.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_win32_Threads.cpp; sourceTree = SOURCE_ROOT; };
+		7814050BBF14AF7D45872768 /* Dsp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Dsp.h; path = ../../Source/Processors/Dsp/Dsp.h; sourceTree = SOURCE_ROOT; };
 		783D8922D5C687E170FA1A2C /* cpmono_plain.otf */ = {isa = PBXFileReference; lastKnownFileType = file.otf; name = cpmono_plain.otf; path = ../../Resources/Fonts/cpmono_plain.otf; sourceTree = SOURCE_ROOT; };
+		78400C0FB79F6B0D1A27A6D4 /* SpikeSorter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeSorter.h; path = ../../Source/Processors/SpikeSorter/SpikeSorter.h; sourceTree = SOURCE_ROOT; };
 		784233150B26826701C09103 /* juce_MidiKeyboardComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MidiKeyboardComponent.h; path = ../../JuceLibraryCode/modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h; sourceTree = SOURCE_ROOT; };
 		786A97B2B4E2BB6406546647 /* juce_FileSearchPathListComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPathListComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h; sourceTree = SOURCE_ROOT; };
 		786F6A40506C2094B812F4D5 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_audio_basics/juce_module_info; sourceTree = SOURCE_ROOT; };
 		788F8B7719B70465762B634B /* DataBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DataBuffer.cpp; path = ../../Source/Processors/DataThreads/DataBuffer.cpp; sourceTree = SOURCE_ROOT; };
 		789139D88F449BE488BF3CCB /* juce_AudioFormatReader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatReader.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReader.h; sourceTree = SOURCE_ROOT; };
+		78A1CE918B3E7ADD87DA4350 /* Legendre.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Legendre.cpp; path = ../../Source/Processors/Dsp/Legendre.cpp; sourceTree = SOURCE_ROOT; };
 		78BA978C614603B5E9ECFFF1 /* juce_ComponentPeer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentPeer.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp; sourceTree = SOURCE_ROOT; };
 		78CC9639B933CE2497264EF2 /* juce_KeyPress.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KeyPress.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyPress.h; sourceTree = SOURCE_ROOT; };
 		793A4A777FEFA450F86C78EE /* juce_GraphicsContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GraphicsContext.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/contexts/juce_GraphicsContext.cpp; sourceTree = SOURCE_ROOT; };
@@ -695,12 +723,9 @@
 		79C91DDF3BC3F15D0338E504 /* ProcessorList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ProcessorList.cpp; path = ../../Source/UI/ProcessorList.cpp; sourceTree = SOURCE_ROOT; };
 		7A93BFD2180B5E00B124CB1A /* juce_PixelFormats.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PixelFormats.h; path = ../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h; sourceTree = SOURCE_ROOT; };
 		7A9F37527280A470F201FB6E /* juce_SystemTrayIconComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SystemTrayIconComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp; sourceTree = SOURCE_ROOT; };
-		7ACB1CB66D69738904358F43 /* Design.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Design.h; path = ../../Source/Dsp/Design.h; sourceTree = SOURCE_ROOT; };
 		7B42B28FDB2E3AC67EF296F8 /* PracticalSocket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PracticalSocket.h; path = ../../Source/Network/PracticalSocket.h; sourceTree = SOURCE_ROOT; };
 		7B674BB1DA11A4E58EA71624 /* juce_EdgeTable.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_EdgeTable.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_EdgeTable.cpp; sourceTree = SOURCE_ROOT; };
-		7B7819A5759B54D91E334447 /* LfpTriggeredAverageEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LfpTriggeredAverageEditor.cpp; path = ../../Source/Processors/Editors/LfpTriggeredAverageEditor.cpp; sourceTree = SOURCE_ROOT; };
 		7BCE1C09508E1B9CFC79C185 /* juce_CaretComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CaretComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp; sourceTree = SOURCE_ROOT; };
-		7BD2C39F13FDE202141C4B41 /* MessageCenter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MessageCenter.cpp; path = ../../Source/UI/MessageCenter.cpp; sourceTree = SOURCE_ROOT; };
 		7BE7EBBCC4DCF760A1AA697E /* juce_DirectoryContentsList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsList.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h; sourceTree = SOURCE_ROOT; };
 		7C0F2759385C66CAC3EC362D /* juce_win32_ActiveXComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_ActiveXComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp; sourceTree = SOURCE_ROOT; };
 		7C15112E5F287ACDD74480F5 /* juce_QuickTimeMovieComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_QuickTimeMovieComponent.h; path = ../../JuceLibraryCode/modules/juce_video/playback/juce_QuickTimeMovieComponent.h; sourceTree = SOURCE_ROOT; };
@@ -715,6 +740,7 @@
 		7D8100DC3A532980AEAAD909 /* juce_ArrayAllocationBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ArrayAllocationBase.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_ArrayAllocationBase.h; sourceTree = SOURCE_ROOT; };
 		7D88F7083884A5ED2DBE7534 /* juce_GroupComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GroupComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.cpp; sourceTree = SOURCE_ROOT; };
 		7D9374931D760ADC65DCBFC6 /* DataViewport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DataViewport.h; path = ../../Source/UI/DataViewport.h; sourceTree = SOURCE_ROOT; };
+		7DB22AC6407EEA88F3FFA16D /* EngineConfigWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EngineConfigWindow.cpp; path = ../../Source/Processors/RecordNode/EngineConfigWindow.cpp; sourceTree = SOURCE_ROOT; };
 		7E40891072657FB5ADC2FAB7 /* juce_Array.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Array.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_Array.h; sourceTree = SOURCE_ROOT; };
 		7E581214A64A535E03EA759B /* juce_AlertWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AlertWindow.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.cpp; sourceTree = SOURCE_ROOT; };
 		7E875E681E18D693D5ADB2FB /* EditorViewport.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EditorViewport.cpp; path = ../../Source/UI/EditorViewport.cpp; sourceTree = SOURCE_ROOT; };
@@ -722,7 +748,6 @@
 		7EBB3F8185EB597DEF77534D /* juce_Message.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Message.h; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_Message.h; sourceTree = SOURCE_ROOT; };
 		7EBEBC6DBA8DCA5A5D8C72E1 /* juce_Timer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Timer.h; path = ../../JuceLibraryCode/modules/juce_events/timers/juce_Timer.h; sourceTree = SOURCE_ROOT; };
 		7ECD5DB4BEBC44559D064E08 /* juce_Logger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Logger.cpp; path = ../../JuceLibraryCode/modules/juce_core/logging/juce_Logger.cpp; sourceTree = SOURCE_ROOT; };
-		7EFF8622168303A4391D6CAE /* RootFinder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RootFinder.h; path = ../../Source/Dsp/RootFinder.h; sourceTree = SOURCE_ROOT; };
 		7F17077973FFDD70C4B78E7E /* juce_PlatformDefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PlatformDefs.h; path = ../../JuceLibraryCode/modules/juce_core/system/juce_PlatformDefs.h; sourceTree = SOURCE_ROOT; };
 		7F1E84C068D3E6AA13CDD699 /* juce_Justification.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Justification.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/placement/juce_Justification.cpp; sourceTree = SOURCE_ROOT; };
 		7F49EA0CD3379397520AA6F1 /* juce_DeletedAtShutdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DeletedAtShutdown.cpp; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.cpp; sourceTree = SOURCE_ROOT; };
@@ -731,11 +756,14 @@
 		7FDFE493862CE27EFCAC3F7F /* RadioButtons-04.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons-04.png"; path = "../../Resources/Images/Icons/RadioButtons-04.png"; sourceTree = SOURCE_ROOT; };
 		803D306CDAC2BD3BA04534EA /* juce_AudioProcessorEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioProcessorEditor.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp; sourceTree = SOURCE_ROOT; };
 		8077C8D1C544F458947D693E /* juce_TextLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextLayout.h; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_TextLayout.h; sourceTree = SOURCE_ROOT; };
+		80A19F69D9B205BCC0ABA293 /* EcubeEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EcubeEditor.cpp; path = ../../Source/Processors/DataThreads/EcubeEditor.cpp; sourceTree = SOURCE_ROOT; };
 		80A612858FA1177A262744C6 /* juce_HyperlinkButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_HyperlinkButton.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_HyperlinkButton.h; sourceTree = SOURCE_ROOT; };
 		80C1B737D2C2CB519D1787D7 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; };
 		80D57E78015C789503FE24B4 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_audio_utils/juce_module_info; sourceTree = SOURCE_ROOT; };
 		80E8C07F5807C65BCDFCCF94 /* juce_AudioSampleBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioSampleBuffer.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp; sourceTree = SOURCE_ROOT; };
 		80EEDD40F49120ADBE9DCBDF /* rhd2000datablock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rhd2000datablock.h; path = "../../Source/Processors/DataThreads/rhythm-api/rhd2000datablock.h"; sourceTree = SOURCE_ROOT; };
+		811A8689009F6FBEE2168F96 /* SpikeDetectorEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeDetectorEditor.h; path = ../../Source/Processors/SpikeDetector/SpikeDetectorEditor.h; sourceTree = SOURCE_ROOT; };
+		811BCA5BE226C5188BC5E9B9 /* Parameter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Parameter.h; path = ../../Source/Processors/Parameter/Parameter.h; sourceTree = SOURCE_ROOT; };
 		811C4D165AD7AABF4055059C /* juce_Expression.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Expression.h; path = ../../JuceLibraryCode/modules/juce_core/maths/juce_Expression.h; sourceTree = SOURCE_ROOT; };
 		816EB8024DD50DE4B7E84CB8 /* juce_ByteOrder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ByteOrder.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_ByteOrder.h; sourceTree = SOURCE_ROOT; };
 		81D578AA5F277EB0946050E5 /* juce_win32_DragAndDrop.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DragAndDrop.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp; sourceTree = SOURCE_ROOT; };
@@ -744,7 +772,6 @@
 		837D266B3F62C3B05C2BC28C /* BinaryData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = SOURCE_ROOT; };
 		83803D96768258DA20710764 /* juce_XmlElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_XmlElement.h; path = ../../JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.h; sourceTree = SOURCE_ROOT; };
 		83950E9D0D7C100B7DCA0E55 /* juce_TextButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextButton.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_TextButton.h; sourceTree = SOURCE_ROOT; };
-		83E5EA2AA0CB928889AC80AB /* SpikeDetectorEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeDetectorEditor.h; path = ../../Source/Processors/Editors/SpikeDetectorEditor.h; sourceTree = SOURCE_ROOT; };
 		847F6986DFA468BA8D80A531 /* miso-light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file.ttf; name = "miso-light.ttf"; path = "../../Resources/Fonts/miso-light.ttf"; sourceTree = SOURCE_ROOT; };
 		84A71C69B4B5779620343BCD /* juce_linux_CommonFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_CommonFile.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_linux_CommonFile.cpp; sourceTree = SOURCE_ROOT; };
 		8515A61F1E3BD62B9B95B495 /* juce_audio_utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_audio_utils.h; path = ../../JuceLibraryCode/modules/juce_audio_utils/juce_audio_utils.h; sourceTree = SOURCE_ROOT; };
@@ -753,37 +780,39 @@
 		85928E2EF1C438EBC9EB07EA /* juce_ImageCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageCache.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.cpp; sourceTree = SOURCE_ROOT; };
 		85C3F7CDF87409A56082DF67 /* juce_FileListComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileListComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp; sourceTree = SOURCE_ROOT; };
 		86515FD9AD34D6FF96C0D8B6 /* juce_BufferingAudioFormatReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BufferingAudioFormatReader.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp; sourceTree = SOURCE_ROOT; };
-		86688D712937F3D08918C68B /* SerialInput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SerialInput.cpp; path = ../../Source/Processors/SerialInput.cpp; sourceTree = SOURCE_ROOT; };
 		8689288B66B16EFB106CB2F4 /* juce_TextInputTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextInputTarget.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextInputTarget.h; sourceTree = SOURCE_ROOT; };
 		86E8E44A13F17083ED300BD5 /* juce_ChangeListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ChangeListener.h; path = ../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeListener.h; sourceTree = SOURCE_ROOT; };
 		86F4AAFCE3FEB34E325F3020 /* juce_win32_ComSmartPtr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_ComSmartPtr.h; path = ../../JuceLibraryCode/modules/juce_core/native/juce_win32_ComSmartPtr.h; sourceTree = SOURCE_ROOT; };
 		8751DF970A9E3598683BACAF /* FPGAThread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FPGAThread.h; path = ../../Source/Processors/DataThreads/FPGAThread.h; sourceTree = SOURCE_ROOT; };
 		879B0383EF2A8B116903A500 /* juce_ImageCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageCache.h; path = ../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.h; sourceTree = SOURCE_ROOT; };
 		87B4BA68E49DD11197B7AFDB /* JuceHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = SOURCE_ROOT; };
+		87C0534EAC82E887E1D354C3 /* Butterworth.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Butterworth.h; path = ../../Source/Processors/Dsp/Butterworth.h; sourceTree = SOURCE_ROOT; };
 		880CC7C325EFF665AC3006D2 /* juce_KeyListener.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyListener.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyListener.cpp; sourceTree = SOURCE_ROOT; };
 		881237D5E366342B117C0ED7 /* juce_WildcardFileFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_WildcardFileFilter.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp; sourceTree = SOURCE_ROOT; };
 		8822ADC9DB83FAF39B841E31 /* juce_Font.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Font.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Font.cpp; sourceTree = SOURCE_ROOT; };
-		886E18520E8BD77234E1B686 /* FilterNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FilterNode.h; path = ../../Source/Processors/FilterNode.h; sourceTree = SOURCE_ROOT; };
+		883E23B392AFB86C3EE1A2AC /* ReferenceNodeEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ReferenceNodeEditor.h; path = ../../Source/Processors/ReferenceNode/ReferenceNodeEditor.h; sourceTree = SOURCE_ROOT; };
 		8882F8EBE55F52FA8E519249 /* juce_android_Files.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Files.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_android_Files.cpp; sourceTree = SOURCE_ROOT; };
+		88C69F0563A99BD2F7BF5FBB /* LfpDisplayEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LfpDisplayEditor.cpp; path = ../../Source/Processors/LfpDisplayNode/LfpDisplayEditor.cpp; sourceTree = SOURCE_ROOT; };
 		88E5D0906646465409715828 /* juce_PreferencesPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PreferencesPanel.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp; sourceTree = SOURCE_ROOT; };
 		891B132A0355007B4F37454C /* juce_GraphicsContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GraphicsContext.h; path = ../../JuceLibraryCode/modules/juce_graphics/contexts/juce_GraphicsContext.h; sourceTree = SOURCE_ROOT; };
 		893E1A681FF162F6C9069F62 /* juce_HashMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_HashMap.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_HashMap.h; sourceTree = SOURCE_ROOT; };
 		894C0CAC31D382477E7A122E /* juce_PluginDirectoryScanner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PluginDirectoryScanner.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h; sourceTree = SOURCE_ROOT; };
 		89B0B267EF0A2A19A082EB86 /* juce_android_Fonts.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Fonts.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_android_Fonts.cpp; sourceTree = SOURCE_ROOT; };
+		89CDE7ED25D0EB7452486E85 /* SpikeDetector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeDetector.cpp; path = ../../Source/Processors/SpikeDetector/SpikeDetector.cpp; sourceTree = SOURCE_ROOT; };
 		8A026DB58E3555F7B070DA61 /* juce_MemoryBlock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MemoryBlock.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_MemoryBlock.h; sourceTree = SOURCE_ROOT; };
-		8A91849BE6B96EB8C0663469 /* LfpDisplayEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LfpDisplayEditor.cpp; path = ../../Source/Processors/Editors/LfpDisplayEditor.cpp; sourceTree = SOURCE_ROOT; };
+		8A07B5B6D56277A222AC0E90 /* HDF5Recording.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HDF5Recording.h; path = ../../Source/Processors/RecordNode/HDF5Recording.h; sourceTree = SOURCE_ROOT; };
 		8A989F74B1957BCB3B9BA398 /* rhd2000registers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rhd2000registers.h; path = "../../Source/Processors/DataThreads/rhythm-api/rhd2000registers.h"; sourceTree = SOURCE_ROOT; };
 		8AE2DDA47B2DFDEEEF69B12F /* FileReaderIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = FileReaderIcon.png; path = ../../Resources/Images/Icons/FileReaderIcon.png; sourceTree = SOURCE_ROOT; };
+		8B0B1D01BA8A37EC6058E518 /* RootFinder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RootFinder.h; path = ../../Source/Processors/Dsp/RootFinder.h; sourceTree = SOURCE_ROOT; };
 		8B0C9D288C428BA5D956AE13 /* juce_MidiMessage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiMessage.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessage.cpp; sourceTree = SOURCE_ROOT; };
 		8B4113F2B3F3623B4C980217 /* juce_WildcardFileFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_WildcardFileFilter.cpp; path = ../../JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.cpp; sourceTree = SOURCE_ROOT; };
 		8B49B07BC7534B247ADC756A /* juce_WeakReference.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WeakReference.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_WeakReference.h; sourceTree = SOURCE_ROOT; };
-		8B745839B225E44C9EB5C6FA /* ParameterEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ParameterEditor.h; path = ../../Source/Processors/Editors/ParameterEditor.h; sourceTree = SOURCE_ROOT; };
 		8B7EB54E1F773517A65D935C /* juce_DropShadowEffect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DropShadowEffect.h; path = ../../JuceLibraryCode/modules/juce_graphics/effects/juce_DropShadowEffect.h; sourceTree = SOURCE_ROOT; };
-		8B9C0831BE4E09B7C0078B7E /* ArduinoOutputEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ArduinoOutputEditor.h; path = ../../Source/Processors/Editors/ArduinoOutputEditor.h; sourceTree = SOURCE_ROOT; };
 		8C077447B0DFC739C7D2E437 /* juce_MemoryInputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MemoryInputStream.h; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryInputStream.h; sourceTree = SOURCE_ROOT; };
 		8C268C3D0B8EC2BB8953E7F7 /* juce_ModifierKeys.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ModifierKeys.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp; sourceTree = SOURCE_ROOT; };
 		8C38407151E149A7E2A15801 /* juce_SHA256.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SHA256.h; path = ../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_SHA256.h; sourceTree = SOURCE_ROOT; };
 		8C3B6865F2053C80A6E692F1 /* juce_Label.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Label.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.cpp; sourceTree = SOURCE_ROOT; };
+		8C639E4F97B7D6070028623A /* MergerEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MergerEditor.h; path = ../../Source/Processors/Merger/MergerEditor.h; sourceTree = SOURCE_ROOT; };
 		8CAEF601359DB6CB50E89D1A /* juce_ActionBroadcaster.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ActionBroadcaster.cpp; path = ../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp; sourceTree = SOURCE_ROOT; };
 		8D4FBD30E1C9EC0DA749BC83 /* juce_DropShadower.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadower.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_DropShadower.cpp; sourceTree = SOURCE_ROOT; };
 		8D6A419A4678968762A59B28 /* juce_BufferingAudioFormatReader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BufferingAudioFormatReader.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h; sourceTree = SOURCE_ROOT; };
@@ -793,6 +822,7 @@
 		8E78AAA58721DE609F6FFC61 /* juce_DragAndDropContainer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DragAndDropContainer.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp; sourceTree = SOURCE_ROOT; };
 		8EB76CA261F62A89B3D25F81 /* juce_Thread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Thread.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_Thread.h; sourceTree = SOURCE_ROOT; };
 		8F0549459970F529587D6CDD /* juce_WindowsMediaAudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WindowsMediaAudioFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.h; sourceTree = SOURCE_ROOT; };
+		8F058EA775325F9C5650944E /* MessageCenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MessageCenter.h; path = ../../Source/Processors/MessageCenter/MessageCenter.h; sourceTree = SOURCE_ROOT; };
 		8F08D5488CE147D693BA21E2 /* juce_osx_ObjCHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_osx_ObjCHelpers.h; path = ../../JuceLibraryCode/modules/juce_core/native/juce_osx_ObjCHelpers.h; sourceTree = SOURCE_ROOT; };
 		8F29CAC0059E3697A5A3652F /* juce_URL.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_URL.cpp; path = ../../JuceLibraryCode/modules/juce_core/network/juce_URL.cpp; sourceTree = SOURCE_ROOT; };
 		8F3C158B4FB92CFC48324896 /* juce_SelectedItemSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SelectedItemSet.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_SelectedItemSet.h; sourceTree = SOURCE_ROOT; };
@@ -805,14 +835,10 @@
 		90AD1B6A2293F625D786507A /* juce_MathsFunctions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MathsFunctions.h; path = ../../JuceLibraryCode/modules/juce_core/maths/juce_MathsFunctions.h; sourceTree = SOURCE_ROOT; };
 		90F2939F533A26AC021E42B1 /* juce_ColourGradient.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourGradient.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/colour/juce_ColourGradient.cpp; sourceTree = SOURCE_ROOT; };
 		911CCC0A579792DC56807DEC /* juce_DrawableRectangle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableRectangle.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp; sourceTree = SOURCE_ROOT; };
-		9136BD46BE1E28A96FBBD440 /* SignalGeneratorEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SignalGeneratorEditor.cpp; path = ../../Source/Processors/Editors/SignalGeneratorEditor.cpp; sourceTree = SOURCE_ROOT; };
 		917988BE74F2180BFC0583A3 /* juce_MissingGLDefinitions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MissingGLDefinitions.h; path = ../../JuceLibraryCode/modules/juce_opengl/native/juce_MissingGLDefinitions.h; sourceTree = SOURCE_ROOT; };
 		918837CC0447C50774036664 /* juce_StretchableLayoutResizerBar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableLayoutResizerBar.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp; sourceTree = SOURCE_ROOT; };
-		91D7B1F8B94AE9CFCC53771F /* EventDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EventDetector.h; path = ../../Source/Processors/EventDetector.h; sourceTree = SOURCE_ROOT; };
 		9200FC900D22733AE716C364 /* juce_CharPointer_UTF16.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharPointer_UTF16.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF16.h; sourceTree = SOURCE_ROOT; };
-		9215DC26F511C58DEE009209 /* FileReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FileReader.cpp; path = ../../Source/Processors/FileReader.cpp; sourceTree = SOURCE_ROOT; };
 		921F5D04122F324502DA4E75 /* juce_TextEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextEditor.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.cpp; sourceTree = SOURCE_ROOT; };
-		92528D6653802FACF658D8EA /* FPGAOutputEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FPGAOutputEditor.h; path = ../../Source/Processors/Editors/FPGAOutputEditor.h; sourceTree = SOURCE_ROOT; };
 		92602D7166325C7232B85EDD /* DataThread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DataThread.cpp; path = ../../Source/Processors/DataThreads/DataThread.cpp; sourceTree = SOURCE_ROOT; };
 		927AE946A1371490D809876E /* juce_MidiMessage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MidiMessage.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessage.h; sourceTree = SOURCE_ROOT; };
 		927FCF11005E78D499DAF197 /* juce_CallOutBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CallOutBox.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.h; sourceTree = SOURCE_ROOT; };
@@ -820,14 +846,18 @@
 		92E07CA13571893873565AC7 /* juce_SplashScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SplashScreen.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SplashScreen.cpp; sourceTree = SOURCE_ROOT; };
 		92E3405CB31ACFE3F80BBAD4 /* OpenEphysBoardLogoBlack.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = OpenEphysBoardLogoBlack.png; path = ../../Resources/Images/Icons/OpenEphysBoardLogoBlack.png; sourceTree = SOURCE_ROOT; };
 		92EC6BB8A8C4C5A61F43C233 /* juce_ToggleButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ToggleButton.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToggleButton.h; sourceTree = SOURCE_ROOT; };
+		92F51CF12E0C21F38D5E61E8 /* SpikeSortBoxes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeSortBoxes.cpp; path = ../../Source/Processors/SpikeSorter/SpikeSortBoxes.cpp; sourceTree = SOURCE_ROOT; };
+		934B37E2BECD69E6E27051F6 /* ParameterEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ParameterEditor.cpp; path = ../../Source/Processors/Parameter/ParameterEditor.cpp; sourceTree = SOURCE_ROOT; };
 		9360657FDE33FA37D80075D1 /* juce_InterprocessConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InterprocessConnection.cpp; path = ../../JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnection.cpp; sourceTree = SOURCE_ROOT; };
 		9380932BED279F91B8C1C04B /* juce_Rectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Rectangle.h; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Rectangle.h; sourceTree = SOURCE_ROOT; };
 		93EFC1AA800FC5DA2F04A213 /* RadioButtons_neutral-04.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_neutral-04.png"; path = "../../Resources/Images/Icons/RadioButtons_neutral-04.png"; sourceTree = SOURCE_ROOT; };
 		93F842958BCE6A9E09862CF7 /* juce_LADSPAPluginFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LADSPAPluginFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h; sourceTree = SOURCE_ROOT; };
-		9428D7423971764AC0BA9CB7 /* State.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = State.h; path = ../../Source/Dsp/State.h; sourceTree = SOURCE_ROOT; };
+		9410421AB1CD18F754FD4A9E /* EventDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EventDetector.h; path = ../../Source/Processors/EventDetector/EventDetector.h; sourceTree = SOURCE_ROOT; };
 		945DC754F2EACDFFB7926DE8 /* juce_FileChooser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileChooser.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooser.h; sourceTree = SOURCE_ROOT; };
 		946FDFCA107B3F4C74C471B4 /* juce_InterprocessConnectionServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_InterprocessConnectionServer.h; path = ../../JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnectionServer.h; sourceTree = SOURCE_ROOT; };
+		949422DF0532222450E95926 /* RecordNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RecordNode.cpp; path = ../../Source/Processors/RecordNode/RecordNode.cpp; sourceTree = SOURCE_ROOT; };
 		94BD861806F8EA598EC09370 /* juce_ResizableCornerComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableCornerComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp; sourceTree = SOURCE_ROOT; };
+		95A64508FF3D0140D3001A19 /* ArduinoOutput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ArduinoOutput.cpp; path = ../../Source/Processors/ArduinoOutput/ArduinoOutput.cpp; sourceTree = SOURCE_ROOT; };
 		95B57108E929DD11F898B7B1 /* FileReaderThread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FileReaderThread.h; path = ../../Source/Processors/DataThreads/FileReaderThread.h; sourceTree = SOURCE_ROOT; };
 		95EC6B1536DC65070D0ADCEE /* juce_ListBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ListBox.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.h; sourceTree = SOURCE_ROOT; };
 		967138FE8A086734ADC8CABB /* juce_Value.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Value.cpp; path = ../../JuceLibraryCode/modules/juce_data_structures/values/juce_Value.cpp; sourceTree = SOURCE_ROOT; };
@@ -840,34 +870,32 @@
 		982E1A954C316920557F029C /* juce_android_Network.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Network.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_android_Network.cpp; sourceTree = SOURCE_ROOT; };
 		9845DA251B15F22B355FC618 /* juce_LiveConstantEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LiveConstantEditor.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_LiveConstantEditor.h; sourceTree = SOURCE_ROOT; };
 		984BC60C0AFF3EDED692FA01 /* GenericEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GenericEditor.h; path = ../../Source/Processors/Editors/GenericEditor.h; sourceTree = SOURCE_ROOT; };
-		985F2B5047476B272B1A4BD4 /* EventNodeEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EventNodeEditor.h; path = ../../Source/Processors/Editors/EventNodeEditor.h; sourceTree = SOURCE_ROOT; };
 		988F01B2B51B2AC7293D07DA /* juce_MidiMessageCollector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiMessageCollector.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp; sourceTree = SOURCE_ROOT; };
 		98C81B13A0C34D8A4E93ADD1 /* juce_ToolbarButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarButton.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.h; sourceTree = SOURCE_ROOT; };
 		98D2D452F48C86F47FB90BAD /* juce_PNGLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PNGLoader.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/image_formats/juce_PNGLoader.cpp; sourceTree = SOURCE_ROOT; };
+		98EFA5304D160AD9225E38B4 /* MathSupplement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MathSupplement.h; path = ../../Source/Processors/Dsp/MathSupplement.h; sourceTree = SOURCE_ROOT; };
 		996E4EA6B532E4E436F50243 /* juce_DeletedAtShutdown.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DeletedAtShutdown.h; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.h; sourceTree = SOURCE_ROOT; };
 		9978BC2A359BC506F69E545F /* juce_SystemStats.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SystemStats.cpp; path = ../../JuceLibraryCode/modules/juce_core/system/juce_SystemStats.cpp; sourceTree = SOURCE_ROOT; };
 		99E1BC08B886CFDD2CCFD462 /* open-ephys.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "open-ephys.app"; sourceTree = BUILT_PRODUCTS_DIR; };
-		9A21A229CFACC67E31F4F727 /* RBJ.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RBJ.cpp; path = ../../Source/Dsp/RBJ.cpp; sourceTree = SOURCE_ROOT; };
 		9A29EBC10219D89919E12FCB /* juce_ComponentDragger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentDragger.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_ComponentDragger.h; sourceTree = SOURCE_ROOT; };
+		9AA19ECEFE2B49832ECEED2F /* FilterNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FilterNode.cpp; path = ../../Source/Processors/FilterNode/FilterNode.cpp; sourceTree = SOURCE_ROOT; };
 		9B178E9015CF469CFD41BC79 /* juce_BufferedInputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BufferedInputStream.cpp; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.cpp; sourceTree = SOURCE_ROOT; };
+		9B1962D340B217B19B077F2A /* OriginalRecording.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OriginalRecording.h; path = ../../Source/Processors/RecordNode/OriginalRecording.h; sourceTree = SOURCE_ROOT; };
 		9B4EA34E8F90B7CC77694B7E /* juce_DialogWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DialogWindow.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DialogWindow.h; sourceTree = SOURCE_ROOT; };
 		9B5D838CB6224E82C9B36AA3 /* juce_android_Misc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Misc.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_android_Misc.cpp; sourceTree = SOURCE_ROOT; };
-		9B9EDDFA0AE4991BC7FC7263 /* MessageCenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MessageCenter.h; path = ../../Source/UI/MessageCenter.h; sourceTree = SOURCE_ROOT; };
-		9BC055494F9FEE3F90630541 /* Channel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Channel.cpp; path = ../../Source/Processors/Channel.cpp; sourceTree = SOURCE_ROOT; };
 		9BE34B4DECBF4EBFD27C9792 /* juce_AudioIODeviceType.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioIODeviceType.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp; sourceTree = SOURCE_ROOT; };
 		9C21DBFB38865E5AFE367C6F /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
-		9C39C584DA6F507E773687EE /* ReferenceNodeEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ReferenceNodeEditor.cpp; path = ../../Source/Processors/Editors/ReferenceNodeEditor.cpp; sourceTree = SOURCE_ROOT; };
 		9C4342320D2DD65E2BD6351C /* juce_ToolbarButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToolbarButton.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp; sourceTree = SOURCE_ROOT; };
 		9C5F99C38CC703FBB871401A /* juce_ReverbAudioSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ReverbAudioSource.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp; sourceTree = SOURCE_ROOT; };
 		9C701D5A7298B83CE05ECEBB /* juce_TextEditorKeyMapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextEditorKeyMapper.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h; sourceTree = SOURCE_ROOT; };
+		9C736D7B85CCD9EC40C5D0AF /* PoleFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PoleFilter.cpp; path = ../../Source/Processors/Dsp/PoleFilter.cpp; sourceTree = SOURCE_ROOT; };
 		9C864C7DBAF37CD0719996A9 /* juce_FileBrowserListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileBrowserListener.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h; sourceTree = SOURCE_ROOT; };
 		9C96B0CBFF3D34885BB8B020 /* juce_FileDragAndDropTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileDragAndDropTarget.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h; sourceTree = SOURCE_ROOT; };
-		9CEDA04DB321755AF74D6FAF /* ChebyshevII.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ChebyshevII.h; path = ../../Source/Dsp/ChebyshevII.h; sourceTree = SOURCE_ROOT; };
 		9D050A509BEB9E3879DA35C6 /* ostrich.ttf */ = {isa = PBXFileReference; lastKnownFileType = file.ttf; name = ostrich.ttf; path = ../../Resources/Fonts/ostrich.ttf; sourceTree = SOURCE_ROOT; };
 		9D13E0F774807670270F4790 /* juce_Drawable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Drawable.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_Drawable.h; sourceTree = SOURCE_ROOT; };
 		9D2510B5E6180456C53A455E /* juce_ComboBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComboBox.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.cpp; sourceTree = SOURCE_ROOT; };
-		9D78F50147005EDB0E89E2B4 /* FPGAOutput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FPGAOutput.cpp; path = ../../Source/Processors/FPGAOutput.cpp; sourceTree = SOURCE_ROOT; };
 		9EAAE3C0BFF3D753C375A5FC /* juce_DrawableImage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableImage.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableImage.cpp; sourceTree = SOURCE_ROOT; };
+		9EB2B238943CCC32B587881C /* MessageCenterEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MessageCenterEditor.h; path = ../../Source/Processors/MessageCenter/MessageCenterEditor.h; sourceTree = SOURCE_ROOT; };
 		9EC1C0A21FDCB81BE0EA60EA /* juce_ApplicationBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationBase.h; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_ApplicationBase.h; sourceTree = SOURCE_ROOT; };
 		9F2853D1A12B686BE3BA2C61 /* juce_OpenGLImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLImage.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLImage.h; sourceTree = SOURCE_ROOT; };
 		9F2BCD132F453B9D9EF09F15 /* RadioButtons-01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons-01.png"; path = "../../Resources/Images/Icons/RadioButtons-01.png"; sourceTree = SOURCE_ROOT; };
@@ -878,22 +906,18 @@
 		9F845E950F19FEC4E6C88F91 /* juce_Typeface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Typeface.h; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Typeface.h; sourceTree = SOURCE_ROOT; };
 		9FC97A1CFD250F7215B4E397 /* juce_mac_AudioCDBurner.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_AudioCDBurner.mm; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm; sourceTree = SOURCE_ROOT; };
 		9FDCF1E2B4651E58240400B9 /* juce_TextEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextEditor.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.h; sourceTree = SOURCE_ROOT; };
-		9FFD9560522567A033226BD7 /* PhaseDetector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PhaseDetector.cpp; path = ../../Source/Processors/PhaseDetector.cpp; sourceTree = SOURCE_ROOT; };
 		A0D768F1B92568344DAC9F0B /* juce_win32_Fonts.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Fonts.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_Fonts.cpp; sourceTree = SOURCE_ROOT; };
-		A0E3B98412D88921BB0AA58E /* AudioEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioEditor.h; path = ../../Source/Processors/Editors/AudioEditor.h; sourceTree = SOURCE_ROOT; };
 		A15596CDCC27B86FC070D7FA /* juce_Desktop.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Desktop.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Desktop.cpp; sourceTree = SOURCE_ROOT; };
+		A166A3013C7AF1BCCA050367 /* EcubeThread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EcubeThread.h; path = ../../Source/Processors/DataThreads/EcubeThread.h; sourceTree = SOURCE_ROOT; };
 		A17E8162EC7A0E513DDEB23C /* juce_PluginDescription.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PluginDescription.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_PluginDescription.cpp; sourceTree = SOURCE_ROOT; };
+		A186E03EC7A6A7E657F38300 /* EcubeDialogComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EcubeDialogComponent.h; path = ../../Source/UI/EcubeDialogComponent.h; sourceTree = SOURCE_ROOT; };
 		A19C4BB4BD69D4351B344A17 /* juce_MenuBarComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MenuBarComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp; sourceTree = SOURCE_ROOT; };
-		A234B2D091071A1B710E884B /* ChannelMappingNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ChannelMappingNode.h; path = ../../Source/Processors/ChannelMappingNode.h; sourceTree = SOURCE_ROOT; };
-		A252FE4E6A360CBC4AF694B3 /* SpikeDetectorEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeDetectorEditor.cpp; path = ../../Source/Processors/Editors/SpikeDetectorEditor.cpp; sourceTree = SOURCE_ROOT; };
 		A32D4E65A434F4D3E7F5F553 /* juce_Initialisation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Initialisation.h; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_Initialisation.h; sourceTree = SOURCE_ROOT; };
 		A3B6D091280930A016DF8FDA /* juce_OpenGLContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLContext.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLContext.h; sourceTree = SOURCE_ROOT; };
 		A3CAB6B56641ED68D9784348 /* PipelineA-01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "PipelineA-01.png"; path = "../../Resources/Images/Buttons/PipelineA-01.png"; sourceTree = SOURCE_ROOT; };
 		A3FB0EA0264580F6B00D993B /* RHD2000Thread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RHD2000Thread.cpp; path = ../../Source/Processors/DataThreads/RHD2000Thread.cpp; sourceTree = SOURCE_ROOT; };
 		A41AEA0D3ACB2B1E6713AE08 /* juce_OpenGLGraphicsContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLGraphicsContext.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.h; sourceTree = SOURCE_ROOT; };
-		A41C5A4CD5CF8EEFF993A8B1 /* MathSupplement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MathSupplement.h; path = ../../Source/Dsp/MathSupplement.h; sourceTree = SOURCE_ROOT; };
 		A42CD7198BAEB3111295C18E /* juce_MouseInactivityDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseInactivityDetector.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h; sourceTree = SOURCE_ROOT; };
-		A4E2CAAF556D557B24182414 /* RecordNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RecordNode.cpp; path = ../../Source/Processors/RecordNode.cpp; sourceTree = SOURCE_ROOT; };
 		A4FC82A8339698B6C1AC5F18 /* juce_LookAndFeel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LookAndFeel.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h; sourceTree = SOURCE_ROOT; };
 		A512C5B237A77EF6FB8E11A0 /* BinaryData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = SOURCE_ROOT; };
 		A540869F28EE158A0A348C28 /* juce_ImageConvolutionKernel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageConvolutionKernel.h; path = ../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageConvolutionKernel.h; sourceTree = SOURCE_ROOT; };
@@ -907,24 +931,25 @@
 		A764EF4F46F472715B250E41 /* muteon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = muteon.png; path = ../../Resources/Images/Buttons/muteon.png; sourceTree = SOURCE_ROOT; };
 		A769611E9CBFC127AF5AFB0D /* juce_Time.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Time.cpp; path = ../../JuceLibraryCode/modules/juce_core/time/juce_Time.cpp; sourceTree = SOURCE_ROOT; };
 		A7875D5F8D2A632C99791002 /* juce_ComboBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComboBox.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.h; sourceTree = SOURCE_ROOT; };
-		A7D4C9E3ED3763847C087F46 /* SpikeDisplayCanvas.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeDisplayCanvas.cpp; path = ../../Source/Processors/Visualization/SpikeDisplayCanvas.cpp; sourceTree = SOURCE_ROOT; };
+		A7BF9312D81FF5DCEAB8AC47 /* SourceNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SourceNode.h; path = ../../Source/Processors/SourceNode/SourceNode.h; sourceTree = SOURCE_ROOT; };
 		A7FE538FF09AC8A58DE8F1BD /* RadioButtons_selected-02.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_selected-02.png"; path = "../../Resources/Images/Icons/RadioButtons_selected-02.png"; sourceTree = SOURCE_ROOT; };
 		A8B4D80D55E48F50809DC5E4 /* juce_ios_Windowing.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_ios_Windowing.mm; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_ios_Windowing.mm; sourceTree = SOURCE_ROOT; };
 		A8FCE8FB1D47A14A8C65C35E /* juce_AnimatedPosition.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AnimatedPosition.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPosition.h; sourceTree = SOURCE_ROOT; };
 		A93F302B8D91A997F54D231B /* juce_MarkerList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MarkerList.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_MarkerList.h; sourceTree = SOURCE_ROOT; };
 		A950BD747F318BF6D555CB06 /* juce_mac_Files.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Files.mm; path = ../../JuceLibraryCode/modules/juce_core/native/juce_mac_Files.mm; sourceTree = SOURCE_ROOT; };
-		A95D898F0998F4609E992B5F /* Elliptic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Elliptic.h; path = ../../Source/Dsp/Elliptic.h; sourceTree = SOURCE_ROOT; };
-		A98A22CF5F208ED6DBE08063 /* ResamplingNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ResamplingNode.cpp; path = ../../Source/Processors/ResamplingNode.cpp; sourceTree = SOURCE_ROOT; };
 		A9A0BC63EB466C75D1B9326A /* juce_MidiMessageCollector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MidiMessageCollector.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h; sourceTree = SOURCE_ROOT; };
 		A9F5A8F835A1A734DF7F6775 /* juce_ChoicePropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChoicePropertyComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
 		AA3209223925B66A97AB4509 /* juce_TooltipClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TooltipClient.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_TooltipClient.h; sourceTree = SOURCE_ROOT; };
 		AA3DAC9A4A3FF9E7D279FB23 /* RadioButtons_selected-03.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_selected-03.png"; path = "../../Resources/Images/Icons/RadioButtons_selected-03.png"; sourceTree = SOURCE_ROOT; };
 		AA7F6609B897B9E134377A62 /* cpmono_light.otf */ = {isa = PBXFileReference; lastKnownFileType = file.otf; name = cpmono_light.otf; path = ../../Resources/Fonts/cpmono_light.otf; sourceTree = SOURCE_ROOT; };
+		AAC6EC29963717E95428D7D2 /* SpikeDisplayCanvas.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeDisplayCanvas.cpp; path = ../../Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.cpp; sourceTree = SOURCE_ROOT; };
 		AADBA8C0AD524CE677428AFF /* juce_GlowEffect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GlowEffect.h; path = ../../JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.h; sourceTree = SOURCE_ROOT; };
+		AAF5C27D2EEDD254A3652717 /* Bessel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Bessel.h; path = ../../Source/Processors/Dsp/Bessel.h; sourceTree = SOURCE_ROOT; };
 		AB4C7059669AC385B02179C1 /* juce_FileLogger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileLogger.h; path = ../../JuceLibraryCode/modules/juce_core/logging/juce_FileLogger.h; sourceTree = SOURCE_ROOT; };
+		AB4D72F040FF59BED08826EC /* FPGAOutputEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FPGAOutputEditor.cpp; path = ../../Source/Processors/FPGAOutput/FPGAOutputEditor.cpp; sourceTree = SOURCE_ROOT; };
 		ABA3FCD5D762336535D56D94 /* juce_ScopedLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedLock.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_ScopedLock.h; sourceTree = SOURCE_ROOT; };
 		AC116E6590D49AB2EF19CB9E /* juce_OpenGLImage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OpenGLImage.cpp; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLImage.cpp; sourceTree = SOURCE_ROOT; };
-		AC2CFF4DA5CE431FCC628BA3 /* ChebyshevI.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ChebyshevI.cpp; path = ../../Source/Dsp/ChebyshevI.cpp; sourceTree = SOURCE_ROOT; };
+		AC9E30922A14330704FB2573 /* SpikeDisplayNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeDisplayNode.cpp; path = ../../Source/Processors/SpikeDisplayNode/SpikeDisplayNode.cpp; sourceTree = SOURCE_ROOT; };
 		ACA28D2B1FECD2C57F0250A6 /* juce_DirectoryContentsDisplayComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsDisplayComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h; sourceTree = SOURCE_ROOT; };
 		ACAE4A2D65AAC6A36DA9DBCF /* juce_OggVorbisAudioFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OggVorbisAudioFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp; sourceTree = SOURCE_ROOT; };
 		ACCACAE59079FDECF799BE8B /* juce_ConnectedChildProcess.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ConnectedChildProcess.cpp; path = ../../JuceLibraryCode/modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp; sourceTree = SOURCE_ROOT; };
@@ -933,28 +958,30 @@
 		AD7D35FCD8CF66B6C393A7F7 /* juce_FileBrowserComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileBrowserComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h; sourceTree = SOURCE_ROOT; };
 		AD960F561259904BA68DDA73 /* juce_MemoryMappedFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MemoryMappedFile.h; path = ../../JuceLibraryCode/modules/juce_core/files/juce_MemoryMappedFile.h; sourceTree = SOURCE_ROOT; };
 		ADCB42E4C5641007A4B78025 /* SpikeObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeObject.h; path = ../../Source/Processors/Visualization/SpikeObject.h; sourceTree = SOURCE_ROOT; };
+		ADCEA06868A5085B60487AC3 /* LfpTriggeredAverageEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LfpTriggeredAverageEditor.h; path = ../../Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageEditor.h; sourceTree = SOURCE_ROOT; };
 		AE1EA04666EAD34D0CA0373D /* juce_opengl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_opengl.h; path = ../../JuceLibraryCode/modules/juce_opengl/juce_opengl.h; sourceTree = SOURCE_ROOT; };
+		AE1FC768C646A0EFEC3E3A11 /* SpikeDisplayNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeDisplayNode.h; path = ../../Source/Processors/SpikeDisplayNode/SpikeDisplayNode.h; sourceTree = SOURCE_ROOT; };
 		AE6786E4659DAC92F52E9FA3 /* juce_Toolbar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Toolbar.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.h; sourceTree = SOURCE_ROOT; };
 		AE9359DBA841F88EF3DA9700 /* juce_FileSearchPath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPath.h; path = ../../JuceLibraryCode/modules/juce_core/files/juce_FileSearchPath.h; sourceTree = SOURCE_ROOT; };
 		AEC2DABFC0517B4BE0CD704C /* juce_mac_AudioCDReader.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_AudioCDReader.mm; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm; sourceTree = SOURCE_ROOT; };
 		AEF53FD0FBBFF5242EDD7032 /* juce_Viewport.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Viewport.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_Viewport.cpp; sourceTree = SOURCE_ROOT; };
+		AEFC8A0A9A35F50E59FDE678 /* MessageCenterEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MessageCenterEditor.cpp; path = ../../Source/Processors/MessageCenter/MessageCenterEditor.cpp; sourceTree = SOURCE_ROOT; };
 		AF1F3010721A6B29062E4838 /* juce_LowLevelGraphicsContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LowLevelGraphicsContext.h; path = ../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h; sourceTree = SOURCE_ROOT; };
+		AF28CAB9C7531EF7422602E1 /* EcubeDialogComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EcubeDialogComponent.cpp; path = ../../Source/UI/EcubeDialogComponent.cpp; sourceTree = SOURCE_ROOT; };
 		AF3E3AE70160C3392B237316 /* juce_mac_CoreAudio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_CoreAudio.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp; sourceTree = SOURCE_ROOT; };
 		AF7106E30ED950436CCEC712 /* juce_freetype_Fonts.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_freetype_Fonts.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_freetype_Fonts.cpp; sourceTree = SOURCE_ROOT; };
 		AF8ADA74003E96998A5E4404 /* juce_Typeface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Typeface.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Typeface.cpp; sourceTree = SOURCE_ROOT; };
 		AF8B1228A9FDFA27E5F19011 /* juce_StringRef.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StringRef.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_StringRef.h; sourceTree = SOURCE_ROOT; };
 		AFB684CE06F9256324EE0B4C /* juce_FillType.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FillType.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/colour/juce_FillType.cpp; sourceTree = SOURCE_ROOT; };
+		AFBAE04615D379A18B133090 /* EcubeThread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EcubeThread.cpp; path = ../../Source/Processors/DataThreads/EcubeThread.cpp; sourceTree = SOURCE_ROOT; };
 		AFE835E175F7159E1E7C6CC7 /* juce_CharacterFunctions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CharacterFunctions.cpp; path = ../../JuceLibraryCode/modules/juce_core/text/juce_CharacterFunctions.cpp; sourceTree = SOURCE_ROOT; };
 		B00A9C0BAD3AF9F48E36A38F /* juce_MouseListener.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseListener.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseListener.cpp; sourceTree = SOURCE_ROOT; };
 		B021D393D0E2625741512320 /* juce_RenderingHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RenderingHelpers.h; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h; sourceTree = SOURCE_ROOT; };
 		B0397AECD24A88F159C2BA9A /* juce_XMLCodeTokeniser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_XMLCodeTokeniser.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h; sourceTree = SOURCE_ROOT; };
 		B04D87ED6AA4897B6CD3CCF6 /* AudioComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioComponent.cpp; path = ../../Source/Audio/AudioComponent.cpp; sourceTree = SOURCE_ROOT; };
 		B081687E52C6A5157CFCCB17 /* cpmono-black-serialized */ = {isa = PBXFileReference; lastKnownFileType = file; name = "cpmono-black-serialized"; path = "../../Resources/Fonts/cpmono-black-serialized"; sourceTree = SOURCE_ROOT; };
-		B083B1375828610D55F12CF3 /* ChannelMappingEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ChannelMappingEditor.cpp; path = ../../Source/Processors/Editors/ChannelMappingEditor.cpp; sourceTree = SOURCE_ROOT; };
 		B0A076D9536B6754F34E4606 /* juce_win32_ASIO.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_ASIO.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_ASIO.cpp; sourceTree = SOURCE_ROOT; };
 		B0DCDCB162FDBF972FA5B548 /* juce_mac_MessageManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_MessageManager.mm; path = ../../JuceLibraryCode/modules/juce_events/native/juce_mac_MessageManager.mm; sourceTree = SOURCE_ROOT; };
-		B0E8FAD5AC445F612E3468B9 /* FilterNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FilterNode.cpp; path = ../../Source/Processors/FilterNode.cpp; sourceTree = SOURCE_ROOT; };
-		B1082A8A306A1947F5B0E5FC /* Splitter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Splitter.h; path = ../../Source/Processors/Utilities/Splitter.h; sourceTree = SOURCE_ROOT; };
 		B113BC1061788A9ECB1337C5 /* juce_OpenGLGraphicsContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OpenGLGraphicsContext.cpp; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp; sourceTree = SOURCE_ROOT; };
 		B11E5B5E4483AF89E6DCBAB3 /* juce_ImageButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageButton.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.cpp; sourceTree = SOURCE_ROOT; };
 		B123E2F4439DAD65196A2A9D /* juce_ProgressBar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ProgressBar.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ProgressBar.cpp; sourceTree = SOURCE_ROOT; };
@@ -966,29 +993,34 @@
 		B1ECBE9C48227CBDB16E3702 /* juce_ShapeButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ShapeButton.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ShapeButton.cpp; sourceTree = SOURCE_ROOT; };
 		B2017626F9A05C8C0EBE9B7E /* juce_MD5.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MD5.cpp; path = ../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_MD5.cpp; sourceTree = SOURCE_ROOT; };
 		B20469D88488F0809126CC80 /* juce_audio_processors.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_audio_processors.mm; path = ../../JuceLibraryCode/modules/juce_audio_processors/juce_audio_processors.mm; sourceTree = SOURCE_ROOT; };
+		B207877BD3DC2A555E51ADD8 /* State.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = State.h; path = ../../Source/Processors/Dsp/State.h; sourceTree = SOURCE_ROOT; };
 		B2241E3C5C9F93389586F357 /* juce_DirectoryIterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryIterator.h; path = ../../JuceLibraryCode/modules/juce_core/files/juce_DirectoryIterator.h; sourceTree = SOURCE_ROOT; };
 		B23E6EBB5F99CF7FC72FAC4E /* VisualizerEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = VisualizerEditor.h; path = ../../Source/Processors/Editors/VisualizerEditor.h; sourceTree = SOURCE_ROOT; };
 		B24098EC4FD79D5EDC9383EC /* juce_Initialisation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Initialisation.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/application/juce_Initialisation.h; sourceTree = SOURCE_ROOT; };
-		B27F558F42AC78F0E564B5AF /* AudioNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioNode.cpp; path = ../../Source/Processors/AudioNode.cpp; sourceTree = SOURCE_ROOT; };
+		B25949076F9BB831C5862415 /* WiFiOutput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = WiFiOutput.cpp; path = ../../Source/Processors/WiFiOutput/WiFiOutput.cpp; sourceTree = SOURCE_ROOT; };
 		B2EF409A1F459E964756BA7C /* juce_FileInputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileInputStream.cpp; path = ../../JuceLibraryCode/modules/juce_core/files/juce_FileInputStream.cpp; sourceTree = SOURCE_ROOT; };
+		B2F72769CF14BD7F882E9542 /* LfpDisplayNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LfpDisplayNode.h; path = ../../Source/Processors/LfpDisplayNode/LfpDisplayNode.h; sourceTree = SOURCE_ROOT; };
 		B2FA9CC4754E136F22281176 /* juce_ImageEffectFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageEffectFilter.h; path = ../../JuceLibraryCode/modules/juce_graphics/effects/juce_ImageEffectFilter.h; sourceTree = SOURCE_ROOT; };
 		B3BAC48D01C49D8727D08097 /* juce_ListBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ListBox.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.cpp; sourceTree = SOURCE_ROOT; };
+		B410FE6CF1A561A1648343D6 /* ArduinoOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ArduinoOutput.h; path = ../../Source/Processors/ArduinoOutput/ArduinoOutput.h; sourceTree = SOURCE_ROOT; };
 		B43C27BEC3AB681389FC5FC5 /* juce_RelativeCoordinate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativeCoordinate.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h; sourceTree = SOURCE_ROOT; };
-		B47B3368AA1A182B0CA1AB26 /* Butterworth.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Butterworth.cpp; path = ../../Source/Dsp/Butterworth.cpp; sourceTree = SOURCE_ROOT; };
 		B4C52FC94D6C680C33ED85C9 /* juce_File.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_File.cpp; path = ../../JuceLibraryCode/modules/juce_core/files/juce_File.cpp; sourceTree = SOURCE_ROOT; };
 		B4F0C0B262654C4782B5AC49 /* juce_FileChooserDialogBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileChooserDialogBox.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h; sourceTree = SOURCE_ROOT; };
+		B574136FEE7957F7439CB346 /* ResamplingNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ResamplingNode.h; path = ../../Source/Processors/ResamplingNode/ResamplingNode.h; sourceTree = SOURCE_ROOT; };
 		B5ADA0C1BDBFAE2A2F8ECB48 /* juce_EdgeTable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_EdgeTable.h; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_EdgeTable.h; sourceTree = SOURCE_ROOT; };
 		B5B417E4196236A2CDE7F0CF /* juce_AudioFormatManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioFormatManager.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatManager.cpp; sourceTree = SOURCE_ROOT; };
+		B5D805B691B1C38D959F6B54 /* SourceNodeEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SourceNodeEditor.h; path = ../../Source/Processors/SourceNode/SourceNodeEditor.h; sourceTree = SOURCE_ROOT; };
 		B5E8A19FF91BEAD02C63E05B /* juce_LowLevelGraphicsPostScriptRenderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LowLevelGraphicsPostScriptRenderer.h; path = ../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h; sourceTree = SOURCE_ROOT; };
 		B5FBD4DBD2CFE0FFF457D7F6 /* juce_ReferenceCountedArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ReferenceCountedArray.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_ReferenceCountedArray.h; sourceTree = SOURCE_ROOT; };
 		B60D02B5BF564ABC88841B1F /* juce_TableHeaderComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TableHeaderComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h; sourceTree = SOURCE_ROOT; };
 		B64193A23B69D4A88CDEDD0C /* juce_MidiOutput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiOutput.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp; sourceTree = SOURCE_ROOT; };
 		B64893F699A10B03AA4AFF6B /* juce_CharPointer_ASCII.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharPointer_ASCII.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_ASCII.h; sourceTree = SOURCE_ROOT; };
 		B6567CAE2B538E79E7DA814C /* juce_ThreadWithProgressWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ThreadWithProgressWindow.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp; sourceTree = SOURCE_ROOT; };
+		B657AEAFB3404A5CB270C413 /* RecordNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RecordNode.h; path = ../../Source/Processors/RecordNode/RecordNode.h; sourceTree = SOURCE_ROOT; };
+		B66B8CFF619CBF2D66F031E3 /* SpikeSorterCanvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeSorterCanvas.h; path = ../../Source/Processors/SpikeSorter/SpikeSorterCanvas.h; sourceTree = SOURCE_ROOT; };
 		B674DCA2C2A6AF6B58AA7820 /* juce_ComponentAnimator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentAnimator.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp; sourceTree = SOURCE_ROOT; };
 		B678CFC6B378A58834D2E41F /* juce_LowLevelGraphicsPostScriptRenderer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LowLevelGraphicsPostScriptRenderer.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp; sourceTree = SOURCE_ROOT; };
-		B70D836E0756C3D4EE8E20F2 /* SpikeDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeDetector.h; path = ../../Source/Processors/SpikeDetector.h; sourceTree = SOURCE_ROOT; };
-		B767A249792EB15A87054409 /* ChebyshevII.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ChebyshevII.cpp; path = ../../Source/Dsp/ChebyshevII.cpp; sourceTree = SOURCE_ROOT; };
+		B695B24906116ADEFC9D9B5C /* ProcessorGraph.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ProcessorGraph.h; path = ../../Source/Processors/ProcessorGraph/ProcessorGraph.h; sourceTree = SOURCE_ROOT; };
 		B7BEB7779860FE877E4D1BC8 /* juce_TextDiff.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextDiff.cpp; path = ../../JuceLibraryCode/modules/juce_core/text/juce_TextDiff.cpp; sourceTree = SOURCE_ROOT; };
 		B7D848E4F85AE11FDE4D164D /* juce_linux_AudioCDReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_AudioCDReader.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp; sourceTree = SOURCE_ROOT; };
 		B83EBFAE6306941F79044523 /* juce_DirectoryContentsDisplayComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryContentsDisplayComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp; sourceTree = SOURCE_ROOT; };
@@ -996,36 +1028,38 @@
 		B87C1BD13762817BE27DC2F7 /* juce_FillType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FillType.h; path = ../../JuceLibraryCode/modules/juce_graphics/colour/juce_FillType.h; sourceTree = SOURCE_ROOT; };
 		B8A9063181FEE1920095F824 /* juce_ChangeBroadcaster.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ChangeBroadcaster.h; path = ../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeBroadcaster.h; sourceTree = SOURCE_ROOT; };
 		B8D19858CC01BB5F7C35ED58 /* juce_XmlDocument.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_XmlDocument.cpp; path = ../../JuceLibraryCode/modules/juce_core/xml/juce_XmlDocument.cpp; sourceTree = SOURCE_ROOT; };
-		B917780A75945062761B6945 /* WiFiOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WiFiOutput.h; path = ../../Source/Processors/WiFiOutput.h; sourceTree = SOURCE_ROOT; };
+		B9068FF0373FA8321C33C42C /* Splitter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Splitter.cpp; path = ../../Source/Processors/Splitter/Splitter.cpp; sourceTree = SOURCE_ROOT; };
 		B93B8666F8AF2E5D2E851B1C /* juce_VSTPluginFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_VSTPluginFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp; sourceTree = SOURCE_ROOT; };
 		B9E2607F1605D308CB331FCC /* juce_StringPairArray.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StringPairArray.cpp; path = ../../JuceLibraryCode/modules/juce_core/text/juce_StringPairArray.cpp; sourceTree = SOURCE_ROOT; };
 		BA03776682290FF1AF4C0106 /* juce_PluginDescription.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PluginDescription.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_PluginDescription.h; sourceTree = SOURCE_ROOT; };
 		BA09F5CDB1C01E0FC153DB8E /* juce_NativeMessageBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NativeMessageBox.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_NativeMessageBox.h; sourceTree = SOURCE_ROOT; };
-		BA2923571505AD47CA1EF878 /* WiFiOutputEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WiFiOutputEditor.h; path = ../../Source/Processors/Editors/WiFiOutputEditor.h; sourceTree = SOURCE_ROOT; };
+		BA3C61B41A55C23959AA57A3 /* Filter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Filter.h; path = ../../Source/Processors/Dsp/Filter.h; sourceTree = SOURCE_ROOT; };
 		BA422CC894B825834A0C5479 /* GraphViewer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GraphViewer.h; path = ../../Source/UI/GraphViewer.h; sourceTree = SOURCE_ROOT; };
+		BAA5B3AD1A27F8C4D37A6869 /* MergerEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MergerEditor.cpp; path = ../../Source/Processors/Merger/MergerEditor.cpp; sourceTree = SOURCE_ROOT; };
 		BABBEE3876B90C8A57C3074D /* juce_ComponentAnimator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentAnimator.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.h; sourceTree = SOURCE_ROOT; };
 		BAE93A5EEC37D7B4C793BFA2 /* juce_QuickTimeAudioFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_QuickTimeAudioFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp; sourceTree = SOURCE_ROOT; };
 		BB0BB31575E1377F0C560D53 /* juce_RelativeCoordinate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeCoordinate.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp; sourceTree = SOURCE_ROOT; };
 		BB26BA9CFAE8C836251E8EAF /* MainWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainWindow.h; path = ../../Source/MainWindow.h; sourceTree = SOURCE_ROOT; };
 		BBC386B5A369262583AD4DDA /* juce_QuickTimeAudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_QuickTimeAudioFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.h; sourceTree = SOURCE_ROOT; };
-		BBCDE855BD0A58D3779D96A8 /* RHD2000Editor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RHD2000Editor.h; path = ../../Source/Processors/Editors/RHD2000Editor.h; sourceTree = SOURCE_ROOT; };
-		BBD9C2AED6F500D090069007 /* ReferenceNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ReferenceNode.cpp; path = ../../Source/Processors/ReferenceNode.cpp; sourceTree = SOURCE_ROOT; };
 		BBDFB328C3D5FC72A0446E6A /* juce_graphics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_graphics.mm; path = ../../JuceLibraryCode/modules/juce_graphics/juce_graphics.mm; sourceTree = SOURCE_ROOT; };
 		BBE1DB78E35135B41537DCB5 /* RecentFilesMenuTemplate.nib */ = {isa = PBXFileReference; lastKnownFileType = file.nib; path = RecentFilesMenuTemplate.nib; sourceTree = SOURCE_ROOT; };
 		BBF5345C0570D87C01A73FF9 /* noise_wave.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = noise_wave.png; path = ../../Resources/Images/Icons/noise_wave.png; sourceTree = SOURCE_ROOT; };
 		BC06C1E8052799F4696101C3 /* juce_mac_SystemStats.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_SystemStats.mm; path = ../../JuceLibraryCode/modules/juce_core/native/juce_mac_SystemStats.mm; sourceTree = SOURCE_ROOT; };
-		BC3B7E4E25505D9044BFACC7 /* SpikeDetector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeDetector.cpp; path = ../../Source/Processors/SpikeDetector.cpp; sourceTree = SOURCE_ROOT; };
+		BC1543B1F822FEEDCB9AC26D /* MessageCenter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MessageCenter.cpp; path = ../../Source/Processors/MessageCenter/MessageCenter.cpp; sourceTree = SOURCE_ROOT; };
 		BC953E395B22FB1D305E483E /* juce_MACAddress.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MACAddress.h; path = ../../JuceLibraryCode/modules/juce_core/network/juce_MACAddress.h; sourceTree = SOURCE_ROOT; };
+		BCB5B6CEF112FC911B90E6E2 /* Design.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Design.cpp; path = ../../Source/Processors/Dsp/Design.cpp; sourceTree = SOURCE_ROOT; };
 		BCB6A6D5A0C1417D74C29632 /* juce_win32_Files.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Files.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_win32_Files.cpp; sourceTree = SOURCE_ROOT; };
 		BCBBF8764A2101CD0E91DB5D /* juce_DropShadower.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DropShadower.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_DropShadower.h; sourceTree = SOURCE_ROOT; };
 		BD1D02C70CCE095217581A5F /* juce_ios_MessageManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_ios_MessageManager.mm; path = ../../JuceLibraryCode/modules/juce_events/native/juce_ios_MessageManager.mm; sourceTree = SOURCE_ROOT; };
 		BD59A961F87AB628777894DC /* juce_AudioThumbnailCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioThumbnailCache.cpp; path = ../../JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp; sourceTree = SOURCE_ROOT; };
+		BD6FDA7B037CF3535431BFC8 /* SmoothedFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SmoothedFilter.h; path = ../../Source/Processors/Dsp/SmoothedFilter.h; sourceTree = SOURCE_ROOT; };
 		BDFF189EC742274DD2629196 /* juce_RectangleList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RectangleList.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_RectangleList.cpp; sourceTree = SOURCE_ROOT; };
 		BE506F381B90833512348968 /* juce_FloatVectorOperations.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FloatVectorOperations.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp; sourceTree = SOURCE_ROOT; };
 		BEC4B69320BE492526794DFB /* wifi.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = wifi.png; path = ../../Resources/Images/Icons/wifi.png; sourceTree = SOURCE_ROOT; };
 		BF56AD021ABB8D8B64982FDB /* juce_ContainerDeletePolicy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ContainerDeletePolicy.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_ContainerDeletePolicy.h; sourceTree = SOURCE_ROOT; };
 		BF647E1FAE73208AC29C14F7 /* juce_Sampler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Sampler.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/sampler/juce_Sampler.cpp; sourceTree = SOURCE_ROOT; };
 		BF8B07C8BC86002C3DC94DEE /* juce_MemoryOutputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MemoryOutputStream.h; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryOutputStream.h; sourceTree = SOURCE_ROOT; };
+		BF8C15407347975836BFA88F /* FileReaderEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FileReaderEditor.h; path = ../../Source/Processors/FileReader/FileReaderEditor.h; sourceTree = SOURCE_ROOT; };
 		BF9B6B0B73FF87595307D858 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_gui_basics/juce_module_info; sourceTree = SOURCE_ROOT; };
 		BFF368651E3CEE5A900391A6 /* square_wave.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = square_wave.png; path = ../../Resources/Images/Icons/square_wave.png; sourceTree = SOURCE_ROOT; };
 		C055D09224D84121A3EBB29F /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
@@ -1035,30 +1069,28 @@
 		C0C6335FEE0844872FDF4EE2 /* juce_Memory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Memory.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_Memory.h; sourceTree = SOURCE_ROOT; };
 		C10DC7C6E887B4EAAB8EDF38 /* juce_ChoicePropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ChoicePropertyComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h; sourceTree = SOURCE_ROOT; };
 		C1435AB0105CDC29A3124E4F /* juce_CustomTypeface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CustomTypeface.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_CustomTypeface.cpp; sourceTree = SOURCE_ROOT; };
+		C15024C101ECE85FDDCD770D /* AudioEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioEditor.h; path = ../../Source/Processors/AudioNode/AudioEditor.h; sourceTree = SOURCE_ROOT; };
 		C16065CD5A8054262B81C1A3 /* juce_cryptography.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_cryptography.h; path = ../../JuceLibraryCode/modules/juce_cryptography/juce_cryptography.h; sourceTree = SOURCE_ROOT; };
 		C17E85281A455245543930E5 /* juce_mac_NSViewComponentPeer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_NSViewComponentPeer.mm; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm; sourceTree = SOURCE_ROOT; };
 		C195559D311BAB51CFB545BA /* juce_MultiDocumentPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MultiDocumentPanel.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp; sourceTree = SOURCE_ROOT; };
-		C1CB526B75E406851FA918C6 /* State.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = State.cpp; path = ../../Source/Dsp/State.cpp; sourceTree = SOURCE_ROOT; };
+		C1B540E49C0EBA03ACDBBDFB /* RBJ.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RBJ.h; path = ../../Source/Processors/Dsp/RBJ.h; sourceTree = SOURCE_ROOT; };
 		C1E1CCE5796B40E0A45FB021 /* juce_AudioThumbnail.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioThumbnail.h; path = ../../JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnail.h; sourceTree = SOURCE_ROOT; };
 		C209C7633D01E525231EE894 /* juce_GlyphArrangement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GlyphArrangement.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_GlyphArrangement.cpp; sourceTree = SOURCE_ROOT; };
 		C2746A86EC16D3EA9FAC2C1D /* juce_XmlElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_XmlElement.cpp; path = ../../JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.cpp; sourceTree = SOURCE_ROOT; };
-		C29BC68B2721471F32906FEB /* ResamplingNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ResamplingNode.h; path = ../../Source/Processors/ResamplingNode.h; sourceTree = SOURCE_ROOT; };
 		C29E664781AA2396C8D59543 /* juce_events.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_events.mm; path = ../../JuceLibraryCode/modules/juce_events/juce_events.mm; sourceTree = SOURCE_ROOT; };
+		C2CB484954A536E782B4A8E7 /* SpikeDisplayCanvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeDisplayCanvas.h; path = ../../Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.h; sourceTree = SOURCE_ROOT; };
 		C2D1409D20E154E43569C725 /* juce_ImagePreviewComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImagePreviewComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp; sourceTree = SOURCE_ROOT; };
 		C2F9D279FCC5C4AD56A0C1DF /* juce_Decibels.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Decibels.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/effects/juce_Decibels.h; sourceTree = SOURCE_ROOT; };
-		C39772F796D85E8FE98474D5 /* Filter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Filter.h; path = ../../Source/Dsp/Filter.h; sourceTree = SOURCE_ROOT; };
-		C3BD84D9B090F98DD09F5958 /* Params.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Params.h; path = ../../Source/Dsp/Params.h; sourceTree = SOURCE_ROOT; };
 		C41504F388D0B181B003B627 /* juce_RelativePoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativePoint.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePoint.h; sourceTree = SOURCE_ROOT; };
 		C43608FF5E25460A8346CF43 /* juce_Javascript.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Javascript.cpp; path = ../../JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.cpp; sourceTree = SOURCE_ROOT; };
 		C446923C1950EB5BE5E67F15 /* juce_TargetPlatform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TargetPlatform.h; path = ../../JuceLibraryCode/modules/juce_core/system/juce_TargetPlatform.h; sourceTree = SOURCE_ROOT; };
 		C454DFC77F19AB044372610E /* juce_MarkerList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MarkerList.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_MarkerList.cpp; sourceTree = SOURCE_ROOT; };
-		C4B0DF8094C90543A65E03E3 /* Legendre.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Legendre.cpp; path = ../../Source/Dsp/Legendre.cpp; sourceTree = SOURCE_ROOT; };
 		C51CD15B311D0AAC08D0B908 /* ImageIcon.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ImageIcon.h; path = ../../Source/Processors/Editors/ImageIcon.h; sourceTree = SOURCE_ROOT; };
 		C5287F057A6A88BC33D5498A /* juce_DrawableComposite.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableComposite.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp; sourceTree = SOURCE_ROOT; };
 		C54760E4888674CF3CF022E6 /* juce_AudioProcessor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioProcessor.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessor.h; sourceTree = SOURCE_ROOT; };
-		C5785E58E6F915165729EF16 /* RecordControl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RecordControl.h; path = ../../Source/Processors/Utilities/RecordControl.h; sourceTree = SOURCE_ROOT; };
+		C5654EAA7B65445CF1340983 /* GenericProcessor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GenericProcessor.cpp; path = ../../Source/Processors/GenericProcessor/GenericProcessor.cpp; sourceTree = SOURCE_ROOT; };
 		C59B01C8DB5B3B4773032E12 /* CustomArrowButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CustomArrowButton.h; path = ../../Source/UI/CustomArrowButton.h; sourceTree = SOURCE_ROOT; };
-		C5ABE6BDCA91410BA92A7BD9 /* ResamplingNodeEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ResamplingNodeEditor.cpp; path = ../../Source/Processors/Editors/ResamplingNodeEditor.cpp; sourceTree = SOURCE_ROOT; };
+		C5C843AC83A36BE87E3F97F8 /* EventDetector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EventDetector.cpp; path = ../../Source/Processors/EventDetector/EventDetector.cpp; sourceTree = SOURCE_ROOT; };
 		C5D0E0996D20BEEEDBFD64FA /* juce_ValueTree.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ValueTree.h; path = ../../JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTree.h; sourceTree = SOURCE_ROOT; };
 		C5D9C53AE4AE414244E1E19A /* muteoff.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = muteoff.png; path = ../../Resources/Images/Buttons/muteoff.png; sourceTree = SOURCE_ROOT; };
 		C5F9A0F8EB81AC15D9BDD61F /* juce_OpenGLFrameBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLFrameBuffer.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.h; sourceTree = SOURCE_ROOT; };
@@ -1069,33 +1101,35 @@
 		C6BDC4DAD5B40321DA67462A /* juce_ApplicationCommandTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandTarget.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h; sourceTree = SOURCE_ROOT; };
 		C6E19D3864B40A52BCC49315 /* juce_ModifierKeys.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ModifierKeys.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_ModifierKeys.h; sourceTree = SOURCE_ROOT; };
 		C74399C81B1A0552CC52093E /* juce_GenericAudioProcessorEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GenericAudioProcessorEditor.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h; sourceTree = SOURCE_ROOT; };
-		C79249376E3FDF10615E16EA /* WiFiOutputEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = WiFiOutputEditor.cpp; path = ../../Source/Processors/Editors/WiFiOutputEditor.cpp; sourceTree = SOURCE_ROOT; };
 		C7A68BAFB04A7D5FD81FA82B /* juce_PropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PropertyComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.h; sourceTree = SOURCE_ROOT; };
 		C7A76C0D1B3DC4A1F059E59B /* juce_Label.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Label.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.h; sourceTree = SOURCE_ROOT; };
 		C7B93385C1A520EC76C62DEE /* juce_LookAndFeel_V2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LookAndFeel_V2.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h; sourceTree = SOURCE_ROOT; };
 		C7CA628FE3E1E3D16B24E059 /* juce_android_Threads.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Threads.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_android_Threads.cpp; sourceTree = SOURCE_ROOT; };
+		C7D36423459E79F3F462A421 /* EcubeEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EcubeEditor.h; path = ../../Source/Processors/DataThreads/EcubeEditor.h; sourceTree = SOURCE_ROOT; };
 		C844D1792A91BE2D8808CB14 /* juce_MessageManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MessageManager.h; path = ../../JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.h; sourceTree = SOURCE_ROOT; };
 		C868329EBC1BBA606AB2EB88 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
 		C916444FD4BFB79D4DE9FCAF /* juce_AttributedString.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AttributedString.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_AttributedString.cpp; sourceTree = SOURCE_ROOT; };
 		C98D4FF283E598244E89CD83 /* juce_TextDiff.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextDiff.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_TextDiff.h; sourceTree = SOURCE_ROOT; };
 		CA09B0483969444C7CD106DC /* juce_mac_Fonts.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Fonts.mm; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_Fonts.mm; sourceTree = SOURCE_ROOT; };
+		CA50A6F43BD78D01A8BE974B /* Merger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Merger.h; path = ../../Source/Processors/Merger/Merger.h; sourceTree = SOURCE_ROOT; };
 		CAA3B9396EA62166234DAEF1 /* VisualizerEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = VisualizerEditor.cpp; path = ../../Source/Processors/Editors/VisualizerEditor.cpp; sourceTree = SOURCE_ROOT; };
 		CB2C4FD47184B2FE84408CAD /* RadioButtons_neutral-03.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_neutral-03.png"; path = "../../Resources/Images/Icons/RadioButtons_neutral-03.png"; sourceTree = SOURCE_ROOT; };
+		CB5C14E82DE06F767EAD62F9 /* Biquad.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Biquad.cpp; path = ../../Source/Processors/Dsp/Biquad.cpp; sourceTree = SOURCE_ROOT; };
 		CC35C78D5B446ABF57DDDAE0 /* juce_ImageFileFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageFileFormat.h; path = ../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageFileFormat.h; sourceTree = SOURCE_ROOT; };
 		CC42C4D4230BE4F1071CB2D3 /* juce_ResizableEdgeComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ResizableEdgeComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h; sourceTree = SOURCE_ROOT; };
 		CC62E20B1189C697DD238810 /* juce_OpenGL_linux.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGL_linux.h; path = ../../JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_linux.h; sourceTree = SOURCE_ROOT; };
-		CCC20313AD0D0993F9EDD1B3 /* SplitterEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SplitterEditor.h; path = ../../Source/Processors/Editors/SplitterEditor.h; sourceTree = SOURCE_ROOT; };
-		CD2370F8F4A44446558A08FB /* Parameter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Parameter.cpp; path = ../../Source/Processors/Parameter.cpp; sourceTree = SOURCE_ROOT; };
+		CC9134D38EBEC67112CA7502 /* LfpTriggeredAverageCanvas.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LfpTriggeredAverageCanvas.cpp; path = ../../Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.cpp; sourceTree = SOURCE_ROOT; };
 		CD2E26CFD0DC7F6090E15A20 /* juce_Line.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Line.h; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Line.h; sourceTree = SOURCE_ROOT; };
 		CD41C1D09F6D73FA33993F45 /* juce_Desktop.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Desktop.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Desktop.h; sourceTree = SOURCE_ROOT; };
 		CD492AC7B458FA6C321B9D0B /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_core/juce_module_info; sourceTree = SOURCE_ROOT; };
+		CD657DBBDB4550C800F05D22 /* LfpDisplayCanvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LfpDisplayCanvas.h; path = ../../Source/Processors/LfpDisplayNode/LfpDisplayCanvas.h; sourceTree = SOURCE_ROOT; };
 		CD7E06ED47B243518F42DA49 /* MergerA-02.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "MergerA-02.png"; path = "../../Resources/Images/Buttons/MergerA-02.png"; sourceTree = SOURCE_ROOT; };
 		CD83E301AE42E6E3317D575D /* juce_TableHeaderComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TableHeaderComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp; sourceTree = SOURCE_ROOT; };
 		CDC18ABAFEF000C720CE8622 /* juce_CallOutBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CallOutBox.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.cpp; sourceTree = SOURCE_ROOT; };
 		CE2BD40797A6E7647FDBE736 /* juce_ColourSelector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourSelector.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.cpp; sourceTree = SOURCE_ROOT; };
 		CF5BC8DB7D66C655DABA9129 /* juce_android_FileChooser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_FileChooser.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/native/juce_android_FileChooser.cpp; sourceTree = SOURCE_ROOT; };
 		CF758CB1E06DDA1AB7F5C9CC /* juce_events.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_events.h; path = ../../JuceLibraryCode/modules/juce_events/juce_events.h; sourceTree = SOURCE_ROOT; };
-		CFB86C1F2A6076ADC36692AA /* Utilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Utilities.h; path = ../../Source/Dsp/Utilities.h; sourceTree = SOURCE_ROOT; };
+		D0105584D551FED59203CC84 /* ChannelMappingEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ChannelMappingEditor.cpp; path = ../../Source/Processors/ChannelMappingNode/ChannelMappingEditor.cpp; sourceTree = SOURCE_ROOT; };
 		D01254FA41688494C3CB0889 /* silkscreen.ttf */ = {isa = PBXFileReference; lastKnownFileType = file.ttf; name = silkscreen.ttf; path = ../../Resources/Fonts/silkscreen.ttf; sourceTree = SOURCE_ROOT; };
 		D0247929128D618A2EB01D86 /* juce_OpenGLHelpers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OpenGLHelpers.cpp; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp; sourceTree = SOURCE_ROOT; };
 		D056D7F6C8EA8A6BBCC5C092 /* juce_InputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_InputStream.h; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_InputStream.h; sourceTree = SOURCE_ROOT; };
@@ -1103,10 +1137,11 @@
 		D070104F290813822697267B /* juce_LookAndFeel_V3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LookAndFeel_V3.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h; sourceTree = SOURCE_ROOT; };
 		D0D7CE266BD7CC5455926700 /* juce_AudioSourcePlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioSourcePlayer.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h; sourceTree = SOURCE_ROOT; };
 		D0E568AD5445AF061317E01D /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_audio_formats/juce_module_info; sourceTree = SOURCE_ROOT; };
+		D0F10367EBD3945780342A37 /* SpikeDetectorEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeDetectorEditor.cpp; path = ../../Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp; sourceTree = SOURCE_ROOT; };
 		D11BC618E53E6605B3A579E1 /* juce_MemoryBlock.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryBlock.cpp; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_MemoryBlock.cpp; sourceTree = SOURCE_ROOT; };
-		D128F31F18331117287F5EC5 /* ArduinoOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ArduinoOutput.h; path = ../../Source/Processors/ArduinoOutput.h; sourceTree = SOURCE_ROOT; };
 		D162391A46FF93093C328F9D /* juce_GZIPCompressorOutputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GZIPCompressorOutputStream.cpp; path = ../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp; sourceTree = SOURCE_ROOT; };
 		D171071934C8F7F925B0D113 /* juce_TableListBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TableListBox.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableListBox.cpp; sourceTree = SOURCE_ROOT; };
+		D1C27DAA2DDCEF188DDC8C5E /* Cascade.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Cascade.h; path = ../../Source/Processors/Dsp/Cascade.h; sourceTree = SOURCE_ROOT; };
 		D1D8F82F848413581B274A5D /* juce_win32_CameraDevice.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_CameraDevice.cpp; path = ../../JuceLibraryCode/modules/juce_video/native/juce_win32_CameraDevice.cpp; sourceTree = SOURCE_ROOT; };
 		D1F9878B45ABC403F3749567 /* juce_FileBasedDocument.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBasedDocument.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp; sourceTree = SOURCE_ROOT; };
 		D22D3958949713747DAF59A3 /* juce_linux_SystemStats.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_SystemStats.cpp; path = ../../JuceLibraryCode/modules/juce_core/native/juce_linux_SystemStats.cpp; sourceTree = SOURCE_ROOT; };
@@ -1116,16 +1151,18 @@
 		D30880F1F9F514CEEDB9F48B /* AppConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = SOURCE_ROOT; };
 		D357A886F6365DA33D639FF5 /* juce_mac_NSViewComponent.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_NSViewComponent.mm; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm; sourceTree = SOURCE_ROOT; };
 		D37099D2DE57F63ACF1AB4E1 /* juce_LookAndFeel_V1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LookAndFeel_V1.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h; sourceTree = SOURCE_ROOT; };
-		D38E60AC4854B6E1EDE488EB /* ArduinoOutput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ArduinoOutput.cpp; path = ../../Source/Processors/ArduinoOutput.cpp; sourceTree = SOURCE_ROOT; };
 		D3AE8303545E28D793312F46 /* GenericEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GenericEditor.cpp; path = ../../Source/Processors/Editors/GenericEditor.cpp; sourceTree = SOURCE_ROOT; };
 		D41ED9ADBE3B27E185B2E3F3 /* RadioButtons_neutral-05.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_neutral-05.png"; path = "../../Resources/Images/Icons/RadioButtons_neutral-05.png"; sourceTree = SOURCE_ROOT; };
+		D45EF9812FBC284BCB7EEB7C /* SpikeSorter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeSorter.cpp; path = ../../Source/Processors/SpikeSorter/SpikeSorter.cpp; sourceTree = SOURCE_ROOT; };
 		D48EB74E1B5AAC7846196B01 /* juce_linux_Fonts.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Fonts.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_linux_Fonts.cpp; sourceTree = SOURCE_ROOT; };
 		D4B0BD47094D79AB6382228B /* juce_OpenGLTexture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLTexture.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLTexture.h; sourceTree = SOURCE_ROOT; };
 		D4F94F0232F0CD426DFC44C5 /* juce_PreferencesPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PreferencesPanel.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_PreferencesPanel.h; sourceTree = SOURCE_ROOT; };
-		D51315B4241B019BE43EE4F1 /* SplitterEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SplitterEditor.cpp; path = ../../Source/Processors/Editors/SplitterEditor.cpp; sourceTree = SOURCE_ROOT; };
+		D50EA137CEA9654AA8AB3D4C /* SignalGenerator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SignalGenerator.h; path = ../../Source/Processors/SignalGenerator/SignalGenerator.h; sourceTree = SOURCE_ROOT; };
 		D51575B9AA7216CCE4B558E4 /* juce_TopLevelWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TopLevelWindow.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TopLevelWindow.h; sourceTree = SOURCE_ROOT; };
 		D55137DE3404D7DF2A1F50D0 /* juce_GIFLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GIFLoader.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/image_formats/juce_GIFLoader.cpp; sourceTree = SOURCE_ROOT; };
 		D5D6DAA3CFDD395096D2B072 /* juce_ReferenceCountedObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ReferenceCountedObject.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_ReferenceCountedObject.h; sourceTree = SOURCE_ROOT; };
+		D5DC73F860143308ADF769C1 /* FileReader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FileReader.h; path = ../../Source/Processors/FileReader/FileReader.h; sourceTree = SOURCE_ROOT; };
+		D60B35D4E32DAE001056D4D5 /* ChebyshevI.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ChebyshevI.cpp; path = ../../Source/Processors/Dsp/ChebyshevI.cpp; sourceTree = SOURCE_ROOT; };
 		D60F42AEB8551E83215691C3 /* juce_ZipFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ZipFile.h; path = ../../JuceLibraryCode/modules/juce_core/zip/juce_ZipFile.h; sourceTree = SOURCE_ROOT; };
 		D679982E05B9510FE239D690 /* juce_OutputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OutputStream.cpp; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_OutputStream.cpp; sourceTree = SOURCE_ROOT; };
 		D685CFEA6344360FBFC355B6 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; };
@@ -1137,27 +1174,26 @@
 		D8A40F2BFBEC65019C867786 /* juce_Time.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Time.h; path = ../../JuceLibraryCode/modules/juce_core/time/juce_Time.h; sourceTree = SOURCE_ROOT; };
 		D8AA3ED11D45FACF74B5FC05 /* RadioButtons_neutral-01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_neutral-01.png"; path = "../../Resources/Images/Icons/RadioButtons_neutral-01.png"; sourceTree = SOURCE_ROOT; };
 		D8AFDCC674A7514B7019EEA6 /* juce_DrawableButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableButton.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_DrawableButton.h; sourceTree = SOURCE_ROOT; };
-		D8D895B3AD895C6E7FD446BF /* Custom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Custom.cpp; path = ../../Source/Dsp/Custom.cpp; sourceTree = SOURCE_ROOT; };
-		D90290A0AA2C36CE757E46D5 /* FilterEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FilterEditor.cpp; path = ../../Source/Processors/Editors/FilterEditor.cpp; sourceTree = SOURCE_ROOT; };
 		D952A208CC8164F0B459EC9E /* juce_linux_WebBrowserComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_WebBrowserComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp; sourceTree = SOURCE_ROOT; };
 		D960588B732D973B82500E2D /* juce_AudioProcessorListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioProcessorListener.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorListener.h; sourceTree = SOURCE_ROOT; };
+		D9B10885C9D93CEF580EF167 /* ReferenceNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ReferenceNode.cpp; path = ../../Source/Processors/ReferenceNode/ReferenceNode.cpp; sourceTree = SOURCE_ROOT; };
+		D9BF6DA66C22FFF5C4D41991 /* LfpDisplayCanvas.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LfpDisplayCanvas.cpp; path = ../../Source/Processors/LfpDisplayNode/LfpDisplayCanvas.cpp; sourceTree = SOURCE_ROOT; };
 		D9C9FCA6D705B72B80DB1142 /* juce_Socket.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Socket.cpp; path = ../../JuceLibraryCode/modules/juce_core/network/juce_Socket.cpp; sourceTree = SOURCE_ROOT; };
 		D9CB4CEC2C07346BE69262A0 /* RadioButtons_selected-01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_selected-01.png"; path = "../../Resources/Images/Icons/RadioButtons_selected-01.png"; sourceTree = SOURCE_ROOT; };
 		DA0AE9F4A1DDC3555247216F /* IntanIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = IntanIcon.png; path = ../../Resources/Images/Icons/IntanIcon.png; sourceTree = SOURCE_ROOT; };
 		DA30BA6BF482A353393D5926 /* juce_RelativeRectangle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeRectangle.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp; sourceTree = SOURCE_ROOT; };
-		DAA04A0FD47097893712B241 /* SpikeDisplayNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeDisplayNode.cpp; path = ../../Source/Processors/SpikeDisplayNode.cpp; sourceTree = SOURCE_ROOT; };
+		DA4EAC64A750D0C3DEE83C5D /* AudioEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioEditor.cpp; path = ../../Source/Processors/AudioNode/AudioEditor.cpp; sourceTree = SOURCE_ROOT; };
 		DAA4306D30617137463ED247 /* juce_RelativeRectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativeRectangle.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeRectangle.h; sourceTree = SOURCE_ROOT; };
+		DAB201178DC7489D24FEA3F4 /* Custom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Custom.h; path = ../../Source/Processors/Dsp/Custom.h; sourceTree = SOURCE_ROOT; };
 		DAC81FECCE54087394BE69F7 /* juce_WaitableEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WaitableEvent.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_WaitableEvent.h; sourceTree = SOURCE_ROOT; };
 		DACD0879E139527D971D3AC4 /* juce_FileListComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileListComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileListComponent.h; sourceTree = SOURCE_ROOT; };
 		DB4F34DA0F04B40EB6A50FB1 /* juce_SystemStats.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SystemStats.h; path = ../../JuceLibraryCode/modules/juce_core/system/juce_SystemStats.h; sourceTree = SOURCE_ROOT; };
 		DB4FB8EAFA1714529E527C3D /* juce_win32_Messaging.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Messaging.cpp; path = ../../JuceLibraryCode/modules/juce_events/native/juce_win32_Messaging.cpp; sourceTree = SOURCE_ROOT; };
 		DB4FF7675E5C98CF62DA8A2E /* AccessClass.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AccessClass.h; path = ../../Source/AccessClass.h; sourceTree = SOURCE_ROOT; };
 		DB550BAB034060FF4578BB64 /* juce_audio_basics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_audio_basics.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/juce_audio_basics.h; sourceTree = SOURCE_ROOT; };
-		DB702F259EF24DAB9EC99D0A /* FPGAOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FPGAOutput.h; path = ../../Source/Processors/FPGAOutput.h; sourceTree = SOURCE_ROOT; };
 		DB7866AFC8A4894810DBD05E /* juce_InterProcessLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_InterProcessLock.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_InterProcessLock.h; sourceTree = SOURCE_ROOT; };
-		DBB295F412798131D3F04045 /* PulsePalOutput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PulsePalOutput.cpp; path = ../../Source/Processors/PulsePalOutput.cpp; sourceTree = SOURCE_ROOT; };
+		DBAB7848C770895CED4E2F95 /* LfpTriggeredAverageNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LfpTriggeredAverageNode.h; path = ../../Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.h; sourceTree = SOURCE_ROOT; };
 		DBB769DEBCD6468C13A3CD25 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
-		DBB86AD59BA3F6EC09AF2C02 /* LfpDisplayNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LfpDisplayNode.h; path = ../../Source/Processors/LfpDisplayNode.h; sourceTree = SOURCE_ROOT; };
 		DBCA7E2FFCFD1354DD19DDD6 /* juce_data_structures.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_data_structures.mm; path = ../../JuceLibraryCode/modules/juce_data_structures/juce_data_structures.mm; sourceTree = SOURCE_ROOT; };
 		DBED17FBB262C4DACEEDA9B0 /* juce_MidiKeyboardState.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiKeyboardState.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp; sourceTree = SOURCE_ROOT; };
 		DBF1FD9272546EE4C7DD517A /* juce_mac_SystemTrayIcon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_SystemTrayIcon.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp; sourceTree = SOURCE_ROOT; };
@@ -1167,6 +1203,7 @@
 		DD5695DE97CEF7BE76869232 /* juce_FileOutputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileOutputStream.cpp; path = ../../JuceLibraryCode/modules/juce_core/files/juce_FileOutputStream.cpp; sourceTree = SOURCE_ROOT; };
 		DDE157BB06373ECDBB23469C /* juce_StretchableLayoutManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StretchableLayoutManager.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h; sourceTree = SOURCE_ROOT; };
 		DDE89F0D5E01F079323CC89C /* juce_AudioProcessorPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioProcessorPlayer.h; path = ../../JuceLibraryCode/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h; sourceTree = SOURCE_ROOT; };
+		DE0EA2212323DEFEBA3D078F /* PulsePalOutputEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PulsePalOutputEditor.cpp; path = ../../Source/Processors/PulsePalOutput/PulsePalOutputEditor.cpp; sourceTree = SOURCE_ROOT; };
 		DE4861552DB1976665B25DFD /* juce_HighResolutionTimer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_HighResolutionTimer.cpp; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_HighResolutionTimer.cpp; sourceTree = SOURCE_ROOT; };
 		DE52AAFE8A58C3CDC0817406 /* juce_LiveConstantEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LiveConstantEditor.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp; sourceTree = SOURCE_ROOT; };
 		DEB9A630503639D42056236B /* juce_UndoManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_UndoManager.h; path = ../../JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoManager.h; sourceTree = SOURCE_ROOT; };
@@ -1177,31 +1214,35 @@
 		DFAA7B563CEFB94D9ADB5D6A /* juce_CPlusPlusCodeTokeniser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CPlusPlusCodeTokeniser.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h; sourceTree = SOURCE_ROOT; };
 		DFFB7396DCE9DF1253217584 /* juce_AudioThumbnailCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioThumbnailCache.h; path = ../../JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h; sourceTree = SOURCE_ROOT; };
 		E040EA8B5BB61ABBBD14F12F /* juce_OggVorbisAudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OggVorbisAudioFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h; sourceTree = SOURCE_ROOT; };
+		E04512D01D2F6FE00C336CAD /* LfpDisplayEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LfpDisplayEditor.h; path = ../../Source/Processors/LfpDisplayNode/LfpDisplayEditor.h; sourceTree = SOURCE_ROOT; };
 		E08E877C3A6283CF5C803957 /* MainWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainWindow.cpp; path = ../../Source/MainWindow.cpp; sourceTree = SOURCE_ROOT; };
+		E0AB41DFF4A382B93658F53E /* RecordControl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RecordControl.h; path = ../../Source/Processors/RecordControl/RecordControl.h; sourceTree = SOURCE_ROOT; };
 		E0ADC34D69113B79C2F4FF24 /* juce_CustomTypeface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CustomTypeface.h; path = ../../JuceLibraryCode/modules/juce_graphics/fonts/juce_CustomTypeface.h; sourceTree = SOURCE_ROOT; };
 		E0C264CF6345ABB4CAB98B92 /* juce_ScopedPointer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedPointer.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_ScopedPointer.h; sourceTree = SOURCE_ROOT; };
+		E102C308B0722DFFFEFF2415 /* ResamplingNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ResamplingNode.cpp; path = ../../Source/Processors/ResamplingNode/ResamplingNode.cpp; sourceTree = SOURCE_ROOT; };
+		E122ECCE167A03BDF2D282FE /* RootFinder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RootFinder.cpp; path = ../../Source/Processors/Dsp/RootFinder.cpp; sourceTree = SOURCE_ROOT; };
+		E1A51630F1C6E392EBEDD469 /* PulsePalOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PulsePalOutput.h; path = ../../Source/Processors/PulsePalOutput/PulsePalOutput.h; sourceTree = SOURCE_ROOT; };
+		E1E9FAB63BD90C10F2BEF74C /* Splitter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Splitter.h; path = ../../Source/Processors/Splitter/Splitter.h; sourceTree = SOURCE_ROOT; };
 		E20D5F2F75478DA4943CEDBD /* juce_ActionBroadcaster.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ActionBroadcaster.h; path = ../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionBroadcaster.h; sourceTree = SOURCE_ROOT; };
 		E216D095C98F850A5FB6FB0F /* ChannelSelector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ChannelSelector.cpp; path = ../../Source/Processors/Editors/ChannelSelector.cpp; sourceTree = SOURCE_ROOT; };
 		E21CA41B44E191F1804F9662 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../JuceLibraryCode/modules/juce_data_structures/juce_module_info; sourceTree = SOURCE_ROOT; };
 		E23FA5E940A1434B0305875D /* juce_ResizableCornerComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ResizableCornerComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h; sourceTree = SOURCE_ROOT; };
-		E2F46E110416D628C11392CA /* Parameter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Parameter.h; path = ../../Source/Processors/Parameter.h; sourceTree = SOURCE_ROOT; };
 		E31563D2E7DDD8315F369233 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
 		E33F167E4AA1C44596A1EBED /* juce_mac_CoreGraphicsHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_mac_CoreGraphicsHelpers.h; path = ../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h; sourceTree = SOURCE_ROOT; };
 		E34E535DA9CBF248E32F7B45 /* juce_ReadWriteLock.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ReadWriteLock.cpp; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_ReadWriteLock.cpp; sourceTree = SOURCE_ROOT; };
 		E37140E9E8F7CFDDEEEF6148 /* juce_ToolbarItemFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarItemFactory.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h; sourceTree = SOURCE_ROOT; };
+		E39CC410838072043E3C30DC /* OriginalRecording.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OriginalRecording.cpp; path = ../../Source/Processors/RecordNode/OriginalRecording.cpp; sourceTree = SOURCE_ROOT; };
 		E3C4B6B362320594789E1297 /* juce_PropertySet.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertySet.cpp; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_PropertySet.cpp; sourceTree = SOURCE_ROOT; };
 		E3D9DABE0A9C1DCE6A6515CB /* juce_MixerAudioSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MixerAudioSource.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp; sourceTree = SOURCE_ROOT; };
+		E3F5E0DDF9859755B10B074D /* ChannelMappingEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ChannelMappingEditor.h; path = ../../Source/Processors/ChannelMappingNode/ChannelMappingEditor.h; sourceTree = SOURCE_ROOT; };
 		E419C9DA3202B8B6EC2DB723 /* juce_Reverb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Reverb.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/effects/juce_Reverb.h; sourceTree = SOURCE_ROOT; };
-		E42B745B4D2DCADE54F94757 /* EventNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EventNode.h; path = ../../Source/Processors/EventNode.h; sourceTree = SOURCE_ROOT; };
-		E442E1FA7B58BFF6F1D8CBD8 /* ChannelMappingEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ChannelMappingEditor.h; path = ../../Source/Processors/Editors/ChannelMappingEditor.h; sourceTree = SOURCE_ROOT; };
-		E44B26F5D97CB483242DE05B /* RBJ.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RBJ.h; path = ../../Source/Dsp/RBJ.h; sourceTree = SOURCE_ROOT; };
 		E48A7B152993BCF473725A19 /* juce_CameraDevice.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CameraDevice.h; path = ../../JuceLibraryCode/modules/juce_video/capture/juce_CameraDevice.h; sourceTree = SOURCE_ROOT; };
 		E4A2E203101AF37C169F1569 /* juce_BufferingAudioSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BufferingAudioSource.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_BufferingAudioSource.h; sourceTree = SOURCE_ROOT; };
 		E53FEAA3754E6B5D99516D56 /* juce_KnownPluginList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KnownPluginList.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp; sourceTree = SOURCE_ROOT; };
 		E58A18793D25A1D75811A052 /* juce_ImagePreviewComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImagePreviewComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h; sourceTree = SOURCE_ROOT; };
-		E594A85A291E0625E0410A85 /* LfpDisplayEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LfpDisplayEditor.h; path = ../../Source/Processors/Editors/LfpDisplayEditor.h; sourceTree = SOURCE_ROOT; };
 		E5B10AA248D400FDB2645084 /* juce_win32_WASAPI.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_WASAPI.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp; sourceTree = SOURCE_ROOT; };
 		E5C1D021C0FD6FAD082C5D75 /* GraphViewer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GraphViewer.cpp; path = ../../Source/UI/GraphViewer.cpp; sourceTree = SOURCE_ROOT; };
+		E5FA033C407367AE0793258B /* Cascade.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Cascade.cpp; path = ../../Source/Processors/Dsp/Cascade.cpp; sourceTree = SOURCE_ROOT; };
 		E666E60CC07666669FC77C7D /* juce_MemoryOutputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryOutputStream.cpp; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryOutputStream.cpp; sourceTree = SOURCE_ROOT; };
 		E67C5ACDC8208CDE200EC8C6 /* juce_graphics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_graphics.h; path = ../../JuceLibraryCode/modules/juce_graphics/juce_graphics.h; sourceTree = SOURCE_ROOT; };
 		E6D3A973D5CEF18CA2BAFF59 /* juce_TextButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextButton.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_TextButton.cpp; sourceTree = SOURCE_ROOT; };
@@ -1211,12 +1252,11 @@
 		E79B7DC03F81DA1F8CDE21CA /* juce_ApplicationCommandManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandManager.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h; sourceTree = SOURCE_ROOT; };
 		E7ACE8C1456403A574236451 /* cpmono-bold-serialized */ = {isa = PBXFileReference; lastKnownFileType = file; name = "cpmono-bold-serialized"; path = "../../Resources/Fonts/cpmono-bold-serialized"; sourceTree = SOURCE_ROOT; };
 		E7EE416EF527C7506B499070 /* juce_BigInteger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BigInteger.h; path = ../../JuceLibraryCode/modules/juce_core/maths/juce_BigInteger.h; sourceTree = SOURCE_ROOT; };
-		E8174B3346AA69361BF73AE1 /* Cascade.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Cascade.h; path = ../../Source/Dsp/Cascade.h; sourceTree = SOURCE_ROOT; };
-		E817F0471AF514FD075B5DB7 /* SerialInput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SerialInput.h; path = ../../Source/Processors/SerialInput.h; sourceTree = SOURCE_ROOT; };
 		E835BEB3C42E4B241804BE13 /* cpmono-light-serialized */ = {isa = PBXFileReference; lastKnownFileType = file; name = "cpmono-light-serialized"; path = "../../Resources/Fonts/cpmono-light-serialized"; sourceTree = SOURCE_ROOT; };
-		E8480C4ED7F9579F6172F7B5 /* Common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Common.h; path = ../../Source/Dsp/Common.h; sourceTree = SOURCE_ROOT; };
+		E849E3966302E7D4D06712F5 /* RecordControl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RecordControl.cpp; path = ../../Source/Processors/RecordControl/RecordControl.cpp; sourceTree = SOURCE_ROOT; };
+		E850C14F13F9855CE1E14C1A /* ArduinoOutputEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ArduinoOutputEditor.cpp; path = ../../Source/Processors/ArduinoOutput/ArduinoOutputEditor.cpp; sourceTree = SOURCE_ROOT; };
 		E8964C0BE264A55753BC6B7B /* juce_linux_Midi.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Midi.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_Midi.cpp; sourceTree = SOURCE_ROOT; };
-		E90FCB43DA2FF766597DA75E /* Documentation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Documentation.cpp; path = ../../Source/Dsp/Documentation.cpp; sourceTree = SOURCE_ROOT; };
+		E8D51D470C9955D7D03D5469 /* ChebyshevII.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ChebyshevII.h; path = ../../Source/Processors/Dsp/ChebyshevII.h; sourceTree = SOURCE_ROOT; };
 		E91923510CB2280C3A3B9E9C /* juce_LocalisedStrings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LocalisedStrings.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.h; sourceTree = SOURCE_ROOT; };
 		E91A272EF06892937CB4B9CE /* juce_ComponentDragger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentDragger.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp; sourceTree = SOURCE_ROOT; };
 		E93BE115650B1CB80EACB841 /* EditorViewportButtons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EditorViewportButtons.h; path = ../../Source/UI/EditorViewportButtons.h; sourceTree = SOURCE_ROOT; };
@@ -1224,7 +1264,6 @@
 		E97684DCE824DEDA6683C6CD /* juce_Synthesiser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Synthesiser.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp; sourceTree = SOURCE_ROOT; };
 		EA2FC92CECD1EDA1F07DC59C /* juce_TooltipWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TooltipWindow.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.h; sourceTree = SOURCE_ROOT; };
 		EA354D7D8E48D461415D52D8 /* juce_JPEGLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_JPEGLoader.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/image_formats/juce_JPEGLoader.cpp; sourceTree = SOURCE_ROOT; };
-		EA535EA158451360B7B8AE52 /* LfpDisplayNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LfpDisplayNode.cpp; path = ../../Source/Processors/LfpDisplayNode.cpp; sourceTree = SOURCE_ROOT; };
 		EA73332E3D5AEC04ADDFBB2A /* juce_AudioDataConverters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioDataConverters.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioDataConverters.h; sourceTree = SOURCE_ROOT; };
 		EA9518CDEA7049C21D5CE2D5 /* juce_Process.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Process.h; path = ../../JuceLibraryCode/modules/juce_core/threads/juce_Process.h; sourceTree = SOURCE_ROOT; };
 		EAB2319C7AA57E06A2247CDF /* juce_BorderSize.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BorderSize.h; path = ../../JuceLibraryCode/modules/juce_graphics/geometry/juce_BorderSize.h; sourceTree = SOURCE_ROOT; };
@@ -1235,13 +1274,12 @@
 		EAEA49B9394D802B79CA8164 /* juce_StringPairArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StringPairArray.h; path = ../../JuceLibraryCode/modules/juce_core/text/juce_StringPairArray.h; sourceTree = SOURCE_ROOT; };
 		EB5F9A50EB53A57D6AE303C2 /* juce_mac_QuickTimeMovieComponent.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_QuickTimeMovieComponent.mm; path = ../../JuceLibraryCode/modules/juce_video/native/juce_mac_QuickTimeMovieComponent.mm; sourceTree = SOURCE_ROOT; };
 		EBD8622EAEF10558809888B7 /* RadioButtons_selected_over-01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RadioButtons_selected_over-01.png"; path = "../../Resources/Images/Icons/RadioButtons_selected_over-01.png"; sourceTree = SOURCE_ROOT; };
-		EC780F52ABBD7317A5CE2F33 /* ChebyshevI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ChebyshevI.h; path = ../../Source/Dsp/ChebyshevI.h; sourceTree = SOURCE_ROOT; };
 		EC95A2CF4B33EA37DA5FC1AC /* nordic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file.ttf; name = nordic.ttf; path = ../../Resources/Fonts/nordic.ttf; sourceTree = SOURCE_ROOT; };
-		ECA6FDB1366BE7EC30F1539B /* SourceNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SourceNode.cpp; path = ../../Source/Processors/SourceNode.cpp; sourceTree = SOURCE_ROOT; };
 		ECB5A75A81B90327F58CBD9E /* rhd2000datablock.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rhd2000datablock.cpp; path = "../../Source/Processors/DataThreads/rhythm-api/rhd2000datablock.cpp"; sourceTree = SOURCE_ROOT; };
 		ECBEF88BBC974D96ED781C75 /* juce_posix_SharedCode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_posix_SharedCode.h; path = ../../JuceLibraryCode/modules/juce_core/native/juce_posix_SharedCode.h; sourceTree = SOURCE_ROOT; };
 		ECCE033FF2ACE42188FA4A7F /* juce_TemporaryFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TemporaryFile.h; path = ../../JuceLibraryCode/modules/juce_core/files/juce_TemporaryFile.h; sourceTree = SOURCE_ROOT; };
 		ECE3BE71EB6B9CF1CE869BBE /* juce_BubbleComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BubbleComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.h; sourceTree = SOURCE_ROOT; };
+		ED0955C4DE64766A7F5F96F2 /* FPGAOutputEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FPGAOutputEditor.h; path = ../../Source/Processors/FPGAOutput/FPGAOutputEditor.h; sourceTree = SOURCE_ROOT; };
 		ED86166920362E9D2BE2CB26 /* juce_SVGParser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SVGParser.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_SVGParser.cpp; sourceTree = SOURCE_ROOT; };
 		ED887A521EEB8F3EBA7DDB31 /* juce_AudioIODeviceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioIODeviceType.h; path = ../../JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h; sourceTree = SOURCE_ROOT; };
 		EDA209B0E7D124EA581023AD /* juce_AudioFormatManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatManager.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatManager.h; sourceTree = SOURCE_ROOT; };
@@ -1256,10 +1294,8 @@
 		EF4A6E0E1232071252ACCD7B /* juce_RelativeParallelogram.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativeParallelogram.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h; sourceTree = SOURCE_ROOT; };
 		EF610B2A17D9B1C0D24DCE67 /* juce_android_JNIHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_android_JNIHelpers.h; path = ../../JuceLibraryCode/modules/juce_core/native/juce_android_JNIHelpers.h; sourceTree = SOURCE_ROOT; };
 		EF7B66764093D950724EFE70 /* juce_OpenGLShaderProgram.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLShaderProgram.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h; sourceTree = SOURCE_ROOT; };
-		EF8488936B3D3E9178C9099C /* PulsePalOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PulsePalOutput.h; path = ../../Source/Processors/PulsePalOutput.h; sourceTree = SOURCE_ROOT; };
 		EFC21F3CD0EB87D67E044E06 /* juce_MenuBarComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MenuBarComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarComponent.h; sourceTree = SOURCE_ROOT; };
 		F09FD6D9CA4997216ADBF54F /* DataBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DataBuffer.h; path = ../../Source/Processors/DataThreads/DataBuffer.h; sourceTree = SOURCE_ROOT; };
-		F0CA3600E09054D7DB3B0067 /* SmoothedFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SmoothedFilter.h; path = ../../Source/Dsp/SmoothedFilter.h; sourceTree = SOURCE_ROOT; };
 		F0D9A28C206D7A8BA7089D29 /* juce_KeyMappingEditorComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KeyMappingEditorComponent.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h; sourceTree = SOURCE_ROOT; };
 		F0F3834D46EA8FC8ADB206DB /* juce_AbstractFifo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AbstractFifo.cpp; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_AbstractFifo.cpp; sourceTree = SOURCE_ROOT; };
 		F1099BFF0BC1656A23D62E84 /* juce_ScrollBar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ScrollBar.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.cpp; sourceTree = SOURCE_ROOT; };
@@ -1267,21 +1303,28 @@
 		F17DF27524262A21A3EC932D /* juce_PluginListComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PluginListComponent.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp; sourceTree = SOURCE_ROOT; };
 		F1A3975235880CAC1D5757F4 /* juce_MP3AudioFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MP3AudioFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp; sourceTree = SOURCE_ROOT; };
 		F1DBAE92084D9D90234AC436 /* juce_AudioSourcePlayer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioSourcePlayer.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp; sourceTree = SOURCE_ROOT; };
-		F230A4C0186379F9EB0B0F74 /* ReferenceNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ReferenceNode.h; path = ../../Source/Processors/ReferenceNode.h; sourceTree = SOURCE_ROOT; };
 		F28414731D9EE1F75D7B7043 /* juce_AudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormat.h; sourceTree = SOURCE_ROOT; };
 		F2A500BA3500C4A9D5792A54 /* juce_DrawableImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableImage.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableImage.h; sourceTree = SOURCE_ROOT; };
 		F2EDB88302B8A9356F43B834 /* juce_Primes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Primes.h; path = ../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_Primes.h; sourceTree = SOURCE_ROOT; };
 		F2F11D7C596DAE5579610CCC /* juce_win32_AudioCDReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_AudioCDReader.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp; sourceTree = SOURCE_ROOT; };
+		F345254DE7F499036FB17995 /* Layout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Layout.h; path = ../../Source/Processors/Dsp/Layout.h; sourceTree = SOURCE_ROOT; };
+		F379BA0589FB65817B721314 /* RecordControlEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RecordControlEditor.h; path = ../../Source/Processors/RecordControl/RecordControlEditor.h; sourceTree = SOURCE_ROOT; };
 		F3D0224E4247BCB06A9E4DDF /* juce_KeyPressMappingSet.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyPressMappingSet.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp; sourceTree = SOURCE_ROOT; };
 		F3F48717927A4E24F7373C09 /* juce_NamedValueSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NamedValueSet.h; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_NamedValueSet.h; sourceTree = SOURCE_ROOT; };
+		F46365D8E42099148B843C95 /* SpikeSorterEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SpikeSorterEditor.cpp; path = ../../Source/Processors/SpikeSorter/SpikeSorterEditor.cpp; sourceTree = SOURCE_ROOT; };
 		F463A19E6EFEB2837582B117 /* juce_audio_processors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_audio_processors.h; path = ../../JuceLibraryCode/modules/juce_audio_processors/juce_audio_processors.h; sourceTree = SOURCE_ROOT; };
 		F46843B979D0385C733C797A /* juce_BubbleMessageComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BubbleMessageComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp; sourceTree = SOURCE_ROOT; };
 		F4D2A03314AB1CF852CC4F2A /* juce_CPlusPlusCodeTokeniserFunctions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CPlusPlusCodeTokeniserFunctions.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h; sourceTree = SOURCE_ROOT; };
+		F552E7A463C6207BC3E74C06 /* HDF5FileFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HDF5FileFormat.cpp; path = ../../Source/Processors/RecordNode/HDF5FileFormat.cpp; sourceTree = SOURCE_ROOT; };
 		F5642B98949DC0FA45EF904E /* juce_BufferedInputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BufferedInputStream.h; path = ../../JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.h; sourceTree = SOURCE_ROOT; };
 		F5A00ACFA3D76168F22F1205 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+		F603678D95461916B9D971AA /* Custom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Custom.cpp; path = ../../Source/Processors/Dsp/Custom.cpp; sourceTree = SOURCE_ROOT; };
+		F6BE430A8D1C6240286ED75B /* EventNodeEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EventNodeEditor.cpp; path = ../../Source/Processors/EventNode/EventNodeEditor.cpp; sourceTree = SOURCE_ROOT; };
 		F6EBDA368C553C37BE703BE5 /* juce_Vector3D.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Vector3D.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_Vector3D.h; sourceTree = SOURCE_ROOT; };
 		F70B7D65EF56B8A0ED36478C /* juce_WavAudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WavAudioFormat.h; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WavAudioFormat.h; sourceTree = SOURCE_ROOT; };
+		F716728550EBD8FA7B9CA7EF /* RecordEngine.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RecordEngine.cpp; path = ../../Source/Processors/RecordNode/RecordEngine.cpp; sourceTree = SOURCE_ROOT; };
 		F73A22F20AE71DA0153E274A /* juce_Javascript.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Javascript.h; path = ../../JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.h; sourceTree = SOURCE_ROOT; };
+		F753A8E9CE0C51998066EA07 /* SpikeSorterEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeSorterEditor.h; path = ../../Source/Processors/SpikeSorter/SpikeSorterEditor.h; sourceTree = SOURCE_ROOT; };
 		F796260525BD82FFC1D1732C /* juce_Uuid.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Uuid.cpp; path = ../../JuceLibraryCode/modules/juce_core/misc/juce_Uuid.cpp; sourceTree = SOURCE_ROOT; };
 		F7979AFD5780D9B2208736EE /* juce_TooltipWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TooltipWindow.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp; sourceTree = SOURCE_ROOT; };
 		F7F374C05CDE0DB7712D18D1 /* juce_Atomic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Atomic.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_Atomic.h; sourceTree = SOURCE_ROOT; };
@@ -1290,34 +1333,36 @@
 		F8E202A1374401022F87F26E /* juce_CoreAudioFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CoreAudioFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp; sourceTree = SOURCE_ROOT; };
 		F8EFE3709FDDC2D5F0843058 /* juce_Variant.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Variant.cpp; path = ../../JuceLibraryCode/modules/juce_core/containers/juce_Variant.cpp; sourceTree = SOURCE_ROOT; };
 		F94BFC6B5057806EEF8B59DA /* juce_AudioIODevice.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioIODevice.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp; sourceTree = SOURCE_ROOT; };
-		F94DD42C7BBF81C101D3F605 /* EventNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = EventNode.cpp; path = ../../Source/Processors/EventNode.cpp; sourceTree = SOURCE_ROOT; };
 		F960CC94B136201BDA148EEA /* CustomArrowButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CustomArrowButton.cpp; path = ../../Source/UI/CustomArrowButton.cpp; sourceTree = SOURCE_ROOT; };
 		F9E2371F1A99B292F2947FF5 /* juce_DragAndDropTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DragAndDropTarget.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h; sourceTree = SOURCE_ROOT; };
 		F9F37AD1C3E7CA932FF44E69 /* juce_LagrangeInterpolator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LagrangeInterpolator.cpp; path = ../../JuceLibraryCode/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp; sourceTree = SOURCE_ROOT; };
+		FA12F07F4F9C872C18A2817B /* LfpTriggeredAverageNode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LfpTriggeredAverageNode.cpp; path = ../../Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.cpp; sourceTree = SOURCE_ROOT; };
 		FA1F1E9C7DEA48CAE6C247F4 /* OpenEphysBoardLogoGray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = OpenEphysBoardLogoGray.png; path = ../../Resources/Images/Icons/OpenEphysBoardLogoGray.png; sourceTree = SOURCE_ROOT; };
 		FA23A1334E4CFA77BC18A153 /* FPGAThread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FPGAThread.cpp; path = ../../Source/Processors/DataThreads/FPGAThread.cpp; sourceTree = SOURCE_ROOT; };
 		FA2F04BA4E146ABF649BBE89 /* rhd2000evalboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rhd2000evalboard.h; path = "../../Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.h"; sourceTree = SOURCE_ROOT; };
+		FA8CC6FD54A9F20DA755F2EA /* Channel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Channel.cpp; path = ../../Source/Processors/Channel/Channel.cpp; sourceTree = SOURCE_ROOT; };
 		FAC7E62CC15CA977A6FC72D1 /* juce_ChangeBroadcaster.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChangeBroadcaster.cpp; path = ../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp; sourceTree = SOURCE_ROOT; };
-		FB071D0659E5F1CC630D765A /* FileReader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FileReader.h; path = ../../Source/Processors/FileReader.h; sourceTree = SOURCE_ROOT; };
+		FAD15233FFB64C1608A60250 /* RBJ.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RBJ.cpp; path = ../../Source/Processors/Dsp/RBJ.cpp; sourceTree = SOURCE_ROOT; };
+		FAFA97C9B7C7635298E274DB /* RHD2000Editor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RHD2000Editor.cpp; path = ../../Source/Processors/DataThreads/RHD2000Editor.cpp; sourceTree = SOURCE_ROOT; };
 		FB1B880F24F376D1AC52F2A6 /* juce_DrawableButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableButton.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_DrawableButton.cpp; sourceTree = SOURCE_ROOT; };
 		FB1EA9CB3C695925627B0AC6 /* juce_HeapBlock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_HeapBlock.h; path = ../../JuceLibraryCode/modules/juce_core/memory/juce_HeapBlock.h; sourceTree = SOURCE_ROOT; };
 		FB33617B5082CC0CDC189F2C /* juce_KeyboardFocusTraverser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KeyboardFocusTraverser.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h; sourceTree = SOURCE_ROOT; };
 		FB65FCCCBEE5FCEA2BFD045D /* juce_JSON.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_JSON.h; path = ../../JuceLibraryCode/modules/juce_core/javascript/juce_JSON.h; sourceTree = SOURCE_ROOT; };
 		FB7E91937D3BBE00F64F0B72 /* juce_Colours.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Colours.h; path = ../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colours.h; sourceTree = SOURCE_ROOT; };
+		FBF2BF7B97C2FF8557CF39E6 /* SpikeSortBoxes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SpikeSortBoxes.h; path = ../../Source/Processors/SpikeSorter/SpikeSortBoxes.h; sourceTree = SOURCE_ROOT; };
 		FC080F7DF94ABCB7EA09224A /* juce_Colour.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Colour.cpp; path = ../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colour.cpp; sourceTree = SOURCE_ROOT; };
 		FC20BDD5357D39AC43DFC255 /* juce_LADSPAPluginFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LADSPAPluginFormat.cpp; path = ../../JuceLibraryCode/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp; sourceTree = SOURCE_ROOT; };
 		FC85D30C66E7A4E4A6CA29AE /* cpmono_bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file.otf; name = cpmono_bold.otf; path = ../../Resources/Fonts/cpmono_bold.otf; sourceTree = SOURCE_ROOT; };
-		FC887C6CD74FE33F8BA784A6 /* MergerEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MergerEditor.h; path = ../../Source/Processors/Editors/MergerEditor.h; sourceTree = SOURCE_ROOT; };
 		FD3A6BD3A8898E137DF257B9 /* juce_RelativeParallelogram.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeParallelogram.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp; sourceTree = SOURCE_ROOT; };
 		FD770E73FD462E9C9F6DBFB2 /* juce_PositionableAudioSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PositionableAudioSource.h; path = ../../JuceLibraryCode/modules/juce_audio_basics/sources/juce_PositionableAudioSource.h; sourceTree = SOURCE_ROOT; };
 		FD88DA941838FC91D222DF35 /* juce_RecentlyOpenedFilesList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RecentlyOpenedFilesList.h; path = ../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h; sourceTree = SOURCE_ROOT; };
+		FD9EE3CDFCEE08859781DA65 /* RHD2000Editor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RHD2000Editor.h; path = ../../Source/Processors/DataThreads/RHD2000Editor.h; sourceTree = SOURCE_ROOT; };
 		FDAAB4F0D2A15A6F0F71945A /* juce_ResizableWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableWindow.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp; sourceTree = SOURCE_ROOT; };
 		FEB3730E084D7DD433D14A6C /* juce_MouseListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseListener.h; path = ../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseListener.h; sourceTree = SOURCE_ROOT; };
 		FEF0A4E3C8D22A830BCE2B67 /* juce_linux_JackAudio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_JackAudio.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp; sourceTree = SOURCE_ROOT; };
 		FF082466FC37DC44320B3B7E /* juce_Draggable3DOrientation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Draggable3DOrientation.h; path = ../../JuceLibraryCode/modules/juce_opengl/opengl/juce_Draggable3DOrientation.h; sourceTree = SOURCE_ROOT; };
 		FF1B5858C942CA02EEC38E69 /* juce_ios_Audio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ios_Audio.cpp; path = ../../JuceLibraryCode/modules/juce_audio_devices/native/juce_ios_Audio.cpp; sourceTree = SOURCE_ROOT; };
 		FF3E5A9F8B9250790C6DA089 /* juce_URL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_URL.h; path = ../../JuceLibraryCode/modules/juce_core/network/juce_URL.h; sourceTree = SOURCE_ROOT; };
-		FF450FAFD49105CE7157DFC0 /* Channel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Channel.h; path = ../../Source/Processors/Channel.h; sourceTree = SOURCE_ROOT; };
 		FFBB9CE85A7C91FB11E4AEC8 /* juce_ImageComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageComponent.cpp; path = ../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.cpp; sourceTree = SOURCE_ROOT; };
 		FFFBDB9A00240D797751FEE6 /* DataWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DataWindow.h; path = ../../Source/Processors/Visualization/DataWindow.h; sourceTree = SOURCE_ROOT; };
 /* End PBXFileReference section */
@@ -1406,6 +1451,53 @@
 			name = Icons;
 			sourceTree = "<group>";
 		};
+		053D472F15D2FE7C83911218 /* Dsp */ = {
+			isa = PBXGroup;
+			children = (
+				041038F6E67FE0409D8ECC74 /* Bessel.cpp */,
+				AAF5C27D2EEDD254A3652717 /* Bessel.h */,
+				CB5C14E82DE06F767EAD62F9 /* Biquad.cpp */,
+				0A6D08BC1B5ACA62F35AF5CD /* Biquad.h */,
+				777D9B0FE3C110ADA980BD09 /* Butterworth.cpp */,
+				87C0534EAC82E887E1D354C3 /* Butterworth.h */,
+				E5FA033C407367AE0793258B /* Cascade.cpp */,
+				D1C27DAA2DDCEF188DDC8C5E /* Cascade.h */,
+				D60B35D4E32DAE001056D4D5 /* ChebyshevI.cpp */,
+				56D5BE8BFA1F07F5EFF1DFE8 /* ChebyshevI.h */,
+				4B58436E2B47FC6BB349129F /* ChebyshevII.cpp */,
+				E8D51D470C9955D7D03D5469 /* ChebyshevII.h */,
+				1322A008F022AF76593EAA9A /* Common.h */,
+				F603678D95461916B9D971AA /* Custom.cpp */,
+				DAB201178DC7489D24FEA3F4 /* Custom.h */,
+				BCB5B6CEF112FC911B90E6E2 /* Design.cpp */,
+				3D782D1796455167CE41CCAB /* Design.h */,
+				5E5098D437FC0612291567AC /* Documentation.cpp */,
+				7814050BBF14AF7D45872768 /* Dsp.h */,
+				52070E1171C046E4949ADFE5 /* Elliptic.cpp */,
+				154D5631EEFF8883BD385EB7 /* Elliptic.h */,
+				388D5CAFAE66CCCB8ADA594C /* Filter.cpp */,
+				BA3C61B41A55C23959AA57A3 /* Filter.h */,
+				F345254DE7F499036FB17995 /* Layout.h */,
+				78A1CE918B3E7ADD87DA4350 /* Legendre.cpp */,
+				5CF96A7BBD6C4DE4D059E4A4 /* Legendre.h */,
+				98EFA5304D160AD9225E38B4 /* MathSupplement.h */,
+				40F90FEFBD575E8A67DF68EB /* Param.cpp */,
+				677CC8DA903C77D8ECBAE26D /* Params.h */,
+				9C736D7B85CCD9EC40C5D0AF /* PoleFilter.cpp */,
+				442F01DC974E1EAC57450906 /* PoleFilter.h */,
+				FAD15233FFB64C1608A60250 /* RBJ.cpp */,
+				C1B540E49C0EBA03ACDBBDFB /* RBJ.h */,
+				E122ECCE167A03BDF2D282FE /* RootFinder.cpp */,
+				8B0B1D01BA8A37EC6058E518 /* RootFinder.h */,
+				BD6FDA7B037CF3535431BFC8 /* SmoothedFilter.h */,
+				20BB146B925C4D4AD43BA479 /* State.cpp */,
+				B207877BD3DC2A555E51ADD8 /* State.h */,
+				54B7796F6DCF5531789CCF43 /* Types.h */,
+				3846F3FA0FC28CE322073E94 /* Utilities.h */,
+			);
+			name = Dsp;
+			sourceTree = "<group>";
+		};
 		09C2000EFECCE35F3F793E55 /* lookandfeel */ = {
 			isa = PBXGroup;
 			children = (
@@ -1445,6 +1537,36 @@
 			name = native;
 			sourceTree = "<group>";
 		};
+		0E7092A11A3C96E5ECA71CDA /* RecordNode */ = {
+			isa = PBXGroup;
+			children = (
+				7DB22AC6407EEA88F3FFA16D /* EngineConfigWindow.cpp */,
+				398BF0B03B719107E6093F98 /* EngineConfigWindow.h */,
+				F552E7A463C6207BC3E74C06 /* HDF5FileFormat.cpp */,
+				449B26D1265BB91B331EFF84 /* HDF5FileFormat.h */,
+				36332333DBF8363163F454E6 /* HDF5Recording.cpp */,
+				8A07B5B6D56277A222AC0E90 /* HDF5Recording.h */,
+				E39CC410838072043E3C30DC /* OriginalRecording.cpp */,
+				9B1962D340B217B19B077F2A /* OriginalRecording.h */,
+				F716728550EBD8FA7B9CA7EF /* RecordEngine.cpp */,
+				25B79E00075CCF59F0A4A7D7 /* RecordEngine.h */,
+				949422DF0532222450E95926 /* RecordNode.cpp */,
+				B657AEAFB3404A5CB270C413 /* RecordNode.h */,
+			);
+			name = RecordNode;
+			sourceTree = "<group>";
+		};
+		10488A99117FC063889F25C7 /* FileReader */ = {
+			isa = PBXGroup;
+			children = (
+				34834859523571912C55AC94 /* FileReader.cpp */,
+				D5DC73F860143308ADF769C1 /* FileReader.h */,
+				56F810EF10E01535A417B671 /* FileReaderEditor.cpp */,
+				BF8C15407347975836BFA88F /* FileReaderEditor.h */,
+			);
+			name = FileReader;
+			sourceTree = "<group>";
+		};
 		147EC1A2CF770171DFB61105 /* sampler */ = {
 			isa = PBXGroup;
 			children = (
@@ -1502,6 +1624,15 @@
 			name = midi;
 			sourceTree = "<group>";
 		};
+		1AD84CD59ADC8ACA5C6A1551 /* ProcessorGraph */ = {
+			isa = PBXGroup;
+			children = (
+				4CB63EE1552BBFDEB1DADB0A /* ProcessorGraph.cpp */,
+				B695B24906116ADEFC9D9B5C /* ProcessorGraph.h */,
+			);
+			name = ProcessorGraph;
+			sourceTree = "<group>";
+		};
 		1BF4F68D4169491DD79D0B01 /* contexts */ = {
 			isa = PBXGroup;
 			children = (
@@ -1516,9 +1647,22 @@
 			name = contexts;
 			sourceTree = "<group>";
 		};
+		1C714E881A404D148C6170CD /* FilterNode */ = {
+			isa = PBXGroup;
+			children = (
+				414969AEF838522C9FE1B807 /* FilterEditor.cpp */,
+				5EA566ED87CC02EA6DF1993B /* FilterEditor.h */,
+				9AA19ECEFE2B49832ECEED2F /* FilterNode.cpp */,
+				70651FEF347D8DE167B68EB8 /* FilterNode.h */,
+			);
+			name = FilterNode;
+			sourceTree = "<group>";
+		};
 		1D78FCCF430CD91FD1DBD95B /* UI */ = {
 			isa = PBXGroup;
 			children = (
+				AF28CAB9C7531EF7422602E1 /* EcubeDialogComponent.cpp */,
+				A186E03EC7A6A7E657F38300 /* EcubeDialogComponent.h */,
 				F960CC94B136201BDA148EEA /* CustomArrowButton.cpp */,
 				C59B01C8DB5B3B4773032E12 /* CustomArrowButton.h */,
 				E5C1D021C0FD6FAD082C5D75 /* GraphViewer.cpp */,
@@ -1537,8 +1681,6 @@
 				D2696B30CBEAD7CE72510AFA /* InfoLabel.h */,
 				47A3942AC30A3212C01F1CAF /* DataViewport.cpp */,
 				7D9374931D760ADC65DCBFC6 /* DataViewport.h */,
-				7BD2C39F13FDE202141C4B41 /* MessageCenter.cpp */,
-				9B9EDDFA0AE4991BC7FC7263 /* MessageCenter.h */,
 				610E487E060C42B52FD5AAC9 /* ControlPanel.cpp */,
 				0FE8ACC50ED8E7FFC9E6B9B4 /* ControlPanel.h */,
 				D2A3B4CDD296B4CEC6902FD7 /* UIComponent.cpp */,
@@ -1579,6 +1721,17 @@
 			name = maths;
 			sourceTree = "<group>";
 		};
+		1ECFEAA83B8E49686FFA6F2F /* SignalGenerator */ = {
+			isa = PBXGroup;
+			children = (
+				748F08ACA463113F570C51AC /* SignalGenerator.cpp */,
+				D50EA137CEA9654AA8AB3D4C /* SignalGenerator.h */,
+				0915EBE101DD5974F692755B /* SignalGeneratorEditor.cpp */,
+				38E1C53CF5BB38247BCAA909 /* SignalGeneratorEditor.h */,
+			);
+			name = SignalGenerator;
+			sourceTree = "<group>";
+		};
 		208431C2D4A7C383FD247CE3 /* format_types */ = {
 			isa = PBXGroup;
 			children = (
@@ -1608,6 +1761,17 @@
 			name = sources;
 			sourceTree = "<group>";
 		};
+		21389ED521B378402213EFC3 /* ReferenceNode */ = {
+			isa = PBXGroup;
+			children = (
+				D9B10885C9D93CEF580EF167 /* ReferenceNode.cpp */,
+				679BBE9F6C930A1941BA7944 /* ReferenceNode.h */,
+				6D4D435D25CFC019E0FCF4A1 /* ReferenceNodeEditor.cpp */,
+				883E23B392AFB86C3EE1A2AC /* ReferenceNodeEditor.h */,
+			);
+			name = ReferenceNode;
+			sourceTree = "<group>";
+		};
 		21BB3DD364DC0C39CC9594B9 /* processors */ = {
 			isa = PBXGroup;
 			children = (
@@ -1667,6 +1831,19 @@
 			name = broadcasters;
 			sourceTree = "<group>";
 		};
+		29B817DBDA971F3DA7039F93 /* LfpDisplayNode */ = {
+			isa = PBXGroup;
+			children = (
+				D9BF6DA66C22FFF5C4D41991 /* LfpDisplayCanvas.cpp */,
+				CD657DBBDB4550C800F05D22 /* LfpDisplayCanvas.h */,
+				88C69F0563A99BD2F7BF5FBB /* LfpDisplayEditor.cpp */,
+				E04512D01D2F6FE00C336CAD /* LfpDisplayEditor.h */,
+				1C64C490BD7FE9E57D6C682D /* LfpDisplayNode.cpp */,
+				B2F72769CF14BD7F882E9542 /* LfpDisplayNode.h */,
+			);
+			name = LfpDisplayNode;
+			sourceTree = "<group>";
+		};
 		2A882D30C0E50E70FCD95554 /* lookandfeel */ = {
 			isa = PBXGroup;
 			children = (
@@ -1687,6 +1864,17 @@
 			name = hashing;
 			sourceTree = "<group>";
 		};
+		2AC55A2E70C6CF50A8C46F6B /* Parameter */ = {
+			isa = PBXGroup;
+			children = (
+				934B37E2BECD69E6E27051F6 /* ParameterEditor.cpp */,
+				362898B655ABFFA23A69BBFA /* ParameterEditor.h */,
+				4F5D51C5F8174E3824EF8B42 /* Parameter.cpp */,
+				811BCA5BE226C5188BC5E9B9 /* Parameter.h */,
+			);
+			name = Parameter;
+			sourceTree = "<group>";
+		};
 		2D49786EE07B37713213F905 /* juce_opengl */ = {
 			isa = PBXGroup;
 			children = (
@@ -1740,7 +1928,6 @@
 				420B0E95F1300ABFDC125DBF /* AccessClass.cpp */,
 				DB4FF7675E5C98CF62DA8A2E /* AccessClass.h */,
 				B016FBDF648372A23D7EAAD8 /* Network */,
-				BCD632E634E0F8A50827F9B6 /* Dsp */,
 				C451728043944D40C69166C1 /* Audio */,
 				83A3E005DDFCC55F277EEDA5 /* Processors */,
 				1D78FCCF430CD91FD1DBD95B /* UI */,
@@ -1802,6 +1989,17 @@
 			name = Serial;
 			sourceTree = "<group>";
 		};
+		3EE4DBB6ED04E5B9DA85CDF9 /* ChannelMappingNode */ = {
+			isa = PBXGroup;
+			children = (
+				D0105584D551FED59203CC84 /* ChannelMappingEditor.cpp */,
+				E3F5E0DDF9859755B10B074D /* ChannelMappingEditor.h */,
+				25CEC111DFEC71FA6828257F /* ChannelMappingNode.cpp */,
+				589657244185109F68A6B5A2 /* ChannelMappingNode.h */,
+			);
+			name = ChannelMappingNode;
+			sourceTree = "<group>";
+		};
 		42DE5996B56B332A5B6C636D /* undomanager */ = {
 			isa = PBXGroup;
 			children = (
@@ -1867,6 +2065,17 @@
 			name = juce_graphics;
 			sourceTree = "<group>";
 		};
+		456FCC98D03DFAE9AFEC271B /* ResamplingNode */ = {
+			isa = PBXGroup;
+			children = (
+				E102C308B0722DFFFEFF2415 /* ResamplingNode.cpp */,
+				B574136FEE7957F7439CB346 /* ResamplingNode.h */,
+				55DFE30C901793E56A7E3A22 /* ResamplingNodeEditor.cpp */,
+				1785D37A95AF0D67F69F29B6 /* ResamplingNodeEditor.h */,
+			);
+			name = ResamplingNode;
+			sourceTree = "<group>";
+		};
 		45BA9E76F27503E30F331299 /* commands */ = {
 			isa = PBXGroup;
 			children = (
@@ -1936,17 +2145,17 @@
 			name = embedding;
 			sourceTree = "<group>";
 		};
-		4E3C60995CC567F1A839CAE3 /* Utilities */ = {
+		518310F63C8005A8D097A1D8 /* LfpTriggeredAverageNode */ = {
 			isa = PBXGroup;
 			children = (
-				258938780F93A7CF41366F26 /* RecordControl.cpp */,
-				C5785E58E6F915165729EF16 /* RecordControl.h */,
-				4867923F31CC3EDC9B1A5BE5 /* Merger.cpp */,
-				6880C148A38A5C8D0092E358 /* Merger.h */,
-				2C4730CAFED4F6292B575318 /* Splitter.cpp */,
-				B1082A8A306A1947F5B0E5FC /* Splitter.h */,
-			);
-			name = Utilities;
+				CC9134D38EBEC67112CA7502 /* LfpTriggeredAverageCanvas.cpp */,
+				22FAA3DA9944AA853D66114F /* LfpTriggeredAverageCanvas.h */,
+				20DBF92457AF75C0698D1B26 /* LfpTriggeredAverageEditor.cpp */,
+				ADCEA06868A5085B60487AC3 /* LfpTriggeredAverageEditor.h */,
+				FA12F07F4F9C872C18A2817B /* LfpTriggeredAverageNode.cpp */,
+				DBAB7848C770895CED4E2F95 /* LfpTriggeredAverageNode.h */,
+			);
+			name = LfpTriggeredAverageNode;
 			sourceTree = "<group>";
 		};
 		530413F49A2E29570D8A9761 /* timers */ = {
@@ -1960,6 +2169,17 @@
 			name = timers;
 			sourceTree = "<group>";
 		};
+		552D8D8CC92277F54C95F760 /* WiFiOutput */ = {
+			isa = PBXGroup;
+			children = (
+				B25949076F9BB831C5862415 /* WiFiOutput.cpp */,
+				540CD9ED0C719DB1DAECA37E /* WiFiOutput.h */,
+				3734FF118787377E4C8741D1 /* WiFiOutputEditor.cpp */,
+				513D20023796491A24EC58A7 /* WiFiOutputEditor.h */,
+			);
+			name = WiFiOutput;
+			sourceTree = "<group>";
+		};
 		553F5880E9CFE9C4A045C0C0 /* effects */ = {
 			isa = PBXGroup;
 			children = (
@@ -2051,6 +2271,15 @@
 			name = Buttons;
 			sourceTree = "<group>";
 		};
+		5FAE90CAD8DAA5CE48855F38 /* GenericProcessor */ = {
+			isa = PBXGroup;
+			children = (
+				C5654EAA7B65445CF1340983 /* GenericProcessor.cpp */,
+				012F05BBF926C8F39AC7871B /* GenericProcessor.h */,
+			);
+			name = GenericProcessor;
+			sourceTree = "<group>";
+		};
 		6101DBF4D993FE2CB50D4F90 /* drawables */ = {
 			isa = PBXGroup;
 			children = (
@@ -2287,6 +2516,28 @@
 			name = capture;
 			sourceTree = "<group>";
 		};
+		7B2364D82845C97E7A1B1924 /* SpikeDisplayNode */ = {
+			isa = PBXGroup;
+			children = (
+				AAC6EC29963717E95428D7D2 /* SpikeDisplayCanvas.cpp */,
+				C2CB484954A536E782B4A8E7 /* SpikeDisplayCanvas.h */,
+				2F0C721AB2973FAD23C7F47B /* SpikeDisplayEditor.cpp */,
+				34CF4D00D785338941AB9590 /* SpikeDisplayEditor.h */,
+				AC9E30922A14330704FB2573 /* SpikeDisplayNode.cpp */,
+				AE1FC768C646A0EFEC3E3A11 /* SpikeDisplayNode.h */,
+			);
+			name = SpikeDisplayNode;
+			sourceTree = "<group>";
+		};
+		7BE07AA81C59DD7252F709E6 /* AudioResamplingNode */ = {
+			isa = PBXGroup;
+			children = (
+				41E88094E8D929866A6DCA9A /* AudioResamplingNode.cpp */,
+				5E5736CB6D96D5271F1A7597 /* AudioResamplingNode.h */,
+			);
+			name = AudioResamplingNode;
+			sourceTree = "<group>";
+		};
 		7C6BF9E0D166E4E5C3F2A005 /* native */ = {
 			isa = PBXGroup;
 			children = (
@@ -2366,61 +2617,42 @@
 		83A3E005DDFCC55F277EEDA5 /* Processors */ = {
 			isa = PBXGroup;
 			children = (
-				86688D712937F3D08918C68B /* SerialInput.cpp */,
-				E817F0471AF514FD075B5DB7 /* SerialInput.h */,
-				9215DC26F511C58DEE009209 /* FileReader.cpp */,
-				FB071D0659E5F1CC630D765A /* FileReader.h */,
-				5654BDD4FBFF01AC3F17FA0D /* ChannelMappingNode.cpp */,
-				A234B2D091071A1B710E884B /* ChannelMappingNode.h */,
-				DBB295F412798131D3F04045 /* PulsePalOutput.cpp */,
-				EF8488936B3D3E9178C9099C /* PulsePalOutput.h */,
-				BBD9C2AED6F500D090069007 /* ReferenceNode.cpp */,
-				F230A4C0186379F9EB0B0F74 /* ReferenceNode.h */,
-				9FFD9560522567A033226BD7 /* PhaseDetector.cpp */,
-				229989EC8A6F145C81348CA9 /* PhaseDetector.h */,
-				76F569AE7B444D8F69EE0E86 /* AudioResamplingNode.cpp */,
-				17CE6B2913E72ED8727ECD56 /* AudioResamplingNode.h */,
-				9BC055494F9FEE3F90630541 /* Channel.cpp */,
-				FF450FAFD49105CE7157DFC0 /* Channel.h */,
+				9C8E3549A602E74DCFC44244 /* ArduinoOutput */,
+				9C7703C01E449614C1CD884D /* AudioNode */,
+				7BE07AA81C59DD7252F709E6 /* AudioResamplingNode */,
+				B3EC4C17E1555DCD89B1B62C /* Channel */,
+				3EE4DBB6ED04E5B9DA85CDF9 /* ChannelMappingNode */,
+				DEA24DC5AC8325310FB40395 /* DataThreads */,
+				053D472F15D2FE7C83911218 /* Dsp */,
+				9F16043BF599BCE0C02A00A5 /* Editors */,
+				F8338C653582335A30EADE40 /* EventDetector */,
+				AE49B2C17B100D5B4F81F694 /* EventNode */,
+				10488A99117FC063889F25C7 /* FileReader */,
+				1C714E881A404D148C6170CD /* FilterNode */,
+				85403FACC153147273CEB933 /* FPGAOutput */,
+				5FAE90CAD8DAA5CE48855F38 /* GenericProcessor */,
+				29B817DBDA971F3DA7039F93 /* LfpDisplayNode */,
+				518310F63C8005A8D097A1D8 /* LfpTriggeredAverageNode */,
+				A1678CA8F8E882F5D7EFDB3E /* Merger */,
+				F12EEDE785E2D38F654AE1B1 /* MessageCenter */,
+				2AC55A2E70C6CF50A8C46F6B /* Parameter */,
+				B59685FA20FE7A2DC1FF65C0 /* PhaseDetector */,
+				1AD84CD59ADC8ACA5C6A1551 /* ProcessorGraph */,
+				EC06134D54CF6C9870853ED6 /* PulsePalOutput */,
+				F884A8B18F33A6FFE6809906 /* RecordControl */,
+				0E7092A11A3C96E5ECA71CDA /* RecordNode */,
+				21389ED521B378402213EFC3 /* ReferenceNode */,
+				456FCC98D03DFAE9AFEC271B /* ResamplingNode */,
 				3DE49DED45C5CDD8D184E248 /* Serial */,
-				39464D2A22940DA2DDCCCFC6 /* EventDetector.cpp */,
-				91D7B1F8B94AE9CFCC53771F /* EventDetector.h */,
-				9D78F50147005EDB0E89E2B4 /* FPGAOutput.cpp */,
-				DB702F259EF24DAB9EC99D0A /* FPGAOutput.h */,
-				D38E60AC4854B6E1EDE488EB /* ArduinoOutput.cpp */,
-				D128F31F18331117287F5EC5 /* ArduinoOutput.h */,
-				CD2370F8F4A44446558A08FB /* Parameter.cpp */,
-				E2F46E110416D628C11392CA /* Parameter.h */,
-				DAA04A0FD47097893712B241 /* SpikeDisplayNode.cpp */,
-				5EA61EDD64BE1E401DD0AA5E /* SpikeDisplayNode.h */,
-				2D41C43686CDE35E86A389D7 /* WiFiOutput.cpp */,
-				B917780A75945062761B6945 /* WiFiOutput.h */,
-				EA535EA158451360B7B8AE52 /* LfpDisplayNode.cpp */,
-				DBB86AD59BA3F6EC09AF2C02 /* LfpDisplayNode.h */,
-				4E3C60995CC567F1A839CAE3 /* Utilities */,
+				C451C93CE8C359C1A4BD23C7 /* SerialInput */,
+				1ECFEAA83B8E49686FFA6F2F /* SignalGenerator */,
+				CB7739DB9922F30C029B2A02 /* SourceNode */,
+				B17425A884659AB7B5FDCDD0 /* SpikeDetector */,
+				7B2364D82845C97E7A1B1924 /* SpikeDisplayNode */,
+				D3F8D770C9E60B5BA2CCBC68 /* SpikeSorter */,
+				E2624A71F15AE5C96B34505B /* Splitter */,
 				C4B85C0286AC2510730355E3 /* Visualization */,
-				BC3B7E4E25505D9044BFACC7 /* SpikeDetector.cpp */,
-				B70D836E0756C3D4EE8E20F2 /* SpikeDetector.h */,
-				B27F558F42AC78F0E564B5AF /* AudioNode.cpp */,
-				5F64FDAFCA899A16C7FDDBCA /* AudioNode.h */,
-				F94DD42C7BBF81C101D3F605 /* EventNode.cpp */,
-				E42B745B4D2DCADE54F94757 /* EventNode.h */,
-				9F16043BF599BCE0C02A00A5 /* Editors */,
-				DEA24DC5AC8325310FB40395 /* DataThreads */,
-				A4E2CAAF556D557B24182414 /* RecordNode.cpp */,
-				3EAE25787DBFBA8EFC42A277 /* RecordNode.h */,
-				5522973FA48A13C6BED293FE /* SignalGenerator.cpp */,
-				23EAFAEA6457DB4E452F8715 /* SignalGenerator.h */,
-				A98A22CF5F208ED6DBE08063 /* ResamplingNode.cpp */,
-				C29BC68B2721471F32906FEB /* ResamplingNode.h */,
-				B0E8FAD5AC445F612E3468B9 /* FilterNode.cpp */,
-				886E18520E8BD77234E1B686 /* FilterNode.h */,
-				ECA6FDB1366BE7EC30F1539B /* SourceNode.cpp */,
-				154303EE3929F26B93792187 /* SourceNode.h */,
-				3AE038CACE48AF85C4FB1ED5 /* GenericProcessor.cpp */,
-				5B2A4DD7133CDE5AEC24CC07 /* GenericProcessor.h */,
-				555D34D0CD8776EE5996CC3A /* ProcessorGraph.cpp */,
-				0FDD7551AC98348D4A98ADC7 /* ProcessorGraph.h */,
+				552D8D8CC92277F54C95F760 /* WiFiOutput */,
 			);
 			name = Processors;
 			sourceTree = "<group>";
@@ -2451,6 +2683,17 @@
 			name = juce_gui_basics;
 			sourceTree = "<group>";
 		};
+		85403FACC153147273CEB933 /* FPGAOutput */ = {
+			isa = PBXGroup;
+			children = (
+				4448875C40EAB061B2F8A289 /* FPGAOutput.cpp */,
+				07A8ED74417654C40F9EFEFC /* FPGAOutput.h */,
+				AB4D72F040FF59BED08826EC /* FPGAOutputEditor.cpp */,
+				ED0955C4DE64766A7F5F96F2 /* FPGAOutputEditor.h */,
+			);
+			name = FPGAOutput;
+			sourceTree = "<group>";
+		};
 		85E7ADCD4C773A42B7F493E8 /* memory */ = {
 			isa = PBXGroup;
 			children = (
@@ -2756,6 +2999,28 @@
 			name = Fonts;
 			sourceTree = "<group>";
 		};
+		9C7703C01E449614C1CD884D /* AudioNode */ = {
+			isa = PBXGroup;
+			children = (
+				DA4EAC64A750D0C3DEE83C5D /* AudioEditor.cpp */,
+				C15024C101ECE85FDDCD770D /* AudioEditor.h */,
+				1F22CC8D992B8B49D57DDB3F /* AudioNode.cpp */,
+				19B08AF9187EC45ECDE87602 /* AudioNode.h */,
+			);
+			name = AudioNode;
+			sourceTree = "<group>";
+		};
+		9C8E3549A602E74DCFC44244 /* ArduinoOutput */ = {
+			isa = PBXGroup;
+			children = (
+				95A64508FF3D0140D3001A19 /* ArduinoOutput.cpp */,
+				B410FE6CF1A561A1648343D6 /* ArduinoOutput.h */,
+				E850C14F13F9855CE1E14C1A /* ArduinoOutputEditor.cpp */,
+				721B60E285ADAC54829028B9 /* ArduinoOutputEditor.h */,
+			);
+			name = ArduinoOutput;
+			sourceTree = "<group>";
+		};
 		9D44948383EAABF451302146 /* open-ephys */ = {
 			isa = PBXGroup;
 			children = (
@@ -2780,68 +3045,31 @@
 		9F16043BF599BCE0C02A00A5 /* Editors */ = {
 			isa = PBXGroup;
 			children = (
-				7B7819A5759B54D91E334447 /* LfpTriggeredAverageEditor.cpp */,
-				2196ED9DD4262C60135E77F5 /* LfpTriggeredAverageEditor.h */,
-				07BEF02C2B930DF7847C2921 /* SerialInputEditor.cpp */,
-				39D2C460FE587C5F564495A0 /* SerialInputEditor.h */,
-				28CCF04CCC028BAE0AEE5840 /* ElectrodeButtons.cpp */,
-				15870472BA2B1779521A21BD /* ElectrodeButtons.h */,
-				B083B1375828610D55F12CF3 /* ChannelMappingEditor.cpp */,
-				E442E1FA7B58BFF6F1D8CBD8 /* ChannelMappingEditor.h */,
-				4B0097003751A59A11FA8C5B /* FileReaderEditor.cpp */,
-				3067867C8C0F6CF6F086A6FC /* FileReaderEditor.h */,
-				75B1E4EFCDA9A506CFEDB09F /* PhaseDetectorEditor.cpp */,
-				748AF0975561FFFE51DF5F58 /* PhaseDetectorEditor.h */,
-				25A9484825F1B93ABC0E577F /* PulsePalOutputEditor.cpp */,
-				00A54510EFB9B0966D0B430C /* PulsePalOutputEditor.h */,
-				45D78C8EF660EECE64BAA33F /* RHD2000Editor.cpp */,
-				BBCDE855BD0A58D3779D96A8 /* RHD2000Editor.h */,
-				1552007C6C6AF750278C5BE5 /* RecordControlEditor.cpp */,
-				0B2B7732073D56E484950C8D /* RecordControlEditor.h */,
-				9C39C584DA6F507E773687EE /* ReferenceNodeEditor.cpp */,
-				1C93ECD2B04F39923E66B529 /* ReferenceNodeEditor.h */,
-				C5ABE6BDCA91410BA92A7BD9 /* ResamplingNodeEditor.cpp */,
-				0CCE619599DB39323E49FF3C /* ResamplingNodeEditor.h */,
-				169F1B20FC9FFE88C53D2735 /* FPGAOutputEditor.cpp */,
-				92528D6653802FACF658D8EA /* FPGAOutputEditor.h */,
-				1AD76E8111A738A8F3717060 /* ArduinoOutputEditor.cpp */,
-				8B9C0831BE4E09B7C0078B7E /* ArduinoOutputEditor.h */,
 				E216D095C98F850A5FB6FB0F /* ChannelSelector.cpp */,
 				70F06DBCA3948BCC1062E36F /* ChannelSelector.h */,
-				46E3A634686BFEF787229582 /* ParameterEditor.cpp */,
-				8B745839B225E44C9EB5C6FA /* ParameterEditor.h */,
-				1EC95CD1D830F6D85ADB3B9D /* SpikeDisplayEditor.cpp */,
-				25ABEB43042E98C668A16432 /* SpikeDisplayEditor.h */,
-				CAA3B9396EA62166234DAEF1 /* VisualizerEditor.cpp */,
-				B23E6EBB5F99CF7FC72FAC4E /* VisualizerEditor.h */,
-				29FD7B383C5DDACAA7B8DFD3 /* MergerEditor.cpp */,
-				FC887C6CD74FE33F8BA784A6 /* MergerEditor.h */,
-				04C6B933E1603B4D0916570D /* ImageIcon.cpp */,
-				C51CD15B311D0AAC08D0B908 /* ImageIcon.h */,
-				C79249376E3FDF10615E16EA /* WiFiOutputEditor.cpp */,
-				BA2923571505AD47CA1EF878 /* WiFiOutputEditor.h */,
-				70151263C4CB8A4F79431E11 /* EventNodeEditor.cpp */,
-				985F2B5047476B272B1A4BD4 /* EventNodeEditor.h */,
-				9136BD46BE1E28A96FBBD440 /* SignalGeneratorEditor.cpp */,
-				265EDA19C88E74249FD66609 /* SignalGeneratorEditor.h */,
-				8A91849BE6B96EB8C0663469 /* LfpDisplayEditor.cpp */,
-				E594A85A291E0625E0410A85 /* LfpDisplayEditor.h */,
-				6328434A329C353DB8D9512C /* SourceNodeEditor.cpp */,
-				028D4D3C0862B4B1312E2395 /* SourceNodeEditor.h */,
-				D51315B4241B019BE43EE4F1 /* SplitterEditor.cpp */,
-				CCC20313AD0D0993F9EDD1B3 /* SplitterEditor.h */,
-				A252FE4E6A360CBC4AF694B3 /* SpikeDetectorEditor.cpp */,
-				83E5EA2AA0CB928889AC80AB /* SpikeDetectorEditor.h */,
-				10BE33089BA6F3468F36CD6C /* AudioEditor.cpp */,
-				A0E3B98412D88921BB0AA58E /* AudioEditor.h */,
-				D90290A0AA2C36CE757E46D5 /* FilterEditor.cpp */,
-				49FA151B1837E543D18858EB /* FilterEditor.h */,
+				28CCF04CCC028BAE0AEE5840 /* ElectrodeButtons.cpp */,
+				15870472BA2B1779521A21BD /* ElectrodeButtons.h */,
 				D3AE8303545E28D793312F46 /* GenericEditor.cpp */,
 				984BC60C0AFF3EDED692FA01 /* GenericEditor.h */,
+				04C6B933E1603B4D0916570D /* ImageIcon.cpp */,
+				C51CD15B311D0AAC08D0B908 /* ImageIcon.h */,
+				CAA3B9396EA62166234DAEF1 /* VisualizerEditor.cpp */,
+				B23E6EBB5F99CF7FC72FAC4E /* VisualizerEditor.h */,
 			);
 			name = Editors;
 			sourceTree = "<group>";
 		};
+		A1678CA8F8E882F5D7EFDB3E /* Merger */ = {
+			isa = PBXGroup;
+			children = (
+				07B84F46CF90D04BB6B673C5 /* Merger.cpp */,
+				CA50A6F43BD78D01A8BE974B /* Merger.h */,
+				BAA5B3AD1A27F8C4D37A6869 /* MergerEditor.cpp */,
+				8C639E4F97B7D6070028623A /* MergerEditor.h */,
+			);
+			name = Merger;
+			sourceTree = "<group>";
+		};
 		A7589AF92E6E958E1F866761 /* Source */ = {
 			isa = PBXGroup;
 			children = (
@@ -2888,6 +3116,17 @@
 			name = juce_video;
 			sourceTree = "<group>";
 		};
+		AE49B2C17B100D5B4F81F694 /* EventNode */ = {
+			isa = PBXGroup;
+			children = (
+				2592795DB135E0F2C04406F3 /* EventNode.cpp */,
+				10AC8A3D981DAE425D24F9F1 /* EventNode.h */,
+				F6BE430A8D1C6240286ED75B /* EventNodeEditor.cpp */,
+				51BB55D1CE1667CD340E8358 /* EventNodeEditor.h */,
+			);
+			name = EventNode;
+			sourceTree = "<group>";
+		};
 		AF98861ADFF70900F6FD1833 /* scanning */ = {
 			isa = PBXGroup;
 			children = (
@@ -2910,6 +3149,17 @@
 			name = Network;
 			sourceTree = "<group>";
 		};
+		B17425A884659AB7B5FDCDD0 /* SpikeDetector */ = {
+			isa = PBXGroup;
+			children = (
+				89CDE7ED25D0EB7452486E85 /* SpikeDetector.cpp */,
+				13A33B5CF55BDF7BDC9D1D0C /* SpikeDetector.h */,
+				D0F10367EBD3945780342A37 /* SpikeDetectorEditor.cpp */,
+				811A8689009F6FBEE2168F96 /* SpikeDetectorEditor.h */,
+			);
+			name = SpikeDetector;
+			sourceTree = "<group>";
+		};
 		B324A7959C768520ED46A064 /* native */ = {
 			isa = PBXGroup;
 			children = (
@@ -2933,6 +3183,15 @@
 			name = native;
 			sourceTree = "<group>";
 		};
+		B3EC4C17E1555DCD89B1B62C /* Channel */ = {
+			isa = PBXGroup;
+			children = (
+				FA8CC6FD54A9F20DA755F2EA /* Channel.cpp */,
+				74BAC33D6BC1D961F04DCC72 /* Channel.h */,
+			);
+			name = Channel;
+			sourceTree = "<group>";
+		};
 		B49948DDB0E13018A81FFF94 /* containers */ = {
 			isa = PBXGroup;
 			children = (
@@ -2960,6 +3219,17 @@
 			name = containers;
 			sourceTree = "<group>";
 		};
+		B59685FA20FE7A2DC1FF65C0 /* PhaseDetector */ = {
+			isa = PBXGroup;
+			children = (
+				4F10D1D2F5ED2E7F9A997D4C /* PhaseDetector.cpp */,
+				35BB20110BAC6346AA605BF9 /* PhaseDetector.h */,
+				3FE8C41480F07050CC21635F /* PhaseDetectorEditor.cpp */,
+				31FB49244DF85E2ACCFBDF2B /* PhaseDetectorEditor.h */,
+			);
+			name = PhaseDetector;
+			sourceTree = "<group>";
+		};
 		B872BDEA72D05524E71AFE06 /* javascript */ = {
 			isa = PBXGroup;
 			children = (
@@ -2991,53 +3261,6 @@
 			name = misc;
 			sourceTree = "<group>";
 		};
-		BCD632E634E0F8A50827F9B6 /* Dsp */ = {
-			isa = PBXGroup;
-			children = (
-				1989E86F8DFDE34887AC0326 /* Bessel.cpp */,
-				29D7893C278FFE00782637B6 /* Bessel.h */,
-				22801F75289646F6A85E5583 /* Biquad.cpp */,
-				361D8C54B3E54766CBC48046 /* Biquad.h */,
-				B47B3368AA1A182B0CA1AB26 /* Butterworth.cpp */,
-				6D59D5780ECD2CC9703CB499 /* Butterworth.h */,
-				09BCBD414282A3AA4F66A3A5 /* Cascade.cpp */,
-				E8174B3346AA69361BF73AE1 /* Cascade.h */,
-				AC2CFF4DA5CE431FCC628BA3 /* ChebyshevI.cpp */,
-				EC780F52ABBD7317A5CE2F33 /* ChebyshevI.h */,
-				B767A249792EB15A87054409 /* ChebyshevII.cpp */,
-				9CEDA04DB321755AF74D6FAF /* ChebyshevII.h */,
-				E8480C4ED7F9579F6172F7B5 /* Common.h */,
-				D8D895B3AD895C6E7FD446BF /* Custom.cpp */,
-				3063CF211ABB734A9FD452EC /* Custom.h */,
-				2B93450006102A0093F5EACB /* Design.cpp */,
-				7ACB1CB66D69738904358F43 /* Design.h */,
-				E90FCB43DA2FF766597DA75E /* Documentation.cpp */,
-				1086169B0EE86E04B64575C2 /* Dsp.h */,
-				392408C1943AC6234BAAC743 /* Elliptic.cpp */,
-				A95D898F0998F4609E992B5F /* Elliptic.h */,
-				587FCA2485B9C89C2A99C23A /* Filter.cpp */,
-				C39772F796D85E8FE98474D5 /* Filter.h */,
-				38313692308D501E4CADF1D5 /* Layout.h */,
-				C4B0DF8094C90543A65E03E3 /* Legendre.cpp */,
-				4939A8B8300394AAD0926C0B /* Legendre.h */,
-				A41C5A4CD5CF8EEFF993A8B1 /* MathSupplement.h */,
-				3F6C67E29CDEDF2EF61C054F /* Param.cpp */,
-				C3BD84D9B090F98DD09F5958 /* Params.h */,
-				65312FAD0900119CDF6CF414 /* PoleFilter.cpp */,
-				5A8D46BEB81DDF24462E3D92 /* PoleFilter.h */,
-				9A21A229CFACC67E31F4F727 /* RBJ.cpp */,
-				E44B26F5D97CB483242DE05B /* RBJ.h */,
-				3F69480D6145C77992FA59BA /* RootFinder.cpp */,
-				7EFF8622168303A4391D6CAE /* RootFinder.h */,
-				F0CA3600E09054D7DB3B0067 /* SmoothedFilter.h */,
-				C1CB526B75E406851FA918C6 /* State.cpp */,
-				9428D7423971764AC0BA9CB7 /* State.h */,
-				6340B1D2FECEABBBE6C0DE28 /* Types.h */,
-				CFB86C1F2A6076ADC36692AA /* Utilities.h */,
-			);
-			name = Dsp;
-			sourceTree = "<group>";
-		};
 		C451728043944D40C69166C1 /* Audio */ = {
 			isa = PBXGroup;
 			children = (
@@ -3047,18 +3270,25 @@
 			name = Audio;
 			sourceTree = "<group>";
 		};
+		C451C93CE8C359C1A4BD23C7 /* SerialInput */ = {
+			isa = PBXGroup;
+			children = (
+				4C01F867D43DF7B1D98B887E /* SerialInput.cpp */,
+				12F73B770FFDEA8696710E86 /* SerialInput.h */,
+				6D38B76951D31D96F1B71E0F /* SerialInputEditor.cpp */,
+				27FB12D08303BEC9CD15E317 /* SerialInputEditor.h */,
+			);
+			name = SerialInput;
+			sourceTree = "<group>";
+		};
 		C4B85C0286AC2510730355E3 /* Visualization */ = {
 			isa = PBXGroup;
 			children = (
+				66463AB11EA4D6341C32F27E /* DataWindow.cpp */,
+				FFFBDB9A00240D797751FEE6 /* DataWindow.h */,
 				5894D40A0E8FA6E9B3EBF9D9 /* SpikeObject.cpp */,
 				ADCB42E4C5641007A4B78025 /* SpikeObject.h */,
-				A7D4C9E3ED3763847C087F46 /* SpikeDisplayCanvas.cpp */,
-				4E6EE225098D32E7D5DE60B2 /* SpikeDisplayCanvas.h */,
 				215E1BD79B5870D5356810F0 /* Visualizer.h */,
-				66463AB11EA4D6341C32F27E /* DataWindow.cpp */,
-				FFFBDB9A00240D797751FEE6 /* DataWindow.h */,
-				4A94E809624F99387E600399 /* LfpDisplayCanvas.cpp */,
-				12B5DDCB6E5ECD93A4C55BB5 /* LfpDisplayCanvas.h */,
 			);
 			name = Visualization;
 			sourceTree = "<group>";
@@ -3114,6 +3344,17 @@
 			name = misc;
 			sourceTree = "<group>";
 		};
+		CB7739DB9922F30C029B2A02 /* SourceNode */ = {
+			isa = PBXGroup;
+			children = (
+				242B80832B3C8FF4F3CC18F1 /* SourceNode.cpp */,
+				A7BF9312D81FF5DCEAB8AC47 /* SourceNode.h */,
+				326F8386BCD4E4189D0CC00F /* SourceNodeEditor.cpp */,
+				B5D805B691B1C38D959F6B54 /* SourceNodeEditor.h */,
+			);
+			name = SourceNode;
+			sourceTree = "<group>";
+		};
 		CDD260628D8AFE969895A610 /* text */ = {
 			isa = PBXGroup;
 			children = (
@@ -3159,6 +3400,21 @@
 			name = colour;
 			sourceTree = "<group>";
 		};
+		D3F8D770C9E60B5BA2CCBC68 /* SpikeSorter */ = {
+			isa = PBXGroup;
+			children = (
+				92F51CF12E0C21F38D5E61E8 /* SpikeSortBoxes.cpp */,
+				FBF2BF7B97C2FF8557CF39E6 /* SpikeSortBoxes.h */,
+				D45EF9812FBC284BCB7EEB7C /* SpikeSorter.cpp */,
+				78400C0FB79F6B0D1A27A6D4 /* SpikeSorter.h */,
+				6DF620BE87EA9F7F25A1144A /* SpikeSorterCanvas.cpp */,
+				B66B8CFF619CBF2D66F031E3 /* SpikeSorterCanvas.h */,
+				F46365D8E42099148B843C95 /* SpikeSorterEditor.cpp */,
+				F753A8E9CE0C51998066EA07 /* SpikeSorterEditor.h */,
+			);
+			name = SpikeSorter;
+			sourceTree = "<group>";
+		};
 		D6EA061B97C039BF4BAAB444 /* effects */ = {
 			isa = PBXGroup;
 			children = (
@@ -3288,6 +3544,12 @@
 		DEA24DC5AC8325310FB40395 /* DataThreads */ = {
 			isa = PBXGroup;
 			children = (
+				80A19F69D9B205BCC0ABA293 /* EcubeEditor.cpp */,
+				C7D36423459E79F3F462A421 /* EcubeEditor.h */,
+				FAFA97C9B7C7635298E274DB /* RHD2000Editor.cpp */,
+				FD9EE3CDFCEE08859781DA65 /* RHD2000Editor.h */,
+				AFBAE04615D379A18B133090 /* EcubeThread.cpp */,
+				A166A3013C7AF1BCCA050367 /* EcubeThread.h */,
 				EBA825AF6FDB51EBA368CB8D /* rhythm-api */,
 				A3FB0EA0264580F6B00D993B /* RHD2000Thread.cpp */,
 				23A6BA852B71DAAF3F709428 /* RHD2000Thread.h */,
@@ -3312,6 +3574,17 @@
 			name = documents;
 			sourceTree = "<group>";
 		};
+		E2624A71F15AE5C96B34505B /* Splitter */ = {
+			isa = PBXGroup;
+			children = (
+				B9068FF0373FA8321C33C42C /* Splitter.cpp */,
+				E1E9FAB63BD90C10F2BEF74C /* Splitter.h */,
+				607CC2BFCB0622B3348FA1AD /* SplitterEditor.cpp */,
+				385F66531BAB16BA754E901E /* SplitterEditor.h */,
+			);
+			name = Splitter;
+			sourceTree = "<group>";
+		};
 		E2F864696FA2DDDAD60C7E83 /* juce_audio_formats */ = {
 			isa = PBXGroup;
 			children = (
@@ -3403,6 +3676,28 @@
 			name = "rhythm-api";
 			sourceTree = "<group>";
 		};
+		EC06134D54CF6C9870853ED6 /* PulsePalOutput */ = {
+			isa = PBXGroup;
+			children = (
+				183701B0661B6FE784C6A75F /* PulsePalOutput.cpp */,
+				E1A51630F1C6E392EBEDD469 /* PulsePalOutput.h */,
+				DE0EA2212323DEFEBA3D078F /* PulsePalOutputEditor.cpp */,
+				623684E73A6005C7BB2717A6 /* PulsePalOutputEditor.h */,
+			);
+			name = PulsePalOutput;
+			sourceTree = "<group>";
+		};
+		F12EEDE785E2D38F654AE1B1 /* MessageCenter */ = {
+			isa = PBXGroup;
+			children = (
+				BC1543B1F822FEEDCB9AC26D /* MessageCenter.cpp */,
+				8F058EA775325F9C5650944E /* MessageCenter.h */,
+				AEFC8A0A9A35F50E59FDE678 /* MessageCenterEditor.cpp */,
+				9EB2B238943CCC32B587881C /* MessageCenterEditor.h */,
+			);
+			name = MessageCenter;
+			sourceTree = "<group>";
+		};
 		F196226BFBA15D76688C61C6 /* juce_cryptography */ = {
 			isa = PBXGroup;
 			children = (
@@ -3428,6 +3723,26 @@
 			name = juce_events;
 			sourceTree = "<group>";
 		};
+		F8338C653582335A30EADE40 /* EventDetector */ = {
+			isa = PBXGroup;
+			children = (
+				C5C843AC83A36BE87E3F97F8 /* EventDetector.cpp */,
+				9410421AB1CD18F754FD4A9E /* EventDetector.h */,
+			);
+			name = EventDetector;
+			sourceTree = "<group>";
+		};
+		F884A8B18F33A6FFE6809906 /* RecordControl */ = {
+			isa = PBXGroup;
+			children = (
+				E849E3966302E7D4D06712F5 /* RecordControl.cpp */,
+				E0AB41DFF4A382B93658F53E /* RecordControl.h */,
+				56242BB33B53F133914517BD /* RecordControlEditor.cpp */,
+				F379BA0589FB65817B721314 /* RecordControlEditor.h */,
+			);
+			name = RecordControl;
+			sourceTree = "<group>";
+		};
 		FA0E0597ED415901958AD5AE /* Products */ = {
 			isa = PBXGroup;
 			children = (
@@ -3550,81 +3865,18 @@
 			files = (
 				14BDAEA656AAFA60334CC55C /* AccessClass.cpp in Sources */,
 				C853FCE2F6C91B3643322CF0 /* PracticalSocket.cpp in Sources */,
-				00A0D05390DB9F2B74DDAA78 /* Bessel.cpp in Sources */,
-				4AD3281B0CCF122A25E33667 /* Biquad.cpp in Sources */,
-				F505DF3C2BA492B5A2F28D05 /* Butterworth.cpp in Sources */,
-				B226387EB0FCE3BE6773FF61 /* Cascade.cpp in Sources */,
-				B3B08037F49EC7540586828F /* ChebyshevI.cpp in Sources */,
-				B6C73582C501D8C3C03A4860 /* ChebyshevII.cpp in Sources */,
-				129ADFA8B25DE091AFA2D9E3 /* Custom.cpp in Sources */,
-				285FF16149C85F2793EBCBAE /* Design.cpp in Sources */,
-				D19775DC99C67AD20F98EF17 /* Documentation.cpp in Sources */,
-				CB470032BC92A30906C96258 /* Elliptic.cpp in Sources */,
-				4FEC4EC2796E37A3B11B50B9 /* Filter.cpp in Sources */,
-				A44FEA7117CFE2F06B9889B4 /* Legendre.cpp in Sources */,
-				C0E966234C8AF91C19CF6EA4 /* Param.cpp in Sources */,
-				BBE886EA79C50D0D68A5A753 /* PoleFilter.cpp in Sources */,
-				9D17609E468FC65EB70ED7F4 /* RBJ.cpp in Sources */,
-				AE06672D2CBF8F64465B2126 /* RootFinder.cpp in Sources */,
-				69630D3ECA4D6014EE3734CD /* State.cpp in Sources */,
 				0AE243437B40602D35435C32 /* AudioComponent.cpp in Sources */,
-				B89453078EB0A8107F39EDF3 /* SerialInput.cpp in Sources */,
-				F25EC78DCCC9CCEE805AE011 /* FileReader.cpp in Sources */,
-				EA6A1BDDF81818D516B93DD6 /* ChannelMappingNode.cpp in Sources */,
-				7077270005BA819E3D5654B5 /* PulsePalOutput.cpp in Sources */,
-				FDCFDC9CC6D7A82131190FB0 /* ReferenceNode.cpp in Sources */,
-				11D82BA398E9433440B76F66 /* PhaseDetector.cpp in Sources */,
-				EDEE5E21F0C9BDB7DB796083 /* AudioResamplingNode.cpp in Sources */,
-				C6F08BF3EF53274A42BB88EB /* Channel.cpp in Sources */,
-				790911EDF00A4BF77327D99A /* PulsePal.cpp in Sources */,
-				DDDFAE2042D8AD20CC78CE3C /* ofArduino.cpp in Sources */,
-				582C224AA50C9395810C8E27 /* ofSerial.cpp in Sources */,
-				704484388E63CDE33491E1AB /* EventDetector.cpp in Sources */,
-				1691EC0AC4C7083D65B925E2 /* FPGAOutput.cpp in Sources */,
-				AD032CEA5DBE4D4C76D3D2D1 /* ArduinoOutput.cpp in Sources */,
-				9E8544C3983B3203530B5A49 /* Parameter.cpp in Sources */,
-				685151FF4FB872983524A5C3 /* SpikeDisplayNode.cpp in Sources */,
-				627C7B84F5FD275FAF43663A /* WiFiOutput.cpp in Sources */,
-				C59764685E62E7C4D323F84B /* LfpDisplayNode.cpp in Sources */,
-				E4DA638CDD4DD574A6CD843E /* RecordControl.cpp in Sources */,
-				2B4A80DCF867DC025C21966B /* Merger.cpp in Sources */,
-				D0E9E20F9D8FDA700BB6D820 /* Splitter.cpp in Sources */,
-				19BB86C918F89D1377F8A0E1 /* SpikeObject.cpp in Sources */,
-				EE56A6BBBFA4A27A4BCF7279 /* SpikeDisplayCanvas.cpp in Sources */,
-				1B620FC17AAECA4C5DE741E2 /* DataWindow.cpp in Sources */,
-				5570682BF1A39FB3E3FAC182 /* LfpDisplayCanvas.cpp in Sources */,
-				ED8CB527B27C67E9E4DA027C /* SpikeDetector.cpp in Sources */,
-				DE758AF46844DF951655966C /* AudioNode.cpp in Sources */,
-				80E5365461A5A7A32C48C563 /* EventNode.cpp in Sources */,
-				DD77A0AB68C932F294B753C2 /* LfpTriggeredAverageEditor.cpp in Sources */,
-				A3CF90DE56808A47519FC101 /* SerialInputEditor.cpp in Sources */,
-				029C3B11BE586DA100895A60 /* ElectrodeButtons.cpp in Sources */,
-				52E0D9DC7F5C4703257D8BEB /* ChannelMappingEditor.cpp in Sources */,
-				EA46BA3970E958013FF85690 /* FileReaderEditor.cpp in Sources */,
-				88B896EB9793E0C44410D981 /* PhaseDetectorEditor.cpp in Sources */,
-				6272253EB0051C1F215CD4D9 /* PulsePalOutputEditor.cpp in Sources */,
-				AF26E388BF6536803E762CB1 /* RHD2000Editor.cpp in Sources */,
-				0CEFF81CD8861F959DB13362 /* RecordControlEditor.cpp in Sources */,
-				352F3875222B1D233013AAF9 /* ReferenceNodeEditor.cpp in Sources */,
-				F0EC60AEFAFF3D289F8110BE /* ResamplingNodeEditor.cpp in Sources */,
-				C3406F00595AEFF068EDB162 /* FPGAOutputEditor.cpp in Sources */,
-				3A2E957EB8D117C535F119E9 /* ArduinoOutputEditor.cpp in Sources */,
-				52AE3F7AEED81BA9ED5C4830 /* ChannelSelector.cpp in Sources */,
-				3933895CA488855A23943F61 /* ParameterEditor.cpp in Sources */,
-				AF67C81811F18FCE6AA9C895 /* SpikeDisplayEditor.cpp in Sources */,
-				AA16BE5A6BBD024C8FCFCDA8 /* VisualizerEditor.cpp in Sources */,
-				992137E90F9D41522FD56875 /* MergerEditor.cpp in Sources */,
-				7F188166D38DA7FB23311413 /* ImageIcon.cpp in Sources */,
-				A454D138EC507C01D299AB0F /* WiFiOutputEditor.cpp in Sources */,
-				784125612E2B7AC6CD89D835 /* EventNodeEditor.cpp in Sources */,
-				21539690A9A5DD20AFAF41D3 /* SignalGeneratorEditor.cpp in Sources */,
-				0836C50051EF59BF91D7B12D /* LfpDisplayEditor.cpp in Sources */,
-				55CD2E9F373B69C3E8363B78 /* SourceNodeEditor.cpp in Sources */,
-				2B29D90B985E9EB788472EFE /* SplitterEditor.cpp in Sources */,
-				D0873C347977633B4421B94D /* SpikeDetectorEditor.cpp in Sources */,
-				BF3254F07C15D467D6DB3FEF /* AudioEditor.cpp in Sources */,
-				6029B20DF2BD523AC0F78896 /* FilterEditor.cpp in Sources */,
-				6702EEA4E99D503C0EE933C4 /* GenericEditor.cpp in Sources */,
+				55227B30828797A8DCB0B91D /* ArduinoOutput.cpp in Sources */,
+				527EB48A4A9C2F4FF1BC4FB2 /* ArduinoOutputEditor.cpp in Sources */,
+				8352817FEDC7542D3E65B49A /* AudioEditor.cpp in Sources */,
+				44DB81313BDDF1ECB6AD33FE /* AudioNode.cpp in Sources */,
+				64FC0EA0C132341C1C3E98E1 /* AudioResamplingNode.cpp in Sources */,
+				C45009DBCD71E9E234BFCE97 /* Channel.cpp in Sources */,
+				E6038800731F7C747D181A51 /* ChannelMappingEditor.cpp in Sources */,
+				FFCA1C44C024BCA1878F49FE /* ChannelMappingNode.cpp in Sources */,
+				C9678AAD3560E89CCE8FA529 /* EcubeEditor.cpp in Sources */,
+				B88BCF2522AD283DDC0B4F16 /* RHD2000Editor.cpp in Sources */,
+				5C597B1A42C8CB3940CBDDA9 /* EcubeThread.cpp in Sources */,
 				89FCE8890946693CD5FC4A70 /* okFrontPanelDLL.cpp in Sources */,
 				C9AC286A46B3A1318F298DEF /* rhd2000datablock.cpp in Sources */,
 				DA836EC803E4FF4EDEBE6386 /* rhd2000evalboard.cpp in Sources */,
@@ -3634,13 +3886,92 @@
 				6B67D7B6301182C7621294B6 /* FPGAThread.cpp in Sources */,
 				FAE745870674A07A65690433 /* DataBuffer.cpp in Sources */,
 				24CC7E9A7E87F762D4AB0467 /* DataThread.cpp in Sources */,
-				66F3B79BDF9BFB631D7E3584 /* RecordNode.cpp in Sources */,
-				996F9E4989EB47941D8100DA /* SignalGenerator.cpp in Sources */,
-				BE54C019A73BBAE05BFD7D17 /* ResamplingNode.cpp in Sources */,
-				5AE42EF7A713B1EC0ACF9EDE /* FilterNode.cpp in Sources */,
-				71111DE81104B1536ECB6DFB /* SourceNode.cpp in Sources */,
-				85A60568B3DC342C76B4E679 /* GenericProcessor.cpp in Sources */,
-				8A5BACA019DA9B0EFAD5CE93 /* ProcessorGraph.cpp in Sources */,
+				9252537C12447F047243DEE9 /* Bessel.cpp in Sources */,
+				B081F3F4FA6D8C35E2EEE778 /* Biquad.cpp in Sources */,
+				7398C5E00B9093F78C697706 /* Butterworth.cpp in Sources */,
+				2416F9D9E4D89A706514FC25 /* Cascade.cpp in Sources */,
+				66507CA290B4730FE77B7ABC /* ChebyshevI.cpp in Sources */,
+				031957790B288A3ABED26A87 /* ChebyshevII.cpp in Sources */,
+				07868E8D0C1A0BB3A94E87AB /* Custom.cpp in Sources */,
+				2B90821075BA2DF4565644D4 /* Design.cpp in Sources */,
+				E18FD0CB21E95A6E81286611 /* Documentation.cpp in Sources */,
+				AD938EF313A6AC879CA4BED7 /* Elliptic.cpp in Sources */,
+				56C42E2DD0B4905488948796 /* Filter.cpp in Sources */,
+				DC1D91C883B609DBEF7A4235 /* Legendre.cpp in Sources */,
+				8ED8249C48B1BB53F617A789 /* Param.cpp in Sources */,
+				AD588F05EDFE59FD48A3F9B8 /* PoleFilter.cpp in Sources */,
+				6C0A7B0D658E39227319148F /* RBJ.cpp in Sources */,
+				469E1EF233BCD61F44687C0F /* RootFinder.cpp in Sources */,
+				411543734DA2029A3030D903 /* State.cpp in Sources */,
+				52AE3F7AEED81BA9ED5C4830 /* ChannelSelector.cpp in Sources */,
+				029C3B11BE586DA100895A60 /* ElectrodeButtons.cpp in Sources */,
+				6702EEA4E99D503C0EE933C4 /* GenericEditor.cpp in Sources */,
+				7F188166D38DA7FB23311413 /* ImageIcon.cpp in Sources */,
+				AA16BE5A6BBD024C8FCFCDA8 /* VisualizerEditor.cpp in Sources */,
+				44D7379F739C19C7B78B95F5 /* EventDetector.cpp in Sources */,
+				F4808CE43E77C8EC285A39DC /* EventNode.cpp in Sources */,
+				D1F0765F1497D5228ABCA63C /* EventNodeEditor.cpp in Sources */,
+				68EBB4CEB08BD3DEAC450B95 /* FileReader.cpp in Sources */,
+				24800AF87AD21CE652552EDE /* FileReaderEditor.cpp in Sources */,
+				0203D029CE7420984F737E51 /* FilterEditor.cpp in Sources */,
+				3BAE3A1FD0834E798B8602BF /* FilterNode.cpp in Sources */,
+				1A415CE073017DDDA7F2E234 /* FPGAOutput.cpp in Sources */,
+				63B3CC385B0988C7ABA3B07B /* FPGAOutputEditor.cpp in Sources */,
+				B49852F77C0C392C159A1914 /* GenericProcessor.cpp in Sources */,
+				9F431DA23C92CA0F8E3A2A28 /* LfpDisplayCanvas.cpp in Sources */,
+				BFFD23BD72ECEC9E54936061 /* LfpDisplayEditor.cpp in Sources */,
+				FA882EEE408CBBDC7BD90F14 /* LfpDisplayNode.cpp in Sources */,
+				0E62780F9978861D5D2BCF71 /* LfpTriggeredAverageCanvas.cpp in Sources */,
+				E13848868678C0655147C59D /* LfpTriggeredAverageEditor.cpp in Sources */,
+				01646F263C203BB412580CB8 /* LfpTriggeredAverageNode.cpp in Sources */,
+				6D00BABD3FE1AA0EAA267C1C /* Merger.cpp in Sources */,
+				AD371C6F383F03EF392B6581 /* MergerEditor.cpp in Sources */,
+				4EF2825142BBAA76FD55FE26 /* MessageCenter.cpp in Sources */,
+				3B05807D08271664EEC4977C /* MessageCenterEditor.cpp in Sources */,
+				F2586A2DCEF44961AEA247E8 /* ParameterEditor.cpp in Sources */,
+				3E7939ABAA984EE8BFC8CEDD /* Parameter.cpp in Sources */,
+				C9F9AE4CB2009DFFD7D7A67F /* PhaseDetector.cpp in Sources */,
+				C59D4B35ABCF3BE6D0A0665E /* PhaseDetectorEditor.cpp in Sources */,
+				BAC379C03C2E7995F2393EF5 /* ProcessorGraph.cpp in Sources */,
+				82160D8346428EC9F641FAD6 /* PulsePalOutput.cpp in Sources */,
+				15C43033BAB27663B4226539 /* PulsePalOutputEditor.cpp in Sources */,
+				BD091BDB684BB28E0F953B8B /* RecordControl.cpp in Sources */,
+				395F1886484CA576C63B7112 /* RecordControlEditor.cpp in Sources */,
+				E1247DDF1C88D99691499E52 /* EngineConfigWindow.cpp in Sources */,
+				0E036CEA1285F9B162A07356 /* HDF5FileFormat.cpp in Sources */,
+				A4A2DF3FA65BAB4322FE5E74 /* HDF5Recording.cpp in Sources */,
+				0A8D8C2D02858F0F08356EA9 /* OriginalRecording.cpp in Sources */,
+				AEDA8F23648EABF79215B566 /* RecordEngine.cpp in Sources */,
+				B806F023DF817BB2D59FEEFD /* RecordNode.cpp in Sources */,
+				A5A90525A975EC3B1E40086E /* ReferenceNode.cpp in Sources */,
+				79FC643530710BF2885932C1 /* ReferenceNodeEditor.cpp in Sources */,
+				69B5045877D4C674E8A4967F /* ResamplingNode.cpp in Sources */,
+				97105BCBC5B1BE4E86D48899 /* ResamplingNodeEditor.cpp in Sources */,
+				790911EDF00A4BF77327D99A /* PulsePal.cpp in Sources */,
+				DDDFAE2042D8AD20CC78CE3C /* ofArduino.cpp in Sources */,
+				582C224AA50C9395810C8E27 /* ofSerial.cpp in Sources */,
+				846EF153B423E09BC5BFDAFD /* SerialInput.cpp in Sources */,
+				66308BBB808DBB920AB3CBAB /* SerialInputEditor.cpp in Sources */,
+				1D0D651813C4A1DCBE811242 /* SignalGenerator.cpp in Sources */,
+				BFAC940E5771516A92281F96 /* SignalGeneratorEditor.cpp in Sources */,
+				7B69E73AF79BB2B10BAA559C /* SourceNode.cpp in Sources */,
+				74A14124A3B0C5FB13583B57 /* SourceNodeEditor.cpp in Sources */,
+				6D8A9AC5ECC0F2D26304849E /* SpikeDetector.cpp in Sources */,
+				AFC645928D103D9FA51481CA /* SpikeDetectorEditor.cpp in Sources */,
+				84BB28DDFF317D243DDC7FA2 /* SpikeDisplayCanvas.cpp in Sources */,
+				A14CA9089A09267E95C93E1D /* SpikeDisplayEditor.cpp in Sources */,
+				DED0D08EFA1EFF4F1D4D3BEF /* SpikeDisplayNode.cpp in Sources */,
+				9635A954DB8FDD6E19B977C3 /* SpikeSortBoxes.cpp in Sources */,
+				B9718533E5255AEC3F6C7B2F /* SpikeSorter.cpp in Sources */,
+				58EC9F834448B334410385EB /* SpikeSorterCanvas.cpp in Sources */,
+				027A01C5025DEA9DAFF605D3 /* SpikeSorterEditor.cpp in Sources */,
+				4910924155F31E96B9BAD050 /* Splitter.cpp in Sources */,
+				66DE280C28A69B2002C40A86 /* SplitterEditor.cpp in Sources */,
+				1B620FC17AAECA4C5DE741E2 /* DataWindow.cpp in Sources */,
+				19BB86C918F89D1377F8A0E1 /* SpikeObject.cpp in Sources */,
+				AEE1F2B70ED51F7AFEF4E93B /* WiFiOutput.cpp in Sources */,
+				74D0CA6935D890153FB58C56 /* WiFiOutputEditor.cpp in Sources */,
+				8F39AD3F7938EFE82D06E89F /* EcubeDialogComponent.cpp in Sources */,
 				BA608CEFC85F7AB9E30E0EB3 /* CustomArrowButton.cpp in Sources */,
 				D499273B65D901D0A101CAAA /* GraphViewer.cpp in Sources */,
 				95AE939ADE096394CCD2526F /* EditorViewportButtons.cpp in Sources */,
@@ -3650,7 +3981,6 @@
 				9A80E3D1D1758A31D2169497 /* CustomLookAndFeel.cpp in Sources */,
 				F4397EAE00E0B9F96C8B6C07 /* InfoLabel.cpp in Sources */,
 				09673DA3B4D6EA61DEFC0C46 /* DataViewport.cpp in Sources */,
-				591CED1277A8C945EF60841C /* MessageCenter.cpp in Sources */,
 				58D3FF3B1F462634167BDFB5 /* ControlPanel.cpp in Sources */,
 				3162B66BC8118715AAA527D7 /* UIComponent.cpp in Sources */,
 				004E78BC139419671A9EA137 /* MainWindow.cpp in Sources */,
@@ -3690,7 +4020,6 @@
 				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
 				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.8;
 				PRODUCT_NAME = "open-ephys";
 				WARNING_CFLAGS = "-Wreorder";
 				ZERO_LINK = NO;
@@ -3704,22 +4033,33 @@
 				CLANG_LINK_OBJC_RUNTIME = NO;
 				COMBINE_HIDPI_IMAGES = YES;
 				CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)";
+				DEAD_CODE_STRIPPING = YES;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_OPTIMIZATION_LEVEL = 3;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"_NDEBUG=1",
 					"NDEBUG=1",
 					"JUCER_XCODE_MAC_F6D2F4CF=1",
+					"JUCE_APP_VERSION=0.3.2",
+					"JUCE_APP_VERSION_HEX=0x302",
 				);
 				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				HEADER_SEARCH_PATHS = (
 					../../JuceLibraryCode,
+					/opt/local/include,
+					../../JuceLibraryCode/modules,
 					"$(inherited)",
 				);
 				INFOPLIST_FILE = Info.plist;
 				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = /opt/local/lib;
 				MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
+				OTHER_LDFLAGS = (
+					"-lhdf5",
+					"-lhdf5_cpp",
+				);
+				SDKROOT = macosx10.8;
 				SDKROOT_ppc = macosx10.5;
 			};
 			name = Release;
@@ -3738,16 +4078,25 @@
 					"_DEBUG=1",
 					"DEBUG=1",
 					"JUCER_XCODE_MAC_F6D2F4CF=1",
+					"JUCE_APP_VERSION=0.3.2",
+					"JUCE_APP_VERSION_HEX=0x302",
 				);
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				HEADER_SEARCH_PATHS = (
 					../../JuceLibraryCode,
+					/opt/local/include,
+					../../JuceLibraryCode/modules,
 					"$(inherited)",
 				);
 				INFOPLIST_FILE = Info.plist;
 				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = /opt/local/lib;
 				MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
-				ONLY_ACTIVE_ARCH = YES;
+				OTHER_LDFLAGS = (
+					"-lhdf5",
+					"-lhdf5_cpp",
+				);
+				SDKROOT = macosx10.8;
 				SDKROOT_ppc = macosx10.5;
 			};
 			name = Debug;
@@ -3766,7 +4115,6 @@
 				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
 				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.8;
 				ONLY_ACTIVE_ARCH = YES;
 				PRODUCT_NAME = "open-ephys";
 				WARNING_CFLAGS = "-Wreorder";
diff --git a/Builds/VisualStudio2012/open-ephys.v12.suo b/Builds/VisualStudio2012/open-ephys.v12.suo
new file mode 100644
index 0000000000000000000000000000000000000000..1e2cb6bfd97ff8ac68505d3b65464004fe4ca9c9
Binary files /dev/null and b/Builds/VisualStudio2012/open-ephys.v12.suo differ
diff --git a/Builds/VisualStudio2012/open-ephys.vcxproj b/Builds/VisualStudio2012/open-ephys.vcxproj
index 38df4a45bda9a1fd2ce1e41404814a8ffe20ccb4..d738d24725b8566be4b2e931e65aaacfcf044a28 100644
--- a/Builds/VisualStudio2012/open-ephys.vcxproj
+++ b/Builds/VisualStudio2012/open-ephys.vcxproj
@@ -27,27 +27,23 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
     <PlatformToolset>v110</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <PlatformToolset>v110</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug64|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
     <PlatformToolset>v110</PlatformToolset>
     <PlatformToolset>v110</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release64|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <PlatformToolset>v110</PlatformToolset>
     <PlatformToolset>v110</PlatformToolset>
@@ -66,19 +62,19 @@
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\bin\</OutDir>
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">open-ephys</TargetName>
     <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateManifest>
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LibraryPath);../../Resources/ZeroMQ/lib_x86;../../Resources/Google Protocols/vsprojects/Debug</LibraryPath>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LibraryPath);../../Resources/windows-libs/HDF5/lib/x86</LibraryPath>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\bin\</OutDir>
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">open-ephys</TargetName>
     <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateManifest>
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LibraryPath);../../Resources/ZeroMQ/lib_x86;../../Resources/Google Protocols/vsprojects/Release</LibraryPath>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LibraryPath);../../Resources/windows-libs/HDF5/lib/x86</LibraryPath>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug64|x64'">.\Debug64\bin\</OutDir>
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug64|x64'">open-ephys</TargetName>
     <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug64|x64'">true</GenerateManifest>
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug64|x64'">$(LibraryPath);../../Resources/ZeroMQ/lib_x64;../../Resources/Google Protocols/vsprojects/x64/Debug</LibraryPath>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug64|x64'">$(LibraryPath);../../Resources/windows-libs/HDF5/lib/x64</LibraryPath>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release64|x64'">.\Release64\bin\</OutDir>
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Release64|x64'">open-ephys</TargetName>
     <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release64|x64'">true</GenerateManifest>
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release64|x64'">$(LibraryPath);../../Resources/ZeroMQ/lib_x64;../../Resources/Google Protocols/vsprojects/x64/Release</LibraryPath>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release64|x64'">$(LibraryPath);../../Resources/windows-libs/HDF5/lib/x64</LibraryPath>
     <PlatformToolset>v110</PlatformToolset>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -92,8 +88,8 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <AdditionalIncludeDirectories>..\..\JuceLibraryCode;../../Resources/Google Protocols/src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;DEBUG;_DEBUG;NOMINMAX;JUCER_VS2012_78A501F=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;../../Resources/windows-libs/HDF5/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;DEBUG;_DEBUG;NOMINMAX;JUCER_VS2012_78A501F=1;JUCE_APP_VERSION=0.3.2;JUCE_APP_VERSION_HEX=0x302;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <RuntimeTypeInfo>true</RuntimeTypeInfo>
       <PrecompiledHeader/>
@@ -116,16 +112,16 @@
       <SubSystem>Windows</SubSystem>
       <TargetMachine>MachineX86</TargetMachine>
       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-      <AdditionalLibraryDirectories>../../Resources/ZeroMQ/lib_x86;../../Resources/Google Protocols/vsprojects/Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>../../Resources/windows-libs/HDF5/lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <LargeAddressAware>true</LargeAddressAware>
-      <AdditionalDependencies>setupapi.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>setupapi.lib;opengl32.lib;glu32.lib;hdf5.lib;hdf5_cpp.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <Bscmake>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <OutputFile>$(IntDir)\open-ephys.bsc</OutputFile>
     </Bscmake>
     <PostBuildEvent>
-      <Command>copy ..\..\Resources\DLLs\okFrontPanel.dll .\Debug\bin</Command>
+      <Command>copy &quot;..\..\Resources\DLLs\*.dll&quot; &quot;$(OutDir)&quot;</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -138,8 +134,8 @@
     </Midl>
     <ClCompile>
       <Optimization>Full</Optimization>
-      <AdditionalIncludeDirectories>..\..\JuceLibraryCode;../../Resources/Google Protocols/src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;NOMINMAX;JUCER_VS2012_78A501F=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;../../Resources/windows-libs/HDF5/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;NOMINMAX;JUCER_VS2012_78A501F=1;JUCE_APP_VERSION=0.3.2;JUCE_APP_VERSION_HEX=0x302;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeTypeInfo>true</RuntimeTypeInfo>
       <PrecompiledHeader/>
@@ -163,16 +159,16 @@
       <TargetMachine>MachineX86</TargetMachine>
       <OptimizeReferences>true</OptimizeReferences>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <AdditionalLibraryDirectories>../../Resources/ZeroMQ/lib_x86;../../Resources/Google Protocols/vsprojects/Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>../../Resources/windows-libs/HDF5/lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <LargeAddressAware>true</LargeAddressAware>
-      <AdditionalDependencies>setupapi.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>setupapi.lib;opengl32.lib;glu32.lib;hdf5.lib;hdf5_cpp.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <Bscmake>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <OutputFile>$(IntDir)\open-ephys.bsc</OutputFile>
     </Bscmake>
     <PostBuildEvent>
-      <Command>copy ..\..\Resources\DLLs\okFrontPanel.dll .\Release\bin</Command>
+      <Command>copy &quot;..\..\Resources\DLLs\*.dll&quot; &quot;$(OutDir)&quot;</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug64|x64'">
@@ -186,8 +182,8 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <AdditionalIncludeDirectories>..\..\JuceLibraryCode;../../Resources/Google Protocols/src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;DEBUG;_DEBUG;NOMINMAX;JUCER_VS2012_78A501F=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;../../Resources/windows-libs/HDF5/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;DEBUG;_DEBUG;NOMINMAX;JUCER_VS2012_78A501F=1;JUCE_APP_VERSION=0.3.2;JUCE_APP_VERSION_HEX=0x302;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <RuntimeTypeInfo>true</RuntimeTypeInfo>
       <PrecompiledHeader/>
@@ -208,16 +204,16 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(IntDir)\open-ephys.pdb</ProgramDatabaseFile>
       <SubSystem>Windows</SubSystem>
-      <AdditionalLibraryDirectories>../../Resources/ZeroMQ/lib_x64;../../Resources/Google Protocols/vsprojects/x64/Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>../../Resources/windows-libs/HDF5/lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <LargeAddressAware>true</LargeAddressAware>
-      <AdditionalDependencies>setupapi.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>setupapi.lib;opengl32.lib;glu32.lib;hdf5.lib;hdf5_cpp.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <Bscmake>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <OutputFile>$(IntDir)\open-ephys.bsc</OutputFile>
     </Bscmake>
     <PostBuildEvent>
-      <Command>copy ..\..\Resources\DLLs\Win64\okFrontPanel.dll .\Debug64\bin</Command>
+      <Command>copy &quot;..\..\Resources\DLLs\Win64\*.dll&quot; &quot;$(OutDir)&quot;</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release64|x64'">
@@ -230,8 +226,8 @@
     </Midl>
     <ClCompile>
       <Optimization>Full</Optimization>
-      <AdditionalIncludeDirectories>..\..\JuceLibraryCode;../../Resources/Google Protocols/src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;NOMINMAX;JUCER_VS2012_78A501F=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;../../Resources/windows-libs/HDF5/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;NOMINMAX;JUCER_VS2012_78A501F=1;JUCE_APP_VERSION=0.3.2;JUCE_APP_VERSION_HEX=0x302;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeTypeInfo>true</RuntimeTypeInfo>
       <PrecompiledHeader/>
@@ -254,96 +250,33 @@
       <SubSystem>Windows</SubSystem>
       <OptimizeReferences>true</OptimizeReferences>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <AdditionalLibraryDirectories>../../Resources/ZeroMQ/lib_x64;../../Resources/Google Protocols/vsprojects/x64/Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>../../Resources/windows-libs/HDF5/lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <LargeAddressAware>true</LargeAddressAware>
-      <AdditionalDependencies>setupapi.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>setupapi.lib;opengl32.lib;glu32.lib;hdf5.lib;hdf5_cpp.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <Bscmake>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <OutputFile>$(IntDir)\open-ephys.bsc</OutputFile>
     </Bscmake>
     <PostBuildEvent>
-      <Command>copy ..\..\Resources\DLLs\Win64\okFrontPanel.dll .\Release64\bin</Command>
+      <Command>copy &quot;..\..\Resources\DLLs\Win64\*.dll&quot; &quot;$(OutDir)&quot;</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClCompile Include="..\..\Source\AccessClass.cpp"/>
     <ClCompile Include="..\..\Source\Network\PracticalSocket.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Bessel.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Biquad.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Butterworth.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Cascade.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\ChebyshevI.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\ChebyshevII.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Custom.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Design.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Documentation.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Elliptic.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Filter.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Legendre.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\Param.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\PoleFilter.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\RBJ.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\RootFinder.cpp"/>
-    <ClCompile Include="..\..\Source\Dsp\State.cpp"/>
     <ClCompile Include="..\..\Source\Audio\AudioComponent.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\SerialInput.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\FileReader.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\ChannelMappingNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\PulsePalOutput.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\ReferenceNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\PhaseDetector.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\AudioResamplingNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Channel.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Serial\PulsePal.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Serial\ofArduino.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Serial\ofSerial.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\EventDetector.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\FPGAOutput.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\ArduinoOutput.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Parameter.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\WiFiOutput.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Utilities\RecordControl.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Utilities\Merger.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Utilities\Splitter.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Visualization\SpikeObject.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Visualization\SpikeDisplayCanvas.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Visualization\DataWindow.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Visualization\LfpDisplayCanvas.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\SpikeDetector.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\AudioNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\EventNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\LfpTriggeredAverageEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\SerialInputEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\ElectrodeButtons.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\ChannelMappingEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\FileReaderEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\PhaseDetectorEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\PulsePalOutputEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\RHD2000Editor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\RecordControlEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\ReferenceNodeEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\ResamplingNodeEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\FPGAOutputEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\ArduinoOutputEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\ChannelSelector.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\ParameterEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\SpikeDisplayEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\VisualizerEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\MergerEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\ImageIcon.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\WiFiOutputEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\EventNodeEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\SignalGeneratorEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\LfpDisplayEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\SourceNodeEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\SplitterEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\SpikeDetectorEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\AudioEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\FilterEditor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\Editors\GenericEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutput.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutputEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\AudioNode\AudioEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\AudioNode\AudioNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\AudioResamplingNode\AudioResamplingNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Channel\Channel.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\EcubeEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\RHD2000Editor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\EcubeThread.cpp"/>
     <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\okFrontPanelDLL.cpp"/>
     <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000datablock.cpp"/>
     <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000evalboard.cpp"/>
@@ -353,13 +286,92 @@
     <ClCompile Include="..\..\Source\Processors\DataThreads\FPGAThread.cpp"/>
     <ClCompile Include="..\..\Source\Processors\DataThreads\DataBuffer.cpp"/>
     <ClCompile Include="..\..\Source\Processors\DataThreads\DataThread.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\RecordNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\SignalGenerator.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\ResamplingNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\FilterNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\SourceNode.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\GenericProcessor.cpp"/>
-    <ClCompile Include="..\..\Source\Processors\ProcessorGraph.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Bessel.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Biquad.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Butterworth.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Cascade.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\ChebyshevI.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\ChebyshevII.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Custom.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Design.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Documentation.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Elliptic.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Filter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Legendre.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Param.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\PoleFilter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\RBJ.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\RootFinder.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\State.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Editors\ChannelSelector.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Editors\ElectrodeButtons.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Editors\GenericEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Editors\ImageIcon.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Editors\VisualizerEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\EventDetector\EventDetector.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\EventNode\EventNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\EventNode\EventNodeEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FileReader\FileReader.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FileReader\FileReaderEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FilterNode\FilterEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FilterNode\FilterNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FPGAOutput\FPGAOutput.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FPGAOutput\FPGAOutputEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\GenericProcessor\GenericProcessor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayCanvas.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageCanvas.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Merger\Merger.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Merger\MergerEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\MessageCenter\MessageCenter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\MessageCenter\MessageCenterEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Parameter\ParameterEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Parameter\Parameter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\PhaseDetector\PhaseDetector.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\PhaseDetector\PhaseDetectorEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ProcessorGraph\ProcessorGraph.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutput.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutputEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordControl\RecordControl.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordControl\RecordControlEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\EngineConfigWindow.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\HDF5FileFormat.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\HDF5Recording.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\OriginalRecording.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\RecordEngine.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\RecordNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ReferenceNode\ReferenceNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ReferenceNode\ReferenceNodeEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ResamplingNode\ResamplingNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ResamplingNode\ResamplingNodeEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Serial\PulsePal.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Serial\ofArduino.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Serial\ofSerial.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SerialInput\SerialInput.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SerialInput\SerialInputEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SignalGenerator\SignalGenerator.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SignalGenerator\SignalGeneratorEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SourceNode\SourceNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SourceNode\SourceNodeEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeDetector\SpikeDetector.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeDetector\SpikeDetectorEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayCanvas.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSortBoxes.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorterCanvas.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorterEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Splitter\Splitter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Splitter\SplitterEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Visualization\DataWindow.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Visualization\SpikeObject.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\WiFiOutput\WiFiOutput.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\WiFiOutput\WiFiOutputEditor.cpp"/>
+    <ClCompile Include="..\..\Source\UI\EcubeDialogComponent.cpp"/>
     <ClCompile Include="..\..\Source\UI\CustomArrowButton.cpp"/>
     <ClCompile Include="..\..\Source\UI\GraphViewer.cpp"/>
     <ClCompile Include="..\..\Source\UI\EditorViewportButtons.cpp"/>
@@ -369,7 +381,6 @@
     <ClCompile Include="..\..\Source\UI\CustomLookAndFeel.cpp"/>
     <ClCompile Include="..\..\Source\UI\InfoLabel.cpp"/>
     <ClCompile Include="..\..\Source\UI\DataViewport.cpp"/>
-    <ClCompile Include="..\..\Source\UI\MessageCenter.cpp"/>
     <ClCompile Include="..\..\Source\UI\ControlPanel.cpp"/>
     <ClCompile Include="..\..\Source\UI\UIComponent.cpp"/>
     <ClCompile Include="..\..\Source\MainWindow.cpp"/>
@@ -1500,89 +1511,18 @@
   <ItemGroup>
     <ClInclude Include="..\..\Source\AccessClass.h"/>
     <ClInclude Include="..\..\Source\Network\PracticalSocket.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Bessel.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Biquad.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Butterworth.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Cascade.h"/>
-    <ClInclude Include="..\..\Source\Dsp\ChebyshevI.h"/>
-    <ClInclude Include="..\..\Source\Dsp\ChebyshevII.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Common.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Custom.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Design.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Dsp.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Elliptic.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Filter.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Layout.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Legendre.h"/>
-    <ClInclude Include="..\..\Source\Dsp\MathSupplement.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Params.h"/>
-    <ClInclude Include="..\..\Source\Dsp\PoleFilter.h"/>
-    <ClInclude Include="..\..\Source\Dsp\RBJ.h"/>
-    <ClInclude Include="..\..\Source\Dsp\RootFinder.h"/>
-    <ClInclude Include="..\..\Source\Dsp\SmoothedFilter.h"/>
-    <ClInclude Include="..\..\Source\Dsp\State.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Types.h"/>
-    <ClInclude Include="..\..\Source\Dsp\Utilities.h"/>
     <ClInclude Include="..\..\Source\Audio\AudioComponent.h"/>
-    <ClInclude Include="..\..\Source\Processors\SerialInput.h"/>
-    <ClInclude Include="..\..\Source\Processors\FileReader.h"/>
-    <ClInclude Include="..\..\Source\Processors\ChannelMappingNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\PulsePalOutput.h"/>
-    <ClInclude Include="..\..\Source\Processors\ReferenceNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\PhaseDetector.h"/>
-    <ClInclude Include="..\..\Source\Processors\AudioResamplingNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\Channel.h"/>
-    <ClInclude Include="..\..\Source\Processors\Serial\PulsePal.h"/>
-    <ClInclude Include="..\..\Source\Processors\Serial\ofArduino.h"/>
-    <ClInclude Include="..\..\Source\Processors\Serial\ofConstants.h"/>
-    <ClInclude Include="..\..\Source\Processors\Serial\ofSerial.h"/>
-    <ClInclude Include="..\..\Source\Processors\EventDetector.h"/>
-    <ClInclude Include="..\..\Source\Processors\FPGAOutput.h"/>
-    <ClInclude Include="..\..\Source\Processors\ArduinoOutput.h"/>
-    <ClInclude Include="..\..\Source\Processors\Parameter.h"/>
-    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\WiFiOutput.h"/>
-    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\Utilities\RecordControl.h"/>
-    <ClInclude Include="..\..\Source\Processors\Utilities\Merger.h"/>
-    <ClInclude Include="..\..\Source\Processors\Utilities\Splitter.h"/>
-    <ClInclude Include="..\..\Source\Processors\Visualization\SpikeObject.h"/>
-    <ClInclude Include="..\..\Source\Processors\Visualization\SpikeDisplayCanvas.h"/>
-    <ClInclude Include="..\..\Source\Processors\Visualization\Visualizer.h"/>
-    <ClInclude Include="..\..\Source\Processors\Visualization\DataWindow.h"/>
-    <ClInclude Include="..\..\Source\Processors\Visualization\LfpDisplayCanvas.h"/>
-    <ClInclude Include="..\..\Source\Processors\SpikeDetector.h"/>
-    <ClInclude Include="..\..\Source\Processors\AudioNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\EventNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\LfpTriggeredAverageEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\SerialInputEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\ElectrodeButtons.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\ChannelMappingEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\FileReaderEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\PhaseDetectorEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\PulsePalOutputEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\RHD2000Editor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\RecordControlEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\ReferenceNodeEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\ResamplingNodeEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\FPGAOutputEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\ArduinoOutputEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\ChannelSelector.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\ParameterEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\SpikeDisplayEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\VisualizerEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\MergerEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\ImageIcon.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\WiFiOutputEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\EventNodeEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\SignalGeneratorEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\LfpDisplayEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\SourceNodeEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\SplitterEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\SpikeDetectorEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\AudioEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\FilterEditor.h"/>
-    <ClInclude Include="..\..\Source\Processors\Editors\GenericEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutput.h"/>
+    <ClInclude Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutputEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\AudioNode\AudioEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\AudioNode\AudioNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\AudioResamplingNode\AudioResamplingNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\Channel\Channel.h"/>
+    <ClInclude Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\EcubeEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\RHD2000Editor.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\EcubeThread.h"/>
     <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\okFrontPanelDLL.h"/>
     <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000datablock.h"/>
     <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000evalboard.h"/>
@@ -1592,13 +1532,100 @@
     <ClInclude Include="..\..\Source\Processors\DataThreads\FPGAThread.h"/>
     <ClInclude Include="..\..\Source\Processors\DataThreads\DataBuffer.h"/>
     <ClInclude Include="..\..\Source\Processors\DataThreads\DataThread.h"/>
-    <ClInclude Include="..\..\Source\Processors\RecordNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\SignalGenerator.h"/>
-    <ClInclude Include="..\..\Source\Processors\ResamplingNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\FilterNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\SourceNode.h"/>
-    <ClInclude Include="..\..\Source\Processors\GenericProcessor.h"/>
-    <ClInclude Include="..\..\Source\Processors\ProcessorGraph.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Bessel.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Biquad.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Butterworth.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Cascade.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\ChebyshevI.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\ChebyshevII.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Common.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Custom.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Design.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Dsp.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Elliptic.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Filter.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Layout.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Legendre.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\MathSupplement.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Params.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\PoleFilter.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\RBJ.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\RootFinder.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\SmoothedFilter.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\State.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Types.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Utilities.h"/>
+    <ClInclude Include="..\..\Source\Processors\Editors\ChannelSelector.h"/>
+    <ClInclude Include="..\..\Source\Processors\Editors\ElectrodeButtons.h"/>
+    <ClInclude Include="..\..\Source\Processors\Editors\GenericEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Editors\ImageIcon.h"/>
+    <ClInclude Include="..\..\Source\Processors\Editors\VisualizerEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\EventDetector\EventDetector.h"/>
+    <ClInclude Include="..\..\Source\Processors\EventNode\EventNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\EventNode\EventNodeEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\FileReader\FileReader.h"/>
+    <ClInclude Include="..\..\Source\Processors\FileReader\FileReaderEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\FilterNode\FilterEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\FilterNode\FilterNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\FPGAOutput\FPGAOutput.h"/>
+    <ClInclude Include="..\..\Source\Processors\FPGAOutput\FPGAOutputEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\GenericProcessor\GenericProcessor.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayCanvas.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageCanvas.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\Merger\Merger.h"/>
+    <ClInclude Include="..\..\Source\Processors\Merger\MergerEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\MessageCenter\MessageCenter.h"/>
+    <ClInclude Include="..\..\Source\Processors\MessageCenter\MessageCenterEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Parameter\ParameterEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Parameter\Parameter.h"/>
+    <ClInclude Include="..\..\Source\Processors\PhaseDetector\PhaseDetector.h"/>
+    <ClInclude Include="..\..\Source\Processors\PhaseDetector\PhaseDetectorEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\ProcessorGraph\ProcessorGraph.h"/>
+    <ClInclude Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutput.h"/>
+    <ClInclude Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutputEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordControl\RecordControl.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordControl\RecordControlEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\EngineConfigWindow.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\HDF5FileFormat.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\HDF5Recording.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\OriginalRecording.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\RecordEngine.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\RecordNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\ReferenceNode\ReferenceNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\ReferenceNode\ReferenceNodeEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\ResamplingNode\ResamplingNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\ResamplingNode\ResamplingNodeEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Serial\PulsePal.h"/>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofArduino.h"/>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofConstants.h"/>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofSerial.h"/>
+    <ClInclude Include="..\..\Source\Processors\SerialInput\SerialInput.h"/>
+    <ClInclude Include="..\..\Source\Processors\SerialInput\SerialInputEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\SignalGenerator\SignalGenerator.h"/>
+    <ClInclude Include="..\..\Source\Processors\SignalGenerator\SignalGeneratorEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\SourceNode\SourceNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\SourceNode\SourceNodeEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeDetector\SpikeDetector.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeDetector\SpikeDetectorEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayCanvas.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSortBoxes.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorter.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorterCanvas.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorterEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Splitter\Splitter.h"/>
+    <ClInclude Include="..\..\Source\Processors\Splitter\SplitterEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Visualization\DataWindow.h"/>
+    <ClInclude Include="..\..\Source\Processors\Visualization\SpikeObject.h"/>
+    <ClInclude Include="..\..\Source\Processors\Visualization\Visualizer.h"/>
+    <ClInclude Include="..\..\Source\Processors\WiFiOutput\WiFiOutput.h"/>
+    <ClInclude Include="..\..\Source\Processors\WiFiOutput\WiFiOutputEditor.h"/>
+    <ClInclude Include="..\..\Source\UI\EcubeDialogComponent.h"/>
     <ClInclude Include="..\..\Source\UI\CustomArrowButton.h"/>
     <ClInclude Include="..\..\Source\UI\GraphViewer.h"/>
     <ClInclude Include="..\..\Source\UI\EditorViewportButtons.h"/>
@@ -1608,7 +1635,6 @@
     <ClInclude Include="..\..\Source\UI\CustomLookAndFeel.h"/>
     <ClInclude Include="..\..\Source\UI\InfoLabel.h"/>
     <ClInclude Include="..\..\Source\UI\DataViewport.h"/>
-    <ClInclude Include="..\..\Source\UI\MessageCenter.h"/>
     <ClInclude Include="..\..\Source\UI\ControlPanel.h"/>
     <ClInclude Include="..\..\Source\UI\UIComponent.h"/>
     <ClInclude Include="..\..\Source\MainWindow.h"/>
diff --git a/Builds/VisualStudio2012/open-ephys.vcxproj.filters b/Builds/VisualStudio2012/open-ephys.vcxproj.filters
index 8f6fab367965183adc4db029ba5ed9419bf7acaa..b1b6225b788b6cf1a2a571b39ee915de31a62f31 100644
--- a/Builds/VisualStudio2012/open-ephys.vcxproj.filters
+++ b/Builds/VisualStudio2012/open-ephys.vcxproj.filters
@@ -26,26 +26,26 @@
     <Filter Include="open-ephys\Source\Network">
       <UniqueIdentifier>{F426EB08-DE72-34FB-F5F1-D8D077A9C12D}</UniqueIdentifier>
     </Filter>
-    <Filter Include="open-ephys\Source\Dsp">
-      <UniqueIdentifier>{A6A61A5B-F355-7BD1-D31D-6FFCFA565F59}</UniqueIdentifier>
-    </Filter>
     <Filter Include="open-ephys\Source\Audio">
       <UniqueIdentifier>{DC7BD6F0-2EB6-B7BF-B84C-66EF8EE93230}</UniqueIdentifier>
     </Filter>
     <Filter Include="open-ephys\Source\Processors">
       <UniqueIdentifier>{3DDEC88C-BAA5-2DDA-A59F-0FB74070AB82}</UniqueIdentifier>
     </Filter>
-    <Filter Include="open-ephys\Source\Processors\Serial">
-      <UniqueIdentifier>{58FEEDBF-D0C4-32AB-FC79-00C612892B6D}</UniqueIdentifier>
+    <Filter Include="open-ephys\Source\Processors\ArduinoOutput">
+      <UniqueIdentifier>{26D17857-B604-0035-CFB5-C3FFD320BD99}</UniqueIdentifier>
     </Filter>
-    <Filter Include="open-ephys\Source\Processors\Utilities">
-      <UniqueIdentifier>{9465E55A-A9FC-7BED-5EC5-A0596662B8FD}</UniqueIdentifier>
+    <Filter Include="open-ephys\Source\Processors\AudioNode">
+      <UniqueIdentifier>{117683A8-B332-1FBB-1FA0-8C6C7D231B69}</UniqueIdentifier>
     </Filter>
-    <Filter Include="open-ephys\Source\Processors\Visualization">
-      <UniqueIdentifier>{851942D5-FED6-A7B2-6FAB-C278A247FE7A}</UniqueIdentifier>
+    <Filter Include="open-ephys\Source\Processors\AudioResamplingNode">
+      <UniqueIdentifier>{BB0D2303-17CA-2E39-9765-7A701B2AE2F6}</UniqueIdentifier>
     </Filter>
-    <Filter Include="open-ephys\Source\Processors\Editors">
-      <UniqueIdentifier>{E65874A6-23B2-9D76-B12A-15730E2192BC}</UniqueIdentifier>
+    <Filter Include="open-ephys\Source\Processors\Channel">
+      <UniqueIdentifier>{7374BFF8-0BFC-382A-1DC3-F4B934CF25BC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\ChannelMappingNode">
+      <UniqueIdentifier>{CFA4FC13-DA1B-011C-D897-0FF0B7D1301B}</UniqueIdentifier>
     </Filter>
     <Filter Include="open-ephys\Source\Processors\DataThreads">
       <UniqueIdentifier>{AA123918-8642-2612-7B72-C63DA032271B}</UniqueIdentifier>
@@ -53,6 +53,96 @@
     <Filter Include="open-ephys\Source\Processors\DataThreads\rhythm-api">
       <UniqueIdentifier>{EF1534B7-662E-9844-D11F-1D1003B02E4A}</UniqueIdentifier>
     </Filter>
+    <Filter Include="open-ephys\Source\Processors\Dsp">
+      <UniqueIdentifier>{9C1026A0-8DA9-8D8D-AC1D-22880764350D}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Editors">
+      <UniqueIdentifier>{E65874A6-23B2-9D76-B12A-15730E2192BC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\EventDetector">
+      <UniqueIdentifier>{FDD5B79A-1AA4-7745-BB6E-E09A6DFC328E}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\EventNode">
+      <UniqueIdentifier>{3BDCC6CD-7B1F-ED1C-7442-F2B0CD1A86C8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\FileReader">
+      <UniqueIdentifier>{59F490B2-F5D9-601B-01AE-368632E3C9D7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\FilterNode">
+      <UniqueIdentifier>{189BB62E-5852-A4F3-AC79-704FAAE02870}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\FPGAOutput">
+      <UniqueIdentifier>{995BE2D8-55CB-BBA8-8155-2EFE5F03F143}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\GenericProcessor">
+      <UniqueIdentifier>{223ADE1C-7B16-1075-5D22-4771767BF960}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\LfpDisplayNode">
+      <UniqueIdentifier>{6F781BCA-7DB6-E933-BDDB-D2EAA51713B0}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\LfpTriggeredAverageNode">
+      <UniqueIdentifier>{1150A21B-5E97-AC73-C141-CEF966829E71}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Merger">
+      <UniqueIdentifier>{144C1CD2-E387-1D24-EFF3-C5238BD84182}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\MessageCenter">
+      <UniqueIdentifier>{BC6AF028-A7C2-7914-7DCA-A3F145C7DF5F}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Parameter">
+      <UniqueIdentifier>{1A622D55-9AE3-2A07-5AC5-237BFA2278DD}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\PhaseDetector">
+      <UniqueIdentifier>{C9BE6651-5B98-F5D3-047F-E021EE143E00}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\ProcessorGraph">
+      <UniqueIdentifier>{6A13AFE9-16FA-463C-B758-8702F1EA4F8B}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\PulsePalOutput">
+      <UniqueIdentifier>{75B4E291-E4EA-812C-4963-E760993C4B0D}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\RecordControl">
+      <UniqueIdentifier>{2DF3655B-132B-CD8A-6483-C2F4C74C6D42}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\RecordNode">
+      <UniqueIdentifier>{185877A6-9FE6-DD2E-BC41-93EE3C608CFC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\ReferenceNode">
+      <UniqueIdentifier>{763A6B4C-B0C6-BA22-7FAB-0DEEF8D66097}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\ResamplingNode">
+      <UniqueIdentifier>{3135385A-1E61-FB08-3E00-D5C52DFB1BC9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Serial">
+      <UniqueIdentifier>{58FEEDBF-D0C4-32AB-FC79-00C612892B6D}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SerialInput">
+      <UniqueIdentifier>{AC7C03CC-B7F3-EF83-085E-AB894624CAFC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SignalGenerator">
+      <UniqueIdentifier>{98080044-1FF9-22CA-70D0-745170D30FD6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SourceNode">
+      <UniqueIdentifier>{83A3043C-94AE-ADED-C72B-394EB4BAE6B4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SpikeDetector">
+      <UniqueIdentifier>{2D5F5EA7-422D-75BE-FA59-68F2C55B89E8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SpikeDisplayNode">
+      <UniqueIdentifier>{818E5C85-5930-DC8D-A3C2-0443F4C35B47}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SpikeSorter">
+      <UniqueIdentifier>{11B5BECA-5948-83BC-3C0F-DEB527800990}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Splitter">
+      <UniqueIdentifier>{2AAA8664-72AA-EC5C-92E2-3392067B058F}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Visualization">
+      <UniqueIdentifier>{851942D5-FED6-A7B2-6FAB-C278A247FE7A}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\WiFiOutput">
+      <UniqueIdentifier>{F733C561-3FBD-E17D-CC23-601836ADF7E6}</UniqueIdentifier>
+    </Filter>
     <Filter Include="open-ephys\Source\UI">
       <UniqueIdentifier>{717A0FE3-E079-E4BD-8F50-15A1953825C5}</UniqueIdentifier>
     </Filter>
@@ -361,278 +451,326 @@
     <ClCompile Include="..\..\Source\Network\PracticalSocket.cpp">
       <Filter>open-ephys\Source\Network</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Bessel.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Audio\AudioComponent.cpp">
+      <Filter>open-ephys\Source\Audio</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Biquad.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutput.cpp">
+      <Filter>open-ephys\Source\Processors\ArduinoOutput</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Butterworth.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutputEditor.cpp">
+      <Filter>open-ephys\Source\Processors\ArduinoOutput</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Cascade.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\AudioNode\AudioEditor.cpp">
+      <Filter>open-ephys\Source\Processors\AudioNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\ChebyshevI.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\AudioNode\AudioNode.cpp">
+      <Filter>open-ephys\Source\Processors\AudioNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\ChebyshevII.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\AudioResamplingNode\AudioResamplingNode.cpp">
+      <Filter>open-ephys\Source\Processors\AudioResamplingNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Custom.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\Channel\Channel.cpp">
+      <Filter>open-ephys\Source\Processors\Channel</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Design.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingEditor.cpp">
+      <Filter>open-ephys\Source\Processors\ChannelMappingNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Documentation.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingNode.cpp">
+      <Filter>open-ephys\Source\Processors\ChannelMappingNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Elliptic.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\EcubeEditor.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Filter.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\RHD2000Editor.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Legendre.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\EcubeThread.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\Param.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\okFrontPanelDLL.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000datablock.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\PoleFilter.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000evalboard.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000registers.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\RBJ.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\RHD2000Thread.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\RootFinder.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\FileReaderThread.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Dsp\State.cpp">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\FPGAThread.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Audio\AudioComponent.cpp">
-      <Filter>open-ephys\Source\Audio</Filter>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\DataBuffer.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\SerialInput.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\DataThread.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\FileReader.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Bessel.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\ChannelMappingNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Biquad.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\PulsePalOutput.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Butterworth.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\ReferenceNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Cascade.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\PhaseDetector.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\ChebyshevI.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\AudioResamplingNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\ChebyshevII.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Channel.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Custom.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Serial\PulsePal.cpp">
-      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Design.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Serial\ofArduino.cpp">
-      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Documentation.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Serial\ofSerial.cpp">
-      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Elliptic.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\EventDetector.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Filter.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\FPGAOutput.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Legendre.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\ArduinoOutput.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Param.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Parameter.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\PoleFilter.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\RBJ.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\WiFiOutput.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\RootFinder.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Dsp\State.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Utilities\RecordControl.cpp">
-      <Filter>open-ephys\Source\Processors\Utilities</Filter>
+    <ClCompile Include="..\..\Source\Processors\Editors\ChannelSelector.cpp">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Utilities\Merger.cpp">
-      <Filter>open-ephys\Source\Processors\Utilities</Filter>
+    <ClCompile Include="..\..\Source\Processors\Editors\ElectrodeButtons.cpp">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Utilities\Splitter.cpp">
-      <Filter>open-ephys\Source\Processors\Utilities</Filter>
+    <ClCompile Include="..\..\Source\Processors\Editors\GenericEditor.cpp">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Visualization\SpikeObject.cpp">
-      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    <ClCompile Include="..\..\Source\Processors\Editors\ImageIcon.cpp">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Visualization\SpikeDisplayCanvas.cpp">
-      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    <ClCompile Include="..\..\Source\Processors\Editors\VisualizerEditor.cpp">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Visualization\DataWindow.cpp">
-      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    <ClCompile Include="..\..\Source\Processors\EventDetector\EventDetector.cpp">
+      <Filter>open-ephys\Source\Processors\EventDetector</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Visualization\LfpDisplayCanvas.cpp">
-      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    <ClCompile Include="..\..\Source\Processors\EventNode\EventNode.cpp">
+      <Filter>open-ephys\Source\Processors\EventNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\SpikeDetector.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\EventNode\EventNodeEditor.cpp">
+      <Filter>open-ephys\Source\Processors\EventNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\AudioNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\FileReader\FileReader.cpp">
+      <Filter>open-ephys\Source\Processors\FileReader</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\EventNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\FileReader\FileReaderEditor.cpp">
+      <Filter>open-ephys\Source\Processors\FileReader</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\LfpTriggeredAverageEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\FilterNode\FilterEditor.cpp">
+      <Filter>open-ephys\Source\Processors\FilterNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\SerialInputEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\FilterNode\FilterNode.cpp">
+      <Filter>open-ephys\Source\Processors\FilterNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\ElectrodeButtons.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\FPGAOutput\FPGAOutput.cpp">
+      <Filter>open-ephys\Source\Processors\FPGAOutput</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\ChannelMappingEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\FPGAOutput\FPGAOutputEditor.cpp">
+      <Filter>open-ephys\Source\Processors\FPGAOutput</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\FileReaderEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\GenericProcessor\GenericProcessor.cpp">
+      <Filter>open-ephys\Source\Processors\GenericProcessor</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\PhaseDetectorEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayCanvas.cpp">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\PulsePalOutputEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayEditor.cpp">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\RHD2000Editor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayNode.cpp">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\RecordControlEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageCanvas.cpp">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\ReferenceNodeEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageEditor.cpp">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\ResamplingNodeEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageNode.cpp">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\FPGAOutputEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Merger\Merger.cpp">
+      <Filter>open-ephys\Source\Processors\Merger</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\ArduinoOutputEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Merger\MergerEditor.cpp">
+      <Filter>open-ephys\Source\Processors\Merger</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\ChannelSelector.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\MessageCenter\MessageCenter.cpp">
+      <Filter>open-ephys\Source\Processors\MessageCenter</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\ParameterEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\MessageCenter\MessageCenterEditor.cpp">
+      <Filter>open-ephys\Source\Processors\MessageCenter</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\SpikeDisplayEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Parameter\ParameterEditor.cpp">
+      <Filter>open-ephys\Source\Processors\Parameter</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\VisualizerEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\Parameter\Parameter.cpp">
+      <Filter>open-ephys\Source\Processors\Parameter</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\MergerEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\PhaseDetector\PhaseDetector.cpp">
+      <Filter>open-ephys\Source\Processors\PhaseDetector</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\ImageIcon.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\PhaseDetector\PhaseDetectorEditor.cpp">
+      <Filter>open-ephys\Source\Processors\PhaseDetector</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\WiFiOutputEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\ProcessorGraph\ProcessorGraph.cpp">
+      <Filter>open-ephys\Source\Processors\ProcessorGraph</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\EventNodeEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutput.cpp">
+      <Filter>open-ephys\Source\Processors\PulsePalOutput</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\SignalGeneratorEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutputEditor.cpp">
+      <Filter>open-ephys\Source\Processors\PulsePalOutput</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\LfpDisplayEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\RecordControl\RecordControl.cpp">
+      <Filter>open-ephys\Source\Processors\RecordControl</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\SourceNodeEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\RecordControl\RecordControlEditor.cpp">
+      <Filter>open-ephys\Source\Processors\RecordControl</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\SplitterEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\EngineConfigWindow.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\SpikeDetectorEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\HDF5FileFormat.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\AudioEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\HDF5Recording.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\FilterEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\OriginalRecording.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\Editors\GenericEditor.cpp">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\RecordEngine.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\okFrontPanelDLL.cpp">
-      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\RecordNode.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000datablock.cpp">
-      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    <ClCompile Include="..\..\Source\Processors\ReferenceNode\ReferenceNode.cpp">
+      <Filter>open-ephys\Source\Processors\ReferenceNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000evalboard.cpp">
-      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    <ClCompile Include="..\..\Source\Processors\ReferenceNode\ReferenceNodeEditor.cpp">
+      <Filter>open-ephys\Source\Processors\ReferenceNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000registers.cpp">
-      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    <ClCompile Include="..\..\Source\Processors\ResamplingNode\ResamplingNode.cpp">
+      <Filter>open-ephys\Source\Processors\ResamplingNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\DataThreads\RHD2000Thread.cpp">
-      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    <ClCompile Include="..\..\Source\Processors\ResamplingNode\ResamplingNodeEditor.cpp">
+      <Filter>open-ephys\Source\Processors\ResamplingNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\DataThreads\FileReaderThread.cpp">
-      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    <ClCompile Include="..\..\Source\Processors\Serial\PulsePal.cpp">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\DataThreads\FPGAThread.cpp">
-      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    <ClCompile Include="..\..\Source\Processors\Serial\ofArduino.cpp">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\DataThreads\DataBuffer.cpp">
-      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    <ClCompile Include="..\..\Source\Processors\Serial\ofSerial.cpp">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\DataThreads\DataThread.cpp">
-      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    <ClCompile Include="..\..\Source\Processors\SerialInput\SerialInput.cpp">
+      <Filter>open-ephys\Source\Processors\SerialInput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SerialInput\SerialInputEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SerialInput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SignalGenerator\SignalGenerator.cpp">
+      <Filter>open-ephys\Source\Processors\SignalGenerator</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SignalGenerator\SignalGeneratorEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SignalGenerator</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\RecordNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\SourceNode\SourceNode.cpp">
+      <Filter>open-ephys\Source\Processors\SourceNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\SignalGenerator.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\SourceNode\SourceNodeEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SourceNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\ResamplingNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\SpikeDetector\SpikeDetector.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeDetector</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\FilterNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\SpikeDetector\SpikeDetectorEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeDetector</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\SourceNode.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayCanvas.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\GenericProcessor.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\Processors\ProcessorGraph.cpp">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayNode.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSortBoxes.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorter.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorterCanvas.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorterEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Splitter\Splitter.cpp">
+      <Filter>open-ephys\Source\Processors\Splitter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Splitter\SplitterEditor.cpp">
+      <Filter>open-ephys\Source\Processors\Splitter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Visualization\DataWindow.cpp">
+      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Visualization\SpikeObject.cpp">
+      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\WiFiOutput\WiFiOutput.cpp">
+      <Filter>open-ephys\Source\Processors\WiFiOutput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\WiFiOutput\WiFiOutputEditor.cpp">
+      <Filter>open-ephys\Source\Processors\WiFiOutput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\EcubeDialogComponent.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
     </ClCompile>
     <ClCompile Include="..\..\Source\UI\CustomArrowButton.cpp">
       <Filter>open-ephys\Source\UI</Filter>
@@ -661,9 +799,6 @@
     <ClCompile Include="..\..\Source\UI\DataViewport.cpp">
       <Filter>open-ephys\Source\UI</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\Source\UI\MessageCenter.cpp">
-      <Filter>open-ephys\Source\UI</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\Source\UI\ControlPanel.cpp">
       <Filter>open-ephys\Source\UI</Filter>
     </ClCompile>
@@ -1911,302 +2046,350 @@
     <ClInclude Include="..\..\Source\Network\PracticalSocket.h">
       <Filter>open-ephys\Source\Network</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Bessel.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Audio\AudioComponent.h">
+      <Filter>open-ephys\Source\Audio</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Biquad.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutput.h">
+      <Filter>open-ephys\Source\Processors\ArduinoOutput</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Butterworth.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutputEditor.h">
+      <Filter>open-ephys\Source\Processors\ArduinoOutput</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Cascade.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\AudioNode\AudioEditor.h">
+      <Filter>open-ephys\Source\Processors\AudioNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\ChebyshevI.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\AudioNode\AudioNode.h">
+      <Filter>open-ephys\Source\Processors\AudioNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\ChebyshevII.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\AudioResamplingNode\AudioResamplingNode.h">
+      <Filter>open-ephys\Source\Processors\AudioResamplingNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Common.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\Channel\Channel.h">
+      <Filter>open-ephys\Source\Processors\Channel</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Custom.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingEditor.h">
+      <Filter>open-ephys\Source\Processors\ChannelMappingNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Design.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingNode.h">
+      <Filter>open-ephys\Source\Processors\ChannelMappingNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Dsp.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\EcubeEditor.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Elliptic.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\RHD2000Editor.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Filter.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\EcubeThread.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Layout.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\okFrontPanelDLL.h">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Legendre.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000datablock.h">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\MathSupplement.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000evalboard.h">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Params.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000registers.h">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\PoleFilter.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\RHD2000Thread.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\RBJ.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\FileReaderThread.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\RootFinder.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\FPGAThread.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\SmoothedFilter.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\DataBuffer.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\State.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\DataThread.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Types.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Bessel.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Dsp\Utilities.h">
-      <Filter>open-ephys\Source\Dsp</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Biquad.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Audio\AudioComponent.h">
-      <Filter>open-ephys\Source\Audio</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Butterworth.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\SerialInput.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Cascade.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\FileReader.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\ChebyshevI.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\ChannelMappingNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\ChebyshevII.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\PulsePalOutput.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Common.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\ReferenceNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Custom.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\PhaseDetector.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Design.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\AudioResamplingNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Dsp.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Channel.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Elliptic.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Serial\PulsePal.h">
-      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Filter.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Serial\ofArduino.h">
-      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Layout.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Serial\ofConstants.h">
-      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Legendre.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Serial\ofSerial.h">
-      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\MathSupplement.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\EventDetector.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Params.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\FPGAOutput.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\PoleFilter.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\ArduinoOutput.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\RBJ.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Parameter.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\RootFinder.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\SmoothedFilter.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\WiFiOutput.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\State.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Types.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Utilities\RecordControl.h">
-      <Filter>open-ephys\Source\Processors\Utilities</Filter>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Utilities.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Utilities\Merger.h">
-      <Filter>open-ephys\Source\Processors\Utilities</Filter>
+    <ClInclude Include="..\..\Source\Processors\Editors\ChannelSelector.h">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Utilities\Splitter.h">
-      <Filter>open-ephys\Source\Processors\Utilities</Filter>
+    <ClInclude Include="..\..\Source\Processors\Editors\ElectrodeButtons.h">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Visualization\SpikeObject.h">
-      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    <ClInclude Include="..\..\Source\Processors\Editors\GenericEditor.h">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Visualization\SpikeDisplayCanvas.h">
-      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    <ClInclude Include="..\..\Source\Processors\Editors\ImageIcon.h">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Visualization\Visualizer.h">
-      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    <ClInclude Include="..\..\Source\Processors\Editors\VisualizerEditor.h">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Visualization\DataWindow.h">
-      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    <ClInclude Include="..\..\Source\Processors\EventDetector\EventDetector.h">
+      <Filter>open-ephys\Source\Processors\EventDetector</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Visualization\LfpDisplayCanvas.h">
-      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    <ClInclude Include="..\..\Source\Processors\EventNode\EventNode.h">
+      <Filter>open-ephys\Source\Processors\EventNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\SpikeDetector.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\EventNode\EventNodeEditor.h">
+      <Filter>open-ephys\Source\Processors\EventNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\AudioNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\FileReader\FileReader.h">
+      <Filter>open-ephys\Source\Processors\FileReader</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\EventNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\FileReader\FileReaderEditor.h">
+      <Filter>open-ephys\Source\Processors\FileReader</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\LfpTriggeredAverageEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\FilterNode\FilterEditor.h">
+      <Filter>open-ephys\Source\Processors\FilterNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\SerialInputEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\FilterNode\FilterNode.h">
+      <Filter>open-ephys\Source\Processors\FilterNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\ElectrodeButtons.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\FPGAOutput\FPGAOutput.h">
+      <Filter>open-ephys\Source\Processors\FPGAOutput</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\ChannelMappingEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\FPGAOutput\FPGAOutputEditor.h">
+      <Filter>open-ephys\Source\Processors\FPGAOutput</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\FileReaderEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\GenericProcessor\GenericProcessor.h">
+      <Filter>open-ephys\Source\Processors\GenericProcessor</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\PhaseDetectorEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayCanvas.h">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\PulsePalOutputEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayEditor.h">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\RHD2000Editor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayNode.h">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\RecordControlEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageCanvas.h">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\ReferenceNodeEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageEditor.h">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\ResamplingNodeEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageNode.h">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\FPGAOutputEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Merger\Merger.h">
+      <Filter>open-ephys\Source\Processors\Merger</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\ArduinoOutputEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Merger\MergerEditor.h">
+      <Filter>open-ephys\Source\Processors\Merger</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\ChannelSelector.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\MessageCenter\MessageCenter.h">
+      <Filter>open-ephys\Source\Processors\MessageCenter</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\ParameterEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\MessageCenter\MessageCenterEditor.h">
+      <Filter>open-ephys\Source\Processors\MessageCenter</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\SpikeDisplayEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Parameter\ParameterEditor.h">
+      <Filter>open-ephys\Source\Processors\Parameter</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\VisualizerEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\Parameter\Parameter.h">
+      <Filter>open-ephys\Source\Processors\Parameter</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\MergerEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\PhaseDetector\PhaseDetector.h">
+      <Filter>open-ephys\Source\Processors\PhaseDetector</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\ImageIcon.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\PhaseDetector\PhaseDetectorEditor.h">
+      <Filter>open-ephys\Source\Processors\PhaseDetector</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\WiFiOutputEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\ProcessorGraph\ProcessorGraph.h">
+      <Filter>open-ephys\Source\Processors\ProcessorGraph</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\EventNodeEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutput.h">
+      <Filter>open-ephys\Source\Processors\PulsePalOutput</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\SignalGeneratorEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutputEditor.h">
+      <Filter>open-ephys\Source\Processors\PulsePalOutput</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\LfpDisplayEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\RecordControl\RecordControl.h">
+      <Filter>open-ephys\Source\Processors\RecordControl</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\SourceNodeEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\RecordControl\RecordControlEditor.h">
+      <Filter>open-ephys\Source\Processors\RecordControl</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\SplitterEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\EngineConfigWindow.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\SpikeDetectorEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\HDF5FileFormat.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\AudioEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\HDF5Recording.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\FilterEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\OriginalRecording.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\Editors\GenericEditor.h">
-      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\RecordEngine.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\okFrontPanelDLL.h">
-      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\RecordNode.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000datablock.h">
-      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    <ClInclude Include="..\..\Source\Processors\ReferenceNode\ReferenceNode.h">
+      <Filter>open-ephys\Source\Processors\ReferenceNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000evalboard.h">
-      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    <ClInclude Include="..\..\Source\Processors\ReferenceNode\ReferenceNodeEditor.h">
+      <Filter>open-ephys\Source\Processors\ReferenceNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000registers.h">
-      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    <ClInclude Include="..\..\Source\Processors\ResamplingNode\ResamplingNode.h">
+      <Filter>open-ephys\Source\Processors\ResamplingNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\DataThreads\RHD2000Thread.h">
-      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    <ClInclude Include="..\..\Source\Processors\ResamplingNode\ResamplingNodeEditor.h">
+      <Filter>open-ephys\Source\Processors\ResamplingNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\DataThreads\FileReaderThread.h">
-      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    <ClInclude Include="..\..\Source\Processors\Serial\PulsePal.h">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\DataThreads\FPGAThread.h">
-      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofArduino.h">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\DataThreads\DataBuffer.h">
-      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofConstants.h">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\DataThreads\DataThread.h">
-      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofSerial.h">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SerialInput\SerialInput.h">
+      <Filter>open-ephys\Source\Processors\SerialInput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SerialInput\SerialInputEditor.h">
+      <Filter>open-ephys\Source\Processors\SerialInput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SignalGenerator\SignalGenerator.h">
+      <Filter>open-ephys\Source\Processors\SignalGenerator</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SignalGenerator\SignalGeneratorEditor.h">
+      <Filter>open-ephys\Source\Processors\SignalGenerator</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SourceNode\SourceNode.h">
+      <Filter>open-ephys\Source\Processors\SourceNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SourceNode\SourceNodeEditor.h">
+      <Filter>open-ephys\Source\Processors\SourceNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\RecordNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\SpikeDetector\SpikeDetector.h">
+      <Filter>open-ephys\Source\Processors\SpikeDetector</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\SignalGenerator.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\SpikeDetector\SpikeDetectorEditor.h">
+      <Filter>open-ephys\Source\Processors\SpikeDetector</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\ResamplingNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayCanvas.h">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\FilterNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayEditor.h">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\SourceNode.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayNode.h">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\GenericProcessor.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSortBoxes.h">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\Processors\ProcessorGraph.h">
-      <Filter>open-ephys\Source\Processors</Filter>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorter.h">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorterCanvas.h">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorterEditor.h">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Splitter\Splitter.h">
+      <Filter>open-ephys\Source\Processors\Splitter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Splitter\SplitterEditor.h">
+      <Filter>open-ephys\Source\Processors\Splitter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Visualization\DataWindow.h">
+      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Visualization\SpikeObject.h">
+      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Visualization\Visualizer.h">
+      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\WiFiOutput\WiFiOutput.h">
+      <Filter>open-ephys\Source\Processors\WiFiOutput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\WiFiOutput\WiFiOutputEditor.h">
+      <Filter>open-ephys\Source\Processors\WiFiOutput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\EcubeDialogComponent.h">
+      <Filter>open-ephys\Source\UI</Filter>
     </ClInclude>
     <ClInclude Include="..\..\Source\UI\CustomArrowButton.h">
       <Filter>open-ephys\Source\UI</Filter>
@@ -2235,9 +2418,6 @@
     <ClInclude Include="..\..\Source\UI\DataViewport.h">
       <Filter>open-ephys\Source\UI</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\Source\UI\MessageCenter.h">
-      <Filter>open-ephys\Source\UI</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\Source\UI\ControlPanel.h">
       <Filter>open-ephys\Source\UI</Filter>
     </ClInclude>
diff --git a/Builds/VisualStudio2012/resources.rc b/Builds/VisualStudio2012/resources.rc
index 7e90b4e76da66c087a68622404d18c38082d4b83..37719a97bd794d32c5c0f172efaaf280f7267255 100644
--- a/Builds/VisualStudio2012/resources.rc
+++ b/Builds/VisualStudio2012/resources.rc
@@ -7,7 +7,7 @@
 #include <windows.h>
 
 VS_VERSION_INFO VERSIONINFO
-FILEVERSION  0,3,1,0
+FILEVERSION  0,3,2,0
 BEGIN
   BLOCK "StringFileInfo"
   BEGIN
@@ -15,9 +15,9 @@ BEGIN
     BEGIN
       VALUE "CompanyName",  "Open Ephys\0"
       VALUE "FileDescription",  "open-ephys\0"
-      VALUE "FileVersion",  "0.3.1\0"
+      VALUE "FileVersion",  "0.3.2\0"
       VALUE "ProductName",  "open-ephys\0"
-      VALUE "ProductVersion",  "0.3.1\0"
+      VALUE "ProductVersion",  "0.3.2\0"
     END
   END
 
diff --git a/Builds/VisualStudio2013/copydlls.cmd b/Builds/VisualStudio2013/copydlls.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..9284f9c3085fceac7a98b3ab7c651b9b630b4a22
--- /dev/null
+++ b/Builds/VisualStudio2013/copydlls.cmd
@@ -0,0 +1,13 @@
+@echo off
+echo copy %2\okFrontPanel.dll %3
+copy %2\okFrontPanel.dll %3
+echo copy %1\hdf5.dll %3
+copy %1\hdf5.dll %3
+echo copy %1\hdf5_cpp.dll %3
+copy %1\hdf5_cpp.dll %3
+rem copy %1\szip.dll %3
+rem copy %1\zlib.dll %3
+
+
+
+echo copy ..\..\Resources\DLLs\Win64\okFrontPanel.dll .\Debug64\bin
\ No newline at end of file
diff --git a/Builds/VisualStudio2013/open-ephys.sln b/Builds/VisualStudio2013/open-ephys.sln
new file mode 100644
index 0000000000000000000000000000000000000000..da69c688136db3653983f2209d0483a528b88091
--- /dev/null
+++ b/Builds/VisualStudio2013/open-ephys.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2013
+Project("{5A05F353-1D63-394C-DFB0-981BB2309002}") = "open-ephys", "open-ephys.vcxproj", "{9C924D66-7DEC-1AEF-B375-DB8666BFB909}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Debug|Win32.Build.0 = Debug|Win32
+		{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Release|Win32.ActiveCfg = Release|Win32
+		{9C924D66-7DEC-1AEF-B375-DB8666BFB909}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/Builds/VisualStudio2013/open-ephys.vcxproj b/Builds/VisualStudio2013/open-ephys.vcxproj
new file mode 100644
index 0000000000000000000000000000000000000000..f257d8927adcf1e5da3fafbc65e7e952fd212501
--- /dev/null
+++ b/Builds/VisualStudio2013/open-ephys.vcxproj
@@ -0,0 +1,2058 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{9C924D66-7DEC-1AEF-B375-DB8666BFB909}</ProjectGuid>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
+  <ImportGroup Label="ExtensionSettings"/>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
+            Label="LocalAppDataPlatform"/>
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros">
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\bin\</OutDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">open-ephys</TargetName>
+    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateManifest>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LibraryPath);../../Resources/ZeroMQ/lib_x86;../../Resources/Google Protocols/vsprojects/Debug;$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\lib</LibraryPath>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\bin\</OutDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">open-ephys</TargetName>
+    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateManifest>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LibraryPath);$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\lib;../../Resources/ZeroMQ/lib_x86;../../Resources/Google Protocols/vsprojects/Release</LibraryPath>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <HeaderFileName/>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\include;../../Resources/Google Protocols/src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;DEBUG;_DEBUG;NOMINMAX;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=0.3.2;JUCE_APP_VERSION_HEX=0x302;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <PrecompiledHeader/>
+      <AssemblerListingLocation>$(IntDir)\</AssemblerListingLocation>
+      <ObjectFileName>$(IntDir)\</ObjectFileName>
+      <ProgramDataBaseFileName>$(IntDir)\</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <FloatingPointModel>Fast</FloatingPointModel>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+    <Link>
+      <OutputFile>$(OutDir)\open-ephys.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <IgnoreSpecificDefaultLibraries>libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(IntDir)\open-ephys.pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+      <AdditionalLibraryDirectories>../../Resources/ZeroMQ/lib_x86;../../Resources/Google Protocols/vsprojects/Debug;$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LargeAddressAware>true</LargeAddressAware>
+      <AdditionalDependencies>setupapi.lib;opengl32.lib;glu32.lib;hdf5.lib;hdf5_cpp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>$(IntDir)\open-ephys.bsc</OutputFile>
+    </Bscmake>
+    <PostBuildEvent>
+      <Command>call &quot;$(SolutionDir)\copydlls.cmd&quot; &quot;$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\bin&quot; &quot;$(SolutionDir)\..\..\Resources\DLLs&quot; &quot;$(OutDir)&quot;</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <HeaderFileName/>
+    </Midl>
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\include;../../Resources/Google Protocols/src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;NOMINMAX;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=0.3.2;JUCE_APP_VERSION_HEX=0x302;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <PrecompiledHeader/>
+      <AssemblerListingLocation>$(IntDir)\</AssemblerListingLocation>
+      <ObjectFileName>$(IntDir)\</ObjectFileName>
+      <ProgramDataBaseFileName>$(IntDir)\</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <FloatingPointModel>Fast</FloatingPointModel>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+    <Link>
+      <OutputFile>$(OutDir)\open-ephys.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(IntDir)\open-ephys.pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <AdditionalLibraryDirectories>$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\lib;../../Resources/ZeroMQ/lib_x86;../../Resources/Google Protocols/vsprojects/Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <LargeAddressAware>true</LargeAddressAware>
+      <AdditionalDependencies>setupapi.lib;opengl32.lib;glu32.lib;hdf5.lib;hdf5_cpp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>$(IntDir)\open-ephys.bsc</OutputFile>
+    </Bscmake>
+    <PostBuildEvent>
+      <Command>call &quot;$(SolutionDir)\copydlls.cmd&quot; &quot;$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\bin&quot; &quot;$(SolutionDir)\..\..\Resources\DLLs&quot; &quot;$(OutDir)&quot;</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\Source\AccessClass.cpp"/>
+    <ClCompile Include="..\..\Source\Network\PracticalSocket.cpp"/>
+    <ClCompile Include="..\..\Source\Audio\AudioComponent.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutput.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutputEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\AudioNode\AudioEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\AudioNode\AudioNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\AudioResamplingNode\AudioResamplingNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Channel\Channel.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\EcubeEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\RHD2000Editor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\EcubeThread.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\okFrontPanelDLL.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000datablock.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000evalboard.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000registers.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\RHD2000Thread.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\FileReaderThread.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\FPGAThread.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\DataBuffer.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\DataThread.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Bessel.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Biquad.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Butterworth.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Cascade.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\ChebyshevI.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\ChebyshevII.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Custom.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Design.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Documentation.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Elliptic.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Filter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Legendre.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Param.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\PoleFilter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\RBJ.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\RootFinder.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Dsp\State.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Editors\ChannelSelector.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Editors\ElectrodeButtons.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Editors\GenericEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Editors\ImageIcon.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Editors\VisualizerEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\EventDetector\EventDetector.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\EventNode\EventNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\EventNode\EventNodeEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FileReader\FileReader.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FileReader\FileReaderEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FilterNode\FilterEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FilterNode\FilterNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FPGAOutput\FPGAOutput.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\FPGAOutput\FPGAOutputEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\GenericProcessor\GenericProcessor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayCanvas.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageCanvas.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Merger\Merger.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Merger\MergerEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\MessageCenter\MessageCenter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\MessageCenter\MessageCenterEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Parameter\ParameterEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Parameter\Parameter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\PhaseDetector\PhaseDetector.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\PhaseDetector\PhaseDetectorEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ProcessorGraph\ProcessorGraph.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutput.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutputEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordControl\RecordControl.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordControl\RecordControlEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\EngineConfigWindow.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\HDF5FileFormat.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\HDF5Recording.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\OriginalRecording.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\RecordEngine.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\RecordNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ReferenceNode\ReferenceNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ReferenceNode\ReferenceNodeEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ResamplingNode\ResamplingNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\ResamplingNode\ResamplingNodeEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Serial\PulsePal.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Serial\ofArduino.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Serial\ofSerial.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SerialInput\SerialInput.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SerialInput\SerialInputEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SignalGenerator\SignalGenerator.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SignalGenerator\SignalGeneratorEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SourceNode\SourceNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SourceNode\SourceNodeEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeDetector\SpikeDetector.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeDetector\SpikeDetectorEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayCanvas.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayNode.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSortBoxes.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorterCanvas.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorterEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Splitter\Splitter.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Splitter\SplitterEditor.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Visualization\DataWindow.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\Visualization\SpikeObject.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\WiFiOutput\WiFiOutput.cpp"/>
+    <ClCompile Include="..\..\Source\Processors\WiFiOutput\WiFiOutputEditor.cpp"/>
+    <ClCompile Include="..\..\Source\UI\EcubeDialogComponent.cpp"/>
+    <ClCompile Include="..\..\Source\UI\CustomArrowButton.cpp"/>
+    <ClCompile Include="..\..\Source\UI\GraphViewer.cpp"/>
+    <ClCompile Include="..\..\Source\UI\EditorViewportButtons.cpp"/>
+    <ClCompile Include="..\..\Source\UI\SignalChainManager.cpp"/>
+    <ClCompile Include="..\..\Source\UI\EditorViewport.cpp"/>
+    <ClCompile Include="..\..\Source\UI\ProcessorList.cpp"/>
+    <ClCompile Include="..\..\Source\UI\CustomLookAndFeel.cpp"/>
+    <ClCompile Include="..\..\Source\UI\InfoLabel.cpp"/>
+    <ClCompile Include="..\..\Source\UI\DataViewport.cpp"/>
+    <ClCompile Include="..\..\Source\UI\ControlPanel.cpp"/>
+    <ClCompile Include="..\..\Source\UI\UIComponent.cpp"/>
+    <ClCompile Include="..\..\Source\MainWindow.cpp"/>
+    <ClCompile Include="..\..\Source\Main.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_AudioDataConverters.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_AudioSampleBuffer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_FloatVectorOperations.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiBuffer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiFile.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiKeyboardState.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiMessage.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiMessageSequence.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_IIRFilter.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_LagrangeInterpolator.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_BufferingAudioSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ChannelRemappingAudioSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_IIRFilterAudioSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ReverbAudioSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioDeviceManager.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioIODevice.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioIODeviceType.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\midi_io\juce_MidiMessageCollector.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\midi_io\juce_MidiOutput.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\sources\juce_AudioSourcePlayer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\sources\juce_AudioTransportSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_cd\juce_AudioCDReader.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_android_Audio.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_android_Midi.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_android_OpenSL.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_ios_Audio.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_linux_ALSA.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_linux_AudioCDReader.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_linux_JackAudio.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_linux_Midi.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_mac_CoreAudio.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_mac_CoreMidi.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_ASIO.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_AudioCDBurner.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_AudioCDReader.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_DirectSound.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_Midi.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_WASAPI.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatManager.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatReader.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatReaderSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatWriter.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioSubsectionReader.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_BufferingAudioFormatReader.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_AiffAudioFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_CoreAudioFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_FlacAudioFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_LAMEEncoderAudioFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_MP3AudioFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_OggVorbisAudioFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_QuickTimeAudioFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_WavAudioFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_WindowsMediaAudioFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\sampler\juce_Sampler.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessor.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorEditor.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorGraph.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_PluginDescription.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormatManager.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_LADSPAPluginFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_KnownPluginList.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_PluginDirectoryScanner.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_PluginListComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioDeviceSelectorComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioThumbnail.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioThumbnailCache.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_MidiKeyboardComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\players\juce_AudioProcessorPlayer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharacterFunctions.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_Identifier.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_LocalisedStrings.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_String.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringArray.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringPairArray.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringPool.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_TextDiff.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_BigInteger.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Expression.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_MemoryBlock.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_AbstractFifo.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_DynamicObject.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_NamedValueSet.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_PropertySet.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_Variant.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ChildProcess.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_HighResolutionTimer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ReadWriteLock.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_Thread.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ThreadPool.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_TimeSliceThread.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_PerformanceCounter.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_RelativeTime.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_Time.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_DirectoryIterator.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_File.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileFilter.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileInputStream.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileOutputStream.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileSearchPath.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_TemporaryFile.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_WildcardFileFilter.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_IPAddress.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_MACAddress.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_NamedPipe.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_Socket.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_URL.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_BufferedInputStream.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_FileInputSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_InputStream.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_MemoryInputStream.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_MemoryOutputStream.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_OutputStream.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_SubregionStream.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_FileLogger.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_SystemStats.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\xml\juce_XmlDocument.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\xml\juce_XmlElement.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\javascript\juce_Javascript.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\javascript\juce_JSON.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_GZIPCompressorOutputStream.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_GZIPDecompressorInputStream.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_ZipFile.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\unit_tests\juce_UnitTest.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\misc\juce_Result.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\misc\juce_Uuid.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_Files.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_Misc.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_Network.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_SystemStats.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_Threads.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_linux_CommonFile.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_linux_Files.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_linux_Network.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_linux_SystemStats.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_linux_Threads.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_posix_NamedPipe.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_Files.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_Network.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_Registry.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_SystemStats.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_Threads.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_BlowFish.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_Primes.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_RSAKey.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\hashing\juce_MD5.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\hashing\juce_SHA256.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\values\juce_Value.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\values\juce_ValueTree.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\app_properties\juce_ApplicationProperties.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_ApplicationBase.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_DeletedAtShutdown.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageListener.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_MultiTimer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_Timer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_AsyncUpdater.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ChangeBroadcaster.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_ConnectedChildProcess.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_InterprocessConnection.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_InterprocessConnectionServer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_android_Messaging.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_linux_Messaging.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_win32_Messaging.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_Colour.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_ColourGradient.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_Colours.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_FillType.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_GraphicsContext.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_LowLevelGraphicsPostScriptRenderer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_LowLevelGraphicsSoftwareRenderer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_Image.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageCache.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageConvolutionKernel.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageFileFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\image_formats\juce_GIFLoader.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\image_formats\juce_JPEGLoader.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\image_formats\juce_PNGLoader.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_AffineTransform.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_EdgeTable.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_Path.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_PathIterator.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_PathStrokeType.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_RectangleList.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\placement\juce_Justification.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_AttributedString.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_CustomTypeface.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_Font.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_GlyphArrangement.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_TextLayout.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_Typeface.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\effects\juce_DropShadowEffect.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\effects\juce_GlowEffect.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_android_Fonts.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_android_GraphicsContext.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_freetype_Fonts.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_linux_Fonts.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_win32_Direct2DGraphicsContext.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_win32_DirectWriteTypeface.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_win32_DirectWriteTypeLayout.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_win32_Fonts.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_Component.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_ComponentListener.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_Desktop.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_ModalComponentManager.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_ComponentDragger.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_DragAndDropContainer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseCursor.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseEvent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseInactivityDetector.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseInputSource.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseListener.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_CaretComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyboardFocusTraverser.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyListener.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyPress.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_ModifierKeys.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ComboBox.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ImageComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Label.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ListBox.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ProgressBar.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Slider.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TableHeaderComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TableListBox.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TextEditor.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Toolbar.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ToolbarItemComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ToolbarItemPalette.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TreeView.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_AlertWindow.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_CallOutBox.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ComponentPeer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_DialogWindow.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_DocumentWindow.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ResizableWindow.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ThreadWithProgressWindow.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_TooltipWindow.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_TopLevelWindow.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_MenuBarComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_MenuBarModel.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_PopupMenu.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentAnimator.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentBoundsConstrainer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentBuilder.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableCornerComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableEdgeComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ScrollBar.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableLayoutManager.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableLayoutResizerBar.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableObjectResizer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_TabbedButtonBar.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_TabbedComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_Viewport.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ArrowButton.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_Button.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_DrawableButton.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_HyperlinkButton.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ImageButton.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ShapeButton.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_TextButton.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ToggleButton.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ToolbarButton.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_MarkerList.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeCoordinate.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeCoordinatePositioner.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeParallelogram.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativePoint.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativePointPath.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeRectangle.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_Drawable.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableComposite.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableImage.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawablePath.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableRectangle.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableShape.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableText.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_SVGParser.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_BooleanPropertyComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_ButtonPropertyComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_ChoicePropertyComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_PropertyComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_PropertyPanel.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_SliderPropertyComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_TextPropertyComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V1.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V2.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V3.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_DirectoryContentsDisplayComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_DirectoryContentsList.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileBrowserComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileChooser.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileChooserDialogBox.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileFilter.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileListComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FilenameComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileSearchPathListComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileTreeComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_ImagePreviewComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_WildcardFileFilter.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandInfo.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandManager.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandTarget.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_KeyPressMappingSet.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\misc\juce_BubbleComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\misc\juce_DropShadower.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\application\juce_Application.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_android_FileChooser.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_android_Windowing.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_linux_Clipboard.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_linux_FileChooser.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_linux_Windowing.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_win32_DragAndDrop.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_win32_FileChooser.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_win32_Windowing.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CodeDocument.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CodeEditorComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CPlusPlusCodeTokeniser.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_LuaCodeTokeniser.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_XMLCodeTokeniser.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\documents\juce_FileBasedDocument.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\lookandfeel\juce_OldSchoolLookAndFeel.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_BubbleMessageComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_ColourSelector.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_KeyMappingEditorComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_LiveConstantEditor.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_PreferencesPanel.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_RecentlyOpenedFilesList.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_SplashScreen.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_android_WebBrowserComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_linux_SystemTrayIcon.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_linux_WebBrowserComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_mac_SystemTrayIcon.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_win32_ActiveXComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_win32_SystemTrayIcon.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_win32_WebBrowserComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLContext.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLFrameBuffer.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLGraphicsContext.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLHelpers.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLImage.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\native\juce_android_CameraDevice.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\native\juce_win32_CameraDevice.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\native\juce_win32_DirectShowComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\native\juce_win32_QuickTimeMovieComponent.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\BinaryData.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_audio_basics.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\juce_audio_devices.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\juce_audio_formats.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_audio_processors.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\juce_audio_utils.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\juce_core.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\juce_cryptography.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\juce_data_structures.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\juce_events.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\juce_graphics.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\juce_gui_basics.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\juce_gui_extra.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\juce_opengl.cpp"/>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\juce_video.cpp"/>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\Source\AccessClass.h"/>
+    <ClInclude Include="..\..\Source\Network\PracticalSocket.h"/>
+    <ClInclude Include="..\..\Source\Audio\AudioComponent.h"/>
+    <ClInclude Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutput.h"/>
+    <ClInclude Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutputEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\AudioNode\AudioEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\AudioNode\AudioNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\AudioResamplingNode\AudioResamplingNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\Channel\Channel.h"/>
+    <ClInclude Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\EcubeEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\RHD2000Editor.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\EcubeThread.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\okFrontPanelDLL.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000datablock.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000evalboard.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000registers.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\RHD2000Thread.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\FileReaderThread.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\FPGAThread.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\DataBuffer.h"/>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\DataThread.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Bessel.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Biquad.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Butterworth.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Cascade.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\ChebyshevI.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\ChebyshevII.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Common.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Custom.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Design.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Dsp.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Elliptic.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Filter.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Layout.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Legendre.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\MathSupplement.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Params.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\PoleFilter.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\RBJ.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\RootFinder.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\SmoothedFilter.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\State.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Types.h"/>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Utilities.h"/>
+    <ClInclude Include="..\..\Source\Processors\Editors\ChannelSelector.h"/>
+    <ClInclude Include="..\..\Source\Processors\Editors\ElectrodeButtons.h"/>
+    <ClInclude Include="..\..\Source\Processors\Editors\GenericEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Editors\ImageIcon.h"/>
+    <ClInclude Include="..\..\Source\Processors\Editors\VisualizerEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\EventDetector\EventDetector.h"/>
+    <ClInclude Include="..\..\Source\Processors\EventNode\EventNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\EventNode\EventNodeEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\FileReader\FileReader.h"/>
+    <ClInclude Include="..\..\Source\Processors\FileReader\FileReaderEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\FilterNode\FilterEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\FilterNode\FilterNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\FPGAOutput\FPGAOutput.h"/>
+    <ClInclude Include="..\..\Source\Processors\FPGAOutput\FPGAOutputEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\GenericProcessor\GenericProcessor.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayCanvas.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageCanvas.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\Merger\Merger.h"/>
+    <ClInclude Include="..\..\Source\Processors\Merger\MergerEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\MessageCenter\MessageCenter.h"/>
+    <ClInclude Include="..\..\Source\Processors\MessageCenter\MessageCenterEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Parameter\ParameterEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Parameter\Parameter.h"/>
+    <ClInclude Include="..\..\Source\Processors\PhaseDetector\PhaseDetector.h"/>
+    <ClInclude Include="..\..\Source\Processors\PhaseDetector\PhaseDetectorEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\ProcessorGraph\ProcessorGraph.h"/>
+    <ClInclude Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutput.h"/>
+    <ClInclude Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutputEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordControl\RecordControl.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordControl\RecordControlEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\EngineConfigWindow.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\HDF5FileFormat.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\HDF5Recording.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\OriginalRecording.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\RecordEngine.h"/>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\RecordNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\ReferenceNode\ReferenceNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\ReferenceNode\ReferenceNodeEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\ResamplingNode\ResamplingNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\ResamplingNode\ResamplingNodeEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Serial\PulsePal.h"/>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofArduino.h"/>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofConstants.h"/>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofSerial.h"/>
+    <ClInclude Include="..\..\Source\Processors\SerialInput\SerialInput.h"/>
+    <ClInclude Include="..\..\Source\Processors\SerialInput\SerialInputEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\SignalGenerator\SignalGenerator.h"/>
+    <ClInclude Include="..\..\Source\Processors\SignalGenerator\SignalGeneratorEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\SourceNode\SourceNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\SourceNode\SourceNodeEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeDetector\SpikeDetector.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeDetector\SpikeDetectorEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayCanvas.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayNode.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSortBoxes.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorter.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorterCanvas.h"/>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorterEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Splitter\Splitter.h"/>
+    <ClInclude Include="..\..\Source\Processors\Splitter\SplitterEditor.h"/>
+    <ClInclude Include="..\..\Source\Processors\Visualization\DataWindow.h"/>
+    <ClInclude Include="..\..\Source\Processors\Visualization\SpikeObject.h"/>
+    <ClInclude Include="..\..\Source\Processors\Visualization\Visualizer.h"/>
+    <ClInclude Include="..\..\Source\Processors\WiFiOutput\WiFiOutput.h"/>
+    <ClInclude Include="..\..\Source\Processors\WiFiOutput\WiFiOutputEditor.h"/>
+    <ClInclude Include="..\..\Source\UI\EcubeDialogComponent.h"/>
+    <ClInclude Include="..\..\Source\UI\CustomArrowButton.h"/>
+    <ClInclude Include="..\..\Source\UI\GraphViewer.h"/>
+    <ClInclude Include="..\..\Source\UI\EditorViewportButtons.h"/>
+    <ClInclude Include="..\..\Source\UI\SignalChainManager.h"/>
+    <ClInclude Include="..\..\Source\UI\EditorViewport.h"/>
+    <ClInclude Include="..\..\Source\UI\ProcessorList.h"/>
+    <ClInclude Include="..\..\Source\UI\CustomLookAndFeel.h"/>
+    <ClInclude Include="..\..\Source\UI\InfoLabel.h"/>
+    <ClInclude Include="..\..\Source\UI\DataViewport.h"/>
+    <ClInclude Include="..\..\Source\UI\ControlPanel.h"/>
+    <ClInclude Include="..\..\Source\UI\UIComponent.h"/>
+    <ClInclude Include="..\..\Source\MainWindow.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_AudioDataConverters.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_AudioSampleBuffer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_FloatVectorOperations.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiBuffer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiFile.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiKeyboardState.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiMessage.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiMessageSequence.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_Decibels.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_IIRFilter.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_LagrangeInterpolator.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_Reverb.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_AudioSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_BufferingAudioSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ChannelRemappingAudioSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_IIRFilterAudioSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_MixerAudioSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_PositionableAudioSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ReverbAudioSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_audio_basics.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioDeviceManager.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioIODevice.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioIODeviceType.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_SystemAudioVolume.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\midi_io\juce_MidiInput.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\midi_io\juce_MidiMessageCollector.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\midi_io\juce_MidiOutput.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\sources\juce_AudioSourcePlayer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\sources\juce_AudioTransportSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_cd\juce_AudioCDBurner.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_cd\juce_AudioCDReader.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_MidiDataConcatenator.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\juce_audio_devices.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatManager.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatReader.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatReaderSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatWriter.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioSubsectionReader.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_BufferingAudioFormatReader.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_MemoryMappedAudioFormatReader.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_AiffAudioFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_CoreAudioFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_FlacAudioFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_LAMEEncoderAudioFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_MP3AudioFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_OggVorbisAudioFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_QuickTimeAudioFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_WavAudioFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_WindowsMediaAudioFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\sampler\juce_Sampler.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\juce_audio_formats.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioPlayHead.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioPluginInstance.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessor.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorEditor.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorGraph.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorListener.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_PluginDescription.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormatManager.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_AudioUnitPluginFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_LADSPAPluginFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_KnownPluginList.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_PluginDirectoryScanner.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_PluginListComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_audio_processors.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioDeviceSelectorComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioThumbnail.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioThumbnailBase.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioThumbnailCache.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_MidiKeyboardComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\players\juce_AudioProcessorPlayer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\juce_audio_utils.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharacterFunctions.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharPointer_ASCII.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharPointer_UTF16.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharPointer_UTF32.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharPointer_UTF8.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_Identifier.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_LocalisedStrings.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_NewLine.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_String.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringArray.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringPairArray.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringPool.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringRef.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_TextDiff.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_BigInteger.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Expression.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_MathsFunctions.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Range.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_Atomic.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_ByteOrder.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_ContainerDeletePolicy.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_HeapBlock.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_LeakedObjectDetector.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_Memory.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_MemoryBlock.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_OptionalScopedPointer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_ReferenceCountedObject.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_ScopedPointer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_SharedResourcePointer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_Singleton.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_WeakReference.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_AbstractFifo.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_Array.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_ArrayAllocationBase.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_DynamicObject.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_ElementComparator.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_HashMap.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_LinkedListPointer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_NamedValueSet.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_OwnedArray.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_PropertySet.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_ReferenceCountedArray.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_ScopedValueSetter.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_SortedSet.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_SparseSet.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_Variant.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ChildProcess.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_CriticalSection.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_DynamicLibrary.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_HighResolutionTimer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_InterProcessLock.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_Process.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ReadWriteLock.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ScopedLock.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ScopedReadLock.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ScopedWriteLock.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_SpinLock.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_Thread.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ThreadLocalValue.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ThreadPool.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_TimeSliceThread.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_WaitableEvent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_PerformanceCounter.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_RelativeTime.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_Time.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_DirectoryIterator.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_File.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileFilter.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileInputStream.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileOutputStream.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileSearchPath.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_MemoryMappedFile.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_TemporaryFile.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_WildcardFileFilter.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_IPAddress.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_MACAddress.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_NamedPipe.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_Socket.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_URL.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_BufferedInputStream.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_FileInputSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_InputSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_InputStream.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_MemoryInputStream.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_MemoryOutputStream.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_OutputStream.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_SubregionStream.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_FileLogger.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_PlatformDefs.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_StandardHeader.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_SystemStats.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_TargetPlatform.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\xml\juce_XmlDocument.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\xml\juce_XmlElement.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\javascript\juce_Javascript.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\javascript\juce_JSON.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_GZIPCompressorOutputStream.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_GZIPDecompressorInputStream.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_ZipFile.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\unit_tests\juce_UnitTest.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\misc\juce_Result.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\misc\juce_Uuid.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\misc\juce_WindowsRegistry.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_JNIHelpers.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_BasicNativeHeaders.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_osx_ObjCHelpers.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_posix_SharedCode.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_ComSmartPtr.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\juce_core.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_BlowFish.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_Primes.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_RSAKey.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\hashing\juce_MD5.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\hashing\juce_SHA256.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\juce_cryptography.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\values\juce_Value.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\values\juce_ValueTree.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\undomanager\juce_UndoableAction.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\undomanager\juce_UndoManager.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\app_properties\juce_ApplicationProperties.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\app_properties\juce_PropertiesFile.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\juce_data_structures.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_ApplicationBase.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_CallbackMessage.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_DeletedAtShutdown.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_Initialisation.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_Message.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageListener.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_NotificationType.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_MultiTimer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_Timer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ActionListener.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_AsyncUpdater.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ChangeBroadcaster.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ChangeListener.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ListenerList.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_ConnectedChildProcess.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_InterprocessConnection.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_InterprocessConnectionServer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_osx_MessageQueue.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_ScopedXLock.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_win32_HiddenMessageWindow.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\juce_events.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_Colour.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_ColourGradient.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_Colours.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_FillType.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_PixelFormats.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_GraphicsContext.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_LowLevelGraphicsContext.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_LowLevelGraphicsPostScriptRenderer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_LowLevelGraphicsSoftwareRenderer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_Image.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageCache.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageConvolutionKernel.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageFileFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_AffineTransform.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_BorderSize.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_EdgeTable.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_Line.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_Path.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_PathIterator.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_PathStrokeType.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_Point.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_Rectangle.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_RectangleList.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\placement\juce_Justification.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_AttributedString.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_CustomTypeface.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_Font.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_GlyphArrangement.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_TextLayout.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_Typeface.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\effects\juce_DropShadowEffect.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\effects\juce_GlowEffect.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\effects\juce_ImageEffectFilter.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_mac_CoreGraphicsContext.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_mac_CoreGraphicsHelpers.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\juce_graphics.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_CachedComponentImage.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_Component.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_ComponentListener.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_Desktop.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_ModalComponentManager.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_ComponentDragger.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_DragAndDropContainer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_DragAndDropTarget.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_FileDragAndDropTarget.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_LassoComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseCursor.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseEvent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseInactivityDetector.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseInputSource.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseListener.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_SelectedItemSet.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_TextDragAndDropTarget.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_TooltipClient.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_CaretComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyboardFocusTraverser.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyListener.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyPress.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_ModifierKeys.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_SystemClipboard.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_TextEditorKeyMapper.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_TextInputTarget.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ComboBox.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ImageComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Label.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ListBox.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ProgressBar.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Slider.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TableHeaderComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TableListBox.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TextEditor.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Toolbar.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ToolbarItemComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ToolbarItemFactory.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ToolbarItemPalette.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TreeView.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_AlertWindow.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_CallOutBox.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ComponentPeer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_DialogWindow.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_DocumentWindow.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_NativeMessageBox.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ResizableWindow.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ThreadWithProgressWindow.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_TooltipWindow.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_TopLevelWindow.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_MenuBarComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_MenuBarModel.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_PopupMenu.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_AnimatedPosition.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_AnimatedPositionBehaviours.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentAnimator.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentBoundsConstrainer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableCornerComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableEdgeComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ScrollBar.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableLayoutManager.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableLayoutResizerBar.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableObjectResizer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_TabbedButtonBar.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_TabbedComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_Viewport.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ArrowButton.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_Button.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_DrawableButton.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_HyperlinkButton.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ImageButton.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ShapeButton.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_TextButton.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ToggleButton.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ToolbarButton.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_MarkerList.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeCoordinate.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeCoordinatePositioner.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeParallelogram.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativePoint.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativePointPath.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeRectangle.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_Drawable.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableComposite.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableImage.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawablePath.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableRectangle.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableShape.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableText.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_BooleanPropertyComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_ButtonPropertyComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_ChoicePropertyComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_PropertyComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_PropertyPanel.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_SliderPropertyComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_TextPropertyComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V1.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V2.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V3.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_DirectoryContentsDisplayComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_DirectoryContentsList.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileBrowserComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileBrowserListener.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileChooser.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileChooserDialogBox.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileFilter.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileListComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FilenameComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FilePreviewComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileSearchPathListComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileTreeComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_ImagePreviewComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_WildcardFileFilter.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandID.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandInfo.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandManager.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandTarget.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_KeyPressMappingSet.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\misc\juce_BubbleComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\misc\juce_DropShadower.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\application\juce_Application.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\application\juce_Initialisation.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\juce_gui_basics.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CodeDocument.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CodeEditorComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CodeTokeniser.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CPlusPlusCodeTokeniser.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CPlusPlusCodeTokeniserFunctions.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_LuaCodeTokeniser.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_XMLCodeTokeniser.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\documents\juce_FileBasedDocument.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\embedding\juce_ActiveXControlComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\embedding\juce_NSViewComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\embedding\juce_UIViewComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\lookandfeel\juce_OldSchoolLookAndFeel.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_AppleRemote.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_BubbleMessageComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_ColourSelector.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_KeyMappingEditorComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_LiveConstantEditor.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_PreferencesPanel.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_RecentlyOpenedFilesList.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\juce_gui_extra.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_Draggable3DOrientation.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_Matrix3D.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLContext.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLFrameBuffer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLGraphicsContext.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLHelpers.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLImage.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLRenderer.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_Quaternion.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_Vector3D.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_MissingGLDefinitions.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGL_android.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGL_ios.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGL_linux.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGL_osx.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGL_win32.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGLExtensions.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\juce_opengl.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_video\playback\juce_DirectShowComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_video\playback\juce_QuickTimeMovieComponent.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_video\capture\juce_CameraDevice.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_video\juce_video.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\AppConfig.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\BinaryData.h"/>
+    <ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\..\Resources\Fonts\cpmono-black-serialized"/>
+    <None Include="..\..\Resources\Fonts\cpmono-bold-serialized"/>
+    <None Include="..\..\Resources\Fonts\cpmono-extralight-serialized"/>
+    <None Include="..\..\Resources\Fonts\cpmono-light-serialized"/>
+    <None Include="..\..\Resources\Fonts\cpmono-plain-serialized"/>
+    <None Include="..\..\Resources\Fonts\BebasNeue.otf"/>
+    <None Include="..\..\Resources\Fonts\cpmono_bold.otf"/>
+    <None Include="..\..\Resources\Fonts\cpmono_extra_light.otf"/>
+    <None Include="..\..\Resources\Fonts\cpmono_light.otf"/>
+    <None Include="..\..\Resources\Fonts\cpmono_plain.otf"/>
+    <None Include="..\..\Resources\Fonts\miso-bold.ttf"/>
+    <None Include="..\..\Resources\Fonts\miso-light.ttf"/>
+    <None Include="..\..\Resources\Fonts\miso-regular.ttf"/>
+    <None Include="..\..\Resources\Fonts\miso-serialized"/>
+    <None Include="..\..\Resources\Fonts\nordic.ttf"/>
+    <None Include="..\..\Resources\Fonts\ostrich.ttf"/>
+    <None Include="..\..\Resources\Fonts\silkscreen-serialized"/>
+    <None Include="..\..\Resources\Fonts\silkscreen.ttf"/>
+    <None Include="..\..\Resources\Fonts\unibody-8.otf"/>
+    <None Include="..\..\Resources\Images\Icons\ArduinoIcon.png"/>
+    <None Include="..\..\Resources\Images\Icons\OpenEphysBoardLogoBlack.png"/>
+    <None Include="..\..\Resources\Images\Icons\OpenEphysBoardLogoGray.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons-01.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons-02.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons-03.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons-04.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons-05.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_neutral-01.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_neutral-02.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_neutral-03.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_neutral-04.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_neutral-05.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected-01.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected-02.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected-03.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected-04.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected-05.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected_over-01.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected_over-02.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected_over-03.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected_over-04.png"/>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected_over-05.png"/>
+    <None Include="..\..\Resources\Images\Icons\noise_wave.png"/>
+    <None Include="..\..\Resources\Images\Icons\saw_wave.png"/>
+    <None Include="..\..\Resources\Images\Icons\sine_wave.png"/>
+    <None Include="..\..\Resources\Images\Icons\square_wave.png"/>
+    <None Include="..\..\Resources\Images\Icons\triangle_wave.png"/>
+    <None Include="..\..\Resources\Images\Icons\wifi.png"/>
+    <None Include="..\..\Resources\Images\Icons\SourceDrop.png"/>
+    <None Include="..\..\Resources\Images\Icons\DefaultDataSource.png"/>
+    <None Include="..\..\Resources\Images\Icons\FileReaderIcon.png"/>
+    <None Include="..\..\Resources\Images\Icons\IntanIcon.png"/>
+    <None Include="..\..\Resources\Images\Buttons\muteoff.png"/>
+    <None Include="..\..\Resources\Images\Buttons\muteon.png"/>
+    <None Include="..\..\Resources\Images\Buttons\MergerA-01.png"/>
+    <None Include="..\..\Resources\Images\Buttons\MergerA-02.png"/>
+    <None Include="..\..\Resources\Images\Buttons\MergerB-01.png"/>
+    <None Include="..\..\Resources\Images\Buttons\MergerB-02.png"/>
+    <None Include="..\..\Resources\Images\Buttons\PipelineA-01.png"/>
+    <None Include="..\..\Resources\Images\Buttons\PipelineA-02.png"/>
+    <None Include="..\..\Resources\Images\Buttons\PipelineB-01.png"/>
+    <None Include="..\..\Resources\Images\Buttons\PipelineB-02.png"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_audio_devices\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_audio_formats\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_audio_utils\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_core\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_cryptography\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_data_structures\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_events\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_graphics\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_gui_basics\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_gui_extra\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_opengl\juce_module_info"/>
+    <None Include="..\..\JuceLibraryCode\modules\juce_video\juce_module_info"/>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include=".\resources.rc"/>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
+  <ImportGroup Label="ExtensionTargets"/>
+</Project>
diff --git a/Builds/VisualStudio2013/open-ephys.vcxproj.filters b/Builds/VisualStudio2013/open-ephys.vcxproj.filters
new file mode 100644
index 0000000000000000000000000000000000000000..552cf996fc94a3692721a2c6823d26c201fff477
--- /dev/null
+++ b/Builds/VisualStudio2013/open-ephys.vcxproj.filters
@@ -0,0 +1,4019 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="open-ephys">
+      <UniqueIdentifier>{09327587-4EDB-7847-7714-99A7CCA19DD2}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Resources">
+      <UniqueIdentifier>{4FB3688D-1CC4-C459-F92E-F1764A198374}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Resources\Fonts">
+      <UniqueIdentifier>{1DC91498-AFB8-F53B-37B4-DA354ACC7637}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Resources\Images">
+      <UniqueIdentifier>{0CFBAC61-A902-EBAE-20AE-E5199135B6E5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Resources\Images\Icons">
+      <UniqueIdentifier>{75E4141A-653A-06D6-ED9C-A35FBA8EA1DC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Resources\Images\Buttons">
+      <UniqueIdentifier>{787A3382-81B7-4512-0559-E369ACB28986}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source">
+      <UniqueIdentifier>{02B8D40A-0071-792E-592F-8A30DD87BAE6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Network">
+      <UniqueIdentifier>{F426EB08-DE72-34FB-F5F1-D8D077A9C12D}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Audio">
+      <UniqueIdentifier>{DC7BD6F0-2EB6-B7BF-B84C-66EF8EE93230}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors">
+      <UniqueIdentifier>{3DDEC88C-BAA5-2DDA-A59F-0FB74070AB82}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\ArduinoOutput">
+      <UniqueIdentifier>{26D17857-B604-0035-CFB5-C3FFD320BD99}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\AudioNode">
+      <UniqueIdentifier>{117683A8-B332-1FBB-1FA0-8C6C7D231B69}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\AudioResamplingNode">
+      <UniqueIdentifier>{BB0D2303-17CA-2E39-9765-7A701B2AE2F6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Channel">
+      <UniqueIdentifier>{7374BFF8-0BFC-382A-1DC3-F4B934CF25BC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\ChannelMappingNode">
+      <UniqueIdentifier>{CFA4FC13-DA1B-011C-D897-0FF0B7D1301B}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\DataThreads">
+      <UniqueIdentifier>{AA123918-8642-2612-7B72-C63DA032271B}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\DataThreads\rhythm-api">
+      <UniqueIdentifier>{EF1534B7-662E-9844-D11F-1D1003B02E4A}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Dsp">
+      <UniqueIdentifier>{9C1026A0-8DA9-8D8D-AC1D-22880764350D}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Editors">
+      <UniqueIdentifier>{E65874A6-23B2-9D76-B12A-15730E2192BC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\EventDetector">
+      <UniqueIdentifier>{FDD5B79A-1AA4-7745-BB6E-E09A6DFC328E}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\EventNode">
+      <UniqueIdentifier>{3BDCC6CD-7B1F-ED1C-7442-F2B0CD1A86C8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\FileReader">
+      <UniqueIdentifier>{59F490B2-F5D9-601B-01AE-368632E3C9D7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\FilterNode">
+      <UniqueIdentifier>{189BB62E-5852-A4F3-AC79-704FAAE02870}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\FPGAOutput">
+      <UniqueIdentifier>{995BE2D8-55CB-BBA8-8155-2EFE5F03F143}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\GenericProcessor">
+      <UniqueIdentifier>{223ADE1C-7B16-1075-5D22-4771767BF960}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\LfpDisplayNode">
+      <UniqueIdentifier>{6F781BCA-7DB6-E933-BDDB-D2EAA51713B0}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\LfpTriggeredAverageNode">
+      <UniqueIdentifier>{1150A21B-5E97-AC73-C141-CEF966829E71}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Merger">
+      <UniqueIdentifier>{144C1CD2-E387-1D24-EFF3-C5238BD84182}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\MessageCenter">
+      <UniqueIdentifier>{BC6AF028-A7C2-7914-7DCA-A3F145C7DF5F}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Parameter">
+      <UniqueIdentifier>{1A622D55-9AE3-2A07-5AC5-237BFA2278DD}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\PhaseDetector">
+      <UniqueIdentifier>{C9BE6651-5B98-F5D3-047F-E021EE143E00}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\ProcessorGraph">
+      <UniqueIdentifier>{6A13AFE9-16FA-463C-B758-8702F1EA4F8B}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\PulsePalOutput">
+      <UniqueIdentifier>{75B4E291-E4EA-812C-4963-E760993C4B0D}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\RecordControl">
+      <UniqueIdentifier>{2DF3655B-132B-CD8A-6483-C2F4C74C6D42}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\RecordNode">
+      <UniqueIdentifier>{185877A6-9FE6-DD2E-BC41-93EE3C608CFC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\ReferenceNode">
+      <UniqueIdentifier>{763A6B4C-B0C6-BA22-7FAB-0DEEF8D66097}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\ResamplingNode">
+      <UniqueIdentifier>{3135385A-1E61-FB08-3E00-D5C52DFB1BC9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Serial">
+      <UniqueIdentifier>{58FEEDBF-D0C4-32AB-FC79-00C612892B6D}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SerialInput">
+      <UniqueIdentifier>{AC7C03CC-B7F3-EF83-085E-AB894624CAFC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SignalGenerator">
+      <UniqueIdentifier>{98080044-1FF9-22CA-70D0-745170D30FD6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SourceNode">
+      <UniqueIdentifier>{83A3043C-94AE-ADED-C72B-394EB4BAE6B4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SpikeDetector">
+      <UniqueIdentifier>{2D5F5EA7-422D-75BE-FA59-68F2C55B89E8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SpikeDisplayNode">
+      <UniqueIdentifier>{818E5C85-5930-DC8D-A3C2-0443F4C35B47}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\SpikeSorter">
+      <UniqueIdentifier>{11B5BECA-5948-83BC-3C0F-DEB527800990}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Splitter">
+      <UniqueIdentifier>{2AAA8664-72AA-EC5C-92E2-3392067B058F}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\Visualization">
+      <UniqueIdentifier>{851942D5-FED6-A7B2-6FAB-C278A247FE7A}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\Processors\WiFiOutput">
+      <UniqueIdentifier>{F733C561-3FBD-E17D-CC23-601836ADF7E6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="open-ephys\Source\UI">
+      <UniqueIdentifier>{717A0FE3-E079-E4BD-8F50-15A1953825C5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules">
+      <UniqueIdentifier>{422C46B7-0467-2DB0-BF3C-16DFCAFD69AC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_basics">
+      <UniqueIdentifier>{3247ED97-A75A-F50B-8CCC-46155E895806}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_basics\buffers">
+      <UniqueIdentifier>{A33A1E1D-AC2C-6382-8681-48B0FC374C60}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_basics\midi">
+      <UniqueIdentifier>{3FD908F5-98C8-9A61-FC03-0BAF8913CBB0}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_basics\effects">
+      <UniqueIdentifier>{11A75801-B027-40BD-4993-023023ACCBF7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_basics\sources">
+      <UniqueIdentifier>{EF2CAB40-0432-429B-C517-86ADF136BB8A}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_basics\synthesisers">
+      <UniqueIdentifier>{8F7EC212-3168-AD81-5064-C45BA838C408}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_devices">
+      <UniqueIdentifier>{CACD7B50-4DB3-76AF-A6E8-90DF94F8F594}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_devices\audio_io">
+      <UniqueIdentifier>{9D270B31-2425-8FDB-84A4-6A2288FF5B2F}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_devices\midi_io">
+      <UniqueIdentifier>{0F766DD4-A277-CB86-5647-42498C8B41E1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_devices\sources">
+      <UniqueIdentifier>{D64942B4-6984-3623-3347-45D472AE1C61}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_devices\audio_cd">
+      <UniqueIdentifier>{45C2CE26-EC4B-BA52-58F3-297C408E1483}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_devices\native">
+      <UniqueIdentifier>{01603E05-423B-5FC3-1BEE-E15ED33B5688}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_formats">
+      <UniqueIdentifier>{65CB28F8-0422-A8F3-9A17-959E12A1F8E2}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_formats\format">
+      <UniqueIdentifier>{2FE25F4C-E9DF-04A5-CAED-6E4B7CF28C59}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_formats\codecs">
+      <UniqueIdentifier>{0CD9E281-DDD0-91EC-6F77-EA9D9D5E0E1A}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_formats\sampler">
+      <UniqueIdentifier>{40C5CA7C-AEBB-05B1-11CE-AE41D87B5CCB}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_processors">
+      <UniqueIdentifier>{0B0E7392-324B-088C-FBEB-5FE999D61782}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_processors\processors">
+      <UniqueIdentifier>{77E2C34E-A4D6-EDB5-A107-7CB3CEF0E8EF}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_processors\format">
+      <UniqueIdentifier>{20254EFE-6CBD-31A7-2119-92B1E0E0E311}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_processors\format_types">
+      <UniqueIdentifier>{70796D73-6D30-8A1B-4732-7C021E47C05A}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_processors\scanning">
+      <UniqueIdentifier>{EB8DD942-E2CB-869F-D381-E02A65BA790B}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_utils">
+      <UniqueIdentifier>{B63F69FD-8A40-8E1E-E7ED-419B8DC1C12B}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_utils\gui">
+      <UniqueIdentifier>{8167E753-09C7-5D1C-EF2B-32D297557443}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_audio_utils\players">
+      <UniqueIdentifier>{AEDCB7F7-7A36-5392-8E9A-715F5BDE35CB}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core">
+      <UniqueIdentifier>{95CA1506-2B94-0DEE-0C8D-85EDEBBC4E88}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\text">
+      <UniqueIdentifier>{244D11B0-2D68-3C08-A0B7-0D12469BC3AA}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\maths">
+      <UniqueIdentifier>{476C69CE-0B67-6B85-E888-45D91E37A29E}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\memory">
+      <UniqueIdentifier>{7C5AD030-F8CC-6E85-0AF6-196B3ED40AC6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\containers">
+      <UniqueIdentifier>{0608ADE9-66EF-1A19-6D57-12D07F76EB53}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\threads">
+      <UniqueIdentifier>{05F3DB8A-499C-6ACA-282F-5BF8455A0DE1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\time">
+      <UniqueIdentifier>{C9F6D785-BF78-5AA1-B479-111C65397864}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\files">
+      <UniqueIdentifier>{C8F726FC-26BF-2E6B-4ED5-55A7FE316D7D}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\network">
+      <UniqueIdentifier>{DA0DC4AC-B511-A2D4-199A-C93454D6F114}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\streams">
+      <UniqueIdentifier>{91929C6F-7902-B87D-5260-2F6CBF8ACD93}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\logging">
+      <UniqueIdentifier>{C294408A-2005-2E9E-7AC0-8D3ABE8AC175}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\system">
+      <UniqueIdentifier>{4634FFAE-9586-A970-364C-4FDDA635F99F}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\xml">
+      <UniqueIdentifier>{F2B2F310-F30F-7166-42A9-9BF9C230DA78}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\javascript">
+      <UniqueIdentifier>{1B67A7C0-86E0-53F6-6AE3-7AD93B8DC95B}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\zip">
+      <UniqueIdentifier>{F03654BC-34D8-F975-BEA3-750CC2783D23}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\unit_tests">
+      <UniqueIdentifier>{4927C7A1-9235-4AA1-93CD-B4E67E6F1E5F}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\misc">
+      <UniqueIdentifier>{FA891A58-9FDA-9651-43C4-714A19B5D08D}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_core\native">
+      <UniqueIdentifier>{C79A4D23-7866-8F3E-AC39-BD68C52A9259}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_cryptography">
+      <UniqueIdentifier>{3C7C8F35-6C08-9866-6663-6FEFE2EFC9FC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_cryptography\encryption">
+      <UniqueIdentifier>{7703D2CE-C32A-936A-0EEF-949FE6E52EB5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_cryptography\hashing">
+      <UniqueIdentifier>{8D283B6C-13BA-9EF6-1B18-B1C393786943}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_data_structures">
+      <UniqueIdentifier>{928D8FCC-5E00-174B-6538-93E8D75AB396}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_data_structures\values">
+      <UniqueIdentifier>{1988E68A-A964-64CA-0E0C-26FF9BC5176C}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_data_structures\undomanager">
+      <UniqueIdentifier>{3DF036EA-3B80-553B-2494-3AAC835CAE75}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_data_structures\app_properties">
+      <UniqueIdentifier>{358AEA11-3F96-36AE-7B32-71373B5C5396}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_events">
+      <UniqueIdentifier>{F2A38F45-6E55-E147-2E52-64A89FDD9D59}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_events\messages">
+      <UniqueIdentifier>{6172822C-01A5-E824-12DA-FA43FA934D35}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_events\timers">
+      <UniqueIdentifier>{41DC3BE3-D629-8A17-C32B-F5B4008B5FAD}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_events\broadcasters">
+      <UniqueIdentifier>{B098BC87-3298-7E6B-12DC-D26C09CDCAED}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_events\interprocess">
+      <UniqueIdentifier>{6322B88F-984A-C3CD-6263-38D7AA49B6EC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_events\native">
+      <UniqueIdentifier>{73C1E759-AD90-59A3-942E-2D10FAA29107}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_graphics">
+      <UniqueIdentifier>{EE1AE8C3-0908-8F53-A4E5-D930C7C97C26}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_graphics\colour">
+      <UniqueIdentifier>{4926B3FF-E797-F586-857A-69D9703FA2D1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_graphics\contexts">
+      <UniqueIdentifier>{EBC65085-3AD5-280C-1A29-2B1683643AA1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_graphics\images">
+      <UniqueIdentifier>{413F481F-075C-2958-115C-D8268682FCB7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_graphics\image_formats">
+      <UniqueIdentifier>{69E1179D-76EC-26DC-C3E6-6602ED26D783}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_graphics\geometry">
+      <UniqueIdentifier>{C1A1A236-AB01-173E-96C3-0706BFF93B1E}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_graphics\placement">
+      <UniqueIdentifier>{1182303F-ECA3-166D-AC0C-92C5E762CB93}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_graphics\fonts">
+      <UniqueIdentifier>{26ECA2AF-7368-C6CC-58EF-017ECD1862D0}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_graphics\effects">
+      <UniqueIdentifier>{E37D25CD-4350-4614-055B-7ABC55E67895}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_graphics\native">
+      <UniqueIdentifier>{FFC6E1CC-C772-75E6-5087-FB5D4E016799}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics">
+      <UniqueIdentifier>{8E43579F-C185-266D-DD67-F8B95BD80F2F}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\components">
+      <UniqueIdentifier>{2CB59E7C-D0E4-7D27-2ACF-C7ABADEE936D}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\mouse">
+      <UniqueIdentifier>{796B7886-44A7-34CC-9B95-BF4FB2C7B6F4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\keyboard">
+      <UniqueIdentifier>{A92719C7-70BE-57C4-CE9E-A9BC9DFEB757}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\widgets">
+      <UniqueIdentifier>{75F1F352-251A-75E0-D941-8431588F5C1E}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\windows">
+      <UniqueIdentifier>{DB6E3D09-66DA-12DA-BAE8-A5BFFA7A14AC}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\menus">
+      <UniqueIdentifier>{7BCEAB87-62FD-0327-EB5D-679E54EDB9B1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\layout">
+      <UniqueIdentifier>{E980FADB-6E3F-B93C-DE02-CE4271C9BA93}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\buttons">
+      <UniqueIdentifier>{C3B2EB8A-1A2F-306F-AA78-3E9D1593788B}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\positioning">
+      <UniqueIdentifier>{7A53E6F1-1343-33B8-4CA8-1D7B714A0E76}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\drawables">
+      <UniqueIdentifier>{5A0AA36E-3957-E413-14C6-31CBE15271DF}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\properties">
+      <UniqueIdentifier>{D7E3D10F-3ED8-DFC5-6DB3-E4ACBF8678FB}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\lookandfeel">
+      <UniqueIdentifier>{F408DCA2-D5E2-0A3A-A064-A1D045889BC1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\filebrowser">
+      <UniqueIdentifier>{5FDBD6B1-9BBD-392F-4DA5-FEA40A9370C4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\commands">
+      <UniqueIdentifier>{46535B56-3737-2BE8-E3A0-571BCBEB2DA4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\misc">
+      <UniqueIdentifier>{C2B9505B-27B4-F650-12BD-F477D4BBCBAA}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\application">
+      <UniqueIdentifier>{61712B09-5783-ADFA-2001-5A0C3D7764EB}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_basics\native">
+      <UniqueIdentifier>{8A80BA78-D3A8-C0F8-7FFD-61AA028CE852}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_extra">
+      <UniqueIdentifier>{8EC9572F-3CCA-E930-74B6-CB6139DE0E17}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_extra\code_editor">
+      <UniqueIdentifier>{C60A6FCA-9462-922E-AD8D-69F10C9049AF}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_extra\documents">
+      <UniqueIdentifier>{D56498EE-E354-1F00-5EEE-8CF7944BEAFB}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_extra\embedding">
+      <UniqueIdentifier>{61B2920C-494D-D8CB-C0C7-5DBF3D76D164}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_extra\lookandfeel">
+      <UniqueIdentifier>{4980B18D-FEDE-B773-F254-E3B5207D81F0}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_extra\misc">
+      <UniqueIdentifier>{66C9B809-8739-A217-C78D-A15D6089B8E3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_gui_extra\native">
+      <UniqueIdentifier>{C413328B-5D81-89EE-F4F3-75752E700DE4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_opengl">
+      <UniqueIdentifier>{639E16C5-DA8B-ADBA-6E24-7B596378EAB2}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_opengl\opengl">
+      <UniqueIdentifier>{2D8D0E19-E676-83EB-38D9-F73500DD6B79}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_opengl\native">
+      <UniqueIdentifier>{151B49D8-6102-F802-1C07-D59931BC0574}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_video">
+      <UniqueIdentifier>{72A923E2-C729-DB92-D7BF-A9D4AFAE5896}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_video\playback">
+      <UniqueIdentifier>{0E43EA8A-95EE-4253-E1B7-160F38ACBB00}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_video\capture">
+      <UniqueIdentifier>{7F11E7D2-54C0-2A36-5F15-BEC0A5374A08}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Modules\juce_video\native">
+      <UniqueIdentifier>{EE985DEA-CD83-8132-7219-542BB1DAD560}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Juce Library Code">
+      <UniqueIdentifier>{8B4D1BAA-6DB4-CAEC-A0FA-271F354D5C61}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\Source\AccessClass.cpp">
+      <Filter>open-ephys\Source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Network\PracticalSocket.cpp">
+      <Filter>open-ephys\Source\Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Audio\AudioComponent.cpp">
+      <Filter>open-ephys\Source\Audio</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutput.cpp">
+      <Filter>open-ephys\Source\Processors\ArduinoOutput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutputEditor.cpp">
+      <Filter>open-ephys\Source\Processors\ArduinoOutput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\AudioNode\AudioEditor.cpp">
+      <Filter>open-ephys\Source\Processors\AudioNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\AudioNode\AudioNode.cpp">
+      <Filter>open-ephys\Source\Processors\AudioNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\AudioResamplingNode\AudioResamplingNode.cpp">
+      <Filter>open-ephys\Source\Processors\AudioResamplingNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Channel\Channel.cpp">
+      <Filter>open-ephys\Source\Processors\Channel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingEditor.cpp">
+      <Filter>open-ephys\Source\Processors\ChannelMappingNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingNode.cpp">
+      <Filter>open-ephys\Source\Processors\ChannelMappingNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\EcubeEditor.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\RHD2000Editor.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\EcubeThread.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\okFrontPanelDLL.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000datablock.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000evalboard.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000registers.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\RHD2000Thread.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\FileReaderThread.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\FPGAThread.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\DataBuffer.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\DataThreads\DataThread.cpp">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Bessel.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Biquad.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Butterworth.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Cascade.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\ChebyshevI.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\ChebyshevII.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Custom.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Design.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Documentation.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Elliptic.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Filter.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Legendre.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\Param.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\PoleFilter.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\RBJ.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\RootFinder.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Dsp\State.cpp">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Editors\ChannelSelector.cpp">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Editors\ElectrodeButtons.cpp">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Editors\GenericEditor.cpp">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Editors\ImageIcon.cpp">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Editors\VisualizerEditor.cpp">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\EventDetector\EventDetector.cpp">
+      <Filter>open-ephys\Source\Processors\EventDetector</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\EventNode\EventNode.cpp">
+      <Filter>open-ephys\Source\Processors\EventNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\EventNode\EventNodeEditor.cpp">
+      <Filter>open-ephys\Source\Processors\EventNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\FileReader\FileReader.cpp">
+      <Filter>open-ephys\Source\Processors\FileReader</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\FileReader\FileReaderEditor.cpp">
+      <Filter>open-ephys\Source\Processors\FileReader</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\FilterNode\FilterEditor.cpp">
+      <Filter>open-ephys\Source\Processors\FilterNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\FilterNode\FilterNode.cpp">
+      <Filter>open-ephys\Source\Processors\FilterNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\FPGAOutput\FPGAOutput.cpp">
+      <Filter>open-ephys\Source\Processors\FPGAOutput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\FPGAOutput\FPGAOutputEditor.cpp">
+      <Filter>open-ephys\Source\Processors\FPGAOutput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\GenericProcessor\GenericProcessor.cpp">
+      <Filter>open-ephys\Source\Processors\GenericProcessor</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayCanvas.cpp">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayEditor.cpp">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayNode.cpp">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageCanvas.cpp">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageEditor.cpp">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageNode.cpp">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Merger\Merger.cpp">
+      <Filter>open-ephys\Source\Processors\Merger</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Merger\MergerEditor.cpp">
+      <Filter>open-ephys\Source\Processors\Merger</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\MessageCenter\MessageCenter.cpp">
+      <Filter>open-ephys\Source\Processors\MessageCenter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\MessageCenter\MessageCenterEditor.cpp">
+      <Filter>open-ephys\Source\Processors\MessageCenter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Parameter\ParameterEditor.cpp">
+      <Filter>open-ephys\Source\Processors\Parameter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Parameter\Parameter.cpp">
+      <Filter>open-ephys\Source\Processors\Parameter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\PhaseDetector\PhaseDetector.cpp">
+      <Filter>open-ephys\Source\Processors\PhaseDetector</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\PhaseDetector\PhaseDetectorEditor.cpp">
+      <Filter>open-ephys\Source\Processors\PhaseDetector</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\ProcessorGraph\ProcessorGraph.cpp">
+      <Filter>open-ephys\Source\Processors\ProcessorGraph</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutput.cpp">
+      <Filter>open-ephys\Source\Processors\PulsePalOutput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutputEditor.cpp">
+      <Filter>open-ephys\Source\Processors\PulsePalOutput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\RecordControl\RecordControl.cpp">
+      <Filter>open-ephys\Source\Processors\RecordControl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\RecordControl\RecordControlEditor.cpp">
+      <Filter>open-ephys\Source\Processors\RecordControl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\EngineConfigWindow.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\HDF5FileFormat.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\HDF5Recording.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\OriginalRecording.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\RecordEngine.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\RecordNode\RecordNode.cpp">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\ReferenceNode\ReferenceNode.cpp">
+      <Filter>open-ephys\Source\Processors\ReferenceNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\ReferenceNode\ReferenceNodeEditor.cpp">
+      <Filter>open-ephys\Source\Processors\ReferenceNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\ResamplingNode\ResamplingNode.cpp">
+      <Filter>open-ephys\Source\Processors\ResamplingNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\ResamplingNode\ResamplingNodeEditor.cpp">
+      <Filter>open-ephys\Source\Processors\ResamplingNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Serial\PulsePal.cpp">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Serial\ofArduino.cpp">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Serial\ofSerial.cpp">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SerialInput\SerialInput.cpp">
+      <Filter>open-ephys\Source\Processors\SerialInput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SerialInput\SerialInputEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SerialInput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SignalGenerator\SignalGenerator.cpp">
+      <Filter>open-ephys\Source\Processors\SignalGenerator</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SignalGenerator\SignalGeneratorEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SignalGenerator</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SourceNode\SourceNode.cpp">
+      <Filter>open-ephys\Source\Processors\SourceNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SourceNode\SourceNodeEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SourceNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeDetector\SpikeDetector.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeDetector</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeDetector\SpikeDetectorEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeDetector</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayCanvas.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayNode.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSortBoxes.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorter.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorterCanvas.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\SpikeSorter\SpikeSorterEditor.cpp">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Splitter\Splitter.cpp">
+      <Filter>open-ephys\Source\Processors\Splitter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Splitter\SplitterEditor.cpp">
+      <Filter>open-ephys\Source\Processors\Splitter</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Visualization\DataWindow.cpp">
+      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\Visualization\SpikeObject.cpp">
+      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\WiFiOutput\WiFiOutput.cpp">
+      <Filter>open-ephys\Source\Processors\WiFiOutput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Processors\WiFiOutput\WiFiOutputEditor.cpp">
+      <Filter>open-ephys\Source\Processors\WiFiOutput</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\EcubeDialogComponent.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\CustomArrowButton.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\GraphViewer.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\EditorViewportButtons.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\SignalChainManager.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\EditorViewport.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\ProcessorList.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\CustomLookAndFeel.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\InfoLabel.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\DataViewport.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\ControlPanel.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\UI\UIComponent.cpp">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\MainWindow.cpp">
+      <Filter>open-ephys\Source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\Source\Main.cpp">
+      <Filter>open-ephys\Source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_AudioDataConverters.cpp">
+      <Filter>Juce Modules\juce_audio_basics\buffers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_AudioSampleBuffer.cpp">
+      <Filter>Juce Modules\juce_audio_basics\buffers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_FloatVectorOperations.cpp">
+      <Filter>Juce Modules\juce_audio_basics\buffers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiBuffer.cpp">
+      <Filter>Juce Modules\juce_audio_basics\midi</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiFile.cpp">
+      <Filter>Juce Modules\juce_audio_basics\midi</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiKeyboardState.cpp">
+      <Filter>Juce Modules\juce_audio_basics\midi</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiMessage.cpp">
+      <Filter>Juce Modules\juce_audio_basics\midi</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiMessageSequence.cpp">
+      <Filter>Juce Modules\juce_audio_basics\midi</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_IIRFilter.cpp">
+      <Filter>Juce Modules\juce_audio_basics\effects</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_LagrangeInterpolator.cpp">
+      <Filter>Juce Modules\juce_audio_basics\effects</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_BufferingAudioSource.cpp">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ChannelRemappingAudioSource.cpp">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_IIRFilterAudioSource.cpp">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_MixerAudioSource.cpp">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.cpp">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ReverbAudioSource.cpp">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.cpp">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp">
+      <Filter>Juce Modules\juce_audio_basics\synthesisers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioDeviceManager.cpp">
+      <Filter>Juce Modules\juce_audio_devices\audio_io</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioIODevice.cpp">
+      <Filter>Juce Modules\juce_audio_devices\audio_io</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioIODeviceType.cpp">
+      <Filter>Juce Modules\juce_audio_devices\audio_io</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\midi_io\juce_MidiMessageCollector.cpp">
+      <Filter>Juce Modules\juce_audio_devices\midi_io</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\midi_io\juce_MidiOutput.cpp">
+      <Filter>Juce Modules\juce_audio_devices\midi_io</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\sources\juce_AudioSourcePlayer.cpp">
+      <Filter>Juce Modules\juce_audio_devices\sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\sources\juce_AudioTransportSource.cpp">
+      <Filter>Juce Modules\juce_audio_devices\sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_cd\juce_AudioCDReader.cpp">
+      <Filter>Juce Modules\juce_audio_devices\audio_cd</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_android_Audio.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_android_Midi.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_android_OpenSL.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_ios_Audio.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_linux_ALSA.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_linux_AudioCDReader.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_linux_JackAudio.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_linux_Midi.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_mac_AudioCDBurner.mm">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_mac_AudioCDReader.mm">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_mac_CoreAudio.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_mac_CoreMidi.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_ASIO.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_AudioCDBurner.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_AudioCDReader.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_DirectSound.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_Midi.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_win32_WASAPI.cpp">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormat.cpp">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatManager.cpp">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatReader.cpp">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatReaderSource.cpp">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatWriter.cpp">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioSubsectionReader.cpp">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_BufferingAudioFormatReader.cpp">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_AiffAudioFormat.cpp">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_CoreAudioFormat.cpp">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_FlacAudioFormat.cpp">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_LAMEEncoderAudioFormat.cpp">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_MP3AudioFormat.cpp">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_OggVorbisAudioFormat.cpp">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_QuickTimeAudioFormat.cpp">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_WavAudioFormat.cpp">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_WindowsMediaAudioFormat.cpp">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\sampler\juce_Sampler.cpp">
+      <Filter>Juce Modules\juce_audio_formats\sampler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessor.cpp">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorEditor.cpp">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorGraph.cpp">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.cpp">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_PluginDescription.cpp">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormat.cpp">
+      <Filter>Juce Modules\juce_audio_processors\format</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormatManager.cpp">
+      <Filter>Juce Modules\juce_audio_processors\format</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_AudioUnitPluginFormat.mm">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_LADSPAPluginFormat.cpp">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.cpp">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.cpp">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_KnownPluginList.cpp">
+      <Filter>Juce Modules\juce_audio_processors\scanning</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_PluginDirectoryScanner.cpp">
+      <Filter>Juce Modules\juce_audio_processors\scanning</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_PluginListComponent.cpp">
+      <Filter>Juce Modules\juce_audio_processors\scanning</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioDeviceSelectorComponent.cpp">
+      <Filter>Juce Modules\juce_audio_utils\gui</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioThumbnail.cpp">
+      <Filter>Juce Modules\juce_audio_utils\gui</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioThumbnailCache.cpp">
+      <Filter>Juce Modules\juce_audio_utils\gui</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_MidiKeyboardComponent.cpp">
+      <Filter>Juce Modules\juce_audio_utils\gui</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\players\juce_AudioProcessorPlayer.cpp">
+      <Filter>Juce Modules\juce_audio_utils\players</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharacterFunctions.cpp">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_Identifier.cpp">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_LocalisedStrings.cpp">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_String.cpp">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringArray.cpp">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringPairArray.cpp">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringPool.cpp">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_TextDiff.cpp">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_BigInteger.cpp">
+      <Filter>Juce Modules\juce_core\maths</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Expression.cpp">
+      <Filter>Juce Modules\juce_core\maths</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.cpp">
+      <Filter>Juce Modules\juce_core\maths</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_MemoryBlock.cpp">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_AbstractFifo.cpp">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_DynamicObject.cpp">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_NamedValueSet.cpp">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_PropertySet.cpp">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_Variant.cpp">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ChildProcess.cpp">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_HighResolutionTimer.cpp">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ReadWriteLock.cpp">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_Thread.cpp">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ThreadPool.cpp">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_TimeSliceThread.cpp">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_PerformanceCounter.cpp">
+      <Filter>Juce Modules\juce_core\time</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_RelativeTime.cpp">
+      <Filter>Juce Modules\juce_core\time</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_Time.cpp">
+      <Filter>Juce Modules\juce_core\time</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_DirectoryIterator.cpp">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_File.cpp">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileFilter.cpp">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileInputStream.cpp">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileOutputStream.cpp">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileSearchPath.cpp">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_TemporaryFile.cpp">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_WildcardFileFilter.cpp">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_IPAddress.cpp">
+      <Filter>Juce Modules\juce_core\network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_MACAddress.cpp">
+      <Filter>Juce Modules\juce_core\network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_NamedPipe.cpp">
+      <Filter>Juce Modules\juce_core\network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_Socket.cpp">
+      <Filter>Juce Modules\juce_core\network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_URL.cpp">
+      <Filter>Juce Modules\juce_core\network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_BufferedInputStream.cpp">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_FileInputSource.cpp">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_InputStream.cpp">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_MemoryInputStream.cpp">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_MemoryOutputStream.cpp">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_OutputStream.cpp">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_SubregionStream.cpp">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_FileLogger.cpp">
+      <Filter>Juce Modules\juce_core\logging</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.cpp">
+      <Filter>Juce Modules\juce_core\logging</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_SystemStats.cpp">
+      <Filter>Juce Modules\juce_core\system</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\xml\juce_XmlDocument.cpp">
+      <Filter>Juce Modules\juce_core\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\xml\juce_XmlElement.cpp">
+      <Filter>Juce Modules\juce_core\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\javascript\juce_Javascript.cpp">
+      <Filter>Juce Modules\juce_core\javascript</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\javascript\juce_JSON.cpp">
+      <Filter>Juce Modules\juce_core\javascript</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_GZIPCompressorOutputStream.cpp">
+      <Filter>Juce Modules\juce_core\zip</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_GZIPDecompressorInputStream.cpp">
+      <Filter>Juce Modules\juce_core\zip</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_ZipFile.cpp">
+      <Filter>Juce Modules\juce_core\zip</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\unit_tests\juce_UnitTest.cpp">
+      <Filter>Juce Modules\juce_core\unit_tests</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\misc\juce_Result.cpp">
+      <Filter>Juce Modules\juce_core\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\misc\juce_Uuid.cpp">
+      <Filter>Juce Modules\juce_core\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_Files.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_Misc.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_Network.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_SystemStats.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_Threads.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_linux_CommonFile.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_linux_Files.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_linux_Network.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_linux_SystemStats.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_linux_Threads.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_mac_Files.mm">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_mac_Network.mm">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_mac_Strings.mm">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_mac_SystemStats.mm">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_mac_Threads.mm">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_posix_NamedPipe.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_Files.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_Network.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_Registry.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_SystemStats.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_Threads.cpp">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_BlowFish.cpp">
+      <Filter>Juce Modules\juce_cryptography\encryption</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_Primes.cpp">
+      <Filter>Juce Modules\juce_cryptography\encryption</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_RSAKey.cpp">
+      <Filter>Juce Modules\juce_cryptography\encryption</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\hashing\juce_MD5.cpp">
+      <Filter>Juce Modules\juce_cryptography\hashing</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\hashing\juce_SHA256.cpp">
+      <Filter>Juce Modules\juce_cryptography\hashing</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\values\juce_Value.cpp">
+      <Filter>Juce Modules\juce_data_structures\values</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\values\juce_ValueTree.cpp">
+      <Filter>Juce Modules\juce_data_structures\values</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\undomanager\juce_UndoManager.cpp">
+      <Filter>Juce Modules\juce_data_structures\undomanager</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\app_properties\juce_ApplicationProperties.cpp">
+      <Filter>Juce Modules\juce_data_structures\app_properties</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\app_properties\juce_PropertiesFile.cpp">
+      <Filter>Juce Modules\juce_data_structures\app_properties</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_ApplicationBase.cpp">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_DeletedAtShutdown.cpp">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageListener.cpp">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.cpp">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_MultiTimer.cpp">
+      <Filter>Juce Modules\juce_events\timers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_Timer.cpp">
+      <Filter>Juce Modules\juce_events\timers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp">
+      <Filter>Juce Modules\juce_events\broadcasters</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_AsyncUpdater.cpp">
+      <Filter>Juce Modules\juce_events\broadcasters</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ChangeBroadcaster.cpp">
+      <Filter>Juce Modules\juce_events\broadcasters</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_ConnectedChildProcess.cpp">
+      <Filter>Juce Modules\juce_events\interprocess</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_InterprocessConnection.cpp">
+      <Filter>Juce Modules\juce_events\interprocess</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_InterprocessConnectionServer.cpp">
+      <Filter>Juce Modules\juce_events\interprocess</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_android_Messaging.cpp">
+      <Filter>Juce Modules\juce_events\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_ios_MessageManager.mm">
+      <Filter>Juce Modules\juce_events\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_linux_Messaging.cpp">
+      <Filter>Juce Modules\juce_events\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_mac_MessageManager.mm">
+      <Filter>Juce Modules\juce_events\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_win32_Messaging.cpp">
+      <Filter>Juce Modules\juce_events\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_Colour.cpp">
+      <Filter>Juce Modules\juce_graphics\colour</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_ColourGradient.cpp">
+      <Filter>Juce Modules\juce_graphics\colour</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_Colours.cpp">
+      <Filter>Juce Modules\juce_graphics\colour</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_FillType.cpp">
+      <Filter>Juce Modules\juce_graphics\colour</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_GraphicsContext.cpp">
+      <Filter>Juce Modules\juce_graphics\contexts</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_LowLevelGraphicsPostScriptRenderer.cpp">
+      <Filter>Juce Modules\juce_graphics\contexts</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_LowLevelGraphicsSoftwareRenderer.cpp">
+      <Filter>Juce Modules\juce_graphics\contexts</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_Image.cpp">
+      <Filter>Juce Modules\juce_graphics\images</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageCache.cpp">
+      <Filter>Juce Modules\juce_graphics\images</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageConvolutionKernel.cpp">
+      <Filter>Juce Modules\juce_graphics\images</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageFileFormat.cpp">
+      <Filter>Juce Modules\juce_graphics\images</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\image_formats\juce_GIFLoader.cpp">
+      <Filter>Juce Modules\juce_graphics\image_formats</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\image_formats\juce_JPEGLoader.cpp">
+      <Filter>Juce Modules\juce_graphics\image_formats</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\image_formats\juce_PNGLoader.cpp">
+      <Filter>Juce Modules\juce_graphics\image_formats</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_AffineTransform.cpp">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_EdgeTable.cpp">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_Path.cpp">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_PathIterator.cpp">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_PathStrokeType.cpp">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_RectangleList.cpp">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\placement\juce_Justification.cpp">
+      <Filter>Juce Modules\juce_graphics\placement</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
+      <Filter>Juce Modules\juce_graphics\placement</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_AttributedString.cpp">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_CustomTypeface.cpp">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_Font.cpp">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_GlyphArrangement.cpp">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_TextLayout.cpp">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_Typeface.cpp">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\effects\juce_DropShadowEffect.cpp">
+      <Filter>Juce Modules\juce_graphics\effects</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\effects\juce_GlowEffect.cpp">
+      <Filter>Juce Modules\juce_graphics\effects</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_android_Fonts.cpp">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_android_GraphicsContext.cpp">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_freetype_Fonts.cpp">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_linux_Fonts.cpp">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_mac_CoreGraphicsContext.mm">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_mac_Fonts.mm">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_win32_Direct2DGraphicsContext.cpp">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_win32_DirectWriteTypeface.cpp">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_win32_DirectWriteTypeLayout.cpp">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_win32_Fonts.cpp">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_Component.cpp">
+      <Filter>Juce Modules\juce_gui_basics\components</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_ComponentListener.cpp">
+      <Filter>Juce Modules\juce_gui_basics\components</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_Desktop.cpp">
+      <Filter>Juce Modules\juce_gui_basics\components</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_ModalComponentManager.cpp">
+      <Filter>Juce Modules\juce_gui_basics\components</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_ComponentDragger.cpp">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_DragAndDropContainer.cpp">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseCursor.cpp">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseEvent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseInactivityDetector.cpp">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseInputSource.cpp">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseListener.cpp">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_CaretComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyboardFocusTraverser.cpp">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyListener.cpp">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyPress.cpp">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_ModifierKeys.cpp">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ComboBox.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ImageComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Label.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ListBox.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ProgressBar.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Slider.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TableHeaderComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TableListBox.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TextEditor.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Toolbar.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ToolbarItemComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ToolbarItemPalette.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TreeView.cpp">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_AlertWindow.cpp">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_CallOutBox.cpp">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ComponentPeer.cpp">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_DialogWindow.cpp">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_DocumentWindow.cpp">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ResizableWindow.cpp">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ThreadWithProgressWindow.cpp">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_TooltipWindow.cpp">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_TopLevelWindow.cpp">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_MenuBarComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\menus</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_MenuBarModel.cpp">
+      <Filter>Juce Modules\juce_gui_basics\menus</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_PopupMenu.cpp">
+      <Filter>Juce Modules\juce_gui_basics\menus</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentAnimator.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentBoundsConstrainer.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentBuilder.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableCornerComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableEdgeComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ScrollBar.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableLayoutManager.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableLayoutResizerBar.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableObjectResizer.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_TabbedButtonBar.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_TabbedComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_Viewport.cpp">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ArrowButton.cpp">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_Button.cpp">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_DrawableButton.cpp">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_HyperlinkButton.cpp">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ImageButton.cpp">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ShapeButton.cpp">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_TextButton.cpp">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ToggleButton.cpp">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ToolbarButton.cpp">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_MarkerList.cpp">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeCoordinate.cpp">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeCoordinatePositioner.cpp">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeParallelogram.cpp">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativePoint.cpp">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativePointPath.cpp">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeRectangle.cpp">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_Drawable.cpp">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableComposite.cpp">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableImage.cpp">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawablePath.cpp">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableRectangle.cpp">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableShape.cpp">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableText.cpp">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_SVGParser.cpp">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_BooleanPropertyComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_ButtonPropertyComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_ChoicePropertyComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_PropertyComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_PropertyPanel.cpp">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_SliderPropertyComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_TextPropertyComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel.cpp">
+      <Filter>Juce Modules\juce_gui_basics\lookandfeel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V1.cpp">
+      <Filter>Juce Modules\juce_gui_basics\lookandfeel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V2.cpp">
+      <Filter>Juce Modules\juce_gui_basics\lookandfeel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V3.cpp">
+      <Filter>Juce Modules\juce_gui_basics\lookandfeel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_DirectoryContentsDisplayComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_DirectoryContentsList.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileBrowserComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileChooser.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileChooserDialogBox.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileFilter.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileListComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FilenameComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileSearchPathListComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileTreeComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_ImagePreviewComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_WildcardFileFilter.cpp">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandInfo.cpp">
+      <Filter>Juce Modules\juce_gui_basics\commands</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandManager.cpp">
+      <Filter>Juce Modules\juce_gui_basics\commands</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandTarget.cpp">
+      <Filter>Juce Modules\juce_gui_basics\commands</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_KeyPressMappingSet.cpp">
+      <Filter>Juce Modules\juce_gui_basics\commands</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\misc\juce_BubbleComponent.cpp">
+      <Filter>Juce Modules\juce_gui_basics\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\misc\juce_DropShadower.cpp">
+      <Filter>Juce Modules\juce_gui_basics\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\application\juce_Application.cpp">
+      <Filter>Juce Modules\juce_gui_basics\application</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_android_FileChooser.cpp">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_android_Windowing.cpp">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_ios_UIViewComponentPeer.mm">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_ios_Windowing.mm">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_linux_Clipboard.cpp">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_linux_FileChooser.cpp">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_linux_Windowing.cpp">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_mac_FileChooser.mm">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_mac_MainMenu.mm">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_mac_MouseCursor.mm">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_mac_NSViewComponentPeer.mm">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_mac_Windowing.mm">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_win32_DragAndDrop.cpp">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_win32_FileChooser.cpp">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_win32_Windowing.cpp">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CodeDocument.cpp">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CodeEditorComponent.cpp">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CPlusPlusCodeTokeniser.cpp">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_LuaCodeTokeniser.cpp">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_XMLCodeTokeniser.cpp">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\documents\juce_FileBasedDocument.cpp">
+      <Filter>Juce Modules\juce_gui_extra\documents</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\lookandfeel\juce_OldSchoolLookAndFeel.cpp">
+      <Filter>Juce Modules\juce_gui_extra\lookandfeel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_BubbleMessageComponent.cpp">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_ColourSelector.cpp">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_KeyMappingEditorComponent.cpp">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_LiveConstantEditor.cpp">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_PreferencesPanel.cpp">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_RecentlyOpenedFilesList.cpp">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_SplashScreen.cpp">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.cpp">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_android_WebBrowserComponent.cpp">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_ios_UIViewComponent.mm">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_linux_SystemTrayIcon.cpp">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_linux_WebBrowserComponent.cpp">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_mac_AppleRemote.mm">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_mac_NSViewComponent.mm">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_mac_SystemTrayIcon.cpp">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_mac_WebBrowserComponent.mm">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_win32_ActiveXComponent.cpp">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_win32_SystemTrayIcon.cpp">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_win32_WebBrowserComponent.cpp">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLContext.cpp">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLFrameBuffer.cpp">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLGraphicsContext.cpp">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLHelpers.cpp">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLImage.cpp">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\native\juce_android_CameraDevice.cpp">
+      <Filter>Juce Modules\juce_video\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\native\juce_mac_CameraDevice.mm">
+      <Filter>Juce Modules\juce_video\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\native\juce_mac_QuickTimeMovieComponent.mm">
+      <Filter>Juce Modules\juce_video\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\native\juce_win32_CameraDevice.cpp">
+      <Filter>Juce Modules\juce_video\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\native\juce_win32_DirectShowComponent.cpp">
+      <Filter>Juce Modules\juce_video\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\native\juce_win32_QuickTimeMovieComponent.cpp">
+      <Filter>Juce Modules\juce_video\native</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\BinaryData.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_audio_basics.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_devices\juce_audio_devices.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_formats\juce_audio_formats.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_audio_processors.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_audio_utils\juce_audio_utils.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_core\juce_core.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_cryptography\juce_cryptography.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_data_structures\juce_data_structures.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_events\juce_events.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_graphics\juce_graphics.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_basics\juce_gui_basics.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_gui_extra\juce_gui_extra.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_opengl\juce_opengl.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\JuceLibraryCode\modules\juce_video\juce_video.cpp">
+      <Filter>Juce Library Code</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\Source\AccessClass.h">
+      <Filter>open-ephys\Source</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Network\PracticalSocket.h">
+      <Filter>open-ephys\Source\Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Audio\AudioComponent.h">
+      <Filter>open-ephys\Source\Audio</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutput.h">
+      <Filter>open-ephys\Source\Processors\ArduinoOutput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\ArduinoOutput\ArduinoOutputEditor.h">
+      <Filter>open-ephys\Source\Processors\ArduinoOutput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\AudioNode\AudioEditor.h">
+      <Filter>open-ephys\Source\Processors\AudioNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\AudioNode\AudioNode.h">
+      <Filter>open-ephys\Source\Processors\AudioNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\AudioResamplingNode\AudioResamplingNode.h">
+      <Filter>open-ephys\Source\Processors\AudioResamplingNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Channel\Channel.h">
+      <Filter>open-ephys\Source\Processors\Channel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingEditor.h">
+      <Filter>open-ephys\Source\Processors\ChannelMappingNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\ChannelMappingNode\ChannelMappingNode.h">
+      <Filter>open-ephys\Source\Processors\ChannelMappingNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\EcubeEditor.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\RHD2000Editor.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\EcubeThread.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\okFrontPanelDLL.h">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000datablock.h">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000evalboard.h">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\rhythm-api\rhd2000registers.h">
+      <Filter>open-ephys\Source\Processors\DataThreads\rhythm-api</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\RHD2000Thread.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\FileReaderThread.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\FPGAThread.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\DataBuffer.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\DataThreads\DataThread.h">
+      <Filter>open-ephys\Source\Processors\DataThreads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Bessel.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Biquad.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Butterworth.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Cascade.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\ChebyshevI.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\ChebyshevII.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Common.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Custom.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Design.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Dsp.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Elliptic.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Filter.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Layout.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Legendre.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\MathSupplement.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Params.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\PoleFilter.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\RBJ.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\RootFinder.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\SmoothedFilter.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\State.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Types.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Dsp\Utilities.h">
+      <Filter>open-ephys\Source\Processors\Dsp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Editors\ChannelSelector.h">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Editors\ElectrodeButtons.h">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Editors\GenericEditor.h">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Editors\ImageIcon.h">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Editors\VisualizerEditor.h">
+      <Filter>open-ephys\Source\Processors\Editors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\EventDetector\EventDetector.h">
+      <Filter>open-ephys\Source\Processors\EventDetector</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\EventNode\EventNode.h">
+      <Filter>open-ephys\Source\Processors\EventNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\EventNode\EventNodeEditor.h">
+      <Filter>open-ephys\Source\Processors\EventNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\FileReader\FileReader.h">
+      <Filter>open-ephys\Source\Processors\FileReader</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\FileReader\FileReaderEditor.h">
+      <Filter>open-ephys\Source\Processors\FileReader</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\FilterNode\FilterEditor.h">
+      <Filter>open-ephys\Source\Processors\FilterNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\FilterNode\FilterNode.h">
+      <Filter>open-ephys\Source\Processors\FilterNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\FPGAOutput\FPGAOutput.h">
+      <Filter>open-ephys\Source\Processors\FPGAOutput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\FPGAOutput\FPGAOutputEditor.h">
+      <Filter>open-ephys\Source\Processors\FPGAOutput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\GenericProcessor\GenericProcessor.h">
+      <Filter>open-ephys\Source\Processors\GenericProcessor</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayCanvas.h">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayEditor.h">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\LfpDisplayNode\LfpDisplayNode.h">
+      <Filter>open-ephys\Source\Processors\LfpDisplayNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageCanvas.h">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageEditor.h">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\LfpTriggeredAverageNode\LfpTriggeredAverageNode.h">
+      <Filter>open-ephys\Source\Processors\LfpTriggeredAverageNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Merger\Merger.h">
+      <Filter>open-ephys\Source\Processors\Merger</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Merger\MergerEditor.h">
+      <Filter>open-ephys\Source\Processors\Merger</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\MessageCenter\MessageCenter.h">
+      <Filter>open-ephys\Source\Processors\MessageCenter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\MessageCenter\MessageCenterEditor.h">
+      <Filter>open-ephys\Source\Processors\MessageCenter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Parameter\ParameterEditor.h">
+      <Filter>open-ephys\Source\Processors\Parameter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Parameter\Parameter.h">
+      <Filter>open-ephys\Source\Processors\Parameter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\PhaseDetector\PhaseDetector.h">
+      <Filter>open-ephys\Source\Processors\PhaseDetector</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\PhaseDetector\PhaseDetectorEditor.h">
+      <Filter>open-ephys\Source\Processors\PhaseDetector</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\ProcessorGraph\ProcessorGraph.h">
+      <Filter>open-ephys\Source\Processors\ProcessorGraph</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutput.h">
+      <Filter>open-ephys\Source\Processors\PulsePalOutput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\PulsePalOutput\PulsePalOutputEditor.h">
+      <Filter>open-ephys\Source\Processors\PulsePalOutput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\RecordControl\RecordControl.h">
+      <Filter>open-ephys\Source\Processors\RecordControl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\RecordControl\RecordControlEditor.h">
+      <Filter>open-ephys\Source\Processors\RecordControl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\EngineConfigWindow.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\HDF5FileFormat.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\HDF5Recording.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\OriginalRecording.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\RecordEngine.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\RecordNode\RecordNode.h">
+      <Filter>open-ephys\Source\Processors\RecordNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\ReferenceNode\ReferenceNode.h">
+      <Filter>open-ephys\Source\Processors\ReferenceNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\ReferenceNode\ReferenceNodeEditor.h">
+      <Filter>open-ephys\Source\Processors\ReferenceNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\ResamplingNode\ResamplingNode.h">
+      <Filter>open-ephys\Source\Processors\ResamplingNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\ResamplingNode\ResamplingNodeEditor.h">
+      <Filter>open-ephys\Source\Processors\ResamplingNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Serial\PulsePal.h">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofArduino.h">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofConstants.h">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Serial\ofSerial.h">
+      <Filter>open-ephys\Source\Processors\Serial</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SerialInput\SerialInput.h">
+      <Filter>open-ephys\Source\Processors\SerialInput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SerialInput\SerialInputEditor.h">
+      <Filter>open-ephys\Source\Processors\SerialInput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SignalGenerator\SignalGenerator.h">
+      <Filter>open-ephys\Source\Processors\SignalGenerator</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SignalGenerator\SignalGeneratorEditor.h">
+      <Filter>open-ephys\Source\Processors\SignalGenerator</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SourceNode\SourceNode.h">
+      <Filter>open-ephys\Source\Processors\SourceNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SourceNode\SourceNodeEditor.h">
+      <Filter>open-ephys\Source\Processors\SourceNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeDetector\SpikeDetector.h">
+      <Filter>open-ephys\Source\Processors\SpikeDetector</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeDetector\SpikeDetectorEditor.h">
+      <Filter>open-ephys\Source\Processors\SpikeDetector</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayCanvas.h">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayEditor.h">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeDisplayNode\SpikeDisplayNode.h">
+      <Filter>open-ephys\Source\Processors\SpikeDisplayNode</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSortBoxes.h">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorter.h">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorterCanvas.h">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\SpikeSorter\SpikeSorterEditor.h">
+      <Filter>open-ephys\Source\Processors\SpikeSorter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Splitter\Splitter.h">
+      <Filter>open-ephys\Source\Processors\Splitter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Splitter\SplitterEditor.h">
+      <Filter>open-ephys\Source\Processors\Splitter</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Visualization\DataWindow.h">
+      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Visualization\SpikeObject.h">
+      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\Visualization\Visualizer.h">
+      <Filter>open-ephys\Source\Processors\Visualization</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\WiFiOutput\WiFiOutput.h">
+      <Filter>open-ephys\Source\Processors\WiFiOutput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\Processors\WiFiOutput\WiFiOutputEditor.h">
+      <Filter>open-ephys\Source\Processors\WiFiOutput</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\EcubeDialogComponent.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\CustomArrowButton.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\GraphViewer.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\EditorViewportButtons.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\SignalChainManager.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\EditorViewport.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\ProcessorList.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\CustomLookAndFeel.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\InfoLabel.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\DataViewport.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\ControlPanel.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\UI\UIComponent.h">
+      <Filter>open-ephys\Source\UI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\Source\MainWindow.h">
+      <Filter>open-ephys\Source</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_AudioDataConverters.h">
+      <Filter>Juce Modules\juce_audio_basics\buffers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_AudioSampleBuffer.h">
+      <Filter>Juce Modules\juce_audio_basics\buffers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\buffers\juce_FloatVectorOperations.h">
+      <Filter>Juce Modules\juce_audio_basics\buffers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiBuffer.h">
+      <Filter>Juce Modules\juce_audio_basics\midi</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiFile.h">
+      <Filter>Juce Modules\juce_audio_basics\midi</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiKeyboardState.h">
+      <Filter>Juce Modules\juce_audio_basics\midi</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiMessage.h">
+      <Filter>Juce Modules\juce_audio_basics\midi</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\midi\juce_MidiMessageSequence.h">
+      <Filter>Juce Modules\juce_audio_basics\midi</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_Decibels.h">
+      <Filter>Juce Modules\juce_audio_basics\effects</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_IIRFilter.h">
+      <Filter>Juce Modules\juce_audio_basics\effects</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_LagrangeInterpolator.h">
+      <Filter>Juce Modules\juce_audio_basics\effects</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\effects\juce_Reverb.h">
+      <Filter>Juce Modules\juce_audio_basics\effects</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_AudioSource.h">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_BufferingAudioSource.h">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ChannelRemappingAudioSource.h">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_IIRFilterAudioSource.h">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_MixerAudioSource.h">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_PositionableAudioSource.h">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ResamplingAudioSource.h">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ReverbAudioSource.h">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h">
+      <Filter>Juce Modules\juce_audio_basics\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h">
+      <Filter>Juce Modules\juce_audio_basics\synthesisers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_audio_basics.h">
+      <Filter>Juce Modules\juce_audio_basics</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioDeviceManager.h">
+      <Filter>Juce Modules\juce_audio_devices\audio_io</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioIODevice.h">
+      <Filter>Juce Modules\juce_audio_devices\audio_io</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_AudioIODeviceType.h">
+      <Filter>Juce Modules\juce_audio_devices\audio_io</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_io\juce_SystemAudioVolume.h">
+      <Filter>Juce Modules\juce_audio_devices\audio_io</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\midi_io\juce_MidiInput.h">
+      <Filter>Juce Modules\juce_audio_devices\midi_io</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\midi_io\juce_MidiMessageCollector.h">
+      <Filter>Juce Modules\juce_audio_devices\midi_io</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\midi_io\juce_MidiOutput.h">
+      <Filter>Juce Modules\juce_audio_devices\midi_io</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\sources\juce_AudioSourcePlayer.h">
+      <Filter>Juce Modules\juce_audio_devices\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\sources\juce_AudioTransportSource.h">
+      <Filter>Juce Modules\juce_audio_devices\sources</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_cd\juce_AudioCDBurner.h">
+      <Filter>Juce Modules\juce_audio_devices\audio_cd</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\audio_cd\juce_AudioCDReader.h">
+      <Filter>Juce Modules\juce_audio_devices\audio_cd</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\native\juce_MidiDataConcatenator.h">
+      <Filter>Juce Modules\juce_audio_devices\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_devices\juce_audio_devices.h">
+      <Filter>Juce Modules\juce_audio_devices</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormat.h">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatManager.h">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatReader.h">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatReaderSource.h">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioFormatWriter.h">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_AudioSubsectionReader.h">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_BufferingAudioFormatReader.h">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\format\juce_MemoryMappedAudioFormatReader.h">
+      <Filter>Juce Modules\juce_audio_formats\format</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_AiffAudioFormat.h">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_CoreAudioFormat.h">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_FlacAudioFormat.h">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_LAMEEncoderAudioFormat.h">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_MP3AudioFormat.h">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_OggVorbisAudioFormat.h">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_QuickTimeAudioFormat.h">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_WavAudioFormat.h">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\codecs\juce_WindowsMediaAudioFormat.h">
+      <Filter>Juce Modules\juce_audio_formats\codecs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\sampler\juce_Sampler.h">
+      <Filter>Juce Modules\juce_audio_formats\sampler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_formats\juce_audio_formats.h">
+      <Filter>Juce Modules\juce_audio_formats</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioPlayHead.h">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioPluginInstance.h">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessor.h">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorEditor.h">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorGraph.h">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_AudioProcessorListener.h">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\processors\juce_PluginDescription.h">
+      <Filter>Juce Modules\juce_audio_processors\processors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormat.h">
+      <Filter>Juce Modules\juce_audio_processors\format</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format\juce_AudioPluginFormatManager.h">
+      <Filter>Juce Modules\juce_audio_processors\format</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_AudioUnitPluginFormat.h">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_LADSPAPluginFormat.h">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VST3Common.h">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VST3Headers.h">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h">
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_KnownPluginList.h">
+      <Filter>Juce Modules\juce_audio_processors\scanning</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_PluginDirectoryScanner.h">
+      <Filter>Juce Modules\juce_audio_processors\scanning</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\scanning\juce_PluginListComponent.h">
+      <Filter>Juce Modules\juce_audio_processors\scanning</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_audio_processors.h">
+      <Filter>Juce Modules\juce_audio_processors</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioDeviceSelectorComponent.h">
+      <Filter>Juce Modules\juce_audio_utils\gui</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioThumbnail.h">
+      <Filter>Juce Modules\juce_audio_utils\gui</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioThumbnailBase.h">
+      <Filter>Juce Modules\juce_audio_utils\gui</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_AudioThumbnailCache.h">
+      <Filter>Juce Modules\juce_audio_utils\gui</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\gui\juce_MidiKeyboardComponent.h">
+      <Filter>Juce Modules\juce_audio_utils\gui</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\players\juce_AudioProcessorPlayer.h">
+      <Filter>Juce Modules\juce_audio_utils\players</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_audio_utils\juce_audio_utils.h">
+      <Filter>Juce Modules\juce_audio_utils</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharacterFunctions.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharPointer_ASCII.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharPointer_UTF16.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharPointer_UTF32.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_CharPointer_UTF8.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_Identifier.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_LocalisedStrings.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_NewLine.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_String.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringArray.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringPairArray.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringPool.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_StringRef.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\text\juce_TextDiff.h">
+      <Filter>Juce Modules\juce_core\text</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_BigInteger.h">
+      <Filter>Juce Modules\juce_core\maths</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Expression.h">
+      <Filter>Juce Modules\juce_core\maths</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_MathsFunctions.h">
+      <Filter>Juce Modules\juce_core\maths</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Random.h">
+      <Filter>Juce Modules\juce_core\maths</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\maths\juce_Range.h">
+      <Filter>Juce Modules\juce_core\maths</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_Atomic.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_ByteOrder.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_ContainerDeletePolicy.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_HeapBlock.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_LeakedObjectDetector.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_Memory.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_MemoryBlock.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_OptionalScopedPointer.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_ReferenceCountedObject.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_ScopedPointer.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_SharedResourcePointer.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_Singleton.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\memory\juce_WeakReference.h">
+      <Filter>Juce Modules\juce_core\memory</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_AbstractFifo.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_Array.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_ArrayAllocationBase.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_DynamicObject.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_ElementComparator.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_HashMap.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_LinkedListPointer.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_NamedValueSet.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_OwnedArray.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_PropertySet.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_ReferenceCountedArray.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_ScopedValueSetter.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_SortedSet.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_SparseSet.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\containers\juce_Variant.h">
+      <Filter>Juce Modules\juce_core\containers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ChildProcess.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_CriticalSection.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_DynamicLibrary.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_HighResolutionTimer.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_InterProcessLock.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_Process.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ReadWriteLock.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ScopedLock.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ScopedReadLock.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ScopedWriteLock.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_SpinLock.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_Thread.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ThreadLocalValue.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_ThreadPool.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_TimeSliceThread.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\threads\juce_WaitableEvent.h">
+      <Filter>Juce Modules\juce_core\threads</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_PerformanceCounter.h">
+      <Filter>Juce Modules\juce_core\time</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_RelativeTime.h">
+      <Filter>Juce Modules\juce_core\time</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\time\juce_Time.h">
+      <Filter>Juce Modules\juce_core\time</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_DirectoryIterator.h">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_File.h">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileFilter.h">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileInputStream.h">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileOutputStream.h">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_FileSearchPath.h">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_MemoryMappedFile.h">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_TemporaryFile.h">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\files\juce_WildcardFileFilter.h">
+      <Filter>Juce Modules\juce_core\files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_IPAddress.h">
+      <Filter>Juce Modules\juce_core\network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_MACAddress.h">
+      <Filter>Juce Modules\juce_core\network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_NamedPipe.h">
+      <Filter>Juce Modules\juce_core\network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_Socket.h">
+      <Filter>Juce Modules\juce_core\network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\network\juce_URL.h">
+      <Filter>Juce Modules\juce_core\network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_BufferedInputStream.h">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_FileInputSource.h">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_InputSource.h">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_InputStream.h">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_MemoryInputStream.h">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_MemoryOutputStream.h">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_OutputStream.h">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\streams\juce_SubregionStream.h">
+      <Filter>Juce Modules\juce_core\streams</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_FileLogger.h">
+      <Filter>Juce Modules\juce_core\logging</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\logging\juce_Logger.h">
+      <Filter>Juce Modules\juce_core\logging</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_PlatformDefs.h">
+      <Filter>Juce Modules\juce_core\system</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_StandardHeader.h">
+      <Filter>Juce Modules\juce_core\system</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_SystemStats.h">
+      <Filter>Juce Modules\juce_core\system</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\system\juce_TargetPlatform.h">
+      <Filter>Juce Modules\juce_core\system</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\xml\juce_XmlDocument.h">
+      <Filter>Juce Modules\juce_core\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\xml\juce_XmlElement.h">
+      <Filter>Juce Modules\juce_core\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\javascript\juce_Javascript.h">
+      <Filter>Juce Modules\juce_core\javascript</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\javascript\juce_JSON.h">
+      <Filter>Juce Modules\juce_core\javascript</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_GZIPCompressorOutputStream.h">
+      <Filter>Juce Modules\juce_core\zip</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_GZIPDecompressorInputStream.h">
+      <Filter>Juce Modules\juce_core\zip</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\zip\juce_ZipFile.h">
+      <Filter>Juce Modules\juce_core\zip</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\unit_tests\juce_UnitTest.h">
+      <Filter>Juce Modules\juce_core\unit_tests</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\misc\juce_Result.h">
+      <Filter>Juce Modules\juce_core\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\misc\juce_Uuid.h">
+      <Filter>Juce Modules\juce_core\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\misc\juce_WindowsRegistry.h">
+      <Filter>Juce Modules\juce_core\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_android_JNIHelpers.h">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_BasicNativeHeaders.h">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_osx_ObjCHelpers.h">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_posix_SharedCode.h">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\native\juce_win32_ComSmartPtr.h">
+      <Filter>Juce Modules\juce_core\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_core\juce_core.h">
+      <Filter>Juce Modules\juce_core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_BlowFish.h">
+      <Filter>Juce Modules\juce_cryptography\encryption</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_Primes.h">
+      <Filter>Juce Modules\juce_cryptography\encryption</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\encryption\juce_RSAKey.h">
+      <Filter>Juce Modules\juce_cryptography\encryption</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\hashing\juce_MD5.h">
+      <Filter>Juce Modules\juce_cryptography\hashing</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\hashing\juce_SHA256.h">
+      <Filter>Juce Modules\juce_cryptography\hashing</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_cryptography\juce_cryptography.h">
+      <Filter>Juce Modules\juce_cryptography</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\values\juce_Value.h">
+      <Filter>Juce Modules\juce_data_structures\values</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\values\juce_ValueTree.h">
+      <Filter>Juce Modules\juce_data_structures\values</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\undomanager\juce_UndoableAction.h">
+      <Filter>Juce Modules\juce_data_structures\undomanager</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\undomanager\juce_UndoManager.h">
+      <Filter>Juce Modules\juce_data_structures\undomanager</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\app_properties\juce_ApplicationProperties.h">
+      <Filter>Juce Modules\juce_data_structures\app_properties</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\app_properties\juce_PropertiesFile.h">
+      <Filter>Juce Modules\juce_data_structures\app_properties</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_data_structures\juce_data_structures.h">
+      <Filter>Juce Modules\juce_data_structures</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_ApplicationBase.h">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_CallbackMessage.h">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_DeletedAtShutdown.h">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_Initialisation.h">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_Message.h">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageListener.h">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_MessageManager.h">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\messages\juce_NotificationType.h">
+      <Filter>Juce Modules\juce_events\messages</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_MultiTimer.h">
+      <Filter>Juce Modules\juce_events\timers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\timers\juce_Timer.h">
+      <Filter>Juce Modules\juce_events\timers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ActionBroadcaster.h">
+      <Filter>Juce Modules\juce_events\broadcasters</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ActionListener.h">
+      <Filter>Juce Modules\juce_events\broadcasters</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_AsyncUpdater.h">
+      <Filter>Juce Modules\juce_events\broadcasters</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ChangeBroadcaster.h">
+      <Filter>Juce Modules\juce_events\broadcasters</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ChangeListener.h">
+      <Filter>Juce Modules\juce_events\broadcasters</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\broadcasters\juce_ListenerList.h">
+      <Filter>Juce Modules\juce_events\broadcasters</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_ConnectedChildProcess.h">
+      <Filter>Juce Modules\juce_events\interprocess</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_InterprocessConnection.h">
+      <Filter>Juce Modules\juce_events\interprocess</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\interprocess\juce_InterprocessConnectionServer.h">
+      <Filter>Juce Modules\juce_events\interprocess</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_osx_MessageQueue.h">
+      <Filter>Juce Modules\juce_events\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_ScopedXLock.h">
+      <Filter>Juce Modules\juce_events\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\native\juce_win32_HiddenMessageWindow.h">
+      <Filter>Juce Modules\juce_events\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_events\juce_events.h">
+      <Filter>Juce Modules\juce_events</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_Colour.h">
+      <Filter>Juce Modules\juce_graphics\colour</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_ColourGradient.h">
+      <Filter>Juce Modules\juce_graphics\colour</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_Colours.h">
+      <Filter>Juce Modules\juce_graphics\colour</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_FillType.h">
+      <Filter>Juce Modules\juce_graphics\colour</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\colour\juce_PixelFormats.h">
+      <Filter>Juce Modules\juce_graphics\colour</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_GraphicsContext.h">
+      <Filter>Juce Modules\juce_graphics\contexts</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_LowLevelGraphicsContext.h">
+      <Filter>Juce Modules\juce_graphics\contexts</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_LowLevelGraphicsPostScriptRenderer.h">
+      <Filter>Juce Modules\juce_graphics\contexts</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\contexts\juce_LowLevelGraphicsSoftwareRenderer.h">
+      <Filter>Juce Modules\juce_graphics\contexts</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_Image.h">
+      <Filter>Juce Modules\juce_graphics\images</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageCache.h">
+      <Filter>Juce Modules\juce_graphics\images</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageConvolutionKernel.h">
+      <Filter>Juce Modules\juce_graphics\images</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\images\juce_ImageFileFormat.h">
+      <Filter>Juce Modules\juce_graphics\images</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_AffineTransform.h">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_BorderSize.h">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_EdgeTable.h">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_Line.h">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_Path.h">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_PathIterator.h">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_PathStrokeType.h">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_Point.h">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_Rectangle.h">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\geometry\juce_RectangleList.h">
+      <Filter>Juce Modules\juce_graphics\geometry</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\placement\juce_Justification.h">
+      <Filter>Juce Modules\juce_graphics\placement</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\placement\juce_RectanglePlacement.h">
+      <Filter>Juce Modules\juce_graphics\placement</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_AttributedString.h">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_CustomTypeface.h">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_Font.h">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_GlyphArrangement.h">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_TextLayout.h">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\fonts\juce_Typeface.h">
+      <Filter>Juce Modules\juce_graphics\fonts</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\effects\juce_DropShadowEffect.h">
+      <Filter>Juce Modules\juce_graphics\effects</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\effects\juce_GlowEffect.h">
+      <Filter>Juce Modules\juce_graphics\effects</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\effects\juce_ImageEffectFilter.h">
+      <Filter>Juce Modules\juce_graphics\effects</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_mac_CoreGraphicsContext.h">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_mac_CoreGraphicsHelpers.h">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\native\juce_RenderingHelpers.h">
+      <Filter>Juce Modules\juce_graphics\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_graphics\juce_graphics.h">
+      <Filter>Juce Modules\juce_graphics</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_CachedComponentImage.h">
+      <Filter>Juce Modules\juce_gui_basics\components</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_Component.h">
+      <Filter>Juce Modules\juce_gui_basics\components</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_ComponentListener.h">
+      <Filter>Juce Modules\juce_gui_basics\components</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_Desktop.h">
+      <Filter>Juce Modules\juce_gui_basics\components</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\components\juce_ModalComponentManager.h">
+      <Filter>Juce Modules\juce_gui_basics\components</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_ComponentDragger.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_DragAndDropContainer.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_DragAndDropTarget.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_FileDragAndDropTarget.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_LassoComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseCursor.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseEvent.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseInactivityDetector.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseInputSource.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_MouseListener.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_SelectedItemSet.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_TextDragAndDropTarget.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\mouse\juce_TooltipClient.h">
+      <Filter>Juce Modules\juce_gui_basics\mouse</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_CaretComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyboardFocusTraverser.h">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyListener.h">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_KeyPress.h">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_ModifierKeys.h">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_SystemClipboard.h">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_TextEditorKeyMapper.h">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\keyboard\juce_TextInputTarget.h">
+      <Filter>Juce Modules\juce_gui_basics\keyboard</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ComboBox.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ImageComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Label.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ListBox.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ProgressBar.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Slider.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TableHeaderComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TableListBox.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TextEditor.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_Toolbar.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ToolbarItemComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ToolbarItemFactory.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_ToolbarItemPalette.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\widgets\juce_TreeView.h">
+      <Filter>Juce Modules\juce_gui_basics\widgets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_AlertWindow.h">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_CallOutBox.h">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ComponentPeer.h">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_DialogWindow.h">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_DocumentWindow.h">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_NativeMessageBox.h">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ResizableWindow.h">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_ThreadWithProgressWindow.h">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_TooltipWindow.h">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\windows\juce_TopLevelWindow.h">
+      <Filter>Juce Modules\juce_gui_basics\windows</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_MenuBarComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\menus</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_MenuBarModel.h">
+      <Filter>Juce Modules\juce_gui_basics\menus</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\menus\juce_PopupMenu.h">
+      <Filter>Juce Modules\juce_gui_basics\menus</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_AnimatedPosition.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_AnimatedPositionBehaviours.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentAnimator.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentBoundsConstrainer.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentBuilder.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_GroupComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableCornerComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ResizableEdgeComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_ScrollBar.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableLayoutManager.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableLayoutResizerBar.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_StretchableObjectResizer.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_TabbedButtonBar.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_TabbedComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\layout\juce_Viewport.h">
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ArrowButton.h">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_Button.h">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_DrawableButton.h">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_HyperlinkButton.h">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ImageButton.h">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ShapeButton.h">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_TextButton.h">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ToggleButton.h">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\buttons\juce_ToolbarButton.h">
+      <Filter>Juce Modules\juce_gui_basics\buttons</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_MarkerList.h">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeCoordinate.h">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeCoordinatePositioner.h">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeParallelogram.h">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativePoint.h">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativePointPath.h">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\positioning\juce_RelativeRectangle.h">
+      <Filter>Juce Modules\juce_gui_basics\positioning</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_Drawable.h">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableComposite.h">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableImage.h">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawablePath.h">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableRectangle.h">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableShape.h">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\drawables\juce_DrawableText.h">
+      <Filter>Juce Modules\juce_gui_basics\drawables</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_BooleanPropertyComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_ButtonPropertyComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_ChoicePropertyComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_PropertyComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_PropertyPanel.h">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_SliderPropertyComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\properties\juce_TextPropertyComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\properties</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel.h">
+      <Filter>Juce Modules\juce_gui_basics\lookandfeel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V1.h">
+      <Filter>Juce Modules\juce_gui_basics\lookandfeel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V2.h">
+      <Filter>Juce Modules\juce_gui_basics\lookandfeel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V3.h">
+      <Filter>Juce Modules\juce_gui_basics\lookandfeel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_DirectoryContentsDisplayComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_DirectoryContentsList.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileBrowserComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileBrowserListener.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileChooser.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileChooserDialogBox.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileFilter.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileListComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FilenameComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FilePreviewComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileSearchPathListComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_FileTreeComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_ImagePreviewComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\filebrowser\juce_WildcardFileFilter.h">
+      <Filter>Juce Modules\juce_gui_basics\filebrowser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandID.h">
+      <Filter>Juce Modules\juce_gui_basics\commands</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandInfo.h">
+      <Filter>Juce Modules\juce_gui_basics\commands</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandManager.h">
+      <Filter>Juce Modules\juce_gui_basics\commands</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_ApplicationCommandTarget.h">
+      <Filter>Juce Modules\juce_gui_basics\commands</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\commands\juce_KeyPressMappingSet.h">
+      <Filter>Juce Modules\juce_gui_basics\commands</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\misc\juce_BubbleComponent.h">
+      <Filter>Juce Modules\juce_gui_basics\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\misc\juce_DropShadower.h">
+      <Filter>Juce Modules\juce_gui_basics\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\application\juce_Application.h">
+      <Filter>Juce Modules\juce_gui_basics\application</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\application\juce_Initialisation.h">
+      <Filter>Juce Modules\juce_gui_basics\application</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
+      <Filter>Juce Modules\juce_gui_basics\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_basics\juce_gui_basics.h">
+      <Filter>Juce Modules\juce_gui_basics</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CodeDocument.h">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CodeEditorComponent.h">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CodeTokeniser.h">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CPlusPlusCodeTokeniser.h">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_CPlusPlusCodeTokeniserFunctions.h">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_LuaCodeTokeniser.h">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\code_editor\juce_XMLCodeTokeniser.h">
+      <Filter>Juce Modules\juce_gui_extra\code_editor</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\documents\juce_FileBasedDocument.h">
+      <Filter>Juce Modules\juce_gui_extra\documents</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\embedding\juce_ActiveXControlComponent.h">
+      <Filter>Juce Modules\juce_gui_extra\embedding</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\embedding\juce_NSViewComponent.h">
+      <Filter>Juce Modules\juce_gui_extra\embedding</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\embedding\juce_UIViewComponent.h">
+      <Filter>Juce Modules\juce_gui_extra\embedding</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\lookandfeel\juce_OldSchoolLookAndFeel.h">
+      <Filter>Juce Modules\juce_gui_extra\lookandfeel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_AppleRemote.h">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_BubbleMessageComponent.h">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_ColourSelector.h">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_KeyMappingEditorComponent.h">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_LiveConstantEditor.h">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_PreferencesPanel.h">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_RecentlyOpenedFilesList.h">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_SplashScreen.h">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
+      <Filter>Juce Modules\juce_gui_extra\misc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
+      <Filter>Juce Modules\juce_gui_extra\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_gui_extra\juce_gui_extra.h">
+      <Filter>Juce Modules\juce_gui_extra</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_Draggable3DOrientation.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_Matrix3D.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLContext.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLFrameBuffer.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLGraphicsContext.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLHelpers.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLImage.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLRenderer.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_OpenGLTexture.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_Quaternion.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\opengl\juce_Vector3D.h">
+      <Filter>Juce Modules\juce_opengl\opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_MissingGLDefinitions.h">
+      <Filter>Juce Modules\juce_opengl\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGL_android.h">
+      <Filter>Juce Modules\juce_opengl\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGL_ios.h">
+      <Filter>Juce Modules\juce_opengl\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGL_linux.h">
+      <Filter>Juce Modules\juce_opengl\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGL_osx.h">
+      <Filter>Juce Modules\juce_opengl\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGL_win32.h">
+      <Filter>Juce Modules\juce_opengl\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\native\juce_OpenGLExtensions.h">
+      <Filter>Juce Modules\juce_opengl\native</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_opengl\juce_opengl.h">
+      <Filter>Juce Modules\juce_opengl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_video\playback\juce_DirectShowComponent.h">
+      <Filter>Juce Modules\juce_video\playback</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_video\playback\juce_QuickTimeMovieComponent.h">
+      <Filter>Juce Modules\juce_video\playback</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_video\capture\juce_CameraDevice.h">
+      <Filter>Juce Modules\juce_video\capture</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\modules\juce_video\juce_video.h">
+      <Filter>Juce Modules\juce_video</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\AppConfig.h">
+      <Filter>Juce Library Code</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\BinaryData.h">
+      <Filter>Juce Library Code</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h">
+      <Filter>Juce Library Code</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\..\Resources\Fonts\cpmono-black-serialized">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\cpmono-bold-serialized">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\cpmono-extralight-serialized">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\cpmono-light-serialized">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\cpmono-plain-serialized">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\BebasNeue.otf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\cpmono_bold.otf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\cpmono_extra_light.otf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\cpmono_light.otf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\cpmono_plain.otf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\miso-bold.ttf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\miso-light.ttf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\miso-regular.ttf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\miso-serialized">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\nordic.ttf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\ostrich.ttf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\silkscreen-serialized">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\silkscreen.ttf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Fonts\unibody-8.otf">
+      <Filter>open-ephys\Resources\Fonts</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\ArduinoIcon.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\OpenEphysBoardLogoBlack.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\OpenEphysBoardLogoGray.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons-01.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons-02.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons-03.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons-04.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons-05.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_neutral-01.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_neutral-02.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_neutral-03.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_neutral-04.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_neutral-05.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected-01.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected-02.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected-03.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected-04.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected-05.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected_over-01.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected_over-02.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected_over-03.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected_over-04.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\RadioButtons_selected_over-05.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\noise_wave.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\saw_wave.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\sine_wave.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\square_wave.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\triangle_wave.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\wifi.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\SourceDrop.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\DefaultDataSource.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\FileReaderIcon.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Icons\IntanIcon.png">
+      <Filter>open-ephys\Resources\Images\Icons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Buttons\muteoff.png">
+      <Filter>open-ephys\Resources\Images\Buttons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Buttons\muteon.png">
+      <Filter>open-ephys\Resources\Images\Buttons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Buttons\MergerA-01.png">
+      <Filter>open-ephys\Resources\Images\Buttons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Buttons\MergerA-02.png">
+      <Filter>open-ephys\Resources\Images\Buttons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Buttons\MergerB-01.png">
+      <Filter>open-ephys\Resources\Images\Buttons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Buttons\MergerB-02.png">
+      <Filter>open-ephys\Resources\Images\Buttons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Buttons\PipelineA-01.png">
+      <Filter>open-ephys\Resources\Images\Buttons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Buttons\PipelineA-02.png">
+      <Filter>open-ephys\Resources\Images\Buttons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Buttons\PipelineB-01.png">
+      <Filter>open-ephys\Resources\Images\Buttons</Filter>
+    </None>
+    <None Include="..\..\Resources\Images\Buttons\PipelineB-02.png">
+      <Filter>open-ephys\Resources\Images\Buttons</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info">
+      <Filter>Juce Modules\juce_audio_basics</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_audio_devices\juce_module_info">
+      <Filter>Juce Modules\juce_audio_devices</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_audio_formats\juce_module_info">
+      <Filter>Juce Modules\juce_audio_formats</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_module_info">
+      <Filter>Juce Modules\juce_audio_processors</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_audio_utils\juce_module_info">
+      <Filter>Juce Modules\juce_audio_utils</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_core\juce_module_info">
+      <Filter>Juce Modules\juce_core</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_cryptography\juce_module_info">
+      <Filter>Juce Modules\juce_cryptography</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_data_structures\juce_module_info">
+      <Filter>Juce Modules\juce_data_structures</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_events\juce_module_info">
+      <Filter>Juce Modules\juce_events</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_graphics\juce_module_info">
+      <Filter>Juce Modules\juce_graphics</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_gui_basics\juce_module_info">
+      <Filter>Juce Modules\juce_gui_basics</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_gui_extra\juce_module_info">
+      <Filter>Juce Modules\juce_gui_extra</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_opengl\juce_module_info">
+      <Filter>Juce Modules\juce_opengl</Filter>
+    </None>
+    <None Include="..\..\JuceLibraryCode\modules\juce_video\juce_module_info">
+      <Filter>Juce Modules\juce_video</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include=".\resources.rc">
+      <Filter>Juce Library Code</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
diff --git a/Builds/VisualStudio2013/resources.rc b/Builds/VisualStudio2013/resources.rc
new file mode 100644
index 0000000000000000000000000000000000000000..37719a97bd794d32c5c0f172efaaf280f7267255
--- /dev/null
+++ b/Builds/VisualStudio2013/resources.rc
@@ -0,0 +1,30 @@
+#ifdef JUCE_USER_DEFINED_RC_FILE
+ #include JUCE_USER_DEFINED_RC_FILE
+#else
+
+#undef  WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+VS_VERSION_INFO VERSIONINFO
+FILEVERSION  0,3,2,0
+BEGIN
+  BLOCK "StringFileInfo"
+  BEGIN
+    BLOCK "040904E4"
+    BEGIN
+      VALUE "CompanyName",  "Open Ephys\0"
+      VALUE "FileDescription",  "open-ephys\0"
+      VALUE "FileVersion",  "0.3.2\0"
+      VALUE "ProductName",  "open-ephys\0"
+      VALUE "ProductVersion",  "0.3.2\0"
+    END
+  END
+
+  BLOCK "VarFileInfo"
+  BEGIN
+    VALUE "Translation", 0x409, 65001
+  END
+END
+
+#endif
diff --git a/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj b/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj
index 97e0433bd3208a21dfef4e9cba0dd5ab7fa72d6a..6eb450a8d3e143cfba18139b783ad3d35eb6e67a 100644
--- a/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj	
+++ b/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj	
@@ -6,1937 +6,2586 @@
 	objectVersion = 46;
 	objects = {
 
-		1E76E36772355E2A43CF4961 = {isa = PBXBuildFile; fileRef = D00F311BFC3C2625C457CB9B; };
-		241F29FCBB7A17BB44A0B10C = {isa = PBXBuildFile; fileRef = D1F9B0E9F5D54FE48BEB46EA; };
-		49C22786B54C5DC94E4654B8 = {isa = PBXBuildFile; fileRef = E96597BBC6A98255B51B94DC; };
-		11D42F7EC6E6539D79A7F4B1 = {isa = PBXBuildFile; fileRef = E5D6C36496F5BC84D7213BE8; };
-		B980464FA2761CCD64B1FAD6 = {isa = PBXBuildFile; fileRef = CF6C8BD0DA3D8CD4E99EBADA; };
-		2610F357881240ACBF612F48 = {isa = PBXBuildFile; fileRef = 6678E9B3EEACAD47F438B264; };
-		1321E6C1C6170B6C898AD09D = {isa = PBXBuildFile; fileRef = 951128CA33CCDEF570436B1C; };
-		357A6AA6960EF95D92929BEE = {isa = PBXBuildFile; fileRef = 441CFEA771BAA50E187342E9; };
-		954A036F5DDB375DB23FFB3E = {isa = PBXBuildFile; fileRef = 0400CB0E056A1D840304D2DE; };
-		3EB3D569250C4BA4CA9AF578 = {isa = PBXBuildFile; fileRef = C7608A3967D9AB9481848F2B; };
-		95B44E6C74B1DED31DBE37EB = {isa = PBXBuildFile; fileRef = 8C52A3DDA62A746AA7A68535; };
-		AA9D0B8E23F3D87A23DE9F8A = {isa = PBXBuildFile; fileRef = 9069981E414A631B036CC9AC; };
-		244BA1BDA5FAA465EA3F9C6D = {isa = PBXBuildFile; fileRef = 2247EE920DF0610CAF9F4513; };
-		3FCA61C401007B243E2E9035 = {isa = PBXBuildFile; fileRef = F797071D88542C813CF7222A; };
-		5BC89E7905397ABECD25ACCD = {isa = PBXBuildFile; fileRef = F1163B7856FDABA413A88D90; };
-		FBE57B26FE59319AA2E8B59D = {isa = PBXBuildFile; fileRef = 69A5D13490A62DAE9A7D5A22; };
-		30B921C38DCEE787B294B746 = {isa = PBXBuildFile; fileRef = BAC43B20E14A340CCF14119C; };
-		676D2E1E750E61AA2FAA335E = {isa = PBXBuildFile; fileRef = 86E468DE6556BB2AD76A3D80; };
-		8012E6487639A7368E4C4470 = {isa = PBXBuildFile; fileRef = E70CA21960A64CCB835725FF; };
-		1F37544891EC8DBB5E500C1C = {isa = PBXBuildFile; fileRef = F71AF6D2DF3E652F8B51EBAB; };
-		110221CD5578153B528AD2BE = {isa = PBXBuildFile; fileRef = D10D51A0A2D63F38B4D86A60; };
-		CD4F7B119CE718BCE78D61F4 = {isa = PBXBuildFile; fileRef = 9B9CAD20E1243B4351B4C8D8; };
-		78CB463DD98A55313A543859 = {isa = PBXBuildFile; fileRef = 1729AEDC34001C31B8CC357C; };
-		1499DF2E85B05AC1BF423773 = {isa = PBXBuildFile; fileRef = CF21D9DB3AEC0A4DCAB36A99; };
-		123810DAF8AF758928916ECE = {isa = PBXBuildFile; fileRef = 47DD50A5A9091F9900E0EAD9; };
-		C9F11BA62D6D092A300363F7 = {isa = PBXBuildFile; fileRef = 0F249640243FBD5717F6ADD9; };
-		F6635694A01FFBF5EF0968DB = {isa = PBXBuildFile; fileRef = 631983AA62673015F8D7453B; };
-		FCE6F604C00039A32649CB69 = {isa = PBXBuildFile; fileRef = 2E680E2C65684A4272AE079A; };
-		9BF773500BA51A8B5C6C7348 = {isa = PBXBuildFile; fileRef = 65C498761CE166072A202AA0; };
-		57B1F32A372143B4D3B1C517 = {isa = PBXBuildFile; fileRef = 3E03B7C7A19E63A724EB79F4; };
-		3DC282564876B1FC88AAA9B3 = {isa = PBXBuildFile; fileRef = 662C76394C5D1B56766FAFD9; };
-		C49E1D32A9DCE3D59BC48B1D = {isa = PBXBuildFile; fileRef = 93B419190CCE92ACAB1ED25B; };
-		E1268E019B434F6B5E9317DC = {isa = PBXBuildFile; fileRef = 1C216FE9B7A5209C5CCF2517; };
-		CE91112DADB97C573C3C674D = {isa = PBXBuildFile; fileRef = 0169ACAA0FAE70CCEEE4F650; };
-		A70F0274076C0D44ED71C980 = {isa = PBXBuildFile; fileRef = EF30A74B566A461A171BBF83; };
-		BD1E0CBE74DDD2F303978E1F = {isa = PBXBuildFile; fileRef = 4E191CDCE7565DB726CF7065; };
-		8C1CC0E7A772D66635BA482F = {isa = PBXBuildFile; fileRef = 98F42686D9DAC974F2514217; };
-		A69BF71FA90E5A66B6EB2E0F = {isa = PBXBuildFile; fileRef = 9C7FA58D223674C4C2AC6595; };
-		D68DE111AFBD82F0D44A3B69 = {isa = PBXBuildFile; fileRef = B15E33E7342F6EB4F95C9B1D; };
-		EC6A34EC9A9D454BF26AAD32 = {isa = PBXBuildFile; fileRef = 16203C6791259C9718A04C3A; };
-		8AD28823205783E6F676F254 = {isa = PBXBuildFile; fileRef = DF725A596B7BCD7520CC0A9F; };
-		34716A3539FD288C09CBA38A = {isa = PBXBuildFile; fileRef = 921752D9B004A15973DDF56F; };
-		45A53AF13B0D663050632E8C = {isa = PBXBuildFile; fileRef = 9EF583A6201DBC813C2F63C4; };
-		C2A85091A28C907A4E1E1687 = {isa = PBXBuildFile; fileRef = 133F1E428260C5ADDF496DF9; };
-		83431B7234A78ECFB3C15F63 = {isa = PBXBuildFile; fileRef = 78D0DBC4798FF040FDB90F6D; };
-		209FCCC2155A1FCB7E11E20D = {isa = PBXBuildFile; fileRef = 269A454F1FF081DA67FFD578; };
-		C93569F47B4AC1A8E37992ED = {isa = PBXBuildFile; fileRef = 9D7689451732AF8333402B3A; };
-		1B988E139004D8E2850EB656 = {isa = PBXBuildFile; fileRef = C187718F7B9EBA88584B43F3; };
-		6FC19EBA7A51423C3D22F77B = {isa = PBXBuildFile; fileRef = B483D960309FAFC193F9CDA2; };
-		3C5267E06A897B0DC0F7EA50 = {isa = PBXBuildFile; fileRef = 472F9A90F685220D730EBF6C; };
-		F70594FF1FFED9AC12F43709 = {isa = PBXBuildFile; fileRef = B72DAC469A62BD52C86102E7; };
-		01D45DD829D8848733090B67 = {isa = PBXBuildFile; fileRef = 2D5E55D7E0BC08AAF7B6E150; };
-		4028CA96EA50175DD6B8D976 = {isa = PBXBuildFile; fileRef = 2C53E412EF7FC1036E4B11AC; };
-		F743B7B2709E72250982F2FB = {isa = PBXBuildFile; fileRef = BB72D9AA25D5D5B090F16513; };
-		45576193A53DE94F5BF4C3D4 = {isa = PBXBuildFile; fileRef = 9993F2BAA90AA22D16B7F40B; };
-		BF57EEE3415D6F8F03206846 = {isa = PBXBuildFile; fileRef = 20EABC08F7EFE741D7C3B622; };
-		20102F921FAA2A92CED056C0 = {isa = PBXBuildFile; fileRef = DDF2C578191FFE07300541E8; };
-		0075C5208947159AF2802F3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AudioPluginEditorTemplate.cpp"; path = "../../Source/BinaryData/jucer_AudioPluginEditorTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
-		008C8B2C2328CFBB9375397D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComboBoxHandler.h"; path = "../../Source/ComponentEditor/components/jucer_ComboBoxHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		00CBA904DE3B8686A6F569CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; };
-		00E86D533C0149A56F21D804 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../JuceLibraryCode/modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
-		00F860FEF209ABF0E800FA09 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; };
-		0153A6801552D0B4C21BE911 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; };
-		0169ACAA0FAE70CCEEE4F650 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintElementPath.cpp"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementPath.cpp"; sourceTree = "SOURCE_ROOT"; };
-		02CA8C3BE552E240C77A3722 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; };
-		0329C05B4EE23CBB5578BF02 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Primes.h"; path = "../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_Primes.h"; sourceTree = "SOURCE_ROOT"; };
-		03D3053EDE47FED1919C6674 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AudioPluginFilterTemplate.h"; path = "../../Source/BinaryData/jucer_AudioPluginFilterTemplate.h"; sourceTree = "SOURCE_ROOT"; };
-		0400CB0E056A1D840304D2DE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_CommandLine.cpp"; path = "../../Source/Application/jucer_CommandLine.cpp"; sourceTree = "SOURCE_ROOT"; };
-		043FC175E80305E3D95ECAF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NotificationType.h"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_NotificationType.h"; sourceTree = "SOURCE_ROOT"; };
-		04A2C05B7935B8D335B5FD39 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		04C1267B2BD11A6ECCCA654C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentBooleanProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_ComponentBooleanProperty.h"; sourceTree = "SOURCE_ROOT"; };
-		05076CDF1511A5F8A8E18F1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_Make.h"; path = "../../Source/Project Saving/jucer_ProjectExport_Make.h"; sourceTree = "SOURCE_ROOT"; };
-		056E44027E3F3AFAB32FBC44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; };
-		06BB2D547BF07A31E8D46977 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; };
-		0737A6A737019EFC6BC4CED0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; };
-		084171D9475B3491A4EFAB5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; };
-		084C0070BC67BC893B967EF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ToggleButtonHandler.h"; path = "../../Source/ComponentEditor/components/jucer_ToggleButtonHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		08AF500230E8F8644B3682F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; };
-		09261261800229B6438A9A5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		09BB016660D64FDCD2A9866F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; };
-		09F93EBC7C2C877F3446A0C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; };
-		0A6652042F8E043F43239E75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; };
-		0A8D062EF44529B793CC5098 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; };
-		0ACD709DE0EBA4A3D73325FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		0AE2B4F22C863455A366D251 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V3.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp"; sourceTree = "SOURCE_ROOT"; };
-		0B9187D02C50D0A3C4516DC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_SystemTrayIcon.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; };
-		0CF3C0EC356169F25B0BAA9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; };
-		0E06FB23B05CE46487F509C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; };
-		0E24C59E408559F9DF1DC31A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniserFunctions.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h"; sourceTree = "SOURCE_ROOT"; };
-		0F249640243FBD5717F6ADD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MiscUtilities.cpp"; path = "../../Source/Utility/jucer_MiscUtilities.cpp"; sourceTree = "SOURCE_ROOT"; };
-		0F4EFF11F984ED5E2A2045A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; };
-		0F9DBA4AB2BD63773528D805 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		0FAD42641F0AAC0B7E906D18 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		0FB3551C6845EF0E9312F850 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; };
-		0FD7364EC64E25AE854E9A9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; };
-		0FF1C6905150EAAB1AE081A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ButtonHandler.h"; path = "../../Source/ComponentEditor/components/jucer_ButtonHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		101572E83E487C91969D671C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTouchMapper.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_MultiTouchMapper.h"; sourceTree = "SOURCE_ROOT"; };
-		104463B9110789FCDA7BD4FB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; };
-		10AC5E5349AFAF11362E4199 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../JuceLibraryCode/modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; };
-		10F328BCD86EF125C5DDA33D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConcertinaPanel.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h"; sourceTree = "SOURCE_ROOT"; };
-		1125D1B2AE54AEF2EB3D51C0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerDocumentEditor.h"; path = "../../Source/ComponentEditor/ui/jucer_JucerDocumentEditor.h"; sourceTree = "SOURCE_ROOT"; };
-		114845541FC5BE3453B6BD4C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
-		1233E258E4C1FD4AAA7A6D1A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; };
-		1270CC27AD4D0805DD4BA465 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; };
-		12875173A50B701B72E68F90 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; };
-		12ABAFDD4C4BCA2B8313F1CE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; };
-		12D78FB671BC817D433079B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; };
-		1320D638B7BACCADEDA5ABD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
-		133F1E428260C5ADDF496DF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentLayout.cpp"; path = "../../Source/ComponentEditor/jucer_ComponentLayout.cpp"; sourceTree = "SOURCE_ROOT"; };
-		136A3229F6535E2FBB9993E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; };
-		13E76507D88192A1B9554073 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; };
-		140ABB31EF22CAE40D874BB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../JuceLibraryCode/modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; };
-		149020249A77110311411E15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; };
-		14BE817BFCB5B1CF2799C860 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; };
-		159A5AC2CAF01A7A17ECA0A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; };
-		1602D140D6F478765ACEA660 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../../JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; };
-		16203C6791259C9718A04C3A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintRoutinePanel.cpp"; path = "../../Source/ComponentEditor/ui/jucer_PaintRoutinePanel.cpp"; sourceTree = "SOURCE_ROOT"; };
-		16413B69F7D1E2862AFBE61F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../JuceLibraryCode/modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; };
-		16C7EFDF9ED765D02DA12C55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; };
-		16E61715753895412F61F93B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; };
-		17173DDA0532B81C71D95B05 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDragAndDropTarget.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; };
-		1729AEDC34001C31B8CC357C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_FileHelpers.cpp"; path = "../../Source/Utility/jucer_FileHelpers.cpp"; sourceTree = "SOURCE_ROOT"; };
-		174CE62B43D97B83AF1D3338 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; };
-		1848EB565B679F72C560EBAD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; };
-		188D03A4247F4BC0539F5C49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Colours.h"; path = "../../Source/Utility/jucer_Colours.h"; sourceTree = "SOURCE_ROOT"; };
-		189BC87D79A9670E686ACE00 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		18AAAE2846B4512094CF9E64 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; };
-		18D9EBA1DAE45EEF81FD5C8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainConsoleAppTemplate.cpp"; path = "../../Source/BinaryData/jucer_MainConsoleAppTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
-		1908920B3166E7B7A7A095BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; };
-		1958777C37415EC581CD4B74 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../JuceLibraryCode/modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; };
-		199E3F67A1E48F7D95AC6E1E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; };
-		1AF7EFBE4961C7B6C834BF54 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PresetIDs.h"; path = "../../Source/Utility/jucer_PresetIDs.h"; sourceTree = "SOURCE_ROOT"; };
-		1B4284167C1A10170537305A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; };
-		1BE0A264A6AA494EF75B582B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; };
-		1C216FE9B7A5209C5CCF2517 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintElement.cpp"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElement.cpp"; sourceTree = "SOURCE_ROOT"; };
-		1C94985541E125A49C70C07C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; };
-		1D3D6A19A60F0B03DE2F1C14 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementPath.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementPath.h"; sourceTree = "SOURCE_ROOT"; };
-		1DC3F7820AA6D950B2C6D628 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../JuceLibraryCode/modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; };
-		1F04ABB8C6FA1598902FE33A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
-		1F421199C40092BFEE0658C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_RelativePath.h"; path = "../../Source/Utility/jucer_RelativePath.h"; sourceTree = "SOURCE_ROOT"; };
-		1F869D818F79BE6EEE2305FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; };
-		1F86FB8B8336D44337AE7119 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; };
-		1F9BBDFA52513AD34D906D2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_HyperlinkButtonHandler.h"; path = "../../Source/ComponentEditor/components/jucer_HyperlinkButtonHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		1FA92F8F2B26C6CEC8B1D737 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ButtonDocument.h"; path = "../../Source/ComponentEditor/documents/jucer_ButtonDocument.h"; sourceTree = "SOURCE_ROOT"; };
-		1FDBC89D596C6E959E7A8825 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; };
-		1FEE53F170737A23D412C425 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; };
-		20D0FBDE77A58A302859A206 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; };
-		20EABC08F7EFE741D7C3B622 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; };
-		2101B4CC3E5BDC7BD806678B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../JuceLibraryCode/modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; };
-		21822729E1EF7CC3D3528BFE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; };
-		223C4209F18A221EB183A056 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AppearanceSettings.h"; path = "../../Source/Application/jucer_AppearanceSettings.h"; sourceTree = "SOURCE_ROOT"; };
-		2247EE920DF0610CAF9F4513 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_OpenDocumentManager.cpp"; path = "../../Source/Application/jucer_OpenDocumentManager.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2249F79A9B7FFE48DACC14CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		22B29C61E4EB0C2FC4E54378 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BlowFish.cpp"; path = "../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_BlowFish.cpp"; sourceTree = "SOURCE_ROOT"; };
-		22C0EC04F7C30AAE16E632A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; };
-		231F4AC6660B650E08EF1E54 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; };
-		237496FB515C526B510BB0C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; };
-		23A8DE16C0CDB8EED18B008B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CommandIDs.h"; path = "../../Source/Application/jucer_CommandIDs.h"; sourceTree = "SOURCE_ROOT"; };
-		23D5A9D86894973926E3EFB8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V2.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp"; sourceTree = "SOURCE_ROOT"; };
-		240283D05A8E1886987E07F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2412E1E63124369CE418894D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V1.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h"; sourceTree = "SOURCE_ROOT"; };
-		241A48F1D188BF19314065C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; };
-		24319DEF365C8368FD3AA4EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; };
-		24B8D9E228BF396D1B8C705E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		24C34D0578AE6C7A3EA18781 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_InlineComponentTemplate.h"; path = "../../Source/BinaryData/jucer_InlineComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; };
-		24D73A13CD0F89E299E11B0E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; };
-		257104EA81085B98E8AFCFB3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; };
-		258C17078206C550B08DD0F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; };
-		263D9041F9B7D6A79DC38CD6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentLayoutEditor.h"; path = "../../Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.h"; sourceTree = "SOURCE_ROOT"; };
-		269A454F1FF081DA67FFD578 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_JucerDocument.cpp"; path = "../../Source/ComponentEditor/jucer_JucerDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
-		26B7487E9A0CB5C6CA5ACE58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; };
-		27A2B025813B7E54E0862642 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementUndoableAction.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementUndoableAction.h"; sourceTree = "SOURCE_ROOT"; };
-		27C16EA8D243AC7934DF11B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; };
-		27E909E8C27DFBF0F184DCBD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; };
-		27F7865BD6FE03B970B8DBFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2802BE05CAC2BE78EFD5A239 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2875464712C12E9BFCCEE57D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; };
-		28A5DF3CEA69B587C9CA7C4A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; };
-		28C9E13B1A70FDC728770C6E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; };
-		28E80FBE60ED3FE73CCAB834 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XMLCodeTokeniser.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
-		28E9116333CAD9E8164008A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; };
-		295A9B126C98FE15F5A8B81E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FilePropertyComponent.h"; path = "../../Source/ComponentEditor/properties/jucer_FilePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		29C79CFD0760D5BEF0C11D4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		29CA2D82E54BA471A7F0D4A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		29FD4A27890434E137DBC3B9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; };
-		2A631496A56813D0EB2D0E5E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; };
-		2A7B44B9D6C81585064098C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; };
-		2AB28295C237EC79481F5F9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; };
-		2C0D1EB0AE7676CE3458764C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPositionBehaviours.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h"; sourceTree = "SOURCE_ROOT"; };
-		2C53E412EF7FC1036E4B11AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures.mm"; path = "../../../JuceLibraryCode/modules/juce_data_structures/juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; };
-		2C5E67AA30FCCE2E09C8CB6B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; };
-		2C9ED03E1C345D9A81BEB361 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../JuceLibraryCode/modules/juce_cryptography/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
-		2CB1AA089385D7399AC615CE = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../JuceLibraryCode/modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
-		2CD34A70B4032C0426F7AA10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_MainWindow.h"; path = "../../Source/Application/jucer_MainWindow.h"; sourceTree = "SOURCE_ROOT"; };
-		2CF191F1A61F2C167FF2DADA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2D035221BF4D4B8C56FA3653 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2D5E55D7E0BC08AAF7B6E150 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography.mm"; path = "../../../JuceLibraryCode/modules/juce_cryptography/juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; };
-		2D6B77C09B5AF1BBD821D224 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; };
-		2D6B797AC8B1B5E7C8E7D1E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2D9E9803A9DF82BBA42294E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; };
-		2DE3560E8DB420766D385023 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2E183952277F99D860EEB3F3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2E680E2C65684A4272AE079A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_SourceCodeEditor.cpp"; path = "../../Source/Code Editor/jucer_SourceCodeEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2EEB1C074162F363C6599282 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CommandLine.h"; path = "../../Source/Application/jucer_CommandLine.h"; sourceTree = "SOURCE_ROOT"; };
-		2F365E601995A1B068BAC1C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		2F9762C3866D161E38B4FD00 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; };
-		2FAD2E774B5F20B781D5AEB2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; };
-		2FD9D5944388186AAA32FEE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; };
-		2FF61C42E37986022C189531 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; };
-		301592EBAC0FFF6F5B268E99 = {isa = PBXFileReference; lastKnownFileType = image.png; name = "background_tile.png"; path = "../../Source/BinaryData/background_tile.png"; sourceTree = "SOURCE_ROOT"; };
-		3131C94D973A735EA68C1C77 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		318467BF5A24F08E30FB78DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../JuceLibraryCode/modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; };
-		32184C99C6A9A997E6534029 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; };
-		323BA212B37224C61A9C1740 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; };
-		333B1D00E46AF5A642C1DCDE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../JuceLibraryCode/modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; };
-		334E3DFFA297DD18AD57F40F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; };
-		33644BFBB02CBC8EFB61C5D2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; };
-		33B2073D379E18BC2919FA07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		33E0A6C9F0AE53BEC8778775 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; };
-		34705FA6042CBE98AAF77B61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../JuceLibraryCode/modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; };
-		34D4199F01C019ED54544C1E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; };
-		3514E78B58A08F4C98F54C5A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentLayoutPanel.h"; path = "../../Source/ComponentEditor/ui/jucer_ComponentLayoutPanel.h"; sourceTree = "SOURCE_ROOT"; };
-		35CB48D497F35BF3F6998F5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExporter.h"; path = "../../Source/Project Saving/jucer_ProjectExporter.h"; sourceTree = "SOURCE_ROOT"; };
-		35E6EE1E98DD7050DDFECD9B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ContentCompTemplate.h"; path = "../../Source/BinaryData/jucer_ContentCompTemplate.h"; sourceTree = "SOURCE_ROOT"; };
-		364D1A9B113320407A7E57B9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; };
-		36E341F289B15DB1B7FA7528 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-		36F06F123E9717834A627F8D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		3706C20941A79E5A8DE08DE4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; };
-		375AFDF06A908D89DEC5205F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTree_Base.h"; path = "../../Source/Project/jucer_ProjectTree_Base.h"; sourceTree = "SOURCE_ROOT"; };
-		37AD2C828C069B17DB0C70EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; };
-		37C65F13D7CF8A718D1569AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-		3832E22BBFD9A9A1E9EEED6F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
-		385426A4A6D3BFC4B2FD310C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; };
-		393E7A4E9BEC14AFC441E73F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; };
-		39698748BDD86977C4474DE4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
-		3970C8444A2A081455299CE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Javascript.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.cpp"; sourceTree = "SOURCE_ROOT"; };
-		39D907284C634E6A9FC45E3E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-		3A3CD53AEB64CF57B6CADB59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; };
-		3A5B5DC92BE6D22CA15B9671 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SnapGridPainter.h"; path = "../../Source/ComponentEditor/ui/jucer_SnapGridPainter.h"; sourceTree = "SOURCE_ROOT"; };
-		3A9ACE7B66413BF99882ECC6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; };
-		3AC808D92D13832338534F7F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; };
-		3B059A5FF36DA71C1433CA60 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; };
-		3CF3F730EA232DA860D1B79D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; };
-		3D577E9A14625124F5933387 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HighResolutionTimer.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_HighResolutionTimer.cpp"; sourceTree = "SOURCE_ROOT"; };
-		3E03B7C7A19E63A724EB79F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ButtonDocument.cpp"; path = "../../Source/ComponentEditor/documents/jucer_ButtonDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
-		3ED948823F776108CD873C68 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; };
-		3EFC8EEA0D7714261BB90A41 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; };
-		3F00C034B140193B3754969B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ImageResourceProperty.h"; path = "../../Source/ComponentEditor/paintelements/jucer_ImageResourceProperty.h"; sourceTree = "SOURCE_ROOT"; };
-		3F8D9C9557E45D151F339F5E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; };
-		3F9D0CEF873510CCD254A9C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XMLCodeTokeniser.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; };
-		3F9D4C7F6E5779D4E4AE655D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentLayout.h"; path = "../../Source/ComponentEditor/jucer_ComponentLayout.h"; sourceTree = "SOURCE_ROOT"; };
-		3FB2A9225024422947E6E654 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; };
-		3FDA82F89379E99C9E3B5C64 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; };
-		400E4C67ABCDDB1D49EBB85E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TabbedComponentHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TabbedComponentHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		405388248E6EF4212019AC65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4064AE577A11F735B2CE87F0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SharedResourcePointer.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_SharedResourcePointer.h"; sourceTree = "SOURCE_ROOT"; };
-		40B4AB02D26ED520104B9363 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; };
-		40B9BA6D711F58DEB6E871BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4108E23948D43A46FB88B23E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; };
-		41105E536155E394E54BDD35 = {isa = PBXFileReference; lastKnownFileType = file.xml; name = "colourscheme_dark.xml"; path = "../../Source/BinaryData/colourscheme_dark.xml"; sourceTree = "SOURCE_ROOT"; };
-		419A5389244CCE7390877F1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; };
-		41CA95403E264AA7457A61F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementRoundedRectangle.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementRoundedRectangle.h"; sourceTree = "SOURCE_ROOT"; };
-		421BFE95D4EE1C5D12BBB848 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LuaCodeTokeniser.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4301D29792107D6471F29FDF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; };
-		439A60BB029251ED3752A69A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ContainerDeletePolicy.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_ContainerDeletePolicy.h"; sourceTree = "SOURCE_ROOT"; };
-		43ACFC660A375B2DEDFE2274 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConcertinaPanel.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp"; sourceTree = "SOURCE_ROOT"; };
-		43B30439D7A63B0D2CF12AC9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		43BFDF9214946C6B76CA666D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; };
-		43E13FBEEA6CF191A0D501E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; };
-		441CFEA771BAA50E187342E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AppearanceSettings.cpp"; path = "../../Source/Application/jucer_AppearanceSettings.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4467B3824742815D1355DB81 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../JuceLibraryCode/modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; };
-		44F454FF28C39CC641FF410B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; };
-		45AE1D139D938D43891501E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; };
-		46392AD7FE5D6BFED1BE827C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; };
-		46515892E00E0D91D920B90C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4653C504CADC3A365DCD59D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; };
-		46F449C23355573E967D351F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; };
-		472F9A90F685220D730EBF6C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; };
-		4760F25A96CAB18E75573C0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../JuceLibraryCode/modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; };
-		479E55D2A68FC2E14FF2E39A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RenderingHelpers.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h"; sourceTree = "SOURCE_ROOT"; };
-		47B49049B85EED74D29C9906 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTree_File.h"; path = "../../Source/Project/jucer_ProjectTree_File.h"; sourceTree = "SOURCE_ROOT"; };
-		47DD50A5A9091F9900E0EAD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_JucerTreeViewBase.cpp"; path = "../../Source/Utility/jucer_JucerTreeViewBase.cpp"; sourceTree = "SOURCE_ROOT"; };
-		482C35BB3B7DDE1B452C8455 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; };
-		486683F365BE1E8CEE34D4D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		48ADBB0A2A258CF72F04891A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; };
-		48F1E4DDD3B2B8E5CC410EE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; };
-		497E5C615BFF59384CB2284C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; };
-		498E9D7F6E7F61A84E0D7792 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V1.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4A19E61C47E844D661C34DDD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4A41FD3066D0979DB48691E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_MiscUtilities.h"; path = "../../Source/Utility/jucer_MiscUtilities.h"; sourceTree = "SOURCE_ROOT"; };
-		4AD7BBD9D7EA422981A8C536 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; };
-		4B138A2FD1EF34BB254F7C7A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; };
-		4BD96E9231831D77755CC803 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; };
-		4BE6A47DF33CCD5619DFE82A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; };
-		4BF00AE19C332EF226420C57 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4C2093BCD3528ACEDC7A2B33 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ImageButtonHandler.h"; path = "../../Source/ComponentEditor/components/jucer_ImageButtonHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		4C2394A14C140490F5F4E9BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; };
-		4C80A175986D336D4E1044A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../JuceLibraryCode/modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; };
-		4C8154CEB5C33EFB9E5CB8DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		4CA1C3E6585D7694AA9C309F = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Info.plist; sourceTree = "SOURCE_ROOT"; };
-		4CA96F577DD15FB5085518E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4CC9356FA92F5C94E4DC65D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4DAF01670050184A3BAAA93B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; };
-		4DEBB89A00FBD2C11515FD07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; };
-		4DFDC4E1F50427FBAF0B8F81 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; };
-		4E191CDCE7565DB726CF7065 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentOverlayComponent.cpp"; path = "../../Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		4E2A191756179C6616D50B58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		4E60769DE992CA7FC1A4A486 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintRoutineEditor.h"; path = "../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.h"; sourceTree = "SOURCE_ROOT"; };
-		4E8FE9B1B8C90FC28D56523B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementEllipse.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementEllipse.h"; sourceTree = "SOURCE_ROOT"; };
-		4EBA5CEE07FB8B2DAA9A0315 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../JuceLibraryCode/modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; };
-		4F052A9DD4EFD3C761C7EBA2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; };
-		4F129F3B2CD7B03E97C2F168 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; };
-		4F5572380B51C24AE8D34450 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
-		4F6365A0D2D51337151D85C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTree_Group.h"; path = "../../Source/Project/jucer_ProjectTree_Group.h"; sourceTree = "SOURCE_ROOT"; };
-		4F687965FBE86EAFDB3ACFEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; };
-		4F8DCA25AFAD089510C8B48B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; };
-		5017AF048B9A8F840DA442A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; };
-		502A6F378DA7D0BED1380D86 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
-		50498FF6EA3901CBD58223B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ObjectTypes.h"; path = "../../Source/ComponentEditor/jucer_ObjectTypes.h"; sourceTree = "SOURCE_ROOT"; };
-		507C2DFBFDA8AB08F71ED82D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		5091B14CC87C6238CF044258 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ElementSiblingComponent.h"; path = "../../Source/ComponentEditor/paintelements/jucer_ElementSiblingComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		513AF2A4DB37CC6F47E6CEF0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; };
-		514B0E8E2796ACE7385F6717 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; };
-		515FF6E74826E3E3F7273621 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Icons.h"; path = "../../Source/Utility/jucer_Icons.h"; sourceTree = "SOURCE_ROOT"; };
-		519269C6218CA35F731ECA61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; };
-		51D9906830CE2006B74DBFCC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; };
-		51DAFE574A52F68CC4A10274 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; };
-		523B197F8A3BCA94C58C6DEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5293C026D920F2E0E710447C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; };
-		529B0A44694A54ED99444A0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; };
-		529B9F1BADEE58EA9F4F8C09 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; };
-		530ADBF1045867FE90EB8F1F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; };
-		53151B683E11F420203E61C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewCppFileTemplate.h"; path = "../../Source/BinaryData/jucer_NewCppFileTemplate.h"; sourceTree = "SOURCE_ROOT"; };
-		5377705718D6D60A6AA2848F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5432B7B9B2CF2EAEC8B66D5C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_UtilityFunctions.h"; path = "../../Source/ComponentEditor/jucer_UtilityFunctions.h"; sourceTree = "SOURCE_ROOT"; };
-		54652695DEEBAB24E462DDD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; };
-		553725A0E3A391651ED1731E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FileHelpers.h"; path = "../../Source/Utility/jucer_FileHelpers.h"; sourceTree = "SOURCE_ROOT"; };
-		553F3388AADBF8B529B78824 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; };
-		55A56A4C2EC5DECEC307EC37 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		55B79C48660935077095DBFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5603954CFF21E81C86CCA1CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPosition.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPosition.h"; sourceTree = "SOURCE_ROOT"; };
-		563091B0916AD9AAA36C7DC5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_OpenDocumentManager.h"; path = "../../Source/Application/jucer_OpenDocumentManager.h"; sourceTree = "SOURCE_ROOT"; };
-		5659718DF6BD054B2B0A875C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; };
-		56ECDE6643205406C32D1CE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; };
-		576D62C0C9C1BA4B7A514721 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PositionPropertyBase.h"; path = "../../Source/ComponentEditor/properties/jucer_PositionPropertyBase.h"; sourceTree = "SOURCE_ROOT"; };
-		5797A65A441D030729C6E886 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../JuceLibraryCode/modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; };
-		5801B222830CA1E1006968BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; };
-		5805FE3FCA0B3CD8E2851774 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; };
-		58139D8D454051C59E77609B = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = ../../Source/BinaryData/RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; };
-		5823F1EE0F39AE16B560665A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5852830ECC222BA36A30EC20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewFileWizard.h"; path = "../../Source/Project/jucer_NewFileWizard.h"; sourceTree = "SOURCE_ROOT"; };
-		58FA9E2B67AED7330158A903 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V2.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h"; sourceTree = "SOURCE_ROOT"; };
-		5909E278D645E1F91C0AE2BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
-		599957E884512B8314720BBD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInactivityDetector.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h"; sourceTree = "SOURCE_ROOT"; };
-		5A11499F36DB882429253BA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5B28BE68400342E97C084ACC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5B45BF234C7184BE28C59741 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5B8805BE8EFB29BFC7BD6D31 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LiveConstantEditor.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_LiveConstantEditor.h"; sourceTree = "SOURCE_ROOT"; };
-		5B9EE26978797CC153F5E24F = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
-		5BDAE5FD683C0005A609495E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; };
-		5BE9E1B6197D01AB97288253 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; };
-		5C454FECFF7234355CEA17D4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; };
-		5C6893F610657B9383F9333F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5C96DDE9CD90B82EA3CD6ED8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5CD44EFDD7BA487CDF41760A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5CE5E5132CEFADC6D48ECB08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5D33FED578ADEEBAA8A4CFED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; };
-		5D77828FECF00CF108E16599 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; };
-		5D9E7814B713670624F0028F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentTypeHandler.h"; path = "../../Source/ComponentEditor/components/jucer_ComponentTypeHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		5EA02C28A509FAC9D2561AC5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; };
-		5EAA527023FD40745056F13B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; };
-		5EE461C6611D3669B36F639D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; };
-		5F4AF4400A9511B74E2425EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; };
-		5F4F4EAB042F2730F94A1CEA = {isa = PBXFileReference; lastKnownFileType = text.txt; name = AudioPluginXCodeScript.txt; path = ../../Source/BinaryData/AudioPluginXCodeScript.txt; sourceTree = "SOURCE_ROOT"; };
-		5F6584B675E30761521A9F42 = {isa = PBXFileReference; lastKnownFileType = file.xml; name = "colourscheme_light.xml"; path = "../../Source/BinaryData/colourscheme_light.xml"; sourceTree = "SOURCE_ROOT"; };
-		5F99D905AAF0C3F89CEAD965 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; };
-		5FDE1D586B6984E67E3B1E19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; };
-		60138E309DBA8366F9AA83A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; };
-		60285932750263E48A18908C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; };
-		6059BA2EC2D80F1A58D047A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		61096C79B4C094699E9ED296 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
-		61151BEBE0F7E79DFA313076 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; };
-		61538AD86AB82CE59EF6C68D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; };
-		61804EF1D5DC1451EBDAF6C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; };
-		61A6870CF7A0DE01A70799B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; };
-		61BE37E2B26C25056D9E8FE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewComponentTemplate.cpp"; path = "../../Source/BinaryData/jucer_NewComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
-		61F8ED9B6C0D09E2665531D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; };
-		62112F8E435A750E1D2B28E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; };
-		6245DA2AC30B91552C12AD1F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; };
-		630428D04F157F7162C05D59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; };
-		631983AA62673015F8D7453B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_StoredSettings.cpp"; path = "../../Source/Utility/jucer_StoredSettings.cpp"; sourceTree = "SOURCE_ROOT"; };
-		633CC0CEF05B3ADCEEE1325E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; };
-		6350DFE5844B6CB31FB54A80 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; };
-		63717F00538E1367E2B9D812 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; };
-		63754DF4DA5063BF038C359B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; };
-		63A4A00461C033BC464E4D34 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
-		641338764B8C715715DA7351 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; };
-		641B57E5FAE6BEFDB6462921 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ResourceEditorPanel.h"; path = "../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.h"; sourceTree = "SOURCE_ROOT"; };
-		64520235EF5529F8C0E4A9A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; };
-		647EBD8D1EAD21592951DD9B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; };
-		64EDFDAE0755DC1451F181B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; };
-		659B75A15D70B8FE57D1A1BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; };
-		65C498761CE166072A202AA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentTypeHandler.cpp"; path = "../../Source/ComponentEditor/components/jucer_ComponentTypeHandler.cpp"; sourceTree = "SOURCE_ROOT"; };
-		65E82ADF9AEE696576F43E92 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; };
-		65F4749184C84C2FDBB4C305 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AudioPluginFilterTemplate.cpp"; path = "../../Source/BinaryData/jucer_AudioPluginFilterTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
-		662C76394C5D1B56766FAFD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentDocument.cpp"; path = "../../Source/ComponentEditor/documents/jucer_ComponentDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
-		66448E472FD5BB3D34B1509B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; };
-		665EDD760E47A6AD1A1DBC2D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; };
-		6678E9B3EEACAD47F438B264 = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; };
-		668D7FDE00212229DFCB2175 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		66B49F08C5EC3E4974825FF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintRoutine.h"; path = "../../Source/ComponentEditor/jucer_PaintRoutine.h"; sourceTree = "SOURCE_ROOT"; };
-		66B4C39694799AC85ADDBECC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; };
-		6737B22BED56A0544E39FD15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; };
-		67FF4A3F3E1CD9583EABE1F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; };
-		68077882A46E2C4E398E4C99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
-		68164EA5DFF5CE5AC2402670 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; };
-		689996FF463D52FEF125AFF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; };
-		69A1792C863C7957A80F6945 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; };
-		69A5D13490A62DAE9A7D5A22 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewProjectWizard.cpp"; path = "../../Source/Project/jucer_NewProjectWizard.cpp"; sourceTree = "SOURCE_ROOT"; };
-		69BB2D7A2EDAB1C87EA1F688 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; };
-		69F318BBA51FA30B777135B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; };
-		6A337C69A928E3CE79C55457 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentChoiceProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_ComponentChoiceProperty.h"; sourceTree = "SOURCE_ROOT"; };
-		6AC17B5D88D0ADBF77420048 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; };
-		6AC5756EBCB78FD82C15B829 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; };
-		6AC88EFC247C225CC5C11A43 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_BinaryResources.h"; path = "../../Source/ComponentEditor/jucer_BinaryResources.h"; sourceTree = "SOURCE_ROOT"; };
-		6C25EB12F6DB9F5225E75667 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; };
-		6C7A1929978639A482D5096D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; };
-		6C867E1E3FEC31970950C620 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_CommonFile.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_linux_CommonFile.cpp"; sourceTree = "SOURCE_ROOT"; };
-		6CA3455CFAA1A52891F55CEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-		6DB44C43D1260559163A47F0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; };
-		6E1D22B93CCB47AB339085E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
-		6E2B6FE06BE3735AA969B526 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		6E6140969908E7619F858740 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CommonHeaders.h"; path = "../../Source/Application/jucer_CommonHeaders.h"; sourceTree = "SOURCE_ROOT"; };
-		6E7353DFEA8825B515049ABB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_Android.h"; path = "../../Source/Project Saving/jucer_ProjectExport_Android.h"; sourceTree = "SOURCE_ROOT"; };
-		6ED2213CA4E7E418E74A91E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; };
-		6F2DEA817E140C2659915138 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		6F4A2CF770F9E789E695825E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; };
-		6FB8B11C25BB74994A407113 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; };
-		700138BDDB27754A06B56C87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; };
-		700F6188EAA73DD57767694F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; };
-		7038159E5F04B3C75B6A7655 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
-		70C4E93E7132BEEDDABFDA10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/javascript/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; };
-		7211101FFA28400ADBB1D47A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Module.h"; path = "../../Source/Project/jucer_Module.h"; sourceTree = "SOURCE_ROOT"; };
-		727511F6927A7B2602A6C689 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		72A66FD9571871FFB455F8B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; };
-		72BB08B37FC311C133A01F95 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Javascript.h"; path = "../../../JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.h"; sourceTree = "SOURCE_ROOT"; };
-		72EC62B05E134F85761E642E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; };
-		73425A7FACB8FEE3D7A7C567 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; };
-		73D0EA57406DF9583EE8FB3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; };
-		742B8388A246A9E984457C7A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		75087C822B7871FA849D2909 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		7545BFF1C7C857A810B0483D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
-		756D2E74350285D4082EFD8E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../JuceLibraryCode/modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; };
-		7577BF4DE64CD865088A612E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; };
-		760A535A2680C8B3C44B59C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; };
-		76E2E826701240CDD4DEDA57 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; };
-		76EF37EBCCA75161A3561F9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; };
-		785740092163D40EE36BDA5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; };
-		786095D2FAF63CBC05B170C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; };
-		7861B7ACECC987D58C7D0309 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; };
-		786BAF436828865F45314440 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElement.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElement.h"; sourceTree = "SOURCE_ROOT"; };
-		78CA0E0F336229E2E2F111B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SourceCodeEditor.h"; path = "../../Source/Code Editor/jucer_SourceCodeEditor.h"; sourceTree = "SOURCE_ROOT"; };
-		78D0DBC4798FF040FDB90F6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_GeneratedCode.cpp"; path = "../../Source/ComponentEditor/jucer_GeneratedCode.cpp"; sourceTree = "SOURCE_ROOT"; };
-		79366BF7CA160E7EFC7823C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInactivityDetector.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp"; sourceTree = "SOURCE_ROOT"; };
-		79DF7512BC6437E5E29E3CFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; };
-		7A3E96D22F1C9EB4C739834F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PointComponent.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PointComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		7AEAEEF9959046D9827CCB56 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; };
-		7B4E33B1E04139F359FB484B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ConfigTree_Exporter.h"; path = "../../Source/Project/jucer_ConfigTree_Exporter.h"; sourceTree = "SOURCE_ROOT"; };
-		7BB3AB4907661D6FED799B7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; };
-		7BBA8AF8E7872672F190C1C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V3.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h"; sourceTree = "SOURCE_ROOT"; };
-		7BD4BCAA20B1ACED28EBBFD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; };
-		7BD8AE7287AB53880575A757 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; };
-		7C0528B4912955DA59C28356 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../JuceLibraryCode/modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; };
-		7D33879BE42FD18DA0E7833E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; };
-		7D6B19FB1AAA04D27716457B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		7DBCC7A6E5B251DA94AB0EE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; };
-		7E1CE53CFD909089387910AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; };
-		7E47A29DD9817618F48068FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		7E8730C293CF253B56930440 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; };
-		7F3AE35521DFE092953385B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		800206C482A2C7E62682C324 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; };
-		800B30FB2437B98A1423838A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; };
-		801143A09B8A467EA47EBA27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; };
-		8090981F07A76E465DAAADF4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ValueSourceHelpers.h"; path = "../../Source/Utility/jucer_ValueSourceHelpers.h"; sourceTree = "SOURCE_ROOT"; };
-		8138A55052E9FC27284B74DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FontPropertyComponent.h"; path = "../../Source/ComponentEditor/properties/jucer_FontPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		814A077ED7A54254415C309C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/application/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; };
-		81704510C0CA45994B69AF05 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; };
-		81A3DED7F13085DF8C8190AB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../JuceLibraryCode/modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; };
-		820291543BF93243B718F0EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerTreeViewBase.h"; path = "../../Source/Utility/jucer_JucerTreeViewBase.h"; sourceTree = "SOURCE_ROOT"; };
-		8216291F3E0D0926D64AD98C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-		822A59FE23E0E962993EFF1C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
-		825F21A8A32CC0FD20B845A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		82976E18712BAE638A132F02 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
-		82C7BF9F5E863E647438A8AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; };
-		83C7547CCAFCBB88F791FED8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; };
-		84493A7AD6B0398B732461FB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; };
-		849641B50DB4AE6CCA1C543F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; };
-		84BC9171F02182D3AFD04F66 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; };
-		84E06858791DF81E37B9A484 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
-		84EB1282EE3C5F3A1DF70A54 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
-		8531F4060FE4BEBEC2E8EF9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; };
-		85B2B84227B39C31FE9D790A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; };
-		85B48563B4437E1E27ACABAD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConnectedChildProcess.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
-		865F57EEFDD6F194FCE3FD8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; };
-		867952C0062DAA52FE4345B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
-		8681C46D7B7D05BEEB56E44E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; };
-		86E468DE6556BB2AD76A3D80 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjectContentComponent.cpp"; path = "../../Source/Project/jucer_ProjectContentComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		86E8A40E5A83781A8478454D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainTemplate_Window.cpp"; path = "../../Source/BinaryData/jucer_MainTemplate_Window.cpp"; sourceTree = "SOURCE_ROOT"; };
-		86EC32D1F0A4D7678B298631 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; };
-		8702F43110E4CCA5E5F827F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; };
-		87B65D3DBFD7D35B15010226 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		87C711AFE0DEEC1FA8AD9465 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; };
-		880D1F031B50F965A56B7240 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; };
-		88332B74FC9B9BE2F60D7EAB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; };
-		8887ADA2A339C0BD9AFF83DA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; };
-		88E1573706105D51541F4CA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; };
-		8B2E98629FB118FAAB8E2476 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; };
-		8B5073191880BFFDF8B3BE6E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		8C07D2E980420174DF513BEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextDiff.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_TextDiff.cpp"; sourceTree = "SOURCE_ROOT"; };
-		8C48F6C90CB6D2CBB19511B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
-		8C52A3DDA62A746AA7A68535 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Main.cpp"; path = "../../Source/Application/jucer_Main.cpp"; sourceTree = "SOURCE_ROOT"; };
-		8D89602169EF2FB7E38F8C0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; };
-		8E673D43C2CD68894A10B99D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; };
-		8EE709A982B89A4C752303BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; };
-		8F14D66EAF9B6219C5D1C510 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; };
-		8F30A53C7FE4BC65171FB3E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerDocument.h"; path = "../../Source/ComponentEditor/jucer_JucerDocument.h"; sourceTree = "SOURCE_ROOT"; };
-		8F355E9A0D4E3B4DF00E7BA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; };
-		8F8BF1A7130D858E0A239F9E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ConfigTree_Base.h"; path = "../../Source/Project/jucer_ConfigTree_Base.h"; sourceTree = "SOURCE_ROOT"; };
-		9069981E414A631B036CC9AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainWindow.cpp"; path = "../../Source/Application/jucer_MainWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9091730D608EEEA35977BC1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; };
-		909FCA929A162A919ABF6575 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; };
-		90B9A4673FDC35841E5D4562 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../JuceLibraryCode/modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; };
-		914ADDB50ED7365F08BA91F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CodeHelpers.h"; path = "../../Source/Utility/jucer_CodeHelpers.h"; sourceTree = "SOURCE_ROOT"; };
-		914C0B02F52FA4C06116EDB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; };
-		9153965AAA76A86DFCAEE86E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; };
-		91A9050F591F2E03EA96203A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; };
-		921752D9B004A15973DDF56F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_TestComponent.cpp"; path = "../../Source/ComponentEditor/ui/jucer_TestComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		921FBD47F9842396F1CB22ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; };
-		923B69234C15988DFF1E8423 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; };
-		9245B8936083D87061E4FE15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; };
-		92B6276B30F89F742E78A265 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HighResolutionTimer.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_HighResolutionTimer.h"; sourceTree = "SOURCE_ROOT"; };
-		92BE7C40FE77D34FFF39D9BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; };
-		92E4C9A69A2DAD900D128A02 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; };
-		92F91DC29B64AD85B1F508BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GenericComponentHandler.h"; path = "../../Source/ComponentEditor/components/jucer_GenericComponentHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		93B419190CCE92ACAB1ED25B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ColouredElement.cpp"; path = "../../Source/ComponentEditor/paintelements/jucer_ColouredElement.cpp"; sourceTree = "SOURCE_ROOT"; };
-		93B474F28D09D858DE16E881 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; };
-		93C5BEADA1AB1CFF7B167D2F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; };
-		93D03B2BC76998A3BDA747E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AudioPluginModule.h"; path = "../../Source/Project/jucer_AudioPluginModule.h"; sourceTree = "SOURCE_ROOT"; };
-		94232610F41512C7040EDA38 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		945A4B296E9562BEFF95884A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; };
-		94A8C75647A8777AC35F13FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; };
-		94E38DB823EBBA437181682F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../JuceLibraryCode/modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; };
-		951128CA33CCDEF570436B1C = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = "SOURCE_ROOT"; };
-		95220AF02A9BEC790D84413E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9559DA09C937A41B88227D80 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		95604CB3BD2C7745FD8FDB74 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; };
-		957D4AC1FE338B82C790FDF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; };
-		95A64B8A811BB2D78C6F13B9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; };
-		95BAFFF3DDCB31F1E4F5F807 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; };
-		95CBFF7351F89C117E30292A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; };
-		963891BF1C9BC566FCF433B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; };
-		963E0740B7B4D59EF2D16740 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentTemplate.h"; path = "../../Source/BinaryData/jucer_ComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; };
-		9683B04CA3BD7F73E8236FE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ContentCompTemplate.cpp"; path = "../../Source/BinaryData/jucer_ContentCompTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
-		96BD2AC4C892C245E04B8A93 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
-		97227974323F8526EB062F78 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; };
-		974B862C51DA9A16CBBB3A29 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_XCode.h"; path = "../../Source/Project Saving/jucer_ProjectExport_XCode.h"; sourceTree = "SOURCE_ROOT"; };
-		97C816B1B6B7FBC38DF10303 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; };
-		97E75A598791645465FEDCE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_EditingPanelBase.h"; path = "../../Source/ComponentEditor/ui/jucer_EditingPanelBase.h"; sourceTree = "SOURCE_ROOT"; };
-		981A11A17B5DD50BC2A69F33 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		984CCFC22599870F2BC0611E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		987490B430B80B4FA2792176 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; };
-		987C3D5A7CC55FB19AD24294 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9899685BD109C2475BA4F8A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; };
-		98F42686D9DAC974F2514217 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_EditingPanelBase.cpp"; path = "../../Source/ComponentEditor/ui/jucer_EditingPanelBase.cpp"; sourceTree = "SOURCE_ROOT"; };
-		993AD03D61870459F867B2F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; };
-		99623EB9527119388EEDC8E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9993F2BAA90AA22D16B7F40B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics.mm"; path = "../../../JuceLibraryCode/modules/juce_graphics/juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; };
-		9A154A0F904C15BF6E1253F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9A7D5A94730758251DC8E4FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; };
-		9B3076A1D57D614DB7B4657E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; };
-		9B4AAEAD95B93FA8F2348E27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9B9CAD20E1243B4351B4C8D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_CodeHelpers.cpp"; path = "../../Source/Utility/jucer_CodeHelpers.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9BC8AE609A07657CEF587548 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_StoredSettings.h"; path = "../../Source/Utility/jucer_StoredSettings.h"; sourceTree = "SOURCE_ROOT"; };
-		9C04F9680F82BF279D528688 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectSaver.h"; path = "../../Source/Project Saving/jucer_ProjectSaver.h"; sourceTree = "SOURCE_ROOT"; };
-		9C1D8A8FAA2439A8EA2DD800 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MD5.cpp"; path = "../../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_MD5.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9C51394634F102DEBBE6C9EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementText.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementText.h"; sourceTree = "SOURCE_ROOT"; };
-		9C7FA58D223674C4C2AC6595 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_JucerDocumentEditor.cpp"; path = "../../Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9C803826E5E3FDB1B37660D5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentDocument.h"; path = "../../Source/ComponentEditor/documents/jucer_ComponentDocument.h"; sourceTree = "SOURCE_ROOT"; };
-		9CADF9A1F79D9D1ECC7147E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9D7689451732AF8333402B3A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ObjectTypes.cpp"; path = "../../Source/ComponentEditor/jucer_ObjectTypes.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9DBDA8C274E693DF449FF525 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; };
-		9DBE1CE382EE797178B3D35F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; };
-		9E6BAEF28A55F7F349A15DDC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../JuceLibraryCode/modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; };
-		9EDDEEBCF410FDF5B96FAD65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; };
-		9EF583A6201DBC813C2F63C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_BinaryResources.cpp"; path = "../../Source/ComponentEditor/jucer_BinaryResources.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9EFCD465B3A75D9E2556DA0E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9EFFD9F226690A84BBA574C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		9F41F3338BF00D0FC74C6390 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TestComponent.h"; path = "../../Source/ComponentEditor/ui/jucer_TestComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		9F58502C5ADE97059BD8BFE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; };
-		9F75811FE7B5F8D1321BEC69 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ConfigTree_Modules.h"; path = "../../Source/Project/jucer_ConfigTree_Modules.h"; sourceTree = "SOURCE_ROOT"; };
-		A039067FA15840674DB4CA0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A0951828C3BF47FA7E1E52F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ViewportHandler.h"; path = "../../Source/ComponentEditor/components/jucer_ViewportHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		A191412DDC58FCC5A67373FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A2B4202B1078374D5D0A2FA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../JuceLibraryCode/modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; };
-		A2F1EA2989EF154ADBFDC4C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A350F5C1C50024670090021B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A3632F10CD01DB5263F628F0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A36D9A1D559944BB4EAF2F5E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; };
-		A3A4DC7DB79039626E4A311C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A3AC7148A7357852CA7018AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A3F5671F82CBAC136EEA4D26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A42E6A76BCFC6504676EBE8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A51E4D49C37A60CC0BCE4246 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; };
-		A6B4EF8DBA1476D85FE0E927 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; };
-		A6D3D648059361F5836DE280 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A73C997FBB6C26B632CBAE15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Primes.cpp"; path = "../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_Primes.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A7DD1B727D226AE589E87E4A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A8C8924ADBF29D01FDFD62BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A9208187F15083F4FC55E0E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A947623ED5EA00C6C3FD8EBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; };
-		A9888AA5368432DCA5F64910 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A99E772786C0A210E4CDF0D4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		A9BAF0420FC4DC07011EA244 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
-		AA4578A9110E724AB87DF869 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDiff.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_TextDiff.h"; sourceTree = "SOURCE_ROOT"; };
-		AA8EED79F095953D2B5923B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentColourProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_ComponentColourProperty.h"; sourceTree = "SOURCE_ROOT"; };
-		AAC42C49D961A534FE64882E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; };
-		ABD9D1389B5591B2303990F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; };
-		AC544E614702255B972E1E8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; };
-		AC70D9D3E27592DD5D19B935 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
-		AD828AEF8A826DCAD19095B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		AE1BC6DCCFC1A18E2ACE23F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainTemplate_NoWindow.cpp"; path = "../../Source/BinaryData/jucer_MainTemplate_NoWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
-		AF51A8DC8E67D8EB660AD6D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../../JuceLibraryCode/modules/juce_data_structures/values/juce_Value.h"; sourceTree = "SOURCE_ROOT"; };
-		AF9453BB7F2479400D4A144B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; };
-		AFEBD8423B07599B1DE175A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ModulesPanel.h"; path = "../../Source/Project/jucer_ModulesPanel.h"; sourceTree = "SOURCE_ROOT"; };
-		AFF72BA2B130F3F9AC029080 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AudioPluginEditorTemplate.h"; path = "../../Source/BinaryData/jucer_AudioPluginEditorTemplate.h"; sourceTree = "SOURCE_ROOT"; };
-		AFFC3BBF8BBC82DD09B25EEE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; };
-		B00F60201606F195058BB575 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ColourPropertyComponent.h"; path = "../../Source/ComponentEditor/properties/jucer_ColourPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		B06C7C053DB0660CDA8B5C2C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintRoutinePanel.h"; path = "../../Source/ComponentEditor/ui/jucer_PaintRoutinePanel.h"; sourceTree = "SOURCE_ROOT"; };
-		B15E33E7342F6EB4F95C9B1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintRoutineEditor.cpp"; path = "../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
-		B18059D88300EB8EF703A82B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; };
-		B1963F0D8C0046E54FD9E023 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ColouredElement.h"; path = "../../Source/ComponentEditor/paintelements/jucer_ColouredElement.h"; sourceTree = "SOURCE_ROOT"; };
-		B1DF858F499D12D442679683 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; };
-		B271F77C266131705FF6F92B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_cryptography.h"; path = "../../../JuceLibraryCode/modules/juce_cryptography/juce_cryptography.h"; sourceTree = "SOURCE_ROOT"; };
-		B290C6821BDC0912A94A1127 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; };
-		B292B170AC30407623358E6F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; };
-		B2CEB1DE8F290AFCDE9585BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../JuceLibraryCode/modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; };
-		B388675858A6323C1A1F7BFE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; };
-		B420AC0E3CF485CCFFE5C625 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../JuceLibraryCode/modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; };
-		B43D35488A61101480983DA3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; };
-		B483D960309FAFC193F9CDA2 = {isa = PBXFileReference; lastKnownFileType = image.png; name = "juce_icon.png"; path = "../../Source/BinaryData/juce_icon.png"; sourceTree = "SOURCE_ROOT"; };
-		B4E428E2D02619F18757BBF5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../JuceLibraryCode/modules/juce_core/javascript/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; };
-		B53BBDA475207303A77FAD40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; };
-		B54CB8DDB5000BDCBDECD8BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		B5F94A37629F841C6C2B4CA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../JuceLibraryCode/modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; };
-		B68B2E4185C6FDCEEE0DBA79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; };
-		B72DAC469A62BD52C86102E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core.mm"; path = "../../../JuceLibraryCode/modules/juce_core/juce_core.mm"; sourceTree = "SOURCE_ROOT"; };
-		B741170E45D74F30B7D5CDDF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentNameProperty.h"; path = "../../Source/ComponentEditor/components/jucer_ComponentNameProperty.h"; sourceTree = "SOURCE_ROOT"; };
-		B7D930DDBE81040985D1B48C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; };
-		B8385E9A644BD3CD94876448 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectType.h"; path = "../../Source/Project/jucer_ProjectType.h"; sourceTree = "SOURCE_ROOT"; };
-		B83E41BC9767A790F2D04403 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; };
-		B895CACE6FF447C83DC7ABF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; };
-		B90DA9BF88AD7AA018CD1F6B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
-		B93A82D11582820D193C9131 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; };
-		B941446353FA94BCE78D001D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		B9B67E7AC6527BDB9D4D42D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; };
-		B9F917BA04B3A715B7E49128 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; };
-		BA3CF913C966148DF5059C9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BA61CF61BDB1194FF4A85DA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BA9B833DA92A957DB959CECC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponent.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm"; sourceTree = "SOURCE_ROOT"; };
-		BAB603B7CA702368B2513074 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BAC2D13A5ED7622DD43BF752 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BAC43B20E14A340CCF14119C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Project.cpp"; path = "../../Source/Project/jucer_Project.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BB72D9AA25D5D5B090F16513 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events.mm"; path = "../../../JuceLibraryCode/modules/juce_events/juce_events.mm"; sourceTree = "SOURCE_ROOT"; };
-		BBBBDB341B49EA3277A24D8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BC629A17FC45C9D48E2A383F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BC975A241710644E779FAB84 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BCB8D7D4B1AFA15D3ACEFCEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; };
-		BCCFDFB2C02C4AA436C0ECF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SliderHandler.h"; path = "../../Source/ComponentEditor/components/jucer_SliderHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		BDDD7A81586798621C6EF327 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BE0926F2599AC33A59DF23E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		BE4A96EF54B366C811255141 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
-		BE6E4546B1A6458DEA0C7FD4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BE876A77E905E3C0D9B66450 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BED52FDD3843979E898DA4CE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; };
-		BF09E9E179BA0B07203DC9FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; };
-		BF1B82B8DD7429ECA96AD4C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BF24E0D37EAD41130FE149A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; };
-		BF3CEF080FA013E2778DCE90 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Project.h"; path = "../../Source/Project/jucer_Project.h"; sourceTree = "SOURCE_ROOT"; };
-		C017261AE701010986A93D34 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; };
-		C07856C24F305E7D50660F67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; };
-		C094F3B6A65A79A6DF87C9C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementGroup.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementGroup.h"; sourceTree = "SOURCE_ROOT"; };
-		C159CA71B03DCB9D7BC31A4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; };
-		C18696515B6681B033F06D44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C187718F7B9EBA88584B43F3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintRoutine.cpp"; path = "../../Source/ComponentEditor/jucer_PaintRoutine.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C21AD85C35257A4B9A74D522 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; };
-		C2EEEB5E55C76817AC291BF0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; };
-		C43808AF23AC4F25CB26733D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C4B158D37FF6B3125BEED598 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; };
-		C5424781C756A8FF3D66670D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C68D8C25B8BD332BA1DFB32E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LiveConstantEditor.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C695512ADA3E687DD1E55C0E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../JuceLibraryCode/modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; };
-		C6ED030DED8F5A53636C4EBB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C7608A3967D9AB9481848F2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_DocumentEditorComponent.cpp"; path = "../../Source/Application/jucer_DocumentEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C7790615097597DFBFBFADC8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; };
-		C7B2FE883FA1401854BEDE8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; };
-		C7B47372A9D5970E3D9A5400 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GroupInformationComponent.h"; path = "../../Source/Project/jucer_GroupInformationComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		C7B6983AD1896535B9B98F40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C7D4CFEA33205B2D33955B9E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C81BC495F7C4B665C8856AA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C82094E39B4C9B4DE35A7EB4 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
-		C85BCA043B9CB378FA6876B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C89684A359852FD2B16D705A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; };
-		C8A160E05C7F8F5CF534AC03 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; };
-		C8A229ACD244F402C57286CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_MSVC.h"; path = "../../Source/Project Saving/jucer_ProjectExport_MSVC.h"; sourceTree = "SOURCE_ROOT"; };
-		C8DED829D0662D34D09A0C5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadLocalValue.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_ThreadLocalValue.h"; sourceTree = "SOURCE_ROOT"; };
-		C9441D8978D4B1F14F270228 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		C9616830BB2474066AC8C910 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ResourceFile.h"; path = "../../Source/Project Saving/jucer_ResourceFile.h"; sourceTree = "SOURCE_ROOT"; };
-		C9CA4A5BF4D2A1109432BA49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; };
-		CAC9FBFB722FE3DA7CE3BE12 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; };
-		CB19A2F9C480B0739BC1D9F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; };
-		CB37D7E91B0DA0927BA435F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; };
-		CB5760497CA6F044DA18D3A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; };
-		CCE50A531D751FD10817A9E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConnectedChildProcess.h"; path = "../../../JuceLibraryCode/modules/juce_events/interprocess/juce_ConnectedChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
-		CD0146FF182F74D52D481EB7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; };
-		CD9FC835C7A1DE440792F5B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		CE08955E457642C4D6DFBA30 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
-		CE4A609A9FB2403D506B3068 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; };
-		CF21D9DB3AEC0A4DCAB36A99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Icons.cpp"; path = "../../Source/Utility/jucer_Icons.cpp"; sourceTree = "SOURCE_ROOT"; };
-		CF4BDE076A0E86E887C842BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; };
-		CF4C51480A8E95AC5F107FF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; };
-		CF6C8BD0DA3D8CD4E99EBADA = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
-		CF736AF0DD24273D1F1FF37A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; };
-		CF7F48D267805732933DF82C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; };
-		CF8011B3C67B609032974DA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewCppFileTemplate.cpp"; path = "../../Source/BinaryData/jucer_NewCppFileTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
-		CFBF253B95F793D399C7C7BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; };
-		D00F311BFC3C2625C457CB9B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
-		D03B334EFDF780C2C0FE33B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D052CBF83BDE89CDEDD3CA53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D0B6A9AF3EC42C025B11894D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D0EB880DBD68B9C44734E26F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D10D51A0A2D63F38B4D86A60 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ResourceFile.cpp"; path = "../../Source/Project Saving/jucer_ResourceFile.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D1A54DEEAD15A98719002174 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; };
-		D1B7039DE915ECD72000679E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D1F9B0E9F5D54FE48BEB46EA = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
-		D27D257731AF8F925F652C8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D2A888E0C5D10BE75BD69E46 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D374DC78AAC02504576AA9B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GroupComponentHandler.h"; path = "../../Source/ComponentEditor/components/jucer_GroupComponentHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		D3C9856B677A34F8C60469F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D3E139185095C486DD3D61F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TranslationTool.h"; path = "../../Source/Utility/jucer_TranslationTool.h"; sourceTree = "SOURCE_ROOT"; };
-		D409BCF0D1C42B2761F89C6F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LuaCodeTokeniser.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
-		D41524385F8D560212C9D798 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		D439FCBFE0FCAA2C67548362 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D526C38D581425949BA0E4AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FilePreviewComponent.h"; path = "../../Source/Application/jucer_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		D52AF2D2AB5FD27AD5DFF753 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../JuceLibraryCode/modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; };
-		D57E1008C51B8D4B9A70535F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; };
-		D58E5FDB639B07A0B6350657 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D6070A7CF3873DFD1B1A53A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; };
-		D61B5AB0906CF9228E8360BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D6520F83A0AD0B5BC024CB9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D673EFEA126BD37BE8DD8D78 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IPAddress.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/network/juce_IPAddress.cpp"; sourceTree = "SOURCE_ROOT"; };
-		D70400A648DD2EE1FB29ED0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; };
-		D7C052388BB7D6FAE4A15999 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; };
-		D7F64C0E6B3CBA49A9F0341C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; };
-		D8FA66DEA9117C2D0239B11B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; };
-		D902B5961F78F2A6DFBF4B7F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		D9F50E5D2A0644E9DF20B1BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IPAddress.h"; path = "../../../JuceLibraryCode/modules/juce_core/network/juce_IPAddress.h"; sourceTree = "SOURCE_ROOT"; };
-		DA52CB613FB5AEB736624AB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; };
-		DABFA41975B51A33C19FD7C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; };
-		DADCCD453FA0BCBE7E423FAA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; };
-		DAF84A553D264705FA6EB6FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TreeViewHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TreeViewHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		DB5C7AA110B217372A52159A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; };
-		DBC8F8E3236577FB623E1F69 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../JuceLibraryCode/modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; };
-		DBE0CDE1B017190ABBFF557C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_CodeBlocks.h"; path = "../../Source/Project Saving/jucer_ProjectExport_CodeBlocks.h"; sourceTree = "SOURCE_ROOT"; };
-		DD5E98AA79A9883B74F5D38A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		DD737A82676BCF9CD2F2B367 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; };
-		DD95F4D24DEADB6030D5959E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		DF45CF7F287FC822F45A5AA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; };
-		E0F9CA57E44F7F7E7E217E47 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentUndoableAction.h"; path = "../../Source/ComponentEditor/components/jucer_ComponentUndoableAction.h"; sourceTree = "SOURCE_ROOT"; };
-		E4BB22E27C5AA4B666F265BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TextButtonHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TextButtonHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		E5D6C36496F5BC84D7213BE8 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
-		E60E28D1B7491047DEA236AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectContentComponent.h"; path = "../../Source/Project/jucer_ProjectContentComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		E65A820D34BF39478B7C5925 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DocumentEditorComponent.h"; path = "../../Source/Application/jucer_DocumentEditorComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		E96597BBC6A98255B51B94DC = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
-		25F52316D256B4534BED16D1 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Introjucer.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
-		D0D8B580D0689FFF4B9B823B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_StrokeType.h"; path = "../../Source/ComponentEditor/paintelements/jucer_StrokeType.h"; sourceTree = "SOURCE_ROOT"; };
-		D4444EC6342A2A7BC4F7BC46 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentTextProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_ComponentTextProperty.h"; sourceTree = "SOURCE_ROOT"; };
-		D87FC8F6834E9DC9C8E88B94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JustificationProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_JustificationProperty.h"; sourceTree = "SOURCE_ROOT"; };
-		D92A6E9404A30EED32DCE4ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_RelativePositionedRectangle.h"; path = "../../Source/ComponentEditor/ui/jucer_RelativePositionedRectangle.h"; sourceTree = "SOURCE_ROOT"; };
-		D96D764ABA74D392B9F7C30E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; };
-		DA345D5B9DABD049F90DC96F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GeneratedCode.h"; path = "../../Source/ComponentEditor/jucer_GeneratedCode.h"; sourceTree = "SOURCE_ROOT"; };
-		DC922C6A65D260C18E888E49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentTemplate.cpp"; path = "../../Source/BinaryData/jucer_ComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
-		DD36B6A35D7350B32D2BF727 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; };
-		DDA9B189B27A9FA240CC04EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; };
-		DDDAD9BCDC99DBAE63B106DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; };
-		DDDCB9E999C4FF41EE6859DA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		DDF2C578191FFE07300541E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; };
-		DEDF05B176E4165376AC6D4F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../../JuceLibraryCode/modules/juce_events/native/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; };
-		DF12EEE63E6D19610B89CA22 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; };
-		DF1E044516CA91C20B31FB6F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../JuceLibraryCode/modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; };
-		DF725A596B7BCD7520CC0A9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ResourceEditorPanel.cpp"; path = "../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp"; sourceTree = "SOURCE_ROOT"; };
-		DF8FBA0269590E5FAC7FE213 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E0366FD0E45684229CBF9775 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; };
-		E0E99D3CFACF9CB9B503EDD8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; };
-		E1139B64E290711F9DE2DCDE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E1D39D158E760B202DBEDA81 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		E224B3D37F624F7AE682E499 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E2374E15D65425C4101237E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewComponentTemplate.h"; path = "../../Source/BinaryData/jucer_NewComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; };
-		E24325B47AEC8B77DDC456F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; };
-		E2E00F66C14EEAE78119C0C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../JuceLibraryCode/modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; };
-		E3051371FE51A993DBFC9338 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
-		E32210D5760697609D084C93 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; };
-		E39C4DD3100879AC614060C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../JuceLibraryCode/modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; };
-		E39CCC282936B2F3062E9143 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../JuceLibraryCode/modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; };
-		E3E08397D63E4E96CECB2569 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; };
-		E4389603AF8A3143883BFCE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; };
-		E44D93C93617D6314424CB46 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../JuceLibraryCode/modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; };
-		E5030E4FB09EEFDEC6E17F33 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; };
-		E509DD48975A90978E116EBD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; };
-		E5C0F0324C408196C1E3AB24 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E626D36E7158BA472EF89AD5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; };
-		E6697A0594C3625F9025FD3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_freetype_Fonts.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_freetype_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E69046467FD9DC88B664447B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; };
-		E691B76C2F16D0E4A2BFABC2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E6C8D5E6CB5649F8181F3663 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E70CA21960A64CCB835725FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjectType.cpp"; path = "../../Source/Project/jucer_ProjectType.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E76DA0073983CF90CCE4096B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E791EF4AE50CCD190A8BC5D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedComponentImage.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_CachedComponentImage.h"; sourceTree = "SOURCE_ROOT"; };
-		E794F8DCA1BD195F1D0BC64B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E83203CFAA037EF461E3ACBD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; };
-		E85876BF1128CB4E29D7CB64 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; };
-		EA362B80219C97D85ED267A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; };
-		EA48567DDE6E64CF4DB9B23A = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../JuceLibraryCode/modules/juce_events/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
-		EA5EA4BEAC60FE65FC18B26E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; };
-		EA8D7BB28F79E1545758D636 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		EAA4FD2E9CB12F1B946D2A62 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; };
-		EB1F11E213640441C36CDD21 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		EB71BA07D6F667E69721E577 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GradientPointComponent.h"; path = "../../Source/ComponentEditor/paintelements/jucer_GradientPointComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		EBB34E4A7C7DE86F68EE7A7E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		EC1A0BD441203369A933D00C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; };
-		EC2E7A527518F2A8F8DEC27C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../JuceLibraryCode/modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; };
-		EC736CD3AAE2E052E7D95076 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../JuceLibraryCode/modules/juce_events/messages/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; };
-		EE34B44EC8BF50DF2A1EADA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; };
-		EE690110171E1648FF2118B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Application.h"; path = "../../Source/Application/jucer_Application.h"; sourceTree = "SOURCE_ROOT"; };
-		EEA69803BC87FC7DF32A9816 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; };
-		EEF2B5CF27493A0E5432F495 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; };
-		EF24C96CD12FC8589756DEF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		EF30A74B566A461A171BBF83 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentLayoutEditor.cpp"; path = "../../Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
-		EFA8CF715611D845AB284500 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerComponentHandler.h"; path = "../../Source/ComponentEditor/components/jucer_JucerComponentHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		F004FD803D0EDAAB81667345 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F03E2BDD36E6F4F53AB767A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Headers.h"; path = "../../Source/jucer_Headers.h"; sourceTree = "SOURCE_ROOT"; };
-		F0781CFA5B984F75F7F56443 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; };
-		F0793C460694102BA8D6D293 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F0A49FF985A114AC31ED8F87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../JuceLibraryCode/modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		F0D0CC4696419D4606EF5AE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; };
-		F1163B7856FDABA413A88D90 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewFileWizard.cpp"; path = "../../Source/Project/jucer_NewFileWizard.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F18AE75F1831D13FF53A8CCC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementRectangle.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementRectangle.h"; sourceTree = "SOURCE_ROOT"; };
-		F2A27DDB3055518A62BA7C25 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; };
-		F361B20780764ADD61B1B692 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; };
-		F3ABB8336986650F0B800F7B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; };
-		F3F4D8AEFD5290E8FDF0623E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; };
-		F4418E2C7AD718FE942DDF0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; };
-		F4A450ECDFAAFE68DA0FB6C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; };
-		F4C1A19AAC280B0A58F73FAD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; };
-		F4E3F9ED208CDD495BA720F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../JuceLibraryCode/modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; };
-		F54E3F6CA70967D469913C48 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F561D4822324D6D1650221FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F59077841FC17DD07060A2A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TextEditorHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TextEditorHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		F61D66D41025A0E4F9CDBE7A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F6AE2E230EF9FF9F3387394A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; };
-		F6BD39AD06B0E7E7C9D8B0CE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F6D3F208B6EE2A50CE1F0A18 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerCommandIDs.h"; path = "../../Source/ComponentEditor/ui/jucer_JucerCommandIDs.h"; sourceTree = "SOURCE_ROOT"; };
-		F71AF6D2DF3E652F8B51EBAB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjectExporter.cpp"; path = "../../Source/Project Saving/jucer_ProjectExporter.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F73142334238E8D5B5D3E3B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F74B09C0BC8F9038B7464F74 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F784E90F14BB554B2D97A4E7 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../JuceLibraryCode/modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
-		F797071D88542C813CF7222A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Module.cpp"; path = "../../Source/Project/jucer_Module.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F7A91434FEFBE9AC130CD814 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewProjectWizard.h"; path = "../../Source/Project/jucer_NewProjectWizard.h"; sourceTree = "SOURCE_ROOT"; };
-		F7CAB5BC15EE351949D3F2C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewInlineComponentTemplate.h"; path = "../../Source/BinaryData/jucer_NewInlineComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; };
-		F80B253C502FB1EB649082E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F9505DCCE2815E8238BB88B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		F98D95171F5605A4905E6516 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; };
-		F9B4B5E9595EC2CD47736BAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; };
-		F9CFCE9A63B208A180F2AC3A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; };
-		FA04E39EE7E83D445AF9E406 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FillType.h"; path = "../../Source/ComponentEditor/paintelements/jucer_FillType.h"; sourceTree = "SOURCE_ROOT"; };
-		FA72B8D84B97CAC1AD24DA22 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../JuceLibraryCode/modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; };
-		FA9E4210846A6425A2B54856 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../../JuceLibraryCode/modules/juce_graphics/colour/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; };
-		FB6BACB4F1E834A6934E4DC2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; };
-		FBBDD70D47163D341B2F0A8D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentOverlayComponent.h"; path = "../../Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.h"; sourceTree = "SOURCE_ROOT"; };
-		FBD5E2A21019AF2EAD45BAD1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-		FBDAD6DDA8200BF53FCB5734 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; };
-		FDF068E783DD784E3C2221C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; };
-		FE6AA1851DA877743D606FC0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; };
-		FEBB5ECA2C071F61AFD9A9D2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; };
-		FF11D6B512FDC5D887E06F66 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementImage.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementImage.h"; sourceTree = "SOURCE_ROOT"; };
-		FF1E5535A2AC41B9B355A1B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../JuceLibraryCode/modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; };
-		FF320FE35050A585E08FF993 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; };
-		FF94FF5C4BEC605E56149EFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LabelHandler.h"; path = "../../Source/ComponentEditor/components/jucer_LabelHandler.h"; sourceTree = "SOURCE_ROOT"; };
-		ACBAFA7D92DD82AD44ABE68A = {isa = PBXGroup; children = (
-					441CFEA771BAA50E187342E9,
-					223C4209F18A221EB183A056,
-					EE690110171E1648FF2118B8,
-					23A8DE16C0CDB8EED18B008B,
-					0400CB0E056A1D840304D2DE,
-					2EEB1C074162F363C6599282,
-					6E6140969908E7619F858740,
-					C7608A3967D9AB9481848F2B,
-					E65A820D34BF39478B7C5925,
-					D526C38D581425949BA0E4AC,
-					F03E2BDD36E6F4F53AB767A8,
-					8C52A3DDA62A746AA7A68535,
-					9069981E414A631B036CC9AC,
-					2CD34A70B4032C0426F7AA10,
-					2247EE920DF0610CAF9F4513,
-					563091B0916AD9AAA36C7DC5, ); name = Application; sourceTree = "<group>"; };
-		891F84627A03FA733F37A199 = {isa = PBXGroup; children = (
-					93D03B2BC76998A3BDA747E8,
-					8F8BF1A7130D858E0A239F9E,
-					7B4E33B1E04139F359FB484B,
-					9F75811FE7B5F8D1321BEC69,
-					C7B47372A9D5970E3D9A5400,
-					F797071D88542C813CF7222A,
-					7211101FFA28400ADBB1D47A,
-					AFEBD8423B07599B1DE175A3,
-					F1163B7856FDABA413A88D90,
-					5852830ECC222BA36A30EC20,
-					69A5D13490A62DAE9A7D5A22,
-					F7A91434FEFBE9AC130CD814,
-					BAC43B20E14A340CCF14119C,
-					BF3CEF080FA013E2778DCE90,
-					86E468DE6556BB2AD76A3D80,
-					E60E28D1B7491047DEA236AE,
-					375AFDF06A908D89DEC5205F,
-					47B49049B85EED74D29C9906,
-					4F6365A0D2D51337151D85C3,
-					E70CA21960A64CCB835725FF,
-					B8385E9A644BD3CD94876448, ); name = Project; sourceTree = "<group>"; };
-		E345840128627D533DF908AC = {isa = PBXGroup; children = (
-					6E7353DFEA8825B515049ABB,
-					DBE0CDE1B017190ABBFF557C,
-					05076CDF1511A5F8A8E18F1D,
-					C8A229ACD244F402C57286CD,
-					974B862C51DA9A16CBBB3A29,
-					F71AF6D2DF3E652F8B51EBAB,
-					35CB48D497F35BF3F6998F5D,
-					9C04F9680F82BF279D528688,
-					D10D51A0A2D63F38B4D86A60,
-					C9616830BB2474066AC8C910, ); name = "Project Saving"; sourceTree = "<group>"; };
-		D93DED1F5F1B0E49E10A6760 = {isa = PBXGroup; children = (
-					9B9CAD20E1243B4351B4C8D8,
-					914ADDB50ED7365F08BA91F9,
-					188D03A4247F4BC0539F5C49,
-					1729AEDC34001C31B8CC357C,
-					553725A0E3A391651ED1731E,
-					CF21D9DB3AEC0A4DCAB36A99,
-					515FF6E74826E3E3F7273621,
-					47DD50A5A9091F9900E0EAD9,
-					820291543BF93243B718F0EE,
-					0F249640243FBD5717F6ADD9,
-					4A41FD3066D0979DB48691E5,
-					1AF7EFBE4961C7B6C834BF54,
-					1F421199C40092BFEE0658C2,
-					631983AA62673015F8D7453B,
-					9BC8AE609A07657CEF587548,
-					D3E139185095C486DD3D61F2,
-					8090981F07A76E465DAAADF4, ); name = Utility; sourceTree = "<group>"; };
-		FC22321797D433148500EDDA = {isa = PBXGroup; children = (
-					2E680E2C65684A4272AE079A,
-					78CA0E0F336229E2E2F111B0, ); name = "Code Editor"; sourceTree = "<group>"; };
-		DA3DF56D3295CCD84DA4E882 = {isa = PBXGroup; children = (
-					0FF1C6905150EAAB1AE081A7,
-					008C8B2C2328CFBB9375397D,
-					B741170E45D74F30B7D5CDDF,
-					65C498761CE166072A202AA0,
-					5D9E7814B713670624F0028F,
-					E0F9CA57E44F7F7E7E217E47,
-					92F91DC29B64AD85B1F508BD,
-					D374DC78AAC02504576AA9B3,
-					1F9BBDFA52513AD34D906D2A,
-					4C2093BCD3528ACEDC7A2B33,
-					EFA8CF715611D845AB284500,
-					FF94FF5C4BEC605E56149EFC,
-					BCCFDFB2C02C4AA436C0ECF8,
-					400E4C67ABCDDB1D49EBB85E,
-					E4BB22E27C5AA4B666F265BD,
-					F59077841FC17DD07060A2A9,
-					084C0070BC67BC893B967EF1,
-					DAF84A553D264705FA6EB6FF,
-					A0951828C3BF47FA7E1E52F8, ); name = components; sourceTree = "<group>"; };
-		2BA1ACF18E7E078C7171B162 = {isa = PBXGroup; children = (
-					3E03B7C7A19E63A724EB79F4,
-					1FA92F8F2B26C6CEC8B1D737,
-					662C76394C5D1B56766FAFD9,
-					9C803826E5E3FDB1B37660D5, ); name = documents; sourceTree = "<group>"; };
-		B3DB7CF28491BD6FFAAC716A = {isa = PBXGroup; children = (
-					93B419190CCE92ACAB1ED25B,
-					B1963F0D8C0046E54FD9E023,
-					5091B14CC87C6238CF044258,
-					FA04E39EE7E83D445AF9E406,
-					EB71BA07D6F667E69721E577,
-					3F00C034B140193B3754969B,
-					1C216FE9B7A5209C5CCF2517,
-					786BAF436828865F45314440,
-					4E8FE9B1B8C90FC28D56523B,
-					C094F3B6A65A79A6DF87C9C2,
-					FF11D6B512FDC5D887E06F66,
-					0169ACAA0FAE70CCEEE4F650,
-					1D3D6A19A60F0B03DE2F1C14,
-					F18AE75F1831D13FF53A8CCC,
-					41CA95403E264AA7457A61F4,
-					9C51394634F102DEBBE6C9EB,
-					27A2B025813B7E54E0862642,
-					7A3E96D22F1C9EB4C739834F,
-					D0D8B580D0689FFF4B9B823B, ); name = paintelements; sourceTree = "<group>"; };
-		AECCE15B651C9EBBD07B925F = {isa = PBXGroup; children = (
-					B00F60201606F195058BB575,
-					04C1267B2BD11A6ECCCA654C,
-					6A337C69A928E3CE79C55457,
-					AA8EED79F095953D2B5923B8,
-					D4444EC6342A2A7BC4F7BC46,
-					295A9B126C98FE15F5A8B81E,
-					8138A55052E9FC27284B74DD,
-					D87FC8F6834E9DC9C8E88B94,
-					576D62C0C9C1BA4B7A514721, ); name = properties; sourceTree = "<group>"; };
-		4FDE8BC3A59AA207C6CE77F8 = {isa = PBXGroup; children = (
-					EF30A74B566A461A171BBF83,
-					263D9041F9B7D6A79DC38CD6,
-					3514E78B58A08F4C98F54C5A,
-					4E191CDCE7565DB726CF7065,
-					FBBDD70D47163D341B2F0A8D,
-					98F42686D9DAC974F2514217,
-					97E75A598791645465FEDCE1,
-					F6D3F208B6EE2A50CE1F0A18,
-					9C7FA58D223674C4C2AC6595,
-					1125D1B2AE54AEF2EB3D51C0,
-					B15E33E7342F6EB4F95C9B1D,
-					4E60769DE992CA7FC1A4A486,
-					16203C6791259C9718A04C3A,
-					B06C7C053DB0660CDA8B5C2C,
-					D92A6E9404A30EED32DCE4ED,
-					DF725A596B7BCD7520CC0A9F,
-					641B57E5FAE6BEFDB6462921,
-					3A5B5DC92BE6D22CA15B9671,
-					921752D9B004A15973DDF56F,
-					9F41F3338BF00D0FC74C6390, ); name = ui; sourceTree = "<group>"; };
-		825956EA572E23B506C8236F = {isa = PBXGroup; children = (
-					DA3DF56D3295CCD84DA4E882,
-					2BA1ACF18E7E078C7171B162,
-					B3DB7CF28491BD6FFAAC716A,
-					AECCE15B651C9EBBD07B925F,
-					4FDE8BC3A59AA207C6CE77F8,
-					9EF583A6201DBC813C2F63C4,
-					6AC88EFC247C225CC5C11A43,
-					133F1E428260C5ADDF496DF9,
-					3F9D4C7F6E5779D4E4AE655D,
-					78D0DBC4798FF040FDB90F6D,
-					DA345D5B9DABD049F90DC96F,
-					269A454F1FF081DA67FFD578,
-					8F30A53C7FE4BC65171FB3E2,
-					9D7689451732AF8333402B3A,
-					50498FF6EA3901CBD58223B3,
-					C187718F7B9EBA88584B43F3,
-					66B49F08C5EC3E4974825FF8,
-					5432B7B9B2CF2EAEC8B66D5C, ); name = ComponentEditor; sourceTree = "<group>"; };
-		88DFD62CB6545EE8CA5C485B = {isa = PBXGroup; children = (
-					5F4F4EAB042F2730F94A1CEA,
-					301592EBAC0FFF6F5B268E99,
-					41105E536155E394E54BDD35,
-					5F6584B675E30761521A9F42,
-					B483D960309FAFC193F9CDA2,
-					0075C5208947159AF2802F3B,
-					AFF72BA2B130F3F9AC029080,
-					65F4749184C84C2FDBB4C305,
-					03D3053EDE47FED1919C6674,
-					DC922C6A65D260C18E888E49,
-					963E0740B7B4D59EF2D16740,
-					9683B04CA3BD7F73E8236FE2,
-					35E6EE1E98DD7050DDFECD9B,
-					24C34D0578AE6C7A3EA18781,
-					18D9EBA1DAE45EEF81FD5C8F,
-					AE1BC6DCCFC1A18E2ACE23F1,
-					86E8A40E5A83781A8478454D,
-					61BE37E2B26C25056D9E8FE2,
-					E2374E15D65425C4101237E2,
-					CF8011B3C67B609032974DA5,
-					53151B683E11F420203E61C2,
-					F7CAB5BC15EE351949D3F2C3,
-					58139D8D454051C59E77609B, ); name = BinaryData; sourceTree = "<group>"; };
-		D3109994DA6AD871BE85C4E2 = {isa = PBXGroup; children = (
-					ACBAFA7D92DD82AD44ABE68A,
-					891F84627A03FA733F37A199,
-					E345840128627D533DF908AC,
-					D93DED1F5F1B0E49E10A6760,
-					FC22321797D433148500EDDA,
-					825956EA572E23B506C8236F,
-					88DFD62CB6545EE8CA5C485B, ); name = "The Introjucer"; sourceTree = "<group>"; };
-		ED7BB3F297250D7B43B2A536 = {isa = PBXGroup; children = (
-					E224B3D37F624F7AE682E499,
-					0A8D062EF44529B793CC5098,
-					923B69234C15988DFF1E8423,
-					6245DA2AC30B91552C12AD1F,
-					D70400A648DD2EE1FB29ED0A,
-					237496FB515C526B510BB0C3,
-					BF24E0D37EAD41130FE149A3,
-					2D6B77C09B5AF1BBD821D224,
-					D58E5FDB639B07A0B6350657,
-					056E44027E3F3AFAB32FBC44,
-					F0D0CC4696419D4606EF5AE6,
-					553F3388AADBF8B529B78824,
-					BED52FDD3843979E898DA4CE,
-					AF9453BB7F2479400D4A144B,
-					2A7B44B9D6C81585064098C3,
-					FA72B8D84B97CAC1AD24DA22,
-					E4389603AF8A3143883BFCE8,
-					BF1B82B8DD7429ECA96AD4C7,
-					529B0A44694A54ED99444A0F,
-					4DEBB89A00FBD2C11515FD07,
-					8C07D2E980420174DF513BEF,
-					AA4578A9110E724AB87DF869, ); name = text; sourceTree = "<group>"; };
-		F824830BD560E7906A8CD82B = {isa = PBXGroup; children = (
-					13E76507D88192A1B9554073,
-					16413B69F7D1E2862AFBE61F,
-					4653C504CADC3A365DCD59D0,
-					1958777C37415EC581CD4B74,
-					94E38DB823EBBA437181682F,
-					93C5BEADA1AB1CFF7B167D2F,
-					B2CEB1DE8F290AFCDE9585BB,
-					140ABB31EF22CAE40D874BB0, ); name = maths; sourceTree = "<group>"; };
-		01C121A5814A16A7CB907FB9 = {isa = PBXGroup; children = (
-					EC2E7A527518F2A8F8DEC27C,
-					257104EA81085B98E8AFCFB3,
-					439A60BB029251ED3752A69A,
-					7E1CE53CFD909089387910AF,
-					957D4AC1FE338B82C790FDF7,
-					EA5EA4BEAC60FE65FC18B26E,
-					6DB44C43D1260559163A47F0,
-					4DAF01670050184A3BAAA93B,
-					64EDFDAE0755DC1451F181B8,
-					C159CA71B03DCB9D7BC31A4E,
-					6AC5756EBCB78FD82C15B829,
-					4064AE577A11F735B2CE87F0,
-					28E9116333CAD9E8164008A9,
-					B68B2E4185C6FDCEEE0DBA79, ); name = memory; sourceTree = "<group>"; };
-		101599FA5E724FC0C78144B3 = {isa = PBXGroup; children = (
-					385426A4A6D3BFC4B2FD310C,
-					514B0E8E2796ACE7385F6717,
-					2C5E67AA30FCCE2E09C8CB6B,
-					F3ABB8336986650F0B800F7B,
-					D052CBF83BDE89CDEDD3CA53,
-					1F869D818F79BE6EEE2305FD,
-					849641B50DB4AE6CCA1C543F,
-					497E5C615BFF59384CB2284C,
-					0153A6801552D0B4C21BE911,
-					1FDBC89D596C6E959E7A8825,
-					231F4AC6660B650E08EF1E54,
-					FF1E5535A2AC41B9B355A1B6,
-					8EE709A982B89A4C752303BC,
-					61804EF1D5DC1451EBDAF6C5,
-					159A5AC2CAF01A7A17ECA0A0,
-					B93A82D11582820D193C9131,
-					3FDA82F89379E99C9E3B5C64,
-					E3051371FE51A993DBFC9338,
-					5B28BE68400342E97C084ACC,
-					1F04ABB8C6FA1598902FE33A, ); name = containers; sourceTree = "<group>"; };
-		815C2090B70E6EECD913C0CA = {isa = PBXGroup; children = (
-					96BD2AC4C892C245E04B8A93,
-					5909E278D645E1F91C0AE2BB,
-					84E06858791DF81E37B9A484,
-					1320D638B7BACCADEDA5ABD2,
-					3D577E9A14625124F5933387,
-					92B6276B30F89F742E78A265,
-					82976E18712BAE638A132F02,
-					689996FF463D52FEF125AFF3,
-					5C6893F610657B9383F9333F,
-					800206C482A2C7E62682C324,
-					D8FA66DEA9117C2D0239B11B,
-					34D4199F01C019ED54544C1E,
-					7861B7ACECC987D58C7D0309,
-					C07856C24F305E7D50660F67,
-					F561D4822324D6D1650221FA,
-					C7B2FE883FA1401854BEDE8F,
-					C8DED829D0662D34D09A0C5B,
-					6ED2213CA4E7E418E74A91E4,
-					1C94985541E125A49C70C07C,
-					54652695DEEBAB24E462DDD9,
-					5BDAE5FD683C0005A609495E,
-					95604CB3BD2C7745FD8FDB74, ); name = threads; sourceTree = "<group>"; };
-		D385600698057B290BC2AEF7 = {isa = PBXGroup; children = (
-					E85876BF1128CB4E29D7CB64,
-					756D2E74350285D4082EFD8E,
-					3A9ACE7B66413BF99882ECC6,
-					4B138A2FD1EF34BB254F7C7A,
-					BDDD7A81586798621C6EF327,
-					E39CCC282936B2F3062E9143, ); name = time; sourceTree = "<group>"; };
-		0B795464B0BFEE19C4F89F0F = {isa = PBXGroup; children = (
-					3ED948823F776108CD873C68,
-					9A7D5A94730758251DC8E4FD,
-					D96D764ABA74D392B9F7C30E,
-					1BE0A264A6AA494EF75B582B,
-					AC70D9D3E27592DD5D19B935,
-					3CF3F730EA232DA860D1B79D,
-					F80B253C502FB1EB649082E9,
-					DD36B6A35D7350B32D2BF727,
-					36E341F289B15DB1B7FA7528,
-					B90DA9BF88AD7AA018CD1F6B,
-					46515892E00E0D91D920B90C,
-					1848EB565B679F72C560EBAD,
-					9153965AAA76A86DFCAEE86E,
-					6C7A1929978639A482D5096D,
-					A6B4EF8DBA1476D85FE0E927,
-					4A19E61C47E844D661C34DDD,
-					F0781CFA5B984F75F7F56443, ); name = files; sourceTree = "<group>"; };
-		20F9DB293E2CC9F98F43758C = {isa = PBXGroup; children = (
-					D673EFEA126BD37BE8DD8D78,
-					D9F50E5D2A0644E9DF20B1BA,
-					8F14D66EAF9B6219C5D1C510,
-					E39C4DD3100879AC614060C2,
-					E83203CFAA037EF461E3ACBD,
-					F4E3F9ED208CDD495BA720F9,
-					4BF00AE19C332EF226420C57,
-					D52AF2D2AB5FD27AD5DFF753,
-					523B197F8A3BCA94C58C6DEF,
-					7C0528B4912955DA59C28356, ); name = network; sourceTree = "<group>"; };
-		06D5C2B5F1F4E37AF1C7A425 = {isa = PBXGroup; children = (
-					8216291F3E0D0926D64AD98C,
-					51DAFE574A52F68CC4A10274,
-					F6BD39AD06B0E7E7C9D8B0CE,
-					4301D29792107D6471F29FDF,
-					16C7EFDF9ED765D02DA12C55,
-					39D907284C634E6A9FC45E3E,
-					14BE817BFCB5B1CF2799C860,
-					2CF191F1A61F2C167FF2DADA,
-					9DBDA8C274E693DF449FF525,
-					6CA3455CFAA1A52891F55CEF,
-					4F5572380B51C24AE8D34450,
-					D1B7039DE915ECD72000679E,
-					68164EA5DFF5CE5AC2402670,
-					D0EB880DBD68B9C44734E26F,
-					DDA9B189B27A9FA240CC04EA, ); name = streams; sourceTree = "<group>"; };
-		CBF105D9162BB597EBC1B981 = {isa = PBXGroup; children = (
-					12875173A50B701B72E68F90,
-					4C80A175986D336D4E1044A7,
-					24319DEF365C8368FD3AA4EC,
-					DF1E044516CA91C20B31FB6F, ); name = logging; sourceTree = "<group>"; };
-		ABD92B739720D08778AF88F8 = {isa = PBXGroup; children = (
-					10AC5E5349AFAF11362E4199,
-					E2E00F66C14EEAE78119C0C6,
-					5EA02C28A509FAC9D2561AC5,
-					1DC3F7820AA6D950B2C6D628,
-					318467BF5A24F08E30FB78DF, ); name = system; sourceTree = "<group>"; };
-		F6C04F077B187FD605483DEB = {isa = PBXGroup; children = (
-					114845541FC5BE3453B6BD4C,
-					A2B4202B1078374D5D0A2FA0,
-					DABFA41975B51A33C19FD7C2,
-					800B30FB2437B98A1423838A, ); name = xml; sourceTree = "<group>"; };
-		E659B9C71FCEAA788CFEF8F0 = {isa = PBXGroup; children = (
-					3970C8444A2A081455299CE8,
-					72BB08B37FC311C133A01F95,
-					70C4E93E7132BEEDDABFDA10,
-					B4E428E2D02619F18757BBF5, ); name = javascript; sourceTree = "<group>"; };
-		59884479C6FFC940D3992EE6 = {isa = PBXGroup; children = (
-					37C65F13D7CF8A718D1569AE,
-					BE4A96EF54B366C811255141,
-					DF8FBA0269590E5FAC7FE213,
-					88332B74FC9B9BE2F60D7EAB,
-					E691B76C2F16D0E4A2BFABC2,
-					C695512ADA3E687DD1E55C0E, ); name = zip; sourceTree = "<group>"; };
-		248A3D6E995D23F2AFDBF78B = {isa = PBXGroup; children = (
-					93B474F28D09D858DE16E881,
-					4467B3824742815D1355DB81, ); name = "unit_tests"; sourceTree = "<group>"; };
-		A09D1A158BCD0A396549C1F3 = {isa = PBXGroup; children = (
-					084171D9475B3491A4EFAB5F,
-					81A3DED7F13085DF8C8190AB,
-					A7DD1B727D226AE589E87E4A,
-					333B1D00E46AF5A642C1DCDE,
-					34705FA6042CBE98AAF77B61, ); name = misc; sourceTree = "<group>"; };
-		43F993699B5DE3F1B3D3C905 = {isa = PBXGroup; children = (
-					61096C79B4C094699E9ED296,
-					F2A27DDB3055518A62BA7C25,
-					F9CFCE9A63B208A180F2AC3A,
-					C43808AF23AC4F25CB26733D,
-					40B9BA6D711F58DEB6E871BF,
-					94A8C75647A8777AC35F13FC,
-					CF4C51480A8E95AC5F107FF3,
-					6C867E1E3FEC31970950C620,
-					BC629A17FC45C9D48E2A383F,
-					7545BFF1C7C857A810B0483D,
-					B53BBDA475207303A77FAD40,
-					86EC32D1F0A4D7678B298631,
-					CAC9FBFB722FE3DA7CE3BE12,
-					63754DF4DA5063BF038C359B,
-					29FD4A27890434E137DBC3B9,
-					5659718DF6BD054B2B0A875C,
-					633CC0CEF05B3ADCEEE1325E,
-					E69046467FD9DC88B664447B,
-					BE6E4546B1A6458DEA0C7FD4,
-					61538AD86AB82CE59EF6C68D,
-					DF12EEE63E6D19610B89CA22,
-					63A4A00461C033BC464E4D34,
-					99623EB9527119388EEDC8E6,
-					40B4AB02D26ED520104B9363,
-					F0793C460694102BA8D6D293,
-					A3A4DC7DB79039626E4A311C, ); name = native; sourceTree = "<group>"; };
-		8BA5B0B5CBCE8D29F02D341A = {isa = PBXGroup; children = (
-					ED7BB3F297250D7B43B2A536,
-					F824830BD560E7906A8CD82B,
-					01C121A5814A16A7CB907FB9,
-					101599FA5E724FC0C78144B3,
-					815C2090B70E6EECD913C0CA,
-					D385600698057B290BC2AEF7,
-					0B795464B0BFEE19C4F89F0F,
-					20F9DB293E2CC9F98F43758C,
-					06D5C2B5F1F4E37AF1C7A425,
-					CBF105D9162BB597EBC1B981,
-					ABD92B739720D08778AF88F8,
-					F6C04F077B187FD605483DEB,
-					E659B9C71FCEAA788CFEF8F0,
-					59884479C6FFC940D3992EE6,
-					248A3D6E995D23F2AFDBF78B,
-					A09D1A158BCD0A396549C1F3,
-					43F993699B5DE3F1B3D3C905,
-					00E86D533C0149A56F21D804,
-					90B9A4673FDC35841E5D4562, ); name = "juce_core"; sourceTree = "<group>"; };
-		E45B4DA7B49FC8D397F1EA56 = {isa = PBXGroup; children = (
-					22B29C61E4EB0C2FC4E54378,
-					1F86FB8B8336D44337AE7119,
-					A73C997FBB6C26B632CBAE15,
-					0329C05B4EE23CBB5578BF02,
-					20D0FBDE77A58A302859A206,
-					E32210D5760697609D084C93, ); name = encryption; sourceTree = "<group>"; };
-		1EB4CE7119697D9CCE604271 = {isa = PBXGroup; children = (
-					9C1D8A8FAA2439A8EA2DD800,
-					665EDD760E47A6AD1A1DBC2D,
-					24D73A13CD0F89E299E11B0E,
-					482C35BB3B7DDE1B452C8455, ); name = hashing; sourceTree = "<group>"; };
-		E58F94F6CDB786C1ED488C9C = {isa = PBXGroup; children = (
-					E45B4DA7B49FC8D397F1EA56,
-					1EB4CE7119697D9CCE604271,
-					2C9ED03E1C345D9A81BEB361,
-					B271F77C266131705FF6F92B, ); name = "juce_cryptography"; sourceTree = "<group>"; };
-		2A8293EA2395BFFCA229F799 = {isa = PBXGroup; children = (
-					DBC8F8E3236577FB623E1F69,
-					AF51A8DC8E67D8EB660AD6D0,
-					FE6AA1851DA877743D606FC0,
-					945A4B296E9562BEFF95884A, ); name = values; sourceTree = "<group>"; };
-		8E7A1020B8096653D203C38A = {isa = PBXGroup; children = (
-					199E3F67A1E48F7D95AC6E1E,
-					1602D140D6F478765ACEA660,
-					C9CA4A5BF4D2A1109432BA49, ); name = undomanager; sourceTree = "<group>"; };
-		BD9E9E80DDC81539B00DCAB6 = {isa = PBXGroup; children = (
-					5CE5E5132CEFADC6D48ECB08,
-					12ABAFDD4C4BCA2B8313F1CE,
-					79DF7512BC6437E5E29E3CFB,
-					8887ADA2A339C0BD9AFF83DA, ); name = "app_properties"; sourceTree = "<group>"; };
-		6A6672A570C2C2418F926C82 = {isa = PBXGroup; children = (
-					2A8293EA2395BFFCA229F799,
-					8E7A1020B8096653D203C38A,
-					BD9E9E80DDC81539B00DCAB6,
-					2CB1AA089385D7399AC615CE,
-					4760F25A96CAB18E75573C0B, ); name = "juce_data_structures"; sourceTree = "<group>"; };
-		2287744248275B6237708450 = {isa = PBXGroup; children = (
-					DDDAD9BCDC99DBAE63B106DC,
-					9245B8936083D87061E4FE15,
-					72EC62B05E134F85761E642E,
-					43BFDF9214946C6B76CA666D,
-					69A1792C863C7957A80F6945,
-					EC736CD3AAE2E052E7D95076,
-					9DBE1CE382EE797178B3D35F,
-					AAC42C49D961A534FE64882E,
-					72A66FD9571871FFB455F8B5,
-					C7B6983AD1896535B9B98F40,
-					9899685BD109C2475BA4F8A1,
-					043FC175E80305E3D95ECAF8, ); name = messages; sourceTree = "<group>"; };
-		83DEE68BC6A9B685C3E75FEA = {isa = PBXGroup; children = (
-					4CC9356FA92F5C94E4DC65D9,
-					5797A65A441D030729C6E886,
-					ABD9D1389B5591B2303990F9,
-					4EBA5CEE07FB8B2DAA9A0315, ); name = timers; sourceTree = "<group>"; };
-		DCBE58B4AFE058653EBBBAAE = {isa = PBXGroup; children = (
-					BA3CF913C966148DF5059C9F,
-					C8A160E05C7F8F5CF534AC03,
-					2AB28295C237EC79481F5F9D,
-					5CD44EFDD7BA487CDF41760A,
-					D1A54DEEAD15A98719002174,
-					37AD2C828C069B17DB0C70EE,
-					BF09E9E179BA0B07203DC9FE,
-					FB6BACB4F1E834A6934E4DC2,
-					26B7487E9A0CB5C6CA5ACE58, ); name = broadcasters; sourceTree = "<group>"; };
-		084F5B9CA3F5822A7D9156AF = {isa = PBXGroup; children = (
-					85B48563B4437E1E27ACABAD,
-					CCE50A531D751FD10817A9E7,
-					963891BF1C9BC566FCF433B7,
-					C21AD85C35257A4B9A74D522,
-					D2A888E0C5D10BE75BD69E46,
-					1233E258E4C1FD4AAA7A6D1A, ); name = interprocess; sourceTree = "<group>"; };
-		334607E7051C2D75E0AC85F6 = {isa = PBXGroup; children = (
-					66448E472FD5BB3D34B1509B,
-					9E6BAEF28A55F7F349A15DDC,
-					33E0A6C9F0AE53BEC8778775,
-					E44D93C93617D6314424CB46,
-					B420AC0E3CF485CCFFE5C625,
-					B5F94A37629F841C6C2B4CA7,
-					DEDF05B176E4165376AC6D4F,
-					530ADBF1045867FE90EB8F1F, ); name = native; sourceTree = "<group>"; };
-		DE7F542DC0967F8EDCC4DCD0 = {isa = PBXGroup; children = (
-					2287744248275B6237708450,
-					83DEE68BC6A9B685C3E75FEA,
-					DCBE58B4AFE058653EBBBAAE,
-					084F5B9CA3F5822A7D9156AF,
-					334607E7051C2D75E0AC85F6,
-					EA48567DDE6E64CF4DB9B23A,
-					2101B4CC3E5BDC7BD806678B, ); name = "juce_events"; sourceTree = "<group>"; };
-		C3FB0CB81D460B4263689CAF = {isa = PBXGroup; children = (
-					2FD9D5944388186AAA32FEE2,
-					95BAFFF3DDCB31F1E4F5F807,
-					E5C0F0324C408196C1E3AB24,
-					9B3076A1D57D614DB7B4657E,
-					880D1F031B50F965A56B7240,
-					00CBA904DE3B8686A6F569CD,
-					45AE1D139D938D43891501E1,
-					FA9E4210846A6425A2B54856,
-					1908920B3166E7B7A7A095BC, ); name = colour; sourceTree = "<group>"; };
-		F417C2CB1A694D2C1A892F63 = {isa = PBXGroup; children = (
-					BAC2D13A5ED7622DD43BF752,
-					F98D95171F5605A4905E6516,
-					F3F4D8AEFD5290E8FDF0623E,
-					28A5DF3CEA69B587C9CA7C4A,
-					B43D35488A61101480983DA3,
-					5823F1EE0F39AE16B560665A,
-					B7D930DDBE81040985D1B48C, ); name = contexts; sourceTree = "<group>"; };
-		DECB572AE46DB4A77186D494 = {isa = PBXGroup; children = (
-					CF7F48D267805732933DF82C,
-					4C2394A14C140490F5F4E9BD,
-					A039067FA15840674DB4CA0B,
-					8F355E9A0D4E3B4DF00E7BA9,
-					5A11499F36DB882429253BA5,
-					3FB2A9225024422947E6E654,
-					A8C8924ADBF29D01FDFD62BE,
-					43E13FBEEA6CF191A0D501E5, ); name = images; sourceTree = "<group>"; };
-		F3174EF36ADC4DC23BB304F2 = {isa = PBXGroup; children = (
-					CE08955E457642C4D6DFBA30,
-					A350F5C1C50024670090021B,
-					7038159E5F04B3C75B6A7655, ); name = "image_formats"; sourceTree = "<group>"; };
-		EEE23FCA48A7F9A0152A68EE = {isa = PBXGroup; children = (
-					FDF068E783DD784E3C2221C5,
-					CFBF253B95F793D399C7C7BE,
-					4DFDC4E1F50427FBAF0B8F81,
-					F73142334238E8D5B5D3E3B1,
-					F4418E2C7AD718FE942DDF0A,
-					647EBD8D1EAD21592951DD9B,
-					C6ED030DED8F5A53636C4EBB,
-					E0366FD0E45684229CBF9775,
-					865F57EEFDD6F194FCE3FD8F,
-					06BB2D547BF07A31E8D46977,
-					FBDAD6DDA8200BF53FCB5734,
-					73425A7FACB8FEE3D7A7C567,
-					87C711AFE0DEEC1FA8AD9465,
-					28C9E13B1A70FDC728770C6E,
-					EA362B80219C97D85ED267A9,
-					2D9E9803A9DF82BBA42294E9, ); name = geometry; sourceTree = "<group>"; };
-		14995D34FE0826A52FA5262D = {isa = PBXGroup; children = (
-					BC975A241710644E779FAB84,
-					241A48F1D188BF19314065C2,
-					27F7865BD6FE03B970B8DBFB,
-					513AF2A4DB37CC6F47E6CEF0, ); name = placement; sourceTree = "<group>"; };
-		59C2687AA614A77DA150AFAB = {isa = PBXGroup; children = (
-					7577BF4DE64CD865088A612E,
-					5F99D905AAF0C3F89CEAD965,
-					51D9906830CE2006B74DBFCC,
-					5F4AF4400A9511B74E2425EE,
-					760A535A2680C8B3C44B59C5,
-					D7F64C0E6B3CBA49A9F0341C,
-					0FD7364EC64E25AE854E9A9D,
-					E5030E4FB09EEFDEC6E17F33,
-					801143A09B8A467EA47EBA27,
-					95CBFF7351F89C117E30292A,
-					785740092163D40EE36BDA5B,
-					419A5389244CCE7390877F1D, ); name = fonts; sourceTree = "<group>"; };
-		8EB51FAF42AAEC7AC357396B = {isa = PBXGroup; children = (
-					519269C6218CA35F731ECA61,
-					46392AD7FE5D6BFED1BE827C,
-					D6520F83A0AD0B5BC024CB9F,
-					C4B158D37FF6B3125BEED598,
-					136A3229F6535E2FBB9993E2, ); name = effects; sourceTree = "<group>"; };
-		6CA37BA48005B8EF0478B69E = {isa = PBXGroup; children = (
-					C18696515B6681B033F06D44,
-					76E2E826701240CDD4DEDA57,
-					E6697A0594C3625F9025FD3B,
-					9B4AAEAD95B93FA8F2348E27,
-					7BD4BCAA20B1ACED28EBBFD9,
-					EEF2B5CF27493A0E5432F495,
-					6350DFE5844B6CB31FB54A80,
-					5D33FED578ADEEBAA8A4CFED,
-					479E55D2A68FC2E14FF2E39A,
-					09BB016660D64FDCD2A9866F,
-					95220AF02A9BEC790D84413E,
-					21822729E1EF7CC3D3528BFE,
-					DA52CB613FB5AEB736624AB1, ); name = native; sourceTree = "<group>"; };
-		E9819C83D0B797FC71811B1B = {isa = PBXGroup; children = (
-					C3FB0CB81D460B4263689CAF,
-					F417C2CB1A694D2C1A892F63,
-					DECB572AE46DB4A77186D494,
-					F3174EF36ADC4DC23BB304F2,
-					EEE23FCA48A7F9A0152A68EE,
-					14995D34FE0826A52FA5262D,
-					59C2687AA614A77DA150AFAB,
-					8EB51FAF42AAEC7AC357396B,
-					6CA37BA48005B8EF0478B69E,
-					F784E90F14BB554B2D97A4E7,
-					DD737A82676BCF9CD2F2B367, ); name = "juce_graphics"; sourceTree = "<group>"; };
-		2CEAE8B236FEF5E06317EF3B = {isa = PBXGroup; children = (
-					E791EF4AE50CCD190A8BC5D0,
-					46F449C23355573E967D351F,
-					E24325B47AEC8B77DDC456F6,
-					A6D3D648059361F5836DE280,
-					D57E1008C51B8D4B9A70535F,
-					3706C20941A79E5A8DE08DE4,
-					149020249A77110311411E15,
-					987490B430B80B4FA2792176,
-					F4A450ECDFAAFE68DA0FB6C6, ); name = components; sourceTree = "<group>"; };
-		CD1AFCF4DFA46BA5BACBB1CB = {isa = PBXGroup; children = (
-					9CADF9A1F79D9D1ECC7147E9,
-					F6AE2E230EF9FF9F3387394A,
-					76EF37EBCCA75161A3561F9D,
-					48ADBB0A2A258CF72F04891A,
-					174CE62B43D97B83AF1D3338,
-					6737B22BED56A0544E39FD15,
-					D41524385F8D560212C9D798,
-					EEA69803BC87FC7DF32A9816,
-					68077882A46E2C4E398E4C99,
-					984CCFC22599870F2BC0611E,
-					B1DF858F499D12D442679683,
-					79366BF7CA160E7EFC7823C4,
-					599957E884512B8314720BBD,
-					82C7BF9F5E863E647438A8AA,
-					4F129F3B2CD7B03E97C2F168,
-					9EFCD465B3A75D9E2556DA0E,
-					61A6870CF7A0DE01A70799B0,
-					88E1573706105D51541F4CA5,
-					17173DDA0532B81C71D95B05,
-					B9F917BA04B3A715B7E49128, ); name = mouse; sourceTree = "<group>"; };
-		A186EF5D092D513F30A4FE23 = {isa = PBXGroup; children = (
-					7D6B19FB1AAA04D27716457B,
-					6059BA2EC2D80F1A58D047A2,
-					91A9050F591F2E03EA96203A,
-					104463B9110789FCDA7BD4FB,
-					CB5760497CA6F044DA18D3A1,
-					09F93EBC7C2C877F3446A0C7,
-					2FF61C42E37986022C189531,
-					CB37D7E91B0DA0927BA435F4,
-					1B4284167C1A10170537305A,
-					0FB3551C6845EF0E9312F850,
-					AFFC3BBF8BBC82DD09B25EEE,
-					69F318BBA51FA30B777135B8,
-					4BD96E9231831D77755CC803, ); name = keyboard; sourceTree = "<group>"; };
-		617C7A87C00C7357D6B4CA43 = {isa = PBXGroup; children = (
-					F74B09C0BC8F9038B7464F74,
-					3EFC8EEA0D7714261BB90A41,
-					E6C8D5E6CB5649F8181F3663,
-					DD95F4D24DEADB6030D5959E,
-					A9208187F15083F4FC55E0E8,
-					DF45CF7F287FC822F45A5AA9,
-					A3632F10CD01DB5263F628F0,
-					EC1A0BD441203369A933D00C,
-					CF4BDE076A0E86E887C842BD,
-					5EAA527023FD40745056F13B,
-					CE4A609A9FB2403D506B3068,
-					EAA4FD2E9CB12F1B946D2A62,
-					55A56A4C2EC5DECEC307EC37,
-					6E2B6FE06BE3735AA969B526,
-					2D035221BF4D4B8C56FA3653,
-					B292B170AC30407623358E6F,
-					A42E6A76BCFC6504676EBE8B,
-					85B2B84227B39C31FE9D790A,
-					C85BCA043B9CB378FA6876B5,
-					659B75A15D70B8FE57D1A1BE,
-					FBD5E2A21019AF2EAD45BAD1,
-					9559DA09C937A41B88227D80,
-					DADCCD453FA0BCBE7E423FAA,
-					61F8ED9B6C0D09E2665531D3,
-					61151BEBE0F7E79DFA313076,
-					700138BDDB27754A06B56C87,
-					B388675858A6323C1A1F7BFE, ); name = widgets; sourceTree = "<group>"; };
-		FDA3E07A3631D25DFEA73850 = {isa = PBXGroup; children = (
-					502A6F378DA7D0BED1380D86,
-					0CF3C0EC356169F25B0BAA9D,
-					BA61CF61BDB1194FF4A85DA7,
-					2A631496A56813D0EB2D0E5E,
-					7AEAEEF9959046D9827CCB56,
-					00F860FEF209ABF0E800FA09,
-					E1139B64E290711F9DE2DCDE,
-					5D77828FECF00CF108E16599,
-					867952C0062DAA52FE4345B1,
-					7D33879BE42FD18DA0E7833E,
-					6AC17B5D88D0ADBF77420048,
-					C81BC495F7C4B665C8856AA9,
-					D7C052388BB7D6FAE4A15999,
-					6E1D22B93CCB47AB339085E1,
-					C017261AE701010986A93D34,
-					84EB1282EE3C5F3A1DF70A54,
-					5BE9E1B6197D01AB97288253,
-					5B45BF234C7184BE28C59741,
-					81704510C0CA45994B69AF05, ); name = windows; sourceTree = "<group>"; };
-		1183520311BFD05477F94ECA = {isa = PBXGroup; children = (
-					04A2C05B7935B8D335B5FD39,
-					94232610F41512C7040EDA38,
-					2E183952277F99D860EEB3F3,
-					E3E08397D63E4E96CECB2569,
-					64520235EF5529F8C0E4A9A7,
-					83C7547CCAFCBB88F791FED8, ); name = menus; sourceTree = "<group>"; };
-		3644BF38DFC789105B7D80FB = {isa = PBXGroup; children = (
-					5603954CFF21E81C86CCA1CB,
-					2C0D1EB0AE7676CE3458764C,
-					A191412DDC58FCC5A67373FD,
-					3A3CD53AEB64CF57B6CADB59,
-					A9888AA5368432DCA5F64910,
-					6FB8B11C25BB74994A407113,
-					32184C99C6A9A997E6534029,
-					BCB8D7D4B1AFA15D3ACEFCEA,
-					7BB3AB4907661D6FED799B7C,
-					65E82ADF9AEE696576F43E92,
-					43ACFC660A375B2DEDFE2274,
-					10F328BCD86EF125C5DDA33D,
-					727511F6927A7B2602A6C689,
-					EA8D7BB28F79E1545758D636,
-					D3C9856B677A34F8C60469F2,
-					5C454FECFF7234355CEA17D4,
-					8B5073191880BFFDF8B3BE6E,
-					BE0926F2599AC33A59DF23E1,
-					0ACD709DE0EBA4A3D73325FD,
-					75087C822B7871FA849D2909,
-					7E47A29DD9817618F48068FF,
-					4C8154CEB5C33EFB9E5CB8DC,
-					0A6652042F8E043F43239E75,
-					16E61715753895412F61F93B,
-					66B4C39694799AC85ADDBECC,
-					9091730D608EEEA35977BC1D,
-					987C3D5A7CC55FB19AD24294,
-					E0E99D3CFACF9CB9B503EDD8,
-					5C96DDE9CD90B82EA3CD6ED8,
-					9EDDEEBCF410FDF5B96FAD65,
-					BAB603B7CA702368B2513074,
-					0737A6A737019EFC6BC4CED0,
-					DDDCB9E999C4FF41EE6859DA,
-					C9441D8978D4B1F14F270228,
-					48F1E4DDD3B2B8E5CC410EE1,
-					5017AF048B9A8F840DA442A0, ); name = layout; sourceTree = "<group>"; };
-		58CA858FC033FD1F47ADA039 = {isa = PBXGroup; children = (
-					240283D05A8E1886987E07F2,
-					3B059A5FF36DA71C1433CA60,
-					33644BFBB02CBC8EFB61C5D2,
-					63717F00538E1367E2B9D812,
-					B83E41BC9767A790F2D04403,
-					FEBB5ECA2C071F61AFD9A9D2,
-					92E4C9A69A2DAD900D128A02,
-					A947623ED5EA00C6C3FD8EBE,
-					6C25EB12F6DB9F5225E75667,
-					5805FE3FCA0B3CD8E2851774,
-					8681C46D7B7D05BEEB56E44E,
-					700F6188EAA73DD57767694F,
-					B18059D88300EB8EF703A82B,
-					F4C1A19AAC280B0A58F73FAD,
-					22C0EC04F7C30AAE16E632A7,
-					5801B222830CA1E1006968BA,
-					2DE3560E8DB420766D385023,
-					B895CACE6FF447C83DC7ABF1, ); name = buttons; sourceTree = "<group>"; };
-		A3BF94AE00810C812E121816 = {isa = PBXGroup; children = (
-					405388248E6EF4212019AC65,
-					393E7A4E9BEC14AFC441E73F,
-					18AAAE2846B4512094CF9E64,
-					C7790615097597DFBFBFADC8,
-					4108E23948D43A46FB88B23E,
-					FF320FE35050A585E08FF993,
-					A2F1EA2989EF154ADBFDC4C3,
-					8531F4060FE4BEBEC2E8EF9F,
-					EE34B44EC8BF50DF2A1EADA6,
-					786095D2FAF63CBC05B170C6,
-					CF736AF0DD24273D1F1FF37A,
-					9F58502C5ADE97059BD8BFE3,
-					3AC808D92D13832338534F7F,
-					4AD7BBD9D7EA422981A8C536, ); name = positioning; sourceTree = "<group>"; };
-		69E5820210E99179A52F1A77 = {isa = PBXGroup; children = (
-					7BD8AE7287AB53880575A757,
-					B290C6821BDC0912A94A1127,
-					909FCA929A162A919ABF6575,
-					E626D36E7158BA472EF89AD5,
-					7E8730C293CF253B56930440,
-					84493A7AD6B0398B732461FB,
-					630428D04F157F7162C05D59,
-					5FDE1D586B6984E67E3B1E19,
-					7DBCC7A6E5B251DA94AB0EE0,
-					641338764B8C715715DA7351,
-					F004FD803D0EDAAB81667345,
-					F9B4B5E9595EC2CD47736BAC,
-					55B79C48660935077095DBFD,
-					5EE461C6611D3669B36F639D,
-					1FEE53F170737A23D412C425, ); name = drawables; sourceTree = "<group>"; };
-		B2243BBE276C148522C5987E = {isa = PBXGroup; children = (
-					486683F365BE1E8CEE34D4D3,
-					2249F79A9B7FFE48DACC14CF,
-					4CA96F577DD15FB5085518E9,
-					29C79CFD0760D5BEF0C11D4D,
-					BBBBDB341B49EA3277A24D8C,
-					09261261800229B6438A9A5B,
-					F54E3F6CA70967D469913C48,
-					B941446353FA94BCE78D001D,
-					0E06FB23B05CE46487F509C8,
-					2F9762C3866D161E38B4FD00,
-					D61B5AB0906CF9228E8360BF,
-					DD5E98AA79A9883B74F5D38A,
-					B54CB8DDB5000BDCBDECD8BA,
-					43B30439D7A63B0D2CF12AC9, ); name = properties; sourceTree = "<group>"; };
-		C2A68B1BEC638D0513BF25C1 = {isa = PBXGroup; children = (
-					CD0146FF182F74D52D481EB7,
-					12D78FB671BC817D433079B1,
-					498E9D7F6E7F61A84E0D7792,
-					2412E1E63124369CE418894D,
-					23D5A9D86894973926E3EFB8,
-					58FA9E2B67AED7330158A903,
-					0AE2B4F22C863455A366D251,
-					7BBA8AF8E7872672F190C1C7, ); name = lookandfeel; sourceTree = "<group>"; };
-		00C2E5EAA46FC2E94B735C42 = {isa = PBXGroup; children = (
-					AD828AEF8A826DCAD19095B7,
-					0FAD42641F0AAC0B7E906D18,
-					334E3DFFA297DD18AD57F40F,
-					C2EEEB5E55C76817AC291BF0,
-					0F9DBA4AB2BD63773528D805,
-					33B2073D379E18BC2919FA07,
-					27C16EA8D243AC7934DF11B1,
-					A3F5671F82CBAC136EEA4D26,
-					2875464712C12E9BFCCEE57D,
-					97227974323F8526EB062F78,
-					1270CC27AD4D0805DD4BA465,
-					9A154A0F904C15BF6E1253F5,
-					73D0EA57406DF9583EE8FB3B,
-					87B65D3DBFD7D35B15010226,
-					507C2DFBFDA8AB08F71ED82D,
-					EBB34E4A7C7DE86F68EE7A7E,
-					3131C94D973A735EA68C1C77,
-					4E2A191756179C6616D50B58,
-					A99E772786C0A210E4CDF0D4,
-					7F3AE35521DFE092953385B6,
-					F9505DCCE2815E8238BB88B7,
-					668D7FDE00212229DFCB2175,
-					2802BE05CAC2BE78EFD5A239,
-					36F06F123E9717834A627F8D,
-					39698748BDD86977C4474DE4,
-					44F454FF28C39CC641FF410B, ); name = filebrowser; sourceTree = "<group>"; };
-		952AFE51A503A04FFF4B0EF7 = {isa = PBXGroup; children = (
-					993AD03D61870459F867B2F5,
-					97C816B1B6B7FBC38DF10303,
-					95A64B8A811BB2D78C6F13B9,
-					60285932750263E48A18908C,
-					56ECDE6643205406C32D1CE8,
-					DB5C7AA110B217372A52159A,
-					4F052A9DD4EFD3C761C7EBA2,
-					E76DA0073983CF90CCE4096B,
-					914C0B02F52FA4C06116EDB1, ); name = commands; sourceTree = "<group>"; };
-		76F28FCB72DD5943D08F3342 = {isa = PBXGroup; children = (
-					2D6B797AC8B1B5E7C8E7D1E9,
-					CD9FC835C7A1DE440792F5B4,
-					92BE7C40FE77D34FFF39D9BB,
-					4F8DCA25AFAD089510C8B48B, ); name = misc; sourceTree = "<group>"; };
-		DD0FDFC530E403BD51C86315 = {isa = PBXGroup; children = (
-					A3AC7148A7357852CA7018AF,
-					323BA212B37224C61A9C1740,
-					814A077ED7A54254415C309C, ); name = application; sourceTree = "<group>"; };
-		8EAF68A83656BC02B4B7C9C9 = {isa = PBXGroup; children = (
-					529B9F1BADEE58EA9F4F8C09,
-					822A59FE23E0E962993EFF1C,
-					F361B20780764ADD61B1B692,
-					6F4A2CF770F9E789E695825E,
-					27E909E8C27DFBF0F184DCBD,
-					D0B6A9AF3EC42C025B11894D,
-					F61D66D41025A0E4F9CDBE7A,
-					5293C026D920F2E0E710447C,
-					08AF500230E8F8644B3682F5,
-					8E673D43C2CD68894A10B99D,
-					A36D9A1D559944BB4EAF2F5E,
-					921FBD47F9842396F1CB22ED,
-					101572E83E487C91969D671C,
-					C89684A359852FD2B16D705A,
-					0F4EFF11F984ED5E2A2045A1,
-					3832E22BBFD9A9A1E9EEED6F, ); name = native; sourceTree = "<group>"; };
-		2A27F41171A44038C2A1CB56 = {isa = PBXGroup; children = (
-					2CEAE8B236FEF5E06317EF3B,
-					CD1AFCF4DFA46BA5BACBB1CB,
-					A186EF5D092D513F30A4FE23,
-					617C7A87C00C7357D6B4CA43,
-					FDA3E07A3631D25DFEA73850,
-					1183520311BFD05477F94ECA,
-					3644BF38DFC789105B7D80FB,
-					58CA858FC033FD1F47ADA039,
-					A3BF94AE00810C812E121816,
-					69E5820210E99179A52F1A77,
-					B2243BBE276C148522C5987E,
-					C2A68B1BEC638D0513BF25C1,
-					00C2E5EAA46FC2E94B735C42,
-					952AFE51A503A04FFF4B0EF7,
-					76F28FCB72DD5943D08F3342,
-					DD0FDFC530E403BD51C86315,
-					8EAF68A83656BC02B4B7C9C9,
-					5B9EE26978797CC153F5E24F,
-					E509DD48975A90978E116EBD, ); name = "juce_gui_basics"; sourceTree = "<group>"; };
-		9DEFBE65118D0527555955A2 = {isa = PBXGroup; children = (
-					C7D4CFEA33205B2D33955B9E,
-					69BB2D7A2EDAB1C87EA1F688,
-					981A11A17B5DD50BC2A69F33,
-					EB1F11E213640441C36CDD21,
-					A9BAF0420FC4DC07011EA244,
-					67FF4A3F3E1CD9583EABE1F6,
-					8C48F6C90CB6D2CBB19511B3,
-					0E24C59E408559F9DF1DC31A,
-					421BFE95D4EE1C5D12BBB848,
-					D409BCF0D1C42B2761F89C6F,
-					3F9D0CEF873510CCD254A9C5,
-					28E80FBE60ED3FE73CCAB834, ); name = "code_editor"; sourceTree = "<group>"; };
-		1D09D8A2B803860D8927C366 = {isa = PBXGroup; children = (
-					D27D257731AF8F925F652C8F,
-					CB19A2F9C480B0739BC1D9F9, ); name = documents; sourceTree = "<group>"; };
-		A1B124604F7F471E01D8AA6E = {isa = PBXGroup; children = (
-					189BC87D79A9670E686ACE00,
-					F0A49FF985A114AC31ED8F87,
-					D902B5961F78F2A6DFBF4B7F, ); name = embedding; sourceTree = "<group>"; };
-		DD35BF639F13CB10E9ACF910 = {isa = PBXGroup; children = (
-					BE876A77E905E3C0D9B66450,
-					258C17078206C550B08DD0F4, ); name = lookandfeel; sourceTree = "<group>"; };
-		F50C1ADB9086D61160516CB7 = {isa = PBXGroup; children = (
-					A51E4D49C37A60CC0BCE4246,
-					6F2DEA817E140C2659915138,
-					E1D39D158E760B202DBEDA81,
-					02CA8C3BE552E240C77A3722,
-					B9B67E7AC6527BDB9D4D42D0,
-					EF24C96CD12FC8589756DEF1,
-					29CA2D82E54BA471A7F0D4A7,
-					C68D8C25B8BD332BA1DFB32E,
-					5B8805BE8EFB29BFC7BD6D31,
-					8D89602169EF2FB7E38F8C0D,
-					3F8D9C9557E45D151F339F5E,
-					84BC9171F02182D3AFD04F66,
-					60138E309DBA8366F9AA83A5,
-					E794F8DCA1BD195F1D0BC64B,
-					62112F8E435A750E1D2B28E0,
-					24B8D9E228BF396D1B8C705E,
-					2F365E601995A1B068BAC1C2,
-					825F21A8A32CC0FD20B845A6, ); name = misc; sourceTree = "<group>"; };
-		4C0BD8F18173E3D675D03872 = {isa = PBXGroup; children = (
-					D03B334EFDF780C2C0FE33B8,
-					BA9B833DA92A957DB959CECC,
-					AC544E614702255B972E1E8F,
-					D439FCBFE0FCAA2C67548362,
-					4BE6A47DF33CCD5619DFE82A,
-					742B8388A246A9E984457C7A,
-					8B2E98629FB118FAAB8E2476,
-					0B9187D02C50D0A3C4516DC4,
-					2FAD2E774B5F20B781D5AEB2,
-					5377705718D6D60A6AA2848F,
-					C5424781C756A8FF3D66670D,
-					9EFFD9F226690A84BBA574C4, ); name = native; sourceTree = "<group>"; };
-		DFC8A876133A671741A5FCA2 = {isa = PBXGroup; children = (
-					9DEFBE65118D0527555955A2,
-					1D09D8A2B803860D8927C366,
-					A1B124604F7F471E01D8AA6E,
-					DD35BF639F13CB10E9ACF910,
-					F50C1ADB9086D61160516CB7,
-					4C0BD8F18173E3D675D03872,
-					C82094E39B4C9B4DE35A7EB4,
-					D6070A7CF3873DFD1B1A53A5, ); name = "juce_gui_extra"; sourceTree = "<group>"; };
-		8A24D1B6925535A868974986 = {isa = PBXGroup; children = (
-					8BA5B0B5CBCE8D29F02D341A,
-					E58F94F6CDB786C1ED488C9C,
-					6A6672A570C2C2418F926C82,
-					DE7F542DC0967F8EDCC4DCD0,
-					E9819C83D0B797FC71811B1B,
-					2A27F41171A44038C2A1CB56,
-					DFC8A876133A671741A5FCA2, ); name = "Juce Modules"; sourceTree = "<group>"; };
-		2C6746F66EF4444F53B3221F = {isa = PBXGroup; children = (
-					8702F43110E4CCA5E5F827F5,
-					472F9A90F685220D730EBF6C,
-					4F687965FBE86EAFDB3ACFEC,
-					B72DAC469A62BD52C86102E7,
-					2D5E55D7E0BC08AAF7B6E150,
-					2C53E412EF7FC1036E4B11AC,
-					BB72D9AA25D5D5B090F16513,
-					9993F2BAA90AA22D16B7F40B,
-					20EABC08F7EFE741D7C3B622,
-					DDF2C578191FFE07300541E8,
-					364D1A9B113320407A7E57B9, ); name = "Juce Library Code"; sourceTree = "<group>"; };
-		8180B5894A78501084B8F133 = {isa = PBXGroup; children = (
-					4CA1C3E6585D7694AA9C309F,
-					6678E9B3EEACAD47F438B264,
-					951128CA33CCDEF570436B1C,
-					B483D960309FAFC193F9CDA2, ); name = Resources; sourceTree = "<group>"; };
-		0FFEF043CA89142B18C79ABE = {isa = PBXGroup; children = (
-					D00F311BFC3C2625C457CB9B,
-					D1F9B0E9F5D54FE48BEB46EA,
-					E96597BBC6A98255B51B94DC,
-					E5D6C36496F5BC84D7213BE8,
-					CF6C8BD0DA3D8CD4E99EBADA, ); name = Frameworks; sourceTree = "<group>"; };
-		92ABB8016546F41128399E9D = {isa = PBXGroup; children = (
-					25F52316D256B4534BED16D1, ); name = Products; sourceTree = "<group>"; };
-		3CC531922CC2D398E283A845 = {isa = PBXGroup; children = (
-					D3109994DA6AD871BE85C4E2,
-					8A24D1B6925535A868974986,
-					2C6746F66EF4444F53B3221F,
-					8180B5894A78501084B8F133,
-					0FFEF043CA89142B18C79ABE,
-					92ABB8016546F41128399E9D, ); name = Source; sourceTree = "<group>"; };
-		EA0BCC969703B2D179089E55 = {isa = XCBuildConfiguration; buildSettings = {
-				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_LINK_OBJC_RUNTIME = NO;
-				COMBINE_HIDPI_IMAGES = YES;
-				CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)";
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"_DEBUG=1",
-					"DEBUG=1",
-					"JUCER_XCODE_MAC_F6D2F4CF=1",
-					"JUCE_APP_VERSION=3.1.0",
-					"JUCE_APP_VERSION_HEX=0x30100", );
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../JuceLibraryCode/modules", "$(inherited)");
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
-				OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter";
-				SDKROOT_ppc = macosx10.5; }; name = Debug; };
-		B159CF4275B8A90122629FF4 = {isa = XCBuildConfiguration; buildSettings = {
-				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
+/* Begin PBXBuildFile section */
+		01D45DD829D8848733090B67 /* juce_cryptography.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D5E55D7E0BC08AAF7B6E150 /* juce_cryptography.mm */; };
+		110221CD5578153B528AD2BE /* jucer_ResourceFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D10D51A0A2D63F38B4D86A60 /* jucer_ResourceFile.cpp */; };
+		11D42F7EC6E6539D79A7F4B1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5D6C36496F5BC84D7213BE8 /* QuartzCore.framework */; };
+		123810DAF8AF758928916ECE /* jucer_JucerTreeViewBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 47DD50A5A9091F9900E0EAD9 /* jucer_JucerTreeViewBase.cpp */; };
+		1321E6C1C6170B6C898AD09D /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 951128CA33CCDEF570436B1C /* Icon.icns */; };
+		1499DF2E85B05AC1BF423773 /* jucer_Icons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF21D9DB3AEC0A4DCAB36A99 /* jucer_Icons.cpp */; };
+		1B988E139004D8E2850EB656 /* jucer_PaintRoutine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C187718F7B9EBA88584B43F3 /* jucer_PaintRoutine.cpp */; };
+		1E76E36772355E2A43CF4961 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D00F311BFC3C2625C457CB9B /* Carbon.framework */; };
+		1F37544891EC8DBB5E500C1C /* jucer_ProjectExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F71AF6D2DF3E652F8B51EBAB /* jucer_ProjectExporter.cpp */; };
+		20102F921FAA2A92CED056C0 /* juce_gui_extra.mm in Sources */ = {isa = PBXBuildFile; fileRef = DDF2C578191FFE07300541E8 /* juce_gui_extra.mm */; };
+		209FCCC2155A1FCB7E11E20D /* jucer_JucerDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 269A454F1FF081DA67FFD578 /* jucer_JucerDocument.cpp */; };
+		241F29FCBB7A17BB44A0B10C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1F9B0E9F5D54FE48BEB46EA /* Cocoa.framework */; };
+		244BA1BDA5FAA465EA3F9C6D /* jucer_OpenDocumentManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2247EE920DF0610CAF9F4513 /* jucer_OpenDocumentManager.cpp */; };
+		2610F357881240ACBF612F48 /* RecentFilesMenuTemplate.nib in Resources */ = {isa = PBXBuildFile; fileRef = 6678E9B3EEACAD47F438B264 /* RecentFilesMenuTemplate.nib */; };
+		30B921C38DCEE787B294B746 /* jucer_Project.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BAC43B20E14A340CCF14119C /* jucer_Project.cpp */; };
+		34716A3539FD288C09CBA38A /* jucer_TestComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 921752D9B004A15973DDF56F /* jucer_TestComponent.cpp */; };
+		357A6AA6960EF95D92929BEE /* jucer_AppearanceSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 441CFEA771BAA50E187342E9 /* jucer_AppearanceSettings.cpp */; };
+		3C5267E06A897B0DC0F7EA50 /* BinaryData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 472F9A90F685220D730EBF6C /* BinaryData.cpp */; };
+		3DC282564876B1FC88AAA9B3 /* jucer_ComponentDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 662C76394C5D1B56766FAFD9 /* jucer_ComponentDocument.cpp */; };
+		3EB3D569250C4BA4CA9AF578 /* jucer_DocumentEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C7608A3967D9AB9481848F2B /* jucer_DocumentEditorComponent.cpp */; };
+		3FCA61C401007B243E2E9035 /* jucer_Module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F797071D88542C813CF7222A /* jucer_Module.cpp */; };
+		4028CA96EA50175DD6B8D976 /* juce_data_structures.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2C53E412EF7FC1036E4B11AC /* juce_data_structures.mm */; };
+		45576193A53DE94F5BF4C3D4 /* juce_graphics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9993F2BAA90AA22D16B7F40B /* juce_graphics.mm */; };
+		45A53AF13B0D663050632E8C /* jucer_BinaryResources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9EF583A6201DBC813C2F63C4 /* jucer_BinaryResources.cpp */; };
+		49C22786B54C5DC94E4654B8 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E96597BBC6A98255B51B94DC /* IOKit.framework */; };
+		57B1F32A372143B4D3B1C517 /* jucer_ButtonDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E03B7C7A19E63A724EB79F4 /* jucer_ButtonDocument.cpp */; };
+		5BC89E7905397ABECD25ACCD /* jucer_NewFileWizard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F1163B7856FDABA413A88D90 /* jucer_NewFileWizard.cpp */; };
+		676D2E1E750E61AA2FAA335E /* jucer_ProjectContentComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86E468DE6556BB2AD76A3D80 /* jucer_ProjectContentComponent.cpp */; };
+		6FC19EBA7A51423C3D22F77B /* juce_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B483D960309FAFC193F9CDA2 /* juce_icon.png */; };
+		78CB463DD98A55313A543859 /* jucer_FileHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1729AEDC34001C31B8CC357C /* jucer_FileHelpers.cpp */; };
+		8012E6487639A7368E4C4470 /* jucer_ProjectType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E70CA21960A64CCB835725FF /* jucer_ProjectType.cpp */; };
+		83431B7234A78ECFB3C15F63 /* jucer_GeneratedCode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 78D0DBC4798FF040FDB90F6D /* jucer_GeneratedCode.cpp */; };
+		8AD28823205783E6F676F254 /* jucer_ResourceEditorPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF725A596B7BCD7520CC0A9F /* jucer_ResourceEditorPanel.cpp */; };
+		8C1CC0E7A772D66635BA482F /* jucer_EditingPanelBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 98F42686D9DAC974F2514217 /* jucer_EditingPanelBase.cpp */; };
+		954A036F5DDB375DB23FFB3E /* jucer_CommandLine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0400CB0E056A1D840304D2DE /* jucer_CommandLine.cpp */; };
+		95B44E6C74B1DED31DBE37EB /* jucer_Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C52A3DDA62A746AA7A68535 /* jucer_Main.cpp */; };
+		9BF773500BA51A8B5C6C7348 /* jucer_ComponentTypeHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65C498761CE166072A202AA0 /* jucer_ComponentTypeHandler.cpp */; };
+		A69BF71FA90E5A66B6EB2E0F /* jucer_JucerDocumentEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C7FA58D223674C4C2AC6595 /* jucer_JucerDocumentEditor.cpp */; };
+		A70F0274076C0D44ED71C980 /* jucer_ComponentLayoutEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EF30A74B566A461A171BBF83 /* jucer_ComponentLayoutEditor.cpp */; };
+		AA9D0B8E23F3D87A23DE9F8A /* jucer_MainWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9069981E414A631B036CC9AC /* jucer_MainWindow.cpp */; };
+		B980464FA2761CCD64B1FAD6 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF6C8BD0DA3D8CD4E99EBADA /* WebKit.framework */; };
+		BD1E0CBE74DDD2F303978E1F /* jucer_ComponentOverlayComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E191CDCE7565DB726CF7065 /* jucer_ComponentOverlayComponent.cpp */; };
+		BF57EEE3415D6F8F03206846 /* juce_gui_basics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20EABC08F7EFE741D7C3B622 /* juce_gui_basics.mm */; };
+		C2A85091A28C907A4E1E1687 /* jucer_ComponentLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 133F1E428260C5ADDF496DF9 /* jucer_ComponentLayout.cpp */; };
+		C49E1D32A9DCE3D59BC48B1D /* jucer_ColouredElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93B419190CCE92ACAB1ED25B /* jucer_ColouredElement.cpp */; };
+		C93569F47B4AC1A8E37992ED /* jucer_ObjectTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9D7689451732AF8333402B3A /* jucer_ObjectTypes.cpp */; };
+		C9F11BA62D6D092A300363F7 /* jucer_MiscUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F249640243FBD5717F6ADD9 /* jucer_MiscUtilities.cpp */; };
+		CD4F7B119CE718BCE78D61F4 /* jucer_CodeHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9B9CAD20E1243B4351B4C8D8 /* jucer_CodeHelpers.cpp */; };
+		CE91112DADB97C573C3C674D /* jucer_PaintElementPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0169ACAA0FAE70CCEEE4F650 /* jucer_PaintElementPath.cpp */; };
+		D68DE111AFBD82F0D44A3B69 /* jucer_PaintRoutineEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B15E33E7342F6EB4F95C9B1D /* jucer_PaintRoutineEditor.cpp */; };
+		E1268E019B434F6B5E9317DC /* jucer_PaintElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C216FE9B7A5209C5CCF2517 /* jucer_PaintElement.cpp */; };
+		EC6A34EC9A9D454BF26AAD32 /* jucer_PaintRoutinePanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 16203C6791259C9718A04C3A /* jucer_PaintRoutinePanel.cpp */; };
+		F6635694A01FFBF5EF0968DB /* jucer_StoredSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 631983AA62673015F8D7453B /* jucer_StoredSettings.cpp */; };
+		F70594FF1FFED9AC12F43709 /* juce_core.mm in Sources */ = {isa = PBXBuildFile; fileRef = B72DAC469A62BD52C86102E7 /* juce_core.mm */; };
+		F743B7B2709E72250982F2FB /* juce_events.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB72D9AA25D5D5B090F16513 /* juce_events.mm */; };
+		FBE57B26FE59319AA2E8B59D /* jucer_NewProjectWizard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69A5D13490A62DAE9A7D5A22 /* jucer_NewProjectWizard.cpp */; };
+		FCE6F604C00039A32649CB69 /* jucer_SourceCodeEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E680E2C65684A4272AE079A /* jucer_SourceCodeEditor.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		0075C5208947159AF2802F3B /* jucer_AudioPluginEditorTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_AudioPluginEditorTemplate.cpp; path = ../../Source/BinaryData/jucer_AudioPluginEditorTemplate.cpp; sourceTree = SOURCE_ROOT; };
+		008C8B2C2328CFBB9375397D /* jucer_ComboBoxHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComboBoxHandler.h; path = ../../Source/ComponentEditor/components/jucer_ComboBoxHandler.h; sourceTree = SOURCE_ROOT; };
+		00CBA904DE3B8686A6F569CD /* juce_Colours.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Colours.h; path = ../../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colours.h; sourceTree = SOURCE_ROOT; };
+		00E86D533C0149A56F21D804 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../../JuceLibraryCode/modules/juce_core/juce_module_info; sourceTree = SOURCE_ROOT; };
+		00F860FEF209ABF0E800FA09 /* juce_ComponentPeer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentPeer.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.h; sourceTree = SOURCE_ROOT; };
+		0153A6801552D0B4C21BE911 /* juce_LinkedListPointer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LinkedListPointer.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_LinkedListPointer.h; sourceTree = SOURCE_ROOT; };
+		0169ACAA0FAE70CCEEE4F650 /* jucer_PaintElementPath.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_PaintElementPath.cpp; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElementPath.cpp; sourceTree = SOURCE_ROOT; };
+		02CA8C3BE552E240C77A3722 /* juce_ColourSelector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourSelector.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.cpp; sourceTree = SOURCE_ROOT; };
+		0329C05B4EE23CBB5578BF02 /* juce_Primes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Primes.h; path = ../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_Primes.h; sourceTree = SOURCE_ROOT; };
+		03D3053EDE47FED1919C6674 /* jucer_AudioPluginFilterTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_AudioPluginFilterTemplate.h; path = ../../Source/BinaryData/jucer_AudioPluginFilterTemplate.h; sourceTree = SOURCE_ROOT; };
+		0400CB0E056A1D840304D2DE /* jucer_CommandLine.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_CommandLine.cpp; path = ../../Source/Application/jucer_CommandLine.cpp; sourceTree = SOURCE_ROOT; };
+		043FC175E80305E3D95ECAF8 /* juce_NotificationType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NotificationType.h; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_NotificationType.h; sourceTree = SOURCE_ROOT; };
+		04A2C05B7935B8D335B5FD39 /* juce_MenuBarComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MenuBarComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp; sourceTree = SOURCE_ROOT; };
+		04C1267B2BD11A6ECCCA654C /* jucer_ComponentBooleanProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentBooleanProperty.h; path = ../../Source/ComponentEditor/properties/jucer_ComponentBooleanProperty.h; sourceTree = SOURCE_ROOT; };
+		05076CDF1511A5F8A8E18F1D /* jucer_ProjectExport_Make.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_Make.h; path = "../../Source/Project Saving/jucer_ProjectExport_Make.h"; sourceTree = SOURCE_ROOT; };
+		056E44027E3F3AFAB32FBC44 /* juce_LocalisedStrings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LocalisedStrings.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.h; sourceTree = SOURCE_ROOT; };
+		06BB2D547BF07A31E8D46977 /* juce_PathIterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PathIterator.h; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathIterator.h; sourceTree = SOURCE_ROOT; };
+		0737A6A737019EFC6BC4CED0 /* juce_TabbedButtonBar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TabbedButtonBar.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h; sourceTree = SOURCE_ROOT; };
+		084171D9475B3491A4EFAB5F /* juce_Result.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Result.cpp; path = ../../../JuceLibraryCode/modules/juce_core/misc/juce_Result.cpp; sourceTree = SOURCE_ROOT; };
+		084C0070BC67BC893B967EF1 /* jucer_ToggleButtonHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ToggleButtonHandler.h; path = ../../Source/ComponentEditor/components/jucer_ToggleButtonHandler.h; sourceTree = SOURCE_ROOT; };
+		08AF500230E8F8644B3682F5 /* juce_mac_MainMenu.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_MainMenu.mm; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_MainMenu.mm; sourceTree = SOURCE_ROOT; };
+		09261261800229B6438A9A5B /* juce_ChoicePropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ChoicePropertyComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		09BB016660D64FDCD2A9866F /* juce_win32_Direct2DGraphicsContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Direct2DGraphicsContext.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp; sourceTree = SOURCE_ROOT; };
+		09F93EBC7C2C877F3446A0C7 /* juce_KeyListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KeyListener.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyListener.h; sourceTree = SOURCE_ROOT; };
+		0A6652042F8E043F43239E75 /* juce_ScrollBar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ScrollBar.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.cpp; sourceTree = SOURCE_ROOT; };
+		0A8D062EF44529B793CC5098 /* juce_CharacterFunctions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharacterFunctions.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_CharacterFunctions.h; sourceTree = SOURCE_ROOT; };
+		0ACD709DE0EBA4A3D73325FD /* juce_ResizableCornerComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableCornerComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp; sourceTree = SOURCE_ROOT; };
+		0AE2B4F22C863455A366D251 /* juce_LookAndFeel_V3.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LookAndFeel_V3.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp; sourceTree = SOURCE_ROOT; };
+		0B9187D02C50D0A3C4516DC4 /* juce_mac_SystemTrayIcon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_SystemTrayIcon.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp; sourceTree = SOURCE_ROOT; };
+		0CF3C0EC356169F25B0BAA9D /* juce_AlertWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AlertWindow.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h; sourceTree = SOURCE_ROOT; };
+		0E06FB23B05CE46487F509C8 /* juce_PropertyPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertyPanel.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyPanel.cpp; sourceTree = SOURCE_ROOT; };
+		0E24C59E408559F9DF1DC31A /* juce_CPlusPlusCodeTokeniserFunctions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CPlusPlusCodeTokeniserFunctions.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h; sourceTree = SOURCE_ROOT; };
+		0F249640243FBD5717F6ADD9 /* jucer_MiscUtilities.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_MiscUtilities.cpp; path = ../../Source/Utility/jucer_MiscUtilities.cpp; sourceTree = SOURCE_ROOT; };
+		0F4EFF11F984ED5E2A2045A1 /* juce_win32_FileChooser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_FileChooser.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp; sourceTree = SOURCE_ROOT; };
+		0F9DBA4AB2BD63773528D805 /* juce_FileBrowserComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBrowserComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp; sourceTree = SOURCE_ROOT; };
+		0FAD42641F0AAC0B7E906D18 /* juce_DirectoryContentsDisplayComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsDisplayComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h; sourceTree = SOURCE_ROOT; };
+		0FB3551C6845EF0E9312F850 /* juce_ModifierKeys.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ModifierKeys.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_ModifierKeys.h; sourceTree = SOURCE_ROOT; };
+		0FD7364EC64E25AE854E9A9D /* juce_GlyphArrangement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GlyphArrangement.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_GlyphArrangement.cpp; sourceTree = SOURCE_ROOT; };
+		0FF1C6905150EAAB1AE081A7 /* jucer_ButtonHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ButtonHandler.h; path = ../../Source/ComponentEditor/components/jucer_ButtonHandler.h; sourceTree = SOURCE_ROOT; };
+		101572E83E487C91969D671C /* juce_MultiTouchMapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MultiTouchMapper.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_MultiTouchMapper.h; sourceTree = SOURCE_ROOT; };
+		104463B9110789FCDA7BD4FB /* juce_KeyboardFocusTraverser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KeyboardFocusTraverser.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h; sourceTree = SOURCE_ROOT; };
+		10AC5E5349AFAF11362E4199 /* juce_PlatformDefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PlatformDefs.h; path = ../../../JuceLibraryCode/modules/juce_core/system/juce_PlatformDefs.h; sourceTree = SOURCE_ROOT; };
+		10F328BCD86EF125C5DDA33D /* juce_ConcertinaPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ConcertinaPanel.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h; sourceTree = SOURCE_ROOT; };
+		1125D1B2AE54AEF2EB3D51C0 /* jucer_JucerDocumentEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerDocumentEditor.h; path = ../../Source/ComponentEditor/ui/jucer_JucerDocumentEditor.h; sourceTree = SOURCE_ROOT; };
+		114845541FC5BE3453B6BD4C /* juce_XmlDocument.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_XmlDocument.cpp; path = ../../../JuceLibraryCode/modules/juce_core/xml/juce_XmlDocument.cpp; sourceTree = SOURCE_ROOT; };
+		1233E258E4C1FD4AAA7A6D1A /* juce_InterprocessConnectionServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_InterprocessConnectionServer.h; path = ../../../JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnectionServer.h; sourceTree = SOURCE_ROOT; };
+		1270CC27AD4D0805DD4BA465 /* juce_FileChooserDialogBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileChooserDialogBox.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h; sourceTree = SOURCE_ROOT; };
+		12875173A50B701B72E68F90 /* juce_FileLogger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileLogger.cpp; path = ../../../JuceLibraryCode/modules/juce_core/logging/juce_FileLogger.cpp; sourceTree = SOURCE_ROOT; };
+		12ABAFDD4C4BCA2B8313F1CE /* juce_ApplicationProperties.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationProperties.h; path = ../../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_ApplicationProperties.h; sourceTree = SOURCE_ROOT; };
+		12D78FB671BC817D433079B1 /* juce_LookAndFeel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LookAndFeel.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h; sourceTree = SOURCE_ROOT; };
+		1320D638B7BACCADEDA5ABD2 /* juce_DynamicLibrary.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DynamicLibrary.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_DynamicLibrary.h; sourceTree = SOURCE_ROOT; };
+		133F1E428260C5ADDF496DF9 /* jucer_ComponentLayout.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentLayout.cpp; path = ../../Source/ComponentEditor/jucer_ComponentLayout.cpp; sourceTree = SOURCE_ROOT; };
+		136A3229F6535E2FBB9993E2 /* juce_ImageEffectFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageEffectFilter.h; path = ../../../JuceLibraryCode/modules/juce_graphics/effects/juce_ImageEffectFilter.h; sourceTree = SOURCE_ROOT; };
+		13E76507D88192A1B9554073 /* juce_BigInteger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BigInteger.cpp; path = ../../../JuceLibraryCode/modules/juce_core/maths/juce_BigInteger.cpp; sourceTree = SOURCE_ROOT; };
+		140ABB31EF22CAE40D874BB0 /* juce_Range.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Range.h; path = ../../../JuceLibraryCode/modules/juce_core/maths/juce_Range.h; sourceTree = SOURCE_ROOT; };
+		149020249A77110311411E15 /* juce_Desktop.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Desktop.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Desktop.h; sourceTree = SOURCE_ROOT; };
+		14BE817BFCB5B1CF2799C860 /* juce_InputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_InputStream.h; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_InputStream.h; sourceTree = SOURCE_ROOT; };
+		159A5AC2CAF01A7A17ECA0A0 /* juce_ReferenceCountedArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ReferenceCountedArray.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_ReferenceCountedArray.h; sourceTree = SOURCE_ROOT; };
+		1602D140D6F478765ACEA660 /* juce_UndoManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_UndoManager.cpp; path = ../../../JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoManager.cpp; sourceTree = SOURCE_ROOT; };
+		16203C6791259C9718A04C3A /* jucer_PaintRoutinePanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_PaintRoutinePanel.cpp; path = ../../Source/ComponentEditor/ui/jucer_PaintRoutinePanel.cpp; sourceTree = SOURCE_ROOT; };
+		16413B69F7D1E2862AFBE61F /* juce_BigInteger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BigInteger.h; path = ../../../JuceLibraryCode/modules/juce_core/maths/juce_BigInteger.h; sourceTree = SOURCE_ROOT; };
+		16C7EFDF9ED765D02DA12C55 /* juce_InputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_InputSource.h; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_InputSource.h; sourceTree = SOURCE_ROOT; };
+		16E61715753895412F61F93B /* juce_ScrollBar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScrollBar.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.h; sourceTree = SOURCE_ROOT; };
+		17173DDA0532B81C71D95B05 /* juce_TextDragAndDropTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextDragAndDropTarget.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h; sourceTree = SOURCE_ROOT; };
+		1729AEDC34001C31B8CC357C /* jucer_FileHelpers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_FileHelpers.cpp; path = ../../Source/Utility/jucer_FileHelpers.cpp; sourceTree = SOURCE_ROOT; };
+		174CE62B43D97B83AF1D3338 /* juce_DragAndDropTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DragAndDropTarget.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h; sourceTree = SOURCE_ROOT; };
+		1848EB565B679F72C560EBAD /* juce_FileSearchPath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPath.h; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_FileSearchPath.h; sourceTree = SOURCE_ROOT; };
+		188D03A4247F4BC0539F5C49 /* jucer_Colours.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Colours.h; path = ../../Source/Utility/jucer_Colours.h; sourceTree = SOURCE_ROOT; };
+		189BC87D79A9670E686ACE00 /* juce_ActiveXControlComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ActiveXControlComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h; sourceTree = SOURCE_ROOT; };
+		18AAAE2846B4512094CF9E64 /* juce_RelativeCoordinate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeCoordinate.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp; sourceTree = SOURCE_ROOT; };
+		18D9EBA1DAE45EEF81FD5C8F /* jucer_MainConsoleAppTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_MainConsoleAppTemplate.cpp; path = ../../Source/BinaryData/jucer_MainConsoleAppTemplate.cpp; sourceTree = SOURCE_ROOT; };
+		1908920B3166E7B7A7A095BC /* juce_PixelFormats.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PixelFormats.h; path = ../../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h; sourceTree = SOURCE_ROOT; };
+		1958777C37415EC581CD4B74 /* juce_Expression.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Expression.h; path = ../../../JuceLibraryCode/modules/juce_core/maths/juce_Expression.h; sourceTree = SOURCE_ROOT; };
+		199E3F67A1E48F7D95AC6E1E /* juce_UndoableAction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_UndoableAction.h; path = ../../../JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoableAction.h; sourceTree = SOURCE_ROOT; };
+		1AF7EFBE4961C7B6C834BF54 /* jucer_PresetIDs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PresetIDs.h; path = ../../Source/Utility/jucer_PresetIDs.h; sourceTree = SOURCE_ROOT; };
+		1B4284167C1A10170537305A /* juce_ModifierKeys.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ModifierKeys.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp; sourceTree = SOURCE_ROOT; };
+		1BE0A264A6AA494EF75B582B /* juce_File.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_File.h; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_File.h; sourceTree = SOURCE_ROOT; };
+		1C216FE9B7A5209C5CCF2517 /* jucer_PaintElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_PaintElement.cpp; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElement.cpp; sourceTree = SOURCE_ROOT; };
+		1C94985541E125A49C70C07C /* juce_ThreadPool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ThreadPool.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_ThreadPool.h; sourceTree = SOURCE_ROOT; };
+		1D3D6A19A60F0B03DE2F1C14 /* jucer_PaintElementPath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementPath.h; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElementPath.h; sourceTree = SOURCE_ROOT; };
+		1DC3F7820AA6D950B2C6D628 /* juce_SystemStats.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SystemStats.h; path = ../../../JuceLibraryCode/modules/juce_core/system/juce_SystemStats.h; sourceTree = SOURCE_ROOT; };
+		1F04ABB8C6FA1598902FE33A /* juce_Variant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Variant.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_Variant.h; sourceTree = SOURCE_ROOT; };
+		1F421199C40092BFEE0658C2 /* jucer_RelativePath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_RelativePath.h; path = ../../Source/Utility/jucer_RelativePath.h; sourceTree = SOURCE_ROOT; };
+		1F869D818F79BE6EEE2305FD /* juce_DynamicObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DynamicObject.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_DynamicObject.h; sourceTree = SOURCE_ROOT; };
+		1F86FB8B8336D44337AE7119 /* juce_BlowFish.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BlowFish.h; path = ../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_BlowFish.h; sourceTree = SOURCE_ROOT; };
+		1F9BBDFA52513AD34D906D2A /* jucer_HyperlinkButtonHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_HyperlinkButtonHandler.h; path = ../../Source/ComponentEditor/components/jucer_HyperlinkButtonHandler.h; sourceTree = SOURCE_ROOT; };
+		1FA92F8F2B26C6CEC8B1D737 /* jucer_ButtonDocument.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ButtonDocument.h; path = ../../Source/ComponentEditor/documents/jucer_ButtonDocument.h; sourceTree = SOURCE_ROOT; };
+		1FDBC89D596C6E959E7A8825 /* juce_NamedValueSet.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_NamedValueSet.cpp; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_NamedValueSet.cpp; sourceTree = SOURCE_ROOT; };
+		1FEE53F170737A23D412C425 /* juce_SVGParser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SVGParser.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_SVGParser.cpp; sourceTree = SOURCE_ROOT; };
+		20D0FBDE77A58A302859A206 /* juce_RSAKey.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RSAKey.cpp; path = ../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_RSAKey.cpp; sourceTree = SOURCE_ROOT; };
+		20EABC08F7EFE741D7C3B622 /* juce_gui_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_gui_basics.mm; path = ../../../JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.mm; sourceTree = SOURCE_ROOT; };
+		2101B4CC3E5BDC7BD806678B /* juce_events.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_events.h; path = ../../../JuceLibraryCode/modules/juce_events/juce_events.h; sourceTree = SOURCE_ROOT; };
+		21822729E1EF7CC3D3528BFE /* juce_win32_DirectWriteTypeLayout.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DirectWriteTypeLayout.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp; sourceTree = SOURCE_ROOT; };
+		223C4209F18A221EB183A056 /* jucer_AppearanceSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_AppearanceSettings.h; path = ../../Source/Application/jucer_AppearanceSettings.h; sourceTree = SOURCE_ROOT; };
+		2247EE920DF0610CAF9F4513 /* jucer_OpenDocumentManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_OpenDocumentManager.cpp; path = ../../Source/Application/jucer_OpenDocumentManager.cpp; sourceTree = SOURCE_ROOT; };
+		2249F79A9B7FFE48DACC14CF /* juce_BooleanPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BooleanPropertyComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		22B29C61E4EB0C2FC4E54378 /* juce_BlowFish.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BlowFish.cpp; path = ../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_BlowFish.cpp; sourceTree = SOURCE_ROOT; };
+		22C0EC04F7C30AAE16E632A7 /* juce_ToggleButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToggleButton.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToggleButton.cpp; sourceTree = SOURCE_ROOT; };
+		231F4AC6660B650E08EF1E54 /* juce_NamedValueSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NamedValueSet.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_NamedValueSet.h; sourceTree = SOURCE_ROOT; };
+		237496FB515C526B510BB0C3 /* juce_CharPointer_UTF32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharPointer_UTF32.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF32.h; sourceTree = SOURCE_ROOT; };
+		23A8DE16C0CDB8EED18B008B /* jucer_CommandIDs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CommandIDs.h; path = ../../Source/Application/jucer_CommandIDs.h; sourceTree = SOURCE_ROOT; };
+		23D5A9D86894973926E3EFB8 /* juce_LookAndFeel_V2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LookAndFeel_V2.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp; sourceTree = SOURCE_ROOT; };
+		240283D05A8E1886987E07F2 /* juce_ArrowButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ArrowButton.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.cpp; sourceTree = SOURCE_ROOT; };
+		2412E1E63124369CE418894D /* juce_LookAndFeel_V1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LookAndFeel_V1.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h; sourceTree = SOURCE_ROOT; };
+		241A48F1D188BF19314065C2 /* juce_Justification.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Justification.h; path = ../../../JuceLibraryCode/modules/juce_graphics/placement/juce_Justification.h; sourceTree = SOURCE_ROOT; };
+		24319DEF365C8368FD3AA4EC /* juce_Logger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Logger.cpp; path = ../../../JuceLibraryCode/modules/juce_core/logging/juce_Logger.cpp; sourceTree = SOURCE_ROOT; };
+		24B8D9E228BF396D1B8C705E /* juce_SystemTrayIconComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SystemTrayIconComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp; sourceTree = SOURCE_ROOT; };
+		24C34D0578AE6C7A3EA18781 /* jucer_InlineComponentTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_InlineComponentTemplate.h; path = ../../Source/BinaryData/jucer_InlineComponentTemplate.h; sourceTree = SOURCE_ROOT; };
+		24D73A13CD0F89E299E11B0E /* juce_SHA256.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SHA256.cpp; path = ../../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_SHA256.cpp; sourceTree = SOURCE_ROOT; };
+		257104EA81085B98E8AFCFB3 /* juce_ByteOrder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ByteOrder.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_ByteOrder.h; sourceTree = SOURCE_ROOT; };
+		258C17078206C550B08DD0F4 /* juce_OldSchoolLookAndFeel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OldSchoolLookAndFeel.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h; sourceTree = SOURCE_ROOT; };
+		25F52316D256B4534BED16D1 /* Introjucer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Introjucer.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		263D9041F9B7D6A79DC38CD6 /* jucer_ComponentLayoutEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentLayoutEditor.h; path = ../../Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.h; sourceTree = SOURCE_ROOT; };
+		269A454F1FF081DA67FFD578 /* jucer_JucerDocument.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_JucerDocument.cpp; path = ../../Source/ComponentEditor/jucer_JucerDocument.cpp; sourceTree = SOURCE_ROOT; };
+		26B7487E9A0CB5C6CA5ACE58 /* juce_ListenerList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ListenerList.h; path = ../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ListenerList.h; sourceTree = SOURCE_ROOT; };
+		27A2B025813B7E54E0862642 /* jucer_PaintElementUndoableAction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementUndoableAction.h; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElementUndoableAction.h; sourceTree = SOURCE_ROOT; };
+		27C16EA8D243AC7934DF11B1 /* juce_FileBrowserListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileBrowserListener.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h; sourceTree = SOURCE_ROOT; };
+		27E909E8C27DFBF0F184DCBD /* juce_linux_Clipboard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Clipboard.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Clipboard.cpp; sourceTree = SOURCE_ROOT; };
+		27F7865BD6FE03B970B8DBFB /* juce_RectanglePlacement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RectanglePlacement.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/placement/juce_RectanglePlacement.cpp; sourceTree = SOURCE_ROOT; };
+		2802BE05CAC2BE78EFD5A239 /* juce_ImagePreviewComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImagePreviewComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp; sourceTree = SOURCE_ROOT; };
+		2875464712C12E9BFCCEE57D /* juce_FileChooser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileChooser.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooser.h; sourceTree = SOURCE_ROOT; };
+		28A5DF3CEA69B587C9CA7C4A /* juce_LowLevelGraphicsPostScriptRenderer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LowLevelGraphicsPostScriptRenderer.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp; sourceTree = SOURCE_ROOT; };
+		28C9E13B1A70FDC728770C6E /* juce_Rectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Rectangle.h; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Rectangle.h; sourceTree = SOURCE_ROOT; };
+		28E80FBE60ED3FE73CCAB834 /* juce_XMLCodeTokeniser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_XMLCodeTokeniser.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h; sourceTree = SOURCE_ROOT; };
+		28E9116333CAD9E8164008A9 /* juce_Singleton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Singleton.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_Singleton.h; sourceTree = SOURCE_ROOT; };
+		295A9B126C98FE15F5A8B81E /* jucer_FilePropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_FilePropertyComponent.h; path = ../../Source/ComponentEditor/properties/jucer_FilePropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		29C79CFD0760D5BEF0C11D4D /* juce_ButtonPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ButtonPropertyComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		29CA2D82E54BA471A7F0D4A7 /* juce_KeyMappingEditorComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KeyMappingEditorComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h; sourceTree = SOURCE_ROOT; };
+		29FD4A27890434E137DBC3B9 /* juce_mac_Strings.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Strings.mm; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_mac_Strings.mm; sourceTree = SOURCE_ROOT; };
+		2A631496A56813D0EB2D0E5E /* juce_CallOutBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CallOutBox.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.h; sourceTree = SOURCE_ROOT; };
+		2A7B44B9D6C81585064098C3 /* juce_StringArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StringArray.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_StringArray.h; sourceTree = SOURCE_ROOT; };
+		2AB28295C237EC79481F5F9D /* juce_ActionListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ActionListener.h; path = ../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionListener.h; sourceTree = SOURCE_ROOT; };
+		2C0D1EB0AE7676CE3458764C /* juce_AnimatedPositionBehaviours.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AnimatedPositionBehaviours.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h; sourceTree = SOURCE_ROOT; };
+		2C53E412EF7FC1036E4B11AC /* juce_data_structures.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_data_structures.mm; path = ../../../JuceLibraryCode/modules/juce_data_structures/juce_data_structures.mm; sourceTree = SOURCE_ROOT; };
+		2C5E67AA30FCCE2E09C8CB6B /* juce_Array.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Array.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_Array.h; sourceTree = SOURCE_ROOT; };
+		2C9ED03E1C345D9A81BEB361 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../../JuceLibraryCode/modules/juce_cryptography/juce_module_info; sourceTree = SOURCE_ROOT; };
+		2CB1AA089385D7399AC615CE /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../../JuceLibraryCode/modules/juce_data_structures/juce_module_info; sourceTree = SOURCE_ROOT; };
+		2CD34A70B4032C0426F7AA10 /* jucer_MainWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_MainWindow.h; path = ../../Source/Application/jucer_MainWindow.h; sourceTree = SOURCE_ROOT; };
+		2CF191F1A61F2C167FF2DADA /* juce_MemoryInputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryInputStream.cpp; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryInputStream.cpp; sourceTree = SOURCE_ROOT; };
+		2D035221BF4D4B8C56FA3653 /* juce_TableListBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TableListBox.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableListBox.cpp; sourceTree = SOURCE_ROOT; };
+		2D5E55D7E0BC08AAF7B6E150 /* juce_cryptography.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_cryptography.mm; path = ../../../JuceLibraryCode/modules/juce_cryptography/juce_cryptography.mm; sourceTree = SOURCE_ROOT; };
+		2D6B77C09B5AF1BBD821D224 /* juce_Identifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Identifier.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_Identifier.h; sourceTree = SOURCE_ROOT; };
+		2D6B797AC8B1B5E7C8E7D1E9 /* juce_BubbleComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BubbleComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp; sourceTree = SOURCE_ROOT; };
+		2D9E9803A9DF82BBA42294E9 /* juce_RectangleList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RectangleList.h; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_RectangleList.h; sourceTree = SOURCE_ROOT; };
+		2DE3560E8DB420766D385023 /* juce_ToolbarButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToolbarButton.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp; sourceTree = SOURCE_ROOT; };
+		2E183952277F99D860EEB3F3 /* juce_MenuBarModel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MenuBarModel.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarModel.cpp; sourceTree = SOURCE_ROOT; };
+		2E680E2C65684A4272AE079A /* jucer_SourceCodeEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_SourceCodeEditor.cpp; path = "../../Source/Code Editor/jucer_SourceCodeEditor.cpp"; sourceTree = SOURCE_ROOT; };
+		2EEB1C074162F363C6599282 /* jucer_CommandLine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CommandLine.h; path = ../../Source/Application/jucer_CommandLine.h; sourceTree = SOURCE_ROOT; };
+		2F365E601995A1B068BAC1C2 /* juce_SystemTrayIconComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SystemTrayIconComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h; sourceTree = SOURCE_ROOT; };
+		2F9762C3866D161E38B4FD00 /* juce_PropertyPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PropertyPanel.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyPanel.h; sourceTree = SOURCE_ROOT; };
+		2FAD2E774B5F20B781D5AEB2 /* juce_mac_WebBrowserComponent.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_WebBrowserComponent.mm; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm; sourceTree = SOURCE_ROOT; };
+		2FD9D5944388186AAA32FEE2 /* juce_Colour.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Colour.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colour.cpp; sourceTree = SOURCE_ROOT; };
+		2FF61C42E37986022C189531 /* juce_KeyPress.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyPress.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyPress.cpp; sourceTree = SOURCE_ROOT; };
+		301592EBAC0FFF6F5B268E99 /* background_tile.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = background_tile.png; path = ../../Source/BinaryData/background_tile.png; sourceTree = SOURCE_ROOT; };
+		3131C94D973A735EA68C1C77 /* juce_FilenameComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FilenameComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h; sourceTree = SOURCE_ROOT; };
+		318467BF5A24F08E30FB78DF /* juce_TargetPlatform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TargetPlatform.h; path = ../../../JuceLibraryCode/modules/juce_core/system/juce_TargetPlatform.h; sourceTree = SOURCE_ROOT; };
+		32184C99C6A9A997E6534029 /* juce_ComponentBuilder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentBuilder.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp; sourceTree = SOURCE_ROOT; };
+		323BA212B37224C61A9C1740 /* juce_Application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Application.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/application/juce_Application.h; sourceTree = SOURCE_ROOT; };
+		333B1D00E46AF5A642C1DCDE /* juce_Uuid.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Uuid.h; path = ../../../JuceLibraryCode/modules/juce_core/misc/juce_Uuid.h; sourceTree = SOURCE_ROOT; };
+		334E3DFFA297DD18AD57F40F /* juce_DirectoryContentsList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryContentsList.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp; sourceTree = SOURCE_ROOT; };
+		33644BFBB02CBC8EFB61C5D2 /* juce_Button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Button.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.cpp; sourceTree = SOURCE_ROOT; };
+		33B2073D379E18BC2919FA07 /* juce_FileBrowserComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileBrowserComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h; sourceTree = SOURCE_ROOT; };
+		33E0A6C9F0AE53BEC8778775 /* juce_linux_Messaging.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Messaging.cpp; path = ../../../JuceLibraryCode/modules/juce_events/native/juce_linux_Messaging.cpp; sourceTree = SOURCE_ROOT; };
+		34705FA6042CBE98AAF77B61 /* juce_WindowsRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WindowsRegistry.h; path = ../../../JuceLibraryCode/modules/juce_core/misc/juce_WindowsRegistry.h; sourceTree = SOURCE_ROOT; };
+		34D4199F01C019ED54544C1E /* juce_ScopedReadLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedReadLock.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_ScopedReadLock.h; sourceTree = SOURCE_ROOT; };
+		3514E78B58A08F4C98F54C5A /* jucer_ComponentLayoutPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentLayoutPanel.h; path = ../../Source/ComponentEditor/ui/jucer_ComponentLayoutPanel.h; sourceTree = SOURCE_ROOT; };
+		35CB48D497F35BF3F6998F5D /* jucer_ProjectExporter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExporter.h; path = "../../Source/Project Saving/jucer_ProjectExporter.h"; sourceTree = SOURCE_ROOT; };
+		35E6EE1E98DD7050DDFECD9B /* jucer_ContentCompTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ContentCompTemplate.h; path = ../../Source/BinaryData/jucer_ContentCompTemplate.h; sourceTree = SOURCE_ROOT; };
+		364D1A9B113320407A7E57B9 /* JuceHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = SOURCE_ROOT; };
+		36E341F289B15DB1B7FA7528 /* juce_FileOutputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileOutputStream.cpp; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_FileOutputStream.cpp; sourceTree = SOURCE_ROOT; };
+		36F06F123E9717834A627F8D /* juce_ImagePreviewComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImagePreviewComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h; sourceTree = SOURCE_ROOT; };
+		3706C20941A79E5A8DE08DE4 /* juce_Desktop.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Desktop.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Desktop.cpp; sourceTree = SOURCE_ROOT; };
+		375AFDF06A908D89DEC5205F /* jucer_ProjectTree_Base.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectTree_Base.h; path = ../../Source/Project/jucer_ProjectTree_Base.h; sourceTree = SOURCE_ROOT; };
+		37AD2C828C069B17DB0C70EE /* juce_ChangeBroadcaster.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChangeBroadcaster.cpp; path = ../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp; sourceTree = SOURCE_ROOT; };
+		37C65F13D7CF8A718D1569AE /* juce_GZIPCompressorOutputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GZIPCompressorOutputStream.cpp; path = ../../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp; sourceTree = SOURCE_ROOT; };
+		3832E22BBFD9A9A1E9EEED6F /* juce_win32_Windowing.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Windowing.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_Windowing.cpp; sourceTree = SOURCE_ROOT; };
+		385426A4A6D3BFC4B2FD310C /* juce_AbstractFifo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AbstractFifo.cpp; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_AbstractFifo.cpp; sourceTree = SOURCE_ROOT; };
+		393E7A4E9BEC14AFC441E73F /* juce_MarkerList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MarkerList.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_MarkerList.h; sourceTree = SOURCE_ROOT; };
+		39698748BDD86977C4474DE4 /* juce_WildcardFileFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_WildcardFileFilter.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp; sourceTree = SOURCE_ROOT; };
+		3970C8444A2A081455299CE8 /* juce_Javascript.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Javascript.cpp; path = ../../../JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.cpp; sourceTree = SOURCE_ROOT; };
+		39D907284C634E6A9FC45E3E /* juce_InputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InputStream.cpp; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_InputStream.cpp; sourceTree = SOURCE_ROOT; };
+		3A3CD53AEB64CF57B6CADB59 /* juce_ComponentAnimator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentAnimator.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.h; sourceTree = SOURCE_ROOT; };
+		3A5B5DC92BE6D22CA15B9671 /* jucer_SnapGridPainter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_SnapGridPainter.h; path = ../../Source/ComponentEditor/ui/jucer_SnapGridPainter.h; sourceTree = SOURCE_ROOT; };
+		3A9ACE7B66413BF99882ECC6 /* juce_RelativeTime.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeTime.cpp; path = ../../../JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.cpp; sourceTree = SOURCE_ROOT; };
+		3AC808D92D13832338534F7F /* juce_RelativeRectangle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeRectangle.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp; sourceTree = SOURCE_ROOT; };
+		3B059A5FF36DA71C1433CA60 /* juce_ArrowButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ArrowButton.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.h; sourceTree = SOURCE_ROOT; };
+		3CF3F730EA232DA860D1B79D /* juce_FileFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileFilter.h; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_FileFilter.h; sourceTree = SOURCE_ROOT; };
+		3D577E9A14625124F5933387 /* juce_HighResolutionTimer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_HighResolutionTimer.cpp; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_HighResolutionTimer.cpp; sourceTree = SOURCE_ROOT; };
+		3E03B7C7A19E63A724EB79F4 /* jucer_ButtonDocument.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ButtonDocument.cpp; path = ../../Source/ComponentEditor/documents/jucer_ButtonDocument.cpp; sourceTree = SOURCE_ROOT; };
+		3ED948823F776108CD873C68 /* juce_DirectoryIterator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryIterator.cpp; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_DirectoryIterator.cpp; sourceTree = SOURCE_ROOT; };
+		3EFC8EEA0D7714261BB90A41 /* juce_ComboBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComboBox.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.h; sourceTree = SOURCE_ROOT; };
+		3F00C034B140193B3754969B /* jucer_ImageResourceProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ImageResourceProperty.h; path = ../../Source/ComponentEditor/paintelements/jucer_ImageResourceProperty.h; sourceTree = SOURCE_ROOT; };
+		3F8D9C9557E45D151F339F5E /* juce_PreferencesPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PreferencesPanel.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_PreferencesPanel.h; sourceTree = SOURCE_ROOT; };
+		3F9D0CEF873510CCD254A9C5 /* juce_XMLCodeTokeniser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_XMLCodeTokeniser.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp; sourceTree = SOURCE_ROOT; };
+		3F9D4C7F6E5779D4E4AE655D /* jucer_ComponentLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentLayout.h; path = ../../Source/ComponentEditor/jucer_ComponentLayout.h; sourceTree = SOURCE_ROOT; };
+		3FB2A9225024422947E6E654 /* juce_ImageConvolutionKernel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageConvolutionKernel.h; path = ../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageConvolutionKernel.h; sourceTree = SOURCE_ROOT; };
+		3FDA82F89379E99C9E3B5C64 /* juce_SortedSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SortedSet.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_SortedSet.h; sourceTree = SOURCE_ROOT; };
+		400E4C67ABCDDB1D49EBB85E /* jucer_TabbedComponentHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TabbedComponentHandler.h; path = ../../Source/ComponentEditor/components/jucer_TabbedComponentHandler.h; sourceTree = SOURCE_ROOT; };
+		405388248E6EF4212019AC65 /* juce_MarkerList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MarkerList.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_MarkerList.cpp; sourceTree = SOURCE_ROOT; };
+		4064AE577A11F735B2CE87F0 /* juce_SharedResourcePointer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SharedResourcePointer.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_SharedResourcePointer.h; sourceTree = SOURCE_ROOT; };
+		40B4AB02D26ED520104B9363 /* juce_win32_Registry.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Registry.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_win32_Registry.cpp; sourceTree = SOURCE_ROOT; };
+		40B9BA6D711F58DEB6E871BF /* juce_android_SystemStats.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_SystemStats.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_android_SystemStats.cpp; sourceTree = SOURCE_ROOT; };
+		4108E23948D43A46FB88B23E /* juce_RelativeCoordinatePositioner.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeCoordinatePositioner.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp; sourceTree = SOURCE_ROOT; };
+		41105E536155E394E54BDD35 /* colourscheme_dark.xml */ = {isa = PBXFileReference; lastKnownFileType = file.xml; name = colourscheme_dark.xml; path = ../../Source/BinaryData/colourscheme_dark.xml; sourceTree = SOURCE_ROOT; };
+		419A5389244CCE7390877F1D /* juce_Typeface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Typeface.h; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Typeface.h; sourceTree = SOURCE_ROOT; };
+		41CA95403E264AA7457A61F4 /* jucer_PaintElementRoundedRectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementRoundedRectangle.h; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElementRoundedRectangle.h; sourceTree = SOURCE_ROOT; };
+		421BFE95D4EE1C5D12BBB848 /* juce_LuaCodeTokeniser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LuaCodeTokeniser.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.cpp; sourceTree = SOURCE_ROOT; };
+		4301D29792107D6471F29FDF /* juce_FileInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileInputSource.h; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_FileInputSource.h; sourceTree = SOURCE_ROOT; };
+		439A60BB029251ED3752A69A /* juce_ContainerDeletePolicy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ContainerDeletePolicy.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_ContainerDeletePolicy.h; sourceTree = SOURCE_ROOT; };
+		43ACFC660A375B2DEDFE2274 /* juce_ConcertinaPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ConcertinaPanel.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp; sourceTree = SOURCE_ROOT; };
+		43B30439D7A63B0D2CF12AC9 /* juce_TextPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextPropertyComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		43BFDF9214946C6B76CA666D /* juce_DeletedAtShutdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DeletedAtShutdown.cpp; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.cpp; sourceTree = SOURCE_ROOT; };
+		43E13FBEEA6CF191A0D501E5 /* juce_ImageFileFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageFileFormat.h; path = ../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageFileFormat.h; sourceTree = SOURCE_ROOT; };
+		441CFEA771BAA50E187342E9 /* jucer_AppearanceSettings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_AppearanceSettings.cpp; path = ../../Source/Application/jucer_AppearanceSettings.cpp; sourceTree = SOURCE_ROOT; };
+		4467B3824742815D1355DB81 /* juce_UnitTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_UnitTest.h; path = ../../../JuceLibraryCode/modules/juce_core/unit_tests/juce_UnitTest.h; sourceTree = SOURCE_ROOT; };
+		44F454FF28C39CC641FF410B /* juce_WildcardFileFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WildcardFileFilter.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h; sourceTree = SOURCE_ROOT; };
+		45AE1D139D938D43891501E1 /* juce_FillType.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FillType.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/colour/juce_FillType.cpp; sourceTree = SOURCE_ROOT; };
+		46392AD7FE5D6BFED1BE827C /* juce_DropShadowEffect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DropShadowEffect.h; path = ../../../JuceLibraryCode/modules/juce_graphics/effects/juce_DropShadowEffect.h; sourceTree = SOURCE_ROOT; };
+		46515892E00E0D91D920B90C /* juce_FileSearchPath.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileSearchPath.cpp; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_FileSearchPath.cpp; sourceTree = SOURCE_ROOT; };
+		4653C504CADC3A365DCD59D0 /* juce_Expression.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Expression.cpp; path = ../../../JuceLibraryCode/modules/juce_core/maths/juce_Expression.cpp; sourceTree = SOURCE_ROOT; };
+		46F449C23355573E967D351F /* juce_Component.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Component.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Component.cpp; sourceTree = SOURCE_ROOT; };
+		472F9A90F685220D730EBF6C /* BinaryData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = SOURCE_ROOT; };
+		4760F25A96CAB18E75573C0B /* juce_data_structures.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_data_structures.h; path = ../../../JuceLibraryCode/modules/juce_data_structures/juce_data_structures.h; sourceTree = SOURCE_ROOT; };
+		479E55D2A68FC2E14FF2E39A /* juce_RenderingHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RenderingHelpers.h; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h; sourceTree = SOURCE_ROOT; };
+		47B49049B85EED74D29C9906 /* jucer_ProjectTree_File.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectTree_File.h; path = ../../Source/Project/jucer_ProjectTree_File.h; sourceTree = SOURCE_ROOT; };
+		47DD50A5A9091F9900E0EAD9 /* jucer_JucerTreeViewBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_JucerTreeViewBase.cpp; path = ../../Source/Utility/jucer_JucerTreeViewBase.cpp; sourceTree = SOURCE_ROOT; };
+		482C35BB3B7DDE1B452C8455 /* juce_SHA256.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SHA256.h; path = ../../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_SHA256.h; sourceTree = SOURCE_ROOT; };
+		486683F365BE1E8CEE34D4D3 /* juce_BooleanPropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BooleanPropertyComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
+		48ADBB0A2A258CF72F04891A /* juce_DragAndDropContainer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DragAndDropContainer.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h; sourceTree = SOURCE_ROOT; };
+		48F1E4DDD3B2B8E5CC410EE1 /* juce_Viewport.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Viewport.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_Viewport.cpp; sourceTree = SOURCE_ROOT; };
+		497E5C615BFF59384CB2284C /* juce_HashMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_HashMap.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_HashMap.h; sourceTree = SOURCE_ROOT; };
+		498E9D7F6E7F61A84E0D7792 /* juce_LookAndFeel_V1.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LookAndFeel_V1.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp; sourceTree = SOURCE_ROOT; };
+		4A19E61C47E844D661C34DDD /* juce_WildcardFileFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_WildcardFileFilter.cpp; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.cpp; sourceTree = SOURCE_ROOT; };
+		4A41FD3066D0979DB48691E5 /* jucer_MiscUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_MiscUtilities.h; path = ../../Source/Utility/jucer_MiscUtilities.h; sourceTree = SOURCE_ROOT; };
+		4AD7BBD9D7EA422981A8C536 /* juce_RelativeRectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativeRectangle.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeRectangle.h; sourceTree = SOURCE_ROOT; };
+		4B138A2FD1EF34BB254F7C7A /* juce_RelativeTime.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativeTime.h; path = ../../../JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.h; sourceTree = SOURCE_ROOT; };
+		4BD96E9231831D77755CC803 /* juce_TextInputTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextInputTarget.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextInputTarget.h; sourceTree = SOURCE_ROOT; };
+		4BE6A47DF33CCD5619DFE82A /* juce_mac_AppleRemote.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_AppleRemote.mm; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_AppleRemote.mm; sourceTree = SOURCE_ROOT; };
+		4BF00AE19C332EF226420C57 /* juce_Socket.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Socket.cpp; path = ../../../JuceLibraryCode/modules/juce_core/network/juce_Socket.cpp; sourceTree = SOURCE_ROOT; };
+		4C2093BCD3528ACEDC7A2B33 /* jucer_ImageButtonHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ImageButtonHandler.h; path = ../../Source/ComponentEditor/components/jucer_ImageButtonHandler.h; sourceTree = SOURCE_ROOT; };
+		4C2394A14C140490F5F4E9BD /* juce_Image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Image.h; path = ../../../JuceLibraryCode/modules/juce_graphics/images/juce_Image.h; sourceTree = SOURCE_ROOT; };
+		4C80A175986D336D4E1044A7 /* juce_FileLogger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileLogger.h; path = ../../../JuceLibraryCode/modules/juce_core/logging/juce_FileLogger.h; sourceTree = SOURCE_ROOT; };
+		4C8154CEB5C33EFB9E5CB8DC /* juce_ResizableEdgeComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ResizableEdgeComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h; sourceTree = SOURCE_ROOT; };
+		4CA1C3E6585D7694AA9C309F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
+		4CA96F577DD15FB5085518E9 /* juce_ButtonPropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ButtonPropertyComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
+		4CC9356FA92F5C94E4DC65D9 /* juce_MultiTimer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MultiTimer.cpp; path = ../../../JuceLibraryCode/modules/juce_events/timers/juce_MultiTimer.cpp; sourceTree = SOURCE_ROOT; };
+		4DAF01670050184A3BAAA93B /* juce_MemoryBlock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MemoryBlock.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_MemoryBlock.h; sourceTree = SOURCE_ROOT; };
+		4DEBB89A00FBD2C11515FD07 /* juce_StringRef.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StringRef.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_StringRef.h; sourceTree = SOURCE_ROOT; };
+		4DFDC4E1F50427FBAF0B8F81 /* juce_BorderSize.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BorderSize.h; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_BorderSize.h; sourceTree = SOURCE_ROOT; };
+		4E191CDCE7565DB726CF7065 /* jucer_ComponentOverlayComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentOverlayComponent.cpp; path = ../../Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.cpp; sourceTree = SOURCE_ROOT; };
+		4E2A191756179C6616D50B58 /* juce_FilePreviewComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FilePreviewComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h; sourceTree = SOURCE_ROOT; };
+		4E60769DE992CA7FC1A4A486 /* jucer_PaintRoutineEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintRoutineEditor.h; path = ../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.h; sourceTree = SOURCE_ROOT; };
+		4E8FE9B1B8C90FC28D56523B /* jucer_PaintElementEllipse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementEllipse.h; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElementEllipse.h; sourceTree = SOURCE_ROOT; };
+		4EBA5CEE07FB8B2DAA9A0315 /* juce_Timer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Timer.h; path = ../../../JuceLibraryCode/modules/juce_events/timers/juce_Timer.h; sourceTree = SOURCE_ROOT; };
+		4F052A9DD4EFD3C761C7EBA2 /* juce_ApplicationCommandTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandTarget.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h; sourceTree = SOURCE_ROOT; };
+		4F129F3B2CD7B03E97C2F168 /* juce_MouseInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseInputSource.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInputSource.h; sourceTree = SOURCE_ROOT; };
+		4F5572380B51C24AE8D34450 /* juce_MemoryOutputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MemoryOutputStream.h; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryOutputStream.h; sourceTree = SOURCE_ROOT; };
+		4F6365A0D2D51337151D85C3 /* jucer_ProjectTree_Group.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectTree_Group.h; path = ../../Source/Project/jucer_ProjectTree_Group.h; sourceTree = SOURCE_ROOT; };
+		4F687965FBE86EAFDB3ACFEC /* BinaryData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = SOURCE_ROOT; };
+		4F8DCA25AFAD089510C8B48B /* juce_DropShadower.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DropShadower.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_DropShadower.h; sourceTree = SOURCE_ROOT; };
+		5017AF048B9A8F840DA442A0 /* juce_Viewport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Viewport.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_Viewport.h; sourceTree = SOURCE_ROOT; };
+		502A6F378DA7D0BED1380D86 /* juce_AlertWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AlertWindow.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.cpp; sourceTree = SOURCE_ROOT; };
+		50498FF6EA3901CBD58223B3 /* jucer_ObjectTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ObjectTypes.h; path = ../../Source/ComponentEditor/jucer_ObjectTypes.h; sourceTree = SOURCE_ROOT; };
+		507C2DFBFDA8AB08F71ED82D /* juce_FileListComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileListComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileListComponent.h; sourceTree = SOURCE_ROOT; };
+		5091B14CC87C6238CF044258 /* jucer_ElementSiblingComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ElementSiblingComponent.h; path = ../../Source/ComponentEditor/paintelements/jucer_ElementSiblingComponent.h; sourceTree = SOURCE_ROOT; };
+		513AF2A4DB37CC6F47E6CEF0 /* juce_RectanglePlacement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RectanglePlacement.h; path = ../../../JuceLibraryCode/modules/juce_graphics/placement/juce_RectanglePlacement.h; sourceTree = SOURCE_ROOT; };
+		514B0E8E2796ACE7385F6717 /* juce_AbstractFifo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AbstractFifo.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_AbstractFifo.h; sourceTree = SOURCE_ROOT; };
+		515FF6E74826E3E3F7273621 /* jucer_Icons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Icons.h; path = ../../Source/Utility/jucer_Icons.h; sourceTree = SOURCE_ROOT; };
+		519269C6218CA35F731ECA61 /* juce_DropShadowEffect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadowEffect.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/effects/juce_DropShadowEffect.cpp; sourceTree = SOURCE_ROOT; };
+		51D9906830CE2006B74DBFCC /* juce_CustomTypeface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CustomTypeface.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_CustomTypeface.cpp; sourceTree = SOURCE_ROOT; };
+		51DAFE574A52F68CC4A10274 /* juce_BufferedInputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BufferedInputStream.h; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.h; sourceTree = SOURCE_ROOT; };
+		523B197F8A3BCA94C58C6DEF /* juce_URL.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_URL.cpp; path = ../../../JuceLibraryCode/modules/juce_core/network/juce_URL.cpp; sourceTree = SOURCE_ROOT; };
+		5293C026D920F2E0E710447C /* juce_mac_FileChooser.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_FileChooser.mm; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_FileChooser.mm; sourceTree = SOURCE_ROOT; };
+		529B0A44694A54ED99444A0F /* juce_StringPool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StringPool.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_StringPool.h; sourceTree = SOURCE_ROOT; };
+		529B9F1BADEE58EA9F4F8C09 /* juce_android_FileChooser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_FileChooser.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_android_FileChooser.cpp; sourceTree = SOURCE_ROOT; };
+		530ADBF1045867FE90EB8F1F /* juce_win32_Messaging.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Messaging.cpp; path = ../../../JuceLibraryCode/modules/juce_events/native/juce_win32_Messaging.cpp; sourceTree = SOURCE_ROOT; };
+		53151B683E11F420203E61C2 /* jucer_NewCppFileTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewCppFileTemplate.h; path = ../../Source/BinaryData/jucer_NewCppFileTemplate.h; sourceTree = SOURCE_ROOT; };
+		5377705718D6D60A6AA2848F /* juce_win32_ActiveXComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_ActiveXComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp; sourceTree = SOURCE_ROOT; };
+		5432B7B9B2CF2EAEC8B66D5C /* jucer_UtilityFunctions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_UtilityFunctions.h; path = ../../Source/ComponentEditor/jucer_UtilityFunctions.h; sourceTree = SOURCE_ROOT; };
+		54652695DEEBAB24E462DDD9 /* juce_TimeSliceThread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TimeSliceThread.cpp; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_TimeSliceThread.cpp; sourceTree = SOURCE_ROOT; };
+		553725A0E3A391651ED1731E /* jucer_FileHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_FileHelpers.h; path = ../../Source/Utility/jucer_FileHelpers.h; sourceTree = SOURCE_ROOT; };
+		553F3388AADBF8B529B78824 /* juce_String.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_String.cpp; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_String.cpp; sourceTree = SOURCE_ROOT; };
+		55A56A4C2EC5DECEC307EC37 /* juce_TableHeaderComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TableHeaderComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp; sourceTree = SOURCE_ROOT; };
+		55B79C48660935077095DBFD /* juce_DrawableText.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableText.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableText.cpp; sourceTree = SOURCE_ROOT; };
+		5603954CFF21E81C86CCA1CB /* juce_AnimatedPosition.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AnimatedPosition.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPosition.h; sourceTree = SOURCE_ROOT; };
+		563091B0916AD9AAA36C7DC5 /* jucer_OpenDocumentManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_OpenDocumentManager.h; path = ../../Source/Application/jucer_OpenDocumentManager.h; sourceTree = SOURCE_ROOT; };
+		5659718DF6BD054B2B0A875C /* juce_mac_SystemStats.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_SystemStats.mm; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_mac_SystemStats.mm; sourceTree = SOURCE_ROOT; };
+		56ECDE6643205406C32D1CE8 /* juce_ApplicationCommandManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandManager.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h; sourceTree = SOURCE_ROOT; };
+		576D62C0C9C1BA4B7A514721 /* jucer_PositionPropertyBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PositionPropertyBase.h; path = ../../Source/ComponentEditor/properties/jucer_PositionPropertyBase.h; sourceTree = SOURCE_ROOT; };
+		5797A65A441D030729C6E886 /* juce_MultiTimer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MultiTimer.h; path = ../../../JuceLibraryCode/modules/juce_events/timers/juce_MultiTimer.h; sourceTree = SOURCE_ROOT; };
+		5801B222830CA1E1006968BA /* juce_ToggleButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ToggleButton.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToggleButton.h; sourceTree = SOURCE_ROOT; };
+		5805FE3FCA0B3CD8E2851774 /* juce_ImageButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageButton.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.h; sourceTree = SOURCE_ROOT; };
+		58139D8D454051C59E77609B /* RecentFilesMenuTemplate.nib */ = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = ../../Source/BinaryData/RecentFilesMenuTemplate.nib; sourceTree = SOURCE_ROOT; };
+		5823F1EE0F39AE16B560665A /* juce_LowLevelGraphicsSoftwareRenderer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LowLevelGraphicsSoftwareRenderer.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp; sourceTree = SOURCE_ROOT; };
+		5852830ECC222BA36A30EC20 /* jucer_NewFileWizard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewFileWizard.h; path = ../../Source/Project/jucer_NewFileWizard.h; sourceTree = SOURCE_ROOT; };
+		58FA9E2B67AED7330158A903 /* juce_LookAndFeel_V2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LookAndFeel_V2.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h; sourceTree = SOURCE_ROOT; };
+		5909E278D645E1F91C0AE2BB /* juce_ChildProcess.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ChildProcess.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_ChildProcess.h; sourceTree = SOURCE_ROOT; };
+		599957E884512B8314720BBD /* juce_MouseInactivityDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseInactivityDetector.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h; sourceTree = SOURCE_ROOT; };
+		5A11499F36DB882429253BA5 /* juce_ImageConvolutionKernel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageConvolutionKernel.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp; sourceTree = SOURCE_ROOT; };
+		5B28BE68400342E97C084ACC /* juce_Variant.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Variant.cpp; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_Variant.cpp; sourceTree = SOURCE_ROOT; };
+		5B45BF234C7184BE28C59741 /* juce_TopLevelWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TopLevelWindow.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp; sourceTree = SOURCE_ROOT; };
+		5B8805BE8EFB29BFC7BD6D31 /* juce_LiveConstantEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LiveConstantEditor.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_LiveConstantEditor.h; sourceTree = SOURCE_ROOT; };
+		5B9EE26978797CC153F5E24F /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../../JuceLibraryCode/modules/juce_gui_basics/juce_module_info; sourceTree = SOURCE_ROOT; };
+		5BDAE5FD683C0005A609495E /* juce_TimeSliceThread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TimeSliceThread.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_TimeSliceThread.h; sourceTree = SOURCE_ROOT; };
+		5BE9E1B6197D01AB97288253 /* juce_TooltipWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TooltipWindow.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.h; sourceTree = SOURCE_ROOT; };
+		5C454FECFF7234355CEA17D4 /* juce_MultiDocumentPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MultiDocumentPanel.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h; sourceTree = SOURCE_ROOT; };
+		5C6893F610657B9383F9333F /* juce_ReadWriteLock.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ReadWriteLock.cpp; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_ReadWriteLock.cpp; sourceTree = SOURCE_ROOT; };
+		5C96DDE9CD90B82EA3CD6ED8 /* juce_StretchableObjectResizer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableObjectResizer.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp; sourceTree = SOURCE_ROOT; };
+		5CD44EFDD7BA487CDF41760A /* juce_AsyncUpdater.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AsyncUpdater.cpp; path = ../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_AsyncUpdater.cpp; sourceTree = SOURCE_ROOT; };
+		5CE5E5132CEFADC6D48ECB08 /* juce_ApplicationProperties.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationProperties.cpp; path = ../../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp; sourceTree = SOURCE_ROOT; };
+		5D33FED578ADEEBAA8A4CFED /* juce_mac_Fonts.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Fonts.mm; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_Fonts.mm; sourceTree = SOURCE_ROOT; };
+		5D77828FECF00CF108E16599 /* juce_DialogWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DialogWindow.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DialogWindow.h; sourceTree = SOURCE_ROOT; };
+		5D9E7814B713670624F0028F /* jucer_ComponentTypeHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTypeHandler.h; path = ../../Source/ComponentEditor/components/jucer_ComponentTypeHandler.h; sourceTree = SOURCE_ROOT; };
+		5EA02C28A509FAC9D2561AC5 /* juce_SystemStats.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SystemStats.cpp; path = ../../../JuceLibraryCode/modules/juce_core/system/juce_SystemStats.cpp; sourceTree = SOURCE_ROOT; };
+		5EAA527023FD40745056F13B /* juce_ProgressBar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ProgressBar.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ProgressBar.h; sourceTree = SOURCE_ROOT; };
+		5EE461C6611D3669B36F639D /* juce_DrawableText.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableText.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableText.h; sourceTree = SOURCE_ROOT; };
+		5F4AF4400A9511B74E2425EE /* juce_CustomTypeface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CustomTypeface.h; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_CustomTypeface.h; sourceTree = SOURCE_ROOT; };
+		5F4F4EAB042F2730F94A1CEA /* AudioPluginXCodeScript.txt */ = {isa = PBXFileReference; lastKnownFileType = text.txt; name = AudioPluginXCodeScript.txt; path = ../../Source/BinaryData/AudioPluginXCodeScript.txt; sourceTree = SOURCE_ROOT; };
+		5F6584B675E30761521A9F42 /* colourscheme_light.xml */ = {isa = PBXFileReference; lastKnownFileType = file.xml; name = colourscheme_light.xml; path = ../../Source/BinaryData/colourscheme_light.xml; sourceTree = SOURCE_ROOT; };
+		5F99D905AAF0C3F89CEAD965 /* juce_AttributedString.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AttributedString.h; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_AttributedString.h; sourceTree = SOURCE_ROOT; };
+		5FDE1D586B6984E67E3B1E19 /* juce_DrawablePath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawablePath.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawablePath.h; sourceTree = SOURCE_ROOT; };
+		60138E309DBA8366F9AA83A5 /* juce_RecentlyOpenedFilesList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RecentlyOpenedFilesList.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h; sourceTree = SOURCE_ROOT; };
+		60285932750263E48A18908C /* juce_ApplicationCommandManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationCommandManager.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp; sourceTree = SOURCE_ROOT; };
+		6059BA2EC2D80F1A58D047A2 /* juce_CaretComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CaretComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_CaretComponent.h; sourceTree = SOURCE_ROOT; };
+		61096C79B4C094699E9ED296 /* juce_android_Files.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Files.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_android_Files.cpp; sourceTree = SOURCE_ROOT; };
+		61151BEBE0F7E79DFA313076 /* juce_ToolbarItemPalette.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarItemPalette.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h; sourceTree = SOURCE_ROOT; };
+		61538AD86AB82CE59EF6C68D /* juce_posix_SharedCode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_posix_SharedCode.h; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_posix_SharedCode.h; sourceTree = SOURCE_ROOT; };
+		61804EF1D5DC1451EBDAF6C5 /* juce_PropertySet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PropertySet.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_PropertySet.h; sourceTree = SOURCE_ROOT; };
+		61A6870CF7A0DE01A70799B0 /* juce_MouseListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseListener.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseListener.h; sourceTree = SOURCE_ROOT; };
+		61BE37E2B26C25056D9E8FE2 /* jucer_NewComponentTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_NewComponentTemplate.cpp; path = ../../Source/BinaryData/jucer_NewComponentTemplate.cpp; sourceTree = SOURCE_ROOT; };
+		61F8ED9B6C0D09E2665531D3 /* juce_ToolbarItemPalette.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToolbarItemPalette.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp; sourceTree = SOURCE_ROOT; };
+		62112F8E435A750E1D2B28E0 /* juce_SplashScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SplashScreen.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SplashScreen.h; sourceTree = SOURCE_ROOT; };
+		6245DA2AC30B91552C12AD1F /* juce_CharPointer_UTF8.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharPointer_UTF8.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF8.h; sourceTree = SOURCE_ROOT; };
+		630428D04F157F7162C05D59 /* juce_DrawablePath.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawablePath.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawablePath.cpp; sourceTree = SOURCE_ROOT; };
+		631983AA62673015F8D7453B /* jucer_StoredSettings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_StoredSettings.cpp; path = ../../Source/Utility/jucer_StoredSettings.cpp; sourceTree = SOURCE_ROOT; };
+		633CC0CEF05B3ADCEEE1325E /* juce_mac_Threads.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Threads.mm; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_mac_Threads.mm; sourceTree = SOURCE_ROOT; };
+		6350DFE5844B6CB31FB54A80 /* juce_mac_CoreGraphicsHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_mac_CoreGraphicsHelpers.h; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h; sourceTree = SOURCE_ROOT; };
+		63717F00538E1367E2B9D812 /* juce_Button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Button.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h; sourceTree = SOURCE_ROOT; };
+		63754DF4DA5063BF038C359B /* juce_mac_Network.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Network.mm; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_mac_Network.mm; sourceTree = SOURCE_ROOT; };
+		63A4A00461C033BC464E4D34 /* juce_win32_Files.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Files.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_win32_Files.cpp; sourceTree = SOURCE_ROOT; };
+		641338764B8C715715DA7351 /* juce_DrawableRectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableRectangle.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableRectangle.h; sourceTree = SOURCE_ROOT; };
+		641B57E5FAE6BEFDB6462921 /* jucer_ResourceEditorPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ResourceEditorPanel.h; path = ../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.h; sourceTree = SOURCE_ROOT; };
+		64520235EF5529F8C0E4A9A7 /* juce_PopupMenu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PopupMenu.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.cpp; sourceTree = SOURCE_ROOT; };
+		647EBD8D1EAD21592951DD9B /* juce_Line.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Line.h; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Line.h; sourceTree = SOURCE_ROOT; };
+		64EDFDAE0755DC1451F181B8 /* juce_OptionalScopedPointer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OptionalScopedPointer.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_OptionalScopedPointer.h; sourceTree = SOURCE_ROOT; };
+		659B75A15D70B8FE57D1A1BE /* juce_Toolbar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Toolbar.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.h; sourceTree = SOURCE_ROOT; };
+		65C498761CE166072A202AA0 /* jucer_ComponentTypeHandler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentTypeHandler.cpp; path = ../../Source/ComponentEditor/components/jucer_ComponentTypeHandler.cpp; sourceTree = SOURCE_ROOT; };
+		65E82ADF9AEE696576F43E92 /* juce_ComponentMovementWatcher.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentMovementWatcher.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h; sourceTree = SOURCE_ROOT; };
+		65F4749184C84C2FDBB4C305 /* jucer_AudioPluginFilterTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_AudioPluginFilterTemplate.cpp; path = ../../Source/BinaryData/jucer_AudioPluginFilterTemplate.cpp; sourceTree = SOURCE_ROOT; };
+		662C76394C5D1B56766FAFD9 /* jucer_ComponentDocument.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentDocument.cpp; path = ../../Source/ComponentEditor/documents/jucer_ComponentDocument.cpp; sourceTree = SOURCE_ROOT; };
+		66448E472FD5BB3D34B1509B /* juce_android_Messaging.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Messaging.cpp; path = ../../../JuceLibraryCode/modules/juce_events/native/juce_android_Messaging.cpp; sourceTree = SOURCE_ROOT; };
+		665EDD760E47A6AD1A1DBC2D /* juce_MD5.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MD5.h; path = ../../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_MD5.h; sourceTree = SOURCE_ROOT; };
+		6678E9B3EEACAD47F438B264 /* RecentFilesMenuTemplate.nib */ = {isa = PBXFileReference; lastKnownFileType = file.nib; path = RecentFilesMenuTemplate.nib; sourceTree = SOURCE_ROOT; };
+		668D7FDE00212229DFCB2175 /* juce_FileTreeComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileTreeComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h; sourceTree = SOURCE_ROOT; };
+		66B49F08C5EC3E4974825FF8 /* jucer_PaintRoutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintRoutine.h; path = ../../Source/ComponentEditor/jucer_PaintRoutine.h; sourceTree = SOURCE_ROOT; };
+		66B4C39694799AC85ADDBECC /* juce_StretchableLayoutManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableLayoutManager.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp; sourceTree = SOURCE_ROOT; };
+		6737B22BED56A0544E39FD15 /* juce_FileDragAndDropTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileDragAndDropTarget.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h; sourceTree = SOURCE_ROOT; };
+		67FF4A3F3E1CD9583EABE1F6 /* juce_CPlusPlusCodeTokeniser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CPlusPlusCodeTokeniser.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp; sourceTree = SOURCE_ROOT; };
+		68077882A46E2C4E398E4C99 /* juce_MouseCursor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseCursor.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.h; sourceTree = SOURCE_ROOT; };
+		68164EA5DFF5CE5AC2402670 /* juce_OutputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OutputStream.h; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_OutputStream.h; sourceTree = SOURCE_ROOT; };
+		689996FF463D52FEF125AFF3 /* juce_Process.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Process.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_Process.h; sourceTree = SOURCE_ROOT; };
+		69A1792C863C7957A80F6945 /* juce_DeletedAtShutdown.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DeletedAtShutdown.h; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.h; sourceTree = SOURCE_ROOT; };
+		69A5D13490A62DAE9A7D5A22 /* jucer_NewProjectWizard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_NewProjectWizard.cpp; path = ../../Source/Project/jucer_NewProjectWizard.cpp; sourceTree = SOURCE_ROOT; };
+		69BB2D7A2EDAB1C87EA1F688 /* juce_CodeDocument.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CodeDocument.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeDocument.h; sourceTree = SOURCE_ROOT; };
+		69F318BBA51FA30B777135B8 /* juce_TextEditorKeyMapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextEditorKeyMapper.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h; sourceTree = SOURCE_ROOT; };
+		6A337C69A928E3CE79C55457 /* jucer_ComponentChoiceProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentChoiceProperty.h; path = ../../Source/ComponentEditor/properties/jucer_ComponentChoiceProperty.h; sourceTree = SOURCE_ROOT; };
+		6AC17B5D88D0ADBF77420048 /* juce_NativeMessageBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NativeMessageBox.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_NativeMessageBox.h; sourceTree = SOURCE_ROOT; };
+		6AC5756EBCB78FD82C15B829 /* juce_ScopedPointer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedPointer.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_ScopedPointer.h; sourceTree = SOURCE_ROOT; };
+		6AC88EFC247C225CC5C11A43 /* jucer_BinaryResources.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_BinaryResources.h; path = ../../Source/ComponentEditor/jucer_BinaryResources.h; sourceTree = SOURCE_ROOT; };
+		6C25EB12F6DB9F5225E75667 /* juce_ImageButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageButton.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.cpp; sourceTree = SOURCE_ROOT; };
+		6C7A1929978639A482D5096D /* juce_TemporaryFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TemporaryFile.cpp; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_TemporaryFile.cpp; sourceTree = SOURCE_ROOT; };
+		6C867E1E3FEC31970950C620 /* juce_linux_CommonFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_CommonFile.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_linux_CommonFile.cpp; sourceTree = SOURCE_ROOT; };
+		6CA3455CFAA1A52891F55CEF /* juce_MemoryOutputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryOutputStream.cpp; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryOutputStream.cpp; sourceTree = SOURCE_ROOT; };
+		6DB44C43D1260559163A47F0 /* juce_MemoryBlock.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryBlock.cpp; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_MemoryBlock.cpp; sourceTree = SOURCE_ROOT; };
+		6E1D22B93CCB47AB339085E1 /* juce_ThreadWithProgressWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ThreadWithProgressWindow.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp; sourceTree = SOURCE_ROOT; };
+		6E2B6FE06BE3735AA969B526 /* juce_TableHeaderComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TableHeaderComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h; sourceTree = SOURCE_ROOT; };
+		6E6140969908E7619F858740 /* jucer_CommonHeaders.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CommonHeaders.h; path = ../../Source/Application/jucer_CommonHeaders.h; sourceTree = SOURCE_ROOT; };
+		6E7353DFEA8825B515049ABB /* jucer_ProjectExport_Android.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_Android.h; path = "../../Source/Project Saving/jucer_ProjectExport_Android.h"; sourceTree = SOURCE_ROOT; };
+		6ED2213CA4E7E418E74A91E4 /* juce_ThreadPool.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ThreadPool.cpp; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_ThreadPool.cpp; sourceTree = SOURCE_ROOT; };
+		6F2DEA817E140C2659915138 /* juce_BubbleMessageComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BubbleMessageComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp; sourceTree = SOURCE_ROOT; };
+		6F4A2CF770F9E789E695825E /* juce_ios_Windowing.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_ios_Windowing.mm; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_ios_Windowing.mm; sourceTree = SOURCE_ROOT; };
+		6FB8B11C25BB74994A407113 /* juce_ComponentBoundsConstrainer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentBoundsConstrainer.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h; sourceTree = SOURCE_ROOT; };
+		700138BDDB27754A06B56C87 /* juce_TreeView.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TreeView.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.cpp; sourceTree = SOURCE_ROOT; };
+		700F6188EAA73DD57767694F /* juce_ShapeButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ShapeButton.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ShapeButton.h; sourceTree = SOURCE_ROOT; };
+		7038159E5F04B3C75B6A7655 /* juce_PNGLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PNGLoader.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/image_formats/juce_PNGLoader.cpp; sourceTree = SOURCE_ROOT; };
+		70C4E93E7132BEEDDABFDA10 /* juce_JSON.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_JSON.cpp; path = ../../../JuceLibraryCode/modules/juce_core/javascript/juce_JSON.cpp; sourceTree = SOURCE_ROOT; };
+		7211101FFA28400ADBB1D47A /* jucer_Module.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Module.h; path = ../../Source/Project/jucer_Module.h; sourceTree = SOURCE_ROOT; };
+		727511F6927A7B2602A6C689 /* juce_GroupComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GroupComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.cpp; sourceTree = SOURCE_ROOT; };
+		72A66FD9571871FFB455F8B5 /* juce_MessageListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MessageListener.h; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_MessageListener.h; sourceTree = SOURCE_ROOT; };
+		72BB08B37FC311C133A01F95 /* juce_Javascript.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Javascript.h; path = ../../../JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.h; sourceTree = SOURCE_ROOT; };
+		72EC62B05E134F85761E642E /* juce_CallbackMessage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CallbackMessage.h; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_CallbackMessage.h; sourceTree = SOURCE_ROOT; };
+		73425A7FACB8FEE3D7A7C567 /* juce_PathStrokeType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PathStrokeType.h; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathStrokeType.h; sourceTree = SOURCE_ROOT; };
+		73D0EA57406DF9583EE8FB3B /* juce_FileFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileFilter.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileFilter.h; sourceTree = SOURCE_ROOT; };
+		742B8388A246A9E984457C7A /* juce_mac_CarbonViewWrapperComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_mac_CarbonViewWrapperComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h; sourceTree = SOURCE_ROOT; };
+		75087C822B7871FA849D2909 /* juce_ResizableCornerComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ResizableCornerComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h; sourceTree = SOURCE_ROOT; };
+		7545BFF1C7C857A810B0483D /* juce_linux_Network.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Network.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_linux_Network.cpp; sourceTree = SOURCE_ROOT; };
+		756D2E74350285D4082EFD8E /* juce_PerformanceCounter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PerformanceCounter.h; path = ../../../JuceLibraryCode/modules/juce_core/time/juce_PerformanceCounter.h; sourceTree = SOURCE_ROOT; };
+		7577BF4DE64CD865088A612E /* juce_AttributedString.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AttributedString.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_AttributedString.cpp; sourceTree = SOURCE_ROOT; };
+		760A535A2680C8B3C44B59C5 /* juce_Font.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Font.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Font.cpp; sourceTree = SOURCE_ROOT; };
+		76E2E826701240CDD4DEDA57 /* juce_android_GraphicsContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_GraphicsContext.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_android_GraphicsContext.cpp; sourceTree = SOURCE_ROOT; };
+		76EF37EBCCA75161A3561F9D /* juce_DragAndDropContainer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DragAndDropContainer.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp; sourceTree = SOURCE_ROOT; };
+		785740092163D40EE36BDA5B /* juce_Typeface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Typeface.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Typeface.cpp; sourceTree = SOURCE_ROOT; };
+		786095D2FAF63CBC05B170C6 /* juce_RelativePoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativePoint.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePoint.h; sourceTree = SOURCE_ROOT; };
+		7861B7ACECC987D58C7D0309 /* juce_ScopedWriteLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedWriteLock.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_ScopedWriteLock.h; sourceTree = SOURCE_ROOT; };
+		786BAF436828865F45314440 /* jucer_PaintElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElement.h; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElement.h; sourceTree = SOURCE_ROOT; };
+		78CA0E0F336229E2E2F111B0 /* jucer_SourceCodeEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_SourceCodeEditor.h; path = "../../Source/Code Editor/jucer_SourceCodeEditor.h"; sourceTree = SOURCE_ROOT; };
+		78D0DBC4798FF040FDB90F6D /* jucer_GeneratedCode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_GeneratedCode.cpp; path = ../../Source/ComponentEditor/jucer_GeneratedCode.cpp; sourceTree = SOURCE_ROOT; };
+		79366BF7CA160E7EFC7823C4 /* juce_MouseInactivityDetector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseInactivityDetector.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp; sourceTree = SOURCE_ROOT; };
+		79DF7512BC6437E5E29E3CFB /* juce_PropertiesFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertiesFile.cpp; path = ../../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp; sourceTree = SOURCE_ROOT; };
+		7A3E96D22F1C9EB4C739834F /* jucer_PointComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PointComponent.h; path = ../../Source/ComponentEditor/paintelements/jucer_PointComponent.h; sourceTree = SOURCE_ROOT; };
+		7AEAEEF9959046D9827CCB56 /* juce_ComponentPeer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentPeer.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp; sourceTree = SOURCE_ROOT; };
+		7B4E33B1E04139F359FB484B /* jucer_ConfigTree_Exporter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ConfigTree_Exporter.h; path = ../../Source/Project/jucer_ConfigTree_Exporter.h; sourceTree = SOURCE_ROOT; };
+		7BB3AB4907661D6FED799B7C /* juce_ComponentMovementWatcher.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentMovementWatcher.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp; sourceTree = SOURCE_ROOT; };
+		7BBA8AF8E7872672F190C1C7 /* juce_LookAndFeel_V3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LookAndFeel_V3.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h; sourceTree = SOURCE_ROOT; };
+		7BD4BCAA20B1ACED28EBBFD9 /* juce_mac_CoreGraphicsContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_mac_CoreGraphicsContext.h; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h; sourceTree = SOURCE_ROOT; };
+		7BD8AE7287AB53880575A757 /* juce_Drawable.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Drawable.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_Drawable.cpp; sourceTree = SOURCE_ROOT; };
+		7C0528B4912955DA59C28356 /* juce_URL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_URL.h; path = ../../../JuceLibraryCode/modules/juce_core/network/juce_URL.h; sourceTree = SOURCE_ROOT; };
+		7D33879BE42FD18DA0E7833E /* juce_DocumentWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DocumentWindow.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.h; sourceTree = SOURCE_ROOT; };
+		7D6B19FB1AAA04D27716457B /* juce_CaretComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CaretComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp; sourceTree = SOURCE_ROOT; };
+		7DBCC7A6E5B251DA94AB0EE0 /* juce_DrawableRectangle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableRectangle.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp; sourceTree = SOURCE_ROOT; };
+		7E1CE53CFD909089387910AF /* juce_HeapBlock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_HeapBlock.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_HeapBlock.h; sourceTree = SOURCE_ROOT; };
+		7E47A29DD9817618F48068FF /* juce_ResizableEdgeComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableEdgeComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp; sourceTree = SOURCE_ROOT; };
+		7E8730C293CF253B56930440 /* juce_DrawableImage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableImage.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableImage.cpp; sourceTree = SOURCE_ROOT; };
+		7F3AE35521DFE092953385B6 /* juce_FileSearchPathListComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPathListComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h; sourceTree = SOURCE_ROOT; };
+		800206C482A2C7E62682C324 /* juce_ReadWriteLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ReadWriteLock.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_ReadWriteLock.h; sourceTree = SOURCE_ROOT; };
+		800B30FB2437B98A1423838A /* juce_XmlElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_XmlElement.h; path = ../../../JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.h; sourceTree = SOURCE_ROOT; };
+		801143A09B8A467EA47EBA27 /* juce_TextLayout.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextLayout.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_TextLayout.cpp; sourceTree = SOURCE_ROOT; };
+		8090981F07A76E465DAAADF4 /* jucer_ValueSourceHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ValueSourceHelpers.h; path = ../../Source/Utility/jucer_ValueSourceHelpers.h; sourceTree = SOURCE_ROOT; };
+		8138A55052E9FC27284B74DD /* jucer_FontPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_FontPropertyComponent.h; path = ../../Source/ComponentEditor/properties/jucer_FontPropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		814A077ED7A54254415C309C /* juce_Initialisation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Initialisation.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/application/juce_Initialisation.h; sourceTree = SOURCE_ROOT; };
+		81704510C0CA45994B69AF05 /* juce_TopLevelWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TopLevelWindow.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TopLevelWindow.h; sourceTree = SOURCE_ROOT; };
+		81A3DED7F13085DF8C8190AB /* juce_Result.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Result.h; path = ../../../JuceLibraryCode/modules/juce_core/misc/juce_Result.h; sourceTree = SOURCE_ROOT; };
+		820291543BF93243B718F0EE /* jucer_JucerTreeViewBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerTreeViewBase.h; path = ../../Source/Utility/jucer_JucerTreeViewBase.h; sourceTree = SOURCE_ROOT; };
+		8216291F3E0D0926D64AD98C /* juce_BufferedInputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BufferedInputStream.cpp; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.cpp; sourceTree = SOURCE_ROOT; };
+		822A59FE23E0E962993EFF1C /* juce_android_Windowing.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Windowing.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_android_Windowing.cpp; sourceTree = SOURCE_ROOT; };
+		825F21A8A32CC0FD20B845A6 /* juce_WebBrowserComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WebBrowserComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h; sourceTree = SOURCE_ROOT; };
+		82976E18712BAE638A132F02 /* juce_InterProcessLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_InterProcessLock.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_InterProcessLock.h; sourceTree = SOURCE_ROOT; };
+		82C7BF9F5E863E647438A8AA /* juce_MouseInputSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseInputSource.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp; sourceTree = SOURCE_ROOT; };
+		83C7547CCAFCBB88F791FED8 /* juce_PopupMenu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PopupMenu.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h; sourceTree = SOURCE_ROOT; };
+		84493A7AD6B0398B732461FB /* juce_DrawableImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableImage.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableImage.h; sourceTree = SOURCE_ROOT; };
+		849641B50DB4AE6CCA1C543F /* juce_ElementComparator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ElementComparator.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_ElementComparator.h; sourceTree = SOURCE_ROOT; };
+		84BC9171F02182D3AFD04F66 /* juce_RecentlyOpenedFilesList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RecentlyOpenedFilesList.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp; sourceTree = SOURCE_ROOT; };
+		84E06858791DF81E37B9A484 /* juce_CriticalSection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CriticalSection.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_CriticalSection.h; sourceTree = SOURCE_ROOT; };
+		84EB1282EE3C5F3A1DF70A54 /* juce_TooltipWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TooltipWindow.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp; sourceTree = SOURCE_ROOT; };
+		8531F4060FE4BEBEC2E8EF9F /* juce_RelativeParallelogram.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativeParallelogram.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h; sourceTree = SOURCE_ROOT; };
+		85B2B84227B39C31FE9D790A /* juce_TextEditor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextEditor.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.h; sourceTree = SOURCE_ROOT; };
+		85B48563B4437E1E27ACABAD /* juce_ConnectedChildProcess.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ConnectedChildProcess.cpp; path = ../../../JuceLibraryCode/modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp; sourceTree = SOURCE_ROOT; };
+		865F57EEFDD6F194FCE3FD8F /* juce_PathIterator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PathIterator.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathIterator.cpp; sourceTree = SOURCE_ROOT; };
+		867952C0062DAA52FE4345B1 /* juce_DocumentWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DocumentWindow.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.cpp; sourceTree = SOURCE_ROOT; };
+		8681C46D7B7D05BEEB56E44E /* juce_ShapeButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ShapeButton.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ShapeButton.cpp; sourceTree = SOURCE_ROOT; };
+		86E468DE6556BB2AD76A3D80 /* jucer_ProjectContentComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectContentComponent.cpp; path = ../../Source/Project/jucer_ProjectContentComponent.cpp; sourceTree = SOURCE_ROOT; };
+		86E8A40E5A83781A8478454D /* jucer_MainTemplate_Window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_MainTemplate_Window.cpp; path = ../../Source/BinaryData/jucer_MainTemplate_Window.cpp; sourceTree = SOURCE_ROOT; };
+		86EC32D1F0A4D7678B298631 /* juce_linux_Threads.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Threads.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_linux_Threads.cpp; sourceTree = SOURCE_ROOT; };
+		8702F43110E4CCA5E5F827F5 /* AppConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = SOURCE_ROOT; };
+		87B65D3DBFD7D35B15010226 /* juce_FileListComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileListComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp; sourceTree = SOURCE_ROOT; };
+		87C711AFE0DEEC1FA8AD9465 /* juce_Point.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Point.h; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Point.h; sourceTree = SOURCE_ROOT; };
+		880D1F031B50F965A56B7240 /* juce_Colours.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Colours.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colours.cpp; sourceTree = SOURCE_ROOT; };
+		88332B74FC9B9BE2F60D7EAB /* juce_GZIPDecompressorInputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GZIPDecompressorInputStream.h; path = ../../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPDecompressorInputStream.h; sourceTree = SOURCE_ROOT; };
+		8887ADA2A339C0BD9AFF83DA /* juce_PropertiesFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PropertiesFile.h; path = ../../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.h; sourceTree = SOURCE_ROOT; };
+		88E1573706105D51541F4CA5 /* juce_SelectedItemSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SelectedItemSet.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_SelectedItemSet.h; sourceTree = SOURCE_ROOT; };
+		8B2E98629FB118FAAB8E2476 /* juce_mac_NSViewComponent.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_NSViewComponent.mm; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm; sourceTree = SOURCE_ROOT; };
+		8B5073191880BFFDF8B3BE6E /* juce_ResizableBorderComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableBorderComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp; sourceTree = SOURCE_ROOT; };
+		8C07D2E980420174DF513BEF /* juce_TextDiff.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextDiff.cpp; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_TextDiff.cpp; sourceTree = SOURCE_ROOT; };
+		8C48F6C90CB6D2CBB19511B3 /* juce_CPlusPlusCodeTokeniser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CPlusPlusCodeTokeniser.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h; sourceTree = SOURCE_ROOT; };
+		8C52A3DDA62A746AA7A68535 /* jucer_Main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Main.cpp; path = ../../Source/Application/jucer_Main.cpp; sourceTree = SOURCE_ROOT; };
+		8D89602169EF2FB7E38F8C0D /* juce_PreferencesPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PreferencesPanel.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp; sourceTree = SOURCE_ROOT; };
+		8E673D43C2CD68894A10B99D /* juce_mac_MouseCursor.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_MouseCursor.mm; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_MouseCursor.mm; sourceTree = SOURCE_ROOT; };
+		8EE709A982B89A4C752303BC /* juce_PropertySet.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertySet.cpp; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_PropertySet.cpp; sourceTree = SOURCE_ROOT; };
+		8F14D66EAF9B6219C5D1C510 /* juce_MACAddress.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MACAddress.cpp; path = ../../../JuceLibraryCode/modules/juce_core/network/juce_MACAddress.cpp; sourceTree = SOURCE_ROOT; };
+		8F30A53C7FE4BC65171FB3E2 /* jucer_JucerDocument.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerDocument.h; path = ../../Source/ComponentEditor/jucer_JucerDocument.h; sourceTree = SOURCE_ROOT; };
+		8F355E9A0D4E3B4DF00E7BA9 /* juce_ImageCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageCache.h; path = ../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.h; sourceTree = SOURCE_ROOT; };
+		8F8BF1A7130D858E0A239F9E /* jucer_ConfigTree_Base.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ConfigTree_Base.h; path = ../../Source/Project/jucer_ConfigTree_Base.h; sourceTree = SOURCE_ROOT; };
+		9069981E414A631B036CC9AC /* jucer_MainWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_MainWindow.cpp; path = ../../Source/Application/jucer_MainWindow.cpp; sourceTree = SOURCE_ROOT; };
+		9091730D608EEEA35977BC1D /* juce_StretchableLayoutManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StretchableLayoutManager.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h; sourceTree = SOURCE_ROOT; };
+		909FCA929A162A919ABF6575 /* juce_DrawableComposite.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableComposite.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp; sourceTree = SOURCE_ROOT; };
+		90B9A4673FDC35841E5D4562 /* juce_core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_core.h; path = ../../../JuceLibraryCode/modules/juce_core/juce_core.h; sourceTree = SOURCE_ROOT; };
+		914ADDB50ED7365F08BA91F9 /* jucer_CodeHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CodeHelpers.h; path = ../../Source/Utility/jucer_CodeHelpers.h; sourceTree = SOURCE_ROOT; };
+		914C0B02F52FA4C06116EDB1 /* juce_KeyPressMappingSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KeyPressMappingSet.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h; sourceTree = SOURCE_ROOT; };
+		9153965AAA76A86DFCAEE86E /* juce_MemoryMappedFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MemoryMappedFile.h; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_MemoryMappedFile.h; sourceTree = SOURCE_ROOT; };
+		91A9050F591F2E03EA96203A /* juce_KeyboardFocusTraverser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyboardFocusTraverser.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp; sourceTree = SOURCE_ROOT; };
+		921752D9B004A15973DDF56F /* jucer_TestComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_TestComponent.cpp; path = ../../Source/ComponentEditor/ui/jucer_TestComponent.cpp; sourceTree = SOURCE_ROOT; };
+		921FBD47F9842396F1CB22ED /* juce_mac_Windowing.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Windowing.mm; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_Windowing.mm; sourceTree = SOURCE_ROOT; };
+		923B69234C15988DFF1E8423 /* juce_CharPointer_ASCII.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharPointer_ASCII.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_ASCII.h; sourceTree = SOURCE_ROOT; };
+		9245B8936083D87061E4FE15 /* juce_ApplicationBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationBase.h; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_ApplicationBase.h; sourceTree = SOURCE_ROOT; };
+		92B6276B30F89F742E78A265 /* juce_HighResolutionTimer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_HighResolutionTimer.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_HighResolutionTimer.h; sourceTree = SOURCE_ROOT; };
+		92BE7C40FE77D34FFF39D9BB /* juce_DropShadower.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadower.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_DropShadower.cpp; sourceTree = SOURCE_ROOT; };
+		92E4C9A69A2DAD900D128A02 /* juce_HyperlinkButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_HyperlinkButton.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp; sourceTree = SOURCE_ROOT; };
+		92F91DC29B64AD85B1F508BD /* jucer_GenericComponentHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GenericComponentHandler.h; path = ../../Source/ComponentEditor/components/jucer_GenericComponentHandler.h; sourceTree = SOURCE_ROOT; };
+		93B419190CCE92ACAB1ED25B /* jucer_ColouredElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ColouredElement.cpp; path = ../../Source/ComponentEditor/paintelements/jucer_ColouredElement.cpp; sourceTree = SOURCE_ROOT; };
+		93B474F28D09D858DE16E881 /* juce_UnitTest.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_UnitTest.cpp; path = ../../../JuceLibraryCode/modules/juce_core/unit_tests/juce_UnitTest.cpp; sourceTree = SOURCE_ROOT; };
+		93C5BEADA1AB1CFF7B167D2F /* juce_Random.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Random.cpp; path = ../../../JuceLibraryCode/modules/juce_core/maths/juce_Random.cpp; sourceTree = SOURCE_ROOT; };
+		93D03B2BC76998A3BDA747E8 /* jucer_AudioPluginModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_AudioPluginModule.h; path = ../../Source/Project/jucer_AudioPluginModule.h; sourceTree = SOURCE_ROOT; };
+		94232610F41512C7040EDA38 /* juce_MenuBarComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MenuBarComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarComponent.h; sourceTree = SOURCE_ROOT; };
+		945A4B296E9562BEFF95884A /* juce_ValueTree.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ValueTree.h; path = ../../../JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTree.h; sourceTree = SOURCE_ROOT; };
+		94A8C75647A8777AC35F13FC /* juce_android_Threads.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Threads.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_android_Threads.cpp; sourceTree = SOURCE_ROOT; };
+		94E38DB823EBBA437181682F /* juce_MathsFunctions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MathsFunctions.h; path = ../../../JuceLibraryCode/modules/juce_core/maths/juce_MathsFunctions.h; sourceTree = SOURCE_ROOT; };
+		951128CA33CCDEF570436B1C /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; };
+		95220AF02A9BEC790D84413E /* juce_win32_DirectWriteTypeface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DirectWriteTypeface.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp; sourceTree = SOURCE_ROOT; };
+		9559DA09C937A41B88227D80 /* juce_ToolbarItemComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarItemComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h; sourceTree = SOURCE_ROOT; };
+		95604CB3BD2C7745FD8FDB74 /* juce_WaitableEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WaitableEvent.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_WaitableEvent.h; sourceTree = SOURCE_ROOT; };
+		957D4AC1FE338B82C790FDF7 /* juce_LeakedObjectDetector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LeakedObjectDetector.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_LeakedObjectDetector.h; sourceTree = SOURCE_ROOT; };
+		95A64B8A811BB2D78C6F13B9 /* juce_ApplicationCommandInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandInfo.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h; sourceTree = SOURCE_ROOT; };
+		95BAFFF3DDCB31F1E4F5F807 /* juce_Colour.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Colour.h; path = ../../../JuceLibraryCode/modules/juce_graphics/colour/juce_Colour.h; sourceTree = SOURCE_ROOT; };
+		95CBFF7351F89C117E30292A /* juce_TextLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextLayout.h; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_TextLayout.h; sourceTree = SOURCE_ROOT; };
+		963891BF1C9BC566FCF433B7 /* juce_InterprocessConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InterprocessConnection.cpp; path = ../../../JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnection.cpp; sourceTree = SOURCE_ROOT; };
+		963E0740B7B4D59EF2D16740 /* jucer_ComponentTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTemplate.h; path = ../../Source/BinaryData/jucer_ComponentTemplate.h; sourceTree = SOURCE_ROOT; };
+		9683B04CA3BD7F73E8236FE2 /* jucer_ContentCompTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ContentCompTemplate.cpp; path = ../../Source/BinaryData/jucer_ContentCompTemplate.cpp; sourceTree = SOURCE_ROOT; };
+		96BD2AC4C892C245E04B8A93 /* juce_ChildProcess.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChildProcess.cpp; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_ChildProcess.cpp; sourceTree = SOURCE_ROOT; };
+		97227974323F8526EB062F78 /* juce_FileChooserDialogBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileChooserDialogBox.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp; sourceTree = SOURCE_ROOT; };
+		974B862C51DA9A16CBBB3A29 /* jucer_ProjectExport_XCode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_XCode.h; path = "../../Source/Project Saving/jucer_ProjectExport_XCode.h"; sourceTree = SOURCE_ROOT; };
+		97C816B1B6B7FBC38DF10303 /* juce_ApplicationCommandInfo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationCommandInfo.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp; sourceTree = SOURCE_ROOT; };
+		97E75A598791645465FEDCE1 /* jucer_EditingPanelBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_EditingPanelBase.h; path = ../../Source/ComponentEditor/ui/jucer_EditingPanelBase.h; sourceTree = SOURCE_ROOT; };
+		981A11A17B5DD50BC2A69F33 /* juce_CodeEditorComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CodeEditorComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp; sourceTree = SOURCE_ROOT; };
+		984CCFC22599870F2BC0611E /* juce_MouseEvent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseEvent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseEvent.cpp; sourceTree = SOURCE_ROOT; };
+		987490B430B80B4FA2792176 /* juce_ModalComponentManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ModalComponentManager.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ModalComponentManager.cpp; sourceTree = SOURCE_ROOT; };
+		987C3D5A7CC55FB19AD24294 /* juce_StretchableLayoutResizerBar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableLayoutResizerBar.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp; sourceTree = SOURCE_ROOT; };
+		9899685BD109C2475BA4F8A1 /* juce_MessageManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MessageManager.h; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.h; sourceTree = SOURCE_ROOT; };
+		98F42686D9DAC974F2514217 /* jucer_EditingPanelBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_EditingPanelBase.cpp; path = ../../Source/ComponentEditor/ui/jucer_EditingPanelBase.cpp; sourceTree = SOURCE_ROOT; };
+		993AD03D61870459F867B2F5 /* juce_ApplicationCommandID.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandID.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandID.h; sourceTree = SOURCE_ROOT; };
+		99623EB9527119388EEDC8E6 /* juce_win32_Network.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Network.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_win32_Network.cpp; sourceTree = SOURCE_ROOT; };
+		9993F2BAA90AA22D16B7F40B /* juce_graphics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_graphics.mm; path = ../../../JuceLibraryCode/modules/juce_graphics/juce_graphics.mm; sourceTree = SOURCE_ROOT; };
+		9A154A0F904C15BF6E1253F5 /* juce_FileFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileFilter.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp; sourceTree = SOURCE_ROOT; };
+		9A7D5A94730758251DC8E4FD /* juce_DirectoryIterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryIterator.h; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_DirectoryIterator.h; sourceTree = SOURCE_ROOT; };
+		9B3076A1D57D614DB7B4657E /* juce_ColourGradient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ColourGradient.h; path = ../../../JuceLibraryCode/modules/juce_graphics/colour/juce_ColourGradient.h; sourceTree = SOURCE_ROOT; };
+		9B4AAEAD95B93FA8F2348E27 /* juce_linux_Fonts.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Fonts.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_linux_Fonts.cpp; sourceTree = SOURCE_ROOT; };
+		9B9CAD20E1243B4351B4C8D8 /* jucer_CodeHelpers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_CodeHelpers.cpp; path = ../../Source/Utility/jucer_CodeHelpers.cpp; sourceTree = SOURCE_ROOT; };
+		9BC8AE609A07657CEF587548 /* jucer_StoredSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_StoredSettings.h; path = ../../Source/Utility/jucer_StoredSettings.h; sourceTree = SOURCE_ROOT; };
+		9C04F9680F82BF279D528688 /* jucer_ProjectSaver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectSaver.h; path = "../../Source/Project Saving/jucer_ProjectSaver.h"; sourceTree = SOURCE_ROOT; };
+		9C1D8A8FAA2439A8EA2DD800 /* juce_MD5.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MD5.cpp; path = ../../../JuceLibraryCode/modules/juce_cryptography/hashing/juce_MD5.cpp; sourceTree = SOURCE_ROOT; };
+		9C51394634F102DEBBE6C9EB /* jucer_PaintElementText.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementText.h; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElementText.h; sourceTree = SOURCE_ROOT; };
+		9C7FA58D223674C4C2AC6595 /* jucer_JucerDocumentEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_JucerDocumentEditor.cpp; path = ../../Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp; sourceTree = SOURCE_ROOT; };
+		9C803826E5E3FDB1B37660D5 /* jucer_ComponentDocument.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentDocument.h; path = ../../Source/ComponentEditor/documents/jucer_ComponentDocument.h; sourceTree = SOURCE_ROOT; };
+		9CADF9A1F79D9D1ECC7147E9 /* juce_ComponentDragger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentDragger.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp; sourceTree = SOURCE_ROOT; };
+		9D7689451732AF8333402B3A /* jucer_ObjectTypes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ObjectTypes.cpp; path = ../../Source/ComponentEditor/jucer_ObjectTypes.cpp; sourceTree = SOURCE_ROOT; };
+		9DBDA8C274E693DF449FF525 /* juce_MemoryInputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MemoryInputStream.h; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_MemoryInputStream.h; sourceTree = SOURCE_ROOT; };
+		9DBE1CE382EE797178B3D35F /* juce_Message.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Message.h; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_Message.h; sourceTree = SOURCE_ROOT; };
+		9E6BAEF28A55F7F349A15DDC /* juce_ios_MessageManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_ios_MessageManager.mm; path = ../../../JuceLibraryCode/modules/juce_events/native/juce_ios_MessageManager.mm; sourceTree = SOURCE_ROOT; };
+		9EDDEEBCF410FDF5B96FAD65 /* juce_StretchableObjectResizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StretchableObjectResizer.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h; sourceTree = SOURCE_ROOT; };
+		9EF583A6201DBC813C2F63C4 /* jucer_BinaryResources.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_BinaryResources.cpp; path = ../../Source/ComponentEditor/jucer_BinaryResources.cpp; sourceTree = SOURCE_ROOT; };
+		9EFCD465B3A75D9E2556DA0E /* juce_MouseListener.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseListener.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseListener.cpp; sourceTree = SOURCE_ROOT; };
+		9EFFD9F226690A84BBA574C4 /* juce_win32_WebBrowserComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_WebBrowserComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp; sourceTree = SOURCE_ROOT; };
+		9F41F3338BF00D0FC74C6390 /* jucer_TestComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TestComponent.h; path = ../../Source/ComponentEditor/ui/jucer_TestComponent.h; sourceTree = SOURCE_ROOT; };
+		9F58502C5ADE97059BD8BFE3 /* juce_RelativePointPath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativePointPath.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePointPath.h; sourceTree = SOURCE_ROOT; };
+		9F75811FE7B5F8D1321BEC69 /* jucer_ConfigTree_Modules.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ConfigTree_Modules.h; path = ../../Source/Project/jucer_ConfigTree_Modules.h; sourceTree = SOURCE_ROOT; };
+		A039067FA15840674DB4CA0B /* juce_ImageCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageCache.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.cpp; sourceTree = SOURCE_ROOT; };
+		A0951828C3BF47FA7E1E52F8 /* jucer_ViewportHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ViewportHandler.h; path = ../../Source/ComponentEditor/components/jucer_ViewportHandler.h; sourceTree = SOURCE_ROOT; };
+		A191412DDC58FCC5A67373FD /* juce_ComponentAnimator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentAnimator.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp; sourceTree = SOURCE_ROOT; };
+		A2B4202B1078374D5D0A2FA0 /* juce_XmlDocument.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_XmlDocument.h; path = ../../../JuceLibraryCode/modules/juce_core/xml/juce_XmlDocument.h; sourceTree = SOURCE_ROOT; };
+		A2F1EA2989EF154ADBFDC4C3 /* juce_RelativeParallelogram.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeParallelogram.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp; sourceTree = SOURCE_ROOT; };
+		A350F5C1C50024670090021B /* juce_JPEGLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_JPEGLoader.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/image_formats/juce_JPEGLoader.cpp; sourceTree = SOURCE_ROOT; };
+		A3632F10CD01DB5263F628F0 /* juce_ListBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ListBox.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.cpp; sourceTree = SOURCE_ROOT; };
+		A36D9A1D559944BB4EAF2F5E /* juce_mac_NSViewComponentPeer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_NSViewComponentPeer.mm; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm; sourceTree = SOURCE_ROOT; };
+		A3A4DC7DB79039626E4A311C /* juce_win32_Threads.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Threads.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_win32_Threads.cpp; sourceTree = SOURCE_ROOT; };
+		A3AC7148A7357852CA7018AF /* juce_Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Application.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/application/juce_Application.cpp; sourceTree = SOURCE_ROOT; };
+		A3F5671F82CBAC136EEA4D26 /* juce_FileChooser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileChooser.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp; sourceTree = SOURCE_ROOT; };
+		A42E6A76BCFC6504676EBE8B /* juce_TextEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextEditor.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.cpp; sourceTree = SOURCE_ROOT; };
+		A51E4D49C37A60CC0BCE4246 /* juce_AppleRemote.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AppleRemote.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_AppleRemote.h; sourceTree = SOURCE_ROOT; };
+		A6B4EF8DBA1476D85FE0E927 /* juce_TemporaryFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TemporaryFile.h; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_TemporaryFile.h; sourceTree = SOURCE_ROOT; };
+		A6D3D648059361F5836DE280 /* juce_ComponentListener.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentListener.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.cpp; sourceTree = SOURCE_ROOT; };
+		A73C997FBB6C26B632CBAE15 /* juce_Primes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Primes.cpp; path = ../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_Primes.cpp; sourceTree = SOURCE_ROOT; };
+		A7DD1B727D226AE589E87E4A /* juce_Uuid.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Uuid.cpp; path = ../../../JuceLibraryCode/modules/juce_core/misc/juce_Uuid.cpp; sourceTree = SOURCE_ROOT; };
+		A8C8924ADBF29D01FDFD62BE /* juce_ImageFileFormat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageFileFormat.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageFileFormat.cpp; sourceTree = SOURCE_ROOT; };
+		A9208187F15083F4FC55E0E8 /* juce_Label.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Label.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.cpp; sourceTree = SOURCE_ROOT; };
+		A947623ED5EA00C6C3FD8EBE /* juce_HyperlinkButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_HyperlinkButton.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_HyperlinkButton.h; sourceTree = SOURCE_ROOT; };
+		A9888AA5368432DCA5F64910 /* juce_ComponentBoundsConstrainer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentBoundsConstrainer.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp; sourceTree = SOURCE_ROOT; };
+		A99E772786C0A210E4CDF0D4 /* juce_FileSearchPathListComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileSearchPathListComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp; sourceTree = SOURCE_ROOT; };
+		A9BAF0420FC4DC07011EA244 /* juce_CodeTokeniser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CodeTokeniser.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h; sourceTree = SOURCE_ROOT; };
+		AA4578A9110E724AB87DF869 /* juce_TextDiff.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextDiff.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_TextDiff.h; sourceTree = SOURCE_ROOT; };
+		AA8EED79F095953D2B5923B8 /* jucer_ComponentColourProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentColourProperty.h; path = ../../Source/ComponentEditor/properties/jucer_ComponentColourProperty.h; sourceTree = SOURCE_ROOT; };
+		AAC42C49D961A534FE64882E /* juce_MessageListener.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MessageListener.cpp; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_MessageListener.cpp; sourceTree = SOURCE_ROOT; };
+		ABD9D1389B5591B2303990F9 /* juce_Timer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Timer.cpp; path = ../../../JuceLibraryCode/modules/juce_events/timers/juce_Timer.cpp; sourceTree = SOURCE_ROOT; };
+		AC544E614702255B972E1E8F /* juce_linux_SystemTrayIcon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_SystemTrayIcon.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp; sourceTree = SOURCE_ROOT; };
+		AC70D9D3E27592DD5D19B935 /* juce_FileFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileFilter.cpp; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_FileFilter.cpp; sourceTree = SOURCE_ROOT; };
+		AD828AEF8A826DCAD19095B7 /* juce_DirectoryContentsDisplayComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryContentsDisplayComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp; sourceTree = SOURCE_ROOT; };
+		AE1BC6DCCFC1A18E2ACE23F1 /* jucer_MainTemplate_NoWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_MainTemplate_NoWindow.cpp; path = ../../Source/BinaryData/jucer_MainTemplate_NoWindow.cpp; sourceTree = SOURCE_ROOT; };
+		AF51A8DC8E67D8EB660AD6D0 /* juce_Value.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Value.h; path = ../../../JuceLibraryCode/modules/juce_data_structures/values/juce_Value.h; sourceTree = SOURCE_ROOT; };
+		AF9453BB7F2479400D4A144B /* juce_StringArray.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StringArray.cpp; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_StringArray.cpp; sourceTree = SOURCE_ROOT; };
+		AFEBD8423B07599B1DE175A3 /* jucer_ModulesPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ModulesPanel.h; path = ../../Source/Project/jucer_ModulesPanel.h; sourceTree = SOURCE_ROOT; };
+		AFF72BA2B130F3F9AC029080 /* jucer_AudioPluginEditorTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_AudioPluginEditorTemplate.h; path = ../../Source/BinaryData/jucer_AudioPluginEditorTemplate.h; sourceTree = SOURCE_ROOT; };
+		AFFC3BBF8BBC82DD09B25EEE /* juce_SystemClipboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SystemClipboard.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_SystemClipboard.h; sourceTree = SOURCE_ROOT; };
+		B00F60201606F195058BB575 /* jucer_ColourPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ColourPropertyComponent.h; path = ../../Source/ComponentEditor/properties/jucer_ColourPropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		B06C7C053DB0660CDA8B5C2C /* jucer_PaintRoutinePanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintRoutinePanel.h; path = ../../Source/ComponentEditor/ui/jucer_PaintRoutinePanel.h; sourceTree = SOURCE_ROOT; };
+		B15E33E7342F6EB4F95C9B1D /* jucer_PaintRoutineEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_PaintRoutineEditor.cpp; path = ../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.cpp; sourceTree = SOURCE_ROOT; };
+		B18059D88300EB8EF703A82B /* juce_TextButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextButton.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_TextButton.cpp; sourceTree = SOURCE_ROOT; };
+		B1963F0D8C0046E54FD9E023 /* jucer_ColouredElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ColouredElement.h; path = ../../Source/ComponentEditor/paintelements/jucer_ColouredElement.h; sourceTree = SOURCE_ROOT; };
+		B1DF858F499D12D442679683 /* juce_MouseEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseEvent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseEvent.h; sourceTree = SOURCE_ROOT; };
+		B271F77C266131705FF6F92B /* juce_cryptography.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_cryptography.h; path = ../../../JuceLibraryCode/modules/juce_cryptography/juce_cryptography.h; sourceTree = SOURCE_ROOT; };
+		B290C6821BDC0912A94A1127 /* juce_Drawable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Drawable.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_Drawable.h; sourceTree = SOURCE_ROOT; };
+		B292B170AC30407623358E6F /* juce_TableListBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TableListBox.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableListBox.h; sourceTree = SOURCE_ROOT; };
+		B2CEB1DE8F290AFCDE9585BB /* juce_Random.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Random.h; path = ../../../JuceLibraryCode/modules/juce_core/maths/juce_Random.h; sourceTree = SOURCE_ROOT; };
+		B388675858A6323C1A1F7BFE /* juce_TreeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TreeView.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.h; sourceTree = SOURCE_ROOT; };
+		B420AC0E3CF485CCFFE5C625 /* juce_osx_MessageQueue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_osx_MessageQueue.h; path = ../../../JuceLibraryCode/modules/juce_events/native/juce_osx_MessageQueue.h; sourceTree = SOURCE_ROOT; };
+		B43D35488A61101480983DA3 /* juce_LowLevelGraphicsPostScriptRenderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LowLevelGraphicsPostScriptRenderer.h; path = ../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h; sourceTree = SOURCE_ROOT; };
+		B483D960309FAFC193F9CDA2 /* juce_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = juce_icon.png; path = ../../Source/BinaryData/juce_icon.png; sourceTree = SOURCE_ROOT; };
+		B4E428E2D02619F18757BBF5 /* juce_JSON.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_JSON.h; path = ../../../JuceLibraryCode/modules/juce_core/javascript/juce_JSON.h; sourceTree = SOURCE_ROOT; };
+		B53BBDA475207303A77FAD40 /* juce_linux_SystemStats.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_SystemStats.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_linux_SystemStats.cpp; sourceTree = SOURCE_ROOT; };
+		B54CB8DDB5000BDCBDECD8BA /* juce_TextPropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextPropertyComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
+		B5F94A37629F841C6C2B4CA7 /* juce_ScopedXLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedXLock.h; path = ../../../JuceLibraryCode/modules/juce_events/native/juce_ScopedXLock.h; sourceTree = SOURCE_ROOT; };
+		B68B2E4185C6FDCEEE0DBA79 /* juce_WeakReference.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WeakReference.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_WeakReference.h; sourceTree = SOURCE_ROOT; };
+		B72DAC469A62BD52C86102E7 /* juce_core.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_core.mm; path = ../../../JuceLibraryCode/modules/juce_core/juce_core.mm; sourceTree = SOURCE_ROOT; };
+		B741170E45D74F30B7D5CDDF /* jucer_ComponentNameProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentNameProperty.h; path = ../../Source/ComponentEditor/components/jucer_ComponentNameProperty.h; sourceTree = SOURCE_ROOT; };
+		B7D930DDBE81040985D1B48C /* juce_LowLevelGraphicsSoftwareRenderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LowLevelGraphicsSoftwareRenderer.h; path = ../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h; sourceTree = SOURCE_ROOT; };
+		B8385E9A644BD3CD94876448 /* jucer_ProjectType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectType.h; path = ../../Source/Project/jucer_ProjectType.h; sourceTree = SOURCE_ROOT; };
+		B83E41BC9767A790F2D04403 /* juce_DrawableButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableButton.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_DrawableButton.cpp; sourceTree = SOURCE_ROOT; };
+		B895CACE6FF447C83DC7ABF1 /* juce_ToolbarButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarButton.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.h; sourceTree = SOURCE_ROOT; };
+		B90DA9BF88AD7AA018CD1F6B /* juce_FileOutputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileOutputStream.h; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_FileOutputStream.h; sourceTree = SOURCE_ROOT; };
+		B93A82D11582820D193C9131 /* juce_ScopedValueSetter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedValueSetter.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_ScopedValueSetter.h; sourceTree = SOURCE_ROOT; };
+		B941446353FA94BCE78D001D /* juce_PropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PropertyComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		B9B67E7AC6527BDB9D4D42D0 /* juce_ColourSelector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ColourSelector.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.h; sourceTree = SOURCE_ROOT; };
+		B9F917BA04B3A715B7E49128 /* juce_TooltipClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TooltipClient.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_TooltipClient.h; sourceTree = SOURCE_ROOT; };
+		BA3CF913C966148DF5059C9F /* juce_ActionBroadcaster.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ActionBroadcaster.cpp; path = ../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp; sourceTree = SOURCE_ROOT; };
+		BA61CF61BDB1194FF4A85DA7 /* juce_CallOutBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CallOutBox.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.cpp; sourceTree = SOURCE_ROOT; };
+		BA9B833DA92A957DB959CECC /* juce_ios_UIViewComponent.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_ios_UIViewComponent.mm; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm; sourceTree = SOURCE_ROOT; };
+		BAB603B7CA702368B2513074 /* juce_TabbedButtonBar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TabbedButtonBar.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp; sourceTree = SOURCE_ROOT; };
+		BAC2D13A5ED7622DD43BF752 /* juce_GraphicsContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GraphicsContext.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_GraphicsContext.cpp; sourceTree = SOURCE_ROOT; };
+		BAC43B20E14A340CCF14119C /* jucer_Project.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Project.cpp; path = ../../Source/Project/jucer_Project.cpp; sourceTree = SOURCE_ROOT; };
+		BB72D9AA25D5D5B090F16513 /* juce_events.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_events.mm; path = ../../../JuceLibraryCode/modules/juce_events/juce_events.mm; sourceTree = SOURCE_ROOT; };
+		BBBBDB341B49EA3277A24D8C /* juce_ChoicePropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChoicePropertyComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
+		BC629A17FC45C9D48E2A383F /* juce_linux_Files.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Files.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_linux_Files.cpp; sourceTree = SOURCE_ROOT; };
+		BC975A241710644E779FAB84 /* juce_Justification.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Justification.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/placement/juce_Justification.cpp; sourceTree = SOURCE_ROOT; };
+		BCB8D7D4B1AFA15D3ACEFCEA /* juce_ComponentBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentBuilder.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBuilder.h; sourceTree = SOURCE_ROOT; };
+		BCCFDFB2C02C4AA436C0ECF8 /* jucer_SliderHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_SliderHandler.h; path = ../../Source/ComponentEditor/components/jucer_SliderHandler.h; sourceTree = SOURCE_ROOT; };
+		BDDD7A81586798621C6EF327 /* juce_Time.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Time.cpp; path = ../../../JuceLibraryCode/modules/juce_core/time/juce_Time.cpp; sourceTree = SOURCE_ROOT; };
+		BE0926F2599AC33A59DF23E1 /* juce_ResizableBorderComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ResizableBorderComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h; sourceTree = SOURCE_ROOT; };
+		BE4A96EF54B366C811255141 /* juce_GZIPCompressorOutputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GZIPCompressorOutputStream.h; path = ../../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPCompressorOutputStream.h; sourceTree = SOURCE_ROOT; };
+		BE6E4546B1A6458DEA0C7FD4 /* juce_posix_NamedPipe.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_posix_NamedPipe.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_posix_NamedPipe.cpp; sourceTree = SOURCE_ROOT; };
+		BE876A77E905E3C0D9B66450 /* juce_OldSchoolLookAndFeel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OldSchoolLookAndFeel.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp; sourceTree = SOURCE_ROOT; };
+		BED52FDD3843979E898DA4CE /* juce_String.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_String.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_String.h; sourceTree = SOURCE_ROOT; };
+		BF09E9E179BA0B07203DC9FE /* juce_ChangeBroadcaster.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ChangeBroadcaster.h; path = ../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeBroadcaster.h; sourceTree = SOURCE_ROOT; };
+		BF1B82B8DD7429ECA96AD4C7 /* juce_StringPool.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StringPool.cpp; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_StringPool.cpp; sourceTree = SOURCE_ROOT; };
+		BF24E0D37EAD41130FE149A3 /* juce_Identifier.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Identifier.cpp; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_Identifier.cpp; sourceTree = SOURCE_ROOT; };
+		BF3CEF080FA013E2778DCE90 /* jucer_Project.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Project.h; path = ../../Source/Project/jucer_Project.h; sourceTree = SOURCE_ROOT; };
+		C017261AE701010986A93D34 /* juce_ThreadWithProgressWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ThreadWithProgressWindow.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h; sourceTree = SOURCE_ROOT; };
+		C07856C24F305E7D50660F67 /* juce_SpinLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SpinLock.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_SpinLock.h; sourceTree = SOURCE_ROOT; };
+		C094F3B6A65A79A6DF87C9C2 /* jucer_PaintElementGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementGroup.h; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElementGroup.h; sourceTree = SOURCE_ROOT; };
+		C159CA71B03DCB9D7BC31A4E /* juce_ReferenceCountedObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ReferenceCountedObject.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_ReferenceCountedObject.h; sourceTree = SOURCE_ROOT; };
+		C18696515B6681B033F06D44 /* juce_android_Fonts.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Fonts.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_android_Fonts.cpp; sourceTree = SOURCE_ROOT; };
+		C187718F7B9EBA88584B43F3 /* jucer_PaintRoutine.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_PaintRoutine.cpp; path = ../../Source/ComponentEditor/jucer_PaintRoutine.cpp; sourceTree = SOURCE_ROOT; };
+		C21AD85C35257A4B9A74D522 /* juce_InterprocessConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_InterprocessConnection.h; path = ../../../JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnection.h; sourceTree = SOURCE_ROOT; };
+		C2EEEB5E55C76817AC291BF0 /* juce_DirectoryContentsList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsList.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h; sourceTree = SOURCE_ROOT; };
+		C43808AF23AC4F25CB26733D /* juce_android_Network.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Network.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_android_Network.cpp; sourceTree = SOURCE_ROOT; };
+		C4B158D37FF6B3125BEED598 /* juce_GlowEffect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GlowEffect.h; path = ../../../JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.h; sourceTree = SOURCE_ROOT; };
+		C5424781C756A8FF3D66670D /* juce_win32_SystemTrayIcon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_SystemTrayIcon.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp; sourceTree = SOURCE_ROOT; };
+		C68D8C25B8BD332BA1DFB32E /* juce_LiveConstantEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LiveConstantEditor.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp; sourceTree = SOURCE_ROOT; };
+		C695512ADA3E687DD1E55C0E /* juce_ZipFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ZipFile.h; path = ../../../JuceLibraryCode/modules/juce_core/zip/juce_ZipFile.h; sourceTree = SOURCE_ROOT; };
+		C6ED030DED8F5A53636C4EBB /* juce_Path.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Path.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Path.cpp; sourceTree = SOURCE_ROOT; };
+		C7608A3967D9AB9481848F2B /* jucer_DocumentEditorComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_DocumentEditorComponent.cpp; path = ../../Source/Application/jucer_DocumentEditorComponent.cpp; sourceTree = SOURCE_ROOT; };
+		C7790615097597DFBFBFADC8 /* juce_RelativeCoordinate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativeCoordinate.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h; sourceTree = SOURCE_ROOT; };
+		C7B2FE883FA1401854BEDE8F /* juce_Thread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Thread.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_Thread.h; sourceTree = SOURCE_ROOT; };
+		C7B47372A9D5970E3D9A5400 /* jucer_GroupInformationComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GroupInformationComponent.h; path = ../../Source/Project/jucer_GroupInformationComponent.h; sourceTree = SOURCE_ROOT; };
+		C7B6983AD1896535B9B98F40 /* juce_MessageManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MessageManager.cpp; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.cpp; sourceTree = SOURCE_ROOT; };
+		C7D4CFEA33205B2D33955B9E /* juce_CodeDocument.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CodeDocument.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp; sourceTree = SOURCE_ROOT; };
+		C81BC495F7C4B665C8856AA9 /* juce_ResizableWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableWindow.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp; sourceTree = SOURCE_ROOT; };
+		C82094E39B4C9B4DE35A7EB4 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../../JuceLibraryCode/modules/juce_gui_extra/juce_module_info; sourceTree = SOURCE_ROOT; };
+		C85BCA043B9CB378FA6876B5 /* juce_Toolbar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Toolbar.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.cpp; sourceTree = SOURCE_ROOT; };
+		C89684A359852FD2B16D705A /* juce_win32_DragAndDrop.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DragAndDrop.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp; sourceTree = SOURCE_ROOT; };
+		C8A160E05C7F8F5CF534AC03 /* juce_ActionBroadcaster.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ActionBroadcaster.h; path = ../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionBroadcaster.h; sourceTree = SOURCE_ROOT; };
+		C8A229ACD244F402C57286CD /* jucer_ProjectExport_MSVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_MSVC.h; path = "../../Source/Project Saving/jucer_ProjectExport_MSVC.h"; sourceTree = SOURCE_ROOT; };
+		C8DED829D0662D34D09A0C5B /* juce_ThreadLocalValue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ThreadLocalValue.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_ThreadLocalValue.h; sourceTree = SOURCE_ROOT; };
+		C9441D8978D4B1F14F270228 /* juce_TabbedComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TabbedComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.h; sourceTree = SOURCE_ROOT; };
+		C9616830BB2474066AC8C910 /* jucer_ResourceFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ResourceFile.h; path = "../../Source/Project Saving/jucer_ResourceFile.h"; sourceTree = SOURCE_ROOT; };
+		C9CA4A5BF4D2A1109432BA49 /* juce_UndoManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_UndoManager.h; path = ../../../JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoManager.h; sourceTree = SOURCE_ROOT; };
+		CAC9FBFB722FE3DA7CE3BE12 /* juce_mac_Files.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_Files.mm; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_mac_Files.mm; sourceTree = SOURCE_ROOT; };
+		CB19A2F9C480B0739BC1D9F9 /* juce_FileBasedDocument.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileBasedDocument.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/documents/juce_FileBasedDocument.h; sourceTree = SOURCE_ROOT; };
+		CB37D7E91B0DA0927BA435F4 /* juce_KeyPress.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_KeyPress.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyPress.h; sourceTree = SOURCE_ROOT; };
+		CB5760497CA6F044DA18D3A1 /* juce_KeyListener.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyListener.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyListener.cpp; sourceTree = SOURCE_ROOT; };
+		CCE50A531D751FD10817A9E7 /* juce_ConnectedChildProcess.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ConnectedChildProcess.h; path = ../../../JuceLibraryCode/modules/juce_events/interprocess/juce_ConnectedChildProcess.h; sourceTree = SOURCE_ROOT; };
+		CD0146FF182F74D52D481EB7 /* juce_LookAndFeel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LookAndFeel.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp; sourceTree = SOURCE_ROOT; };
+		CD9FC835C7A1DE440792F5B4 /* juce_BubbleComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BubbleComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.h; sourceTree = SOURCE_ROOT; };
+		CE08955E457642C4D6DFBA30 /* juce_GIFLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GIFLoader.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/image_formats/juce_GIFLoader.cpp; sourceTree = SOURCE_ROOT; };
+		CE4A609A9FB2403D506B3068 /* juce_Slider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Slider.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.cpp; sourceTree = SOURCE_ROOT; };
+		CF21D9DB3AEC0A4DCAB36A99 /* jucer_Icons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Icons.cpp; path = ../../Source/Utility/jucer_Icons.cpp; sourceTree = SOURCE_ROOT; };
+		CF4BDE076A0E86E887C842BD /* juce_ProgressBar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ProgressBar.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ProgressBar.cpp; sourceTree = SOURCE_ROOT; };
+		CF4C51480A8E95AC5F107FF3 /* juce_BasicNativeHeaders.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BasicNativeHeaders.h; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_BasicNativeHeaders.h; sourceTree = SOURCE_ROOT; };
+		CF6C8BD0DA3D8CD4E99EBADA /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
+		CF736AF0DD24273D1F1FF37A /* juce_RelativePointPath.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativePointPath.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp; sourceTree = SOURCE_ROOT; };
+		CF7F48D267805732933DF82C /* juce_Image.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Image.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/images/juce_Image.cpp; sourceTree = SOURCE_ROOT; };
+		CF8011B3C67B609032974DA5 /* jucer_NewCppFileTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_NewCppFileTemplate.cpp; path = ../../Source/BinaryData/jucer_NewCppFileTemplate.cpp; sourceTree = SOURCE_ROOT; };
+		CFBF253B95F793D399C7C7BE /* juce_AffineTransform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AffineTransform.h; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_AffineTransform.h; sourceTree = SOURCE_ROOT; };
+		D00F311BFC3C2625C457CB9B /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
+		D03B334EFDF780C2C0FE33B8 /* juce_android_WebBrowserComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_WebBrowserComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp; sourceTree = SOURCE_ROOT; };
+		D052CBF83BDE89CDEDD3CA53 /* juce_DynamicObject.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DynamicObject.cpp; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_DynamicObject.cpp; sourceTree = SOURCE_ROOT; };
+		D0B6A9AF3EC42C025B11894D /* juce_linux_FileChooser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_FileChooser.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp; sourceTree = SOURCE_ROOT; };
+		D0D8B580D0689FFF4B9B823B /* jucer_StrokeType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_StrokeType.h; path = ../../Source/ComponentEditor/paintelements/jucer_StrokeType.h; sourceTree = SOURCE_ROOT; };
+		D0EB880DBD68B9C44734E26F /* juce_SubregionStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SubregionStream.cpp; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_SubregionStream.cpp; sourceTree = SOURCE_ROOT; };
+		D10D51A0A2D63F38B4D86A60 /* jucer_ResourceFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ResourceFile.cpp; path = "../../Source/Project Saving/jucer_ResourceFile.cpp"; sourceTree = SOURCE_ROOT; };
+		D1A54DEEAD15A98719002174 /* juce_AsyncUpdater.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_AsyncUpdater.h; path = ../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_AsyncUpdater.h; sourceTree = SOURCE_ROOT; };
+		D1B7039DE915ECD72000679E /* juce_OutputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OutputStream.cpp; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_OutputStream.cpp; sourceTree = SOURCE_ROOT; };
+		D1F9B0E9F5D54FE48BEB46EA /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+		D27D257731AF8F925F652C8F /* juce_FileBasedDocument.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBasedDocument.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp; sourceTree = SOURCE_ROOT; };
+		D2A888E0C5D10BE75BD69E46 /* juce_InterprocessConnectionServer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InterprocessConnectionServer.cpp; path = ../../../JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp; sourceTree = SOURCE_ROOT; };
+		D374DC78AAC02504576AA9B3 /* jucer_GroupComponentHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GroupComponentHandler.h; path = ../../Source/ComponentEditor/components/jucer_GroupComponentHandler.h; sourceTree = SOURCE_ROOT; };
+		D3C9856B677A34F8C60469F2 /* juce_MultiDocumentPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MultiDocumentPanel.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp; sourceTree = SOURCE_ROOT; };
+		D3E139185095C486DD3D61F2 /* jucer_TranslationTool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TranslationTool.h; path = ../../Source/Utility/jucer_TranslationTool.h; sourceTree = SOURCE_ROOT; };
+		D409BCF0D1C42B2761F89C6F /* juce_LuaCodeTokeniser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LuaCodeTokeniser.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h; sourceTree = SOURCE_ROOT; };
+		D41524385F8D560212C9D798 /* juce_LassoComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LassoComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_LassoComponent.h; sourceTree = SOURCE_ROOT; };
+		D439FCBFE0FCAA2C67548362 /* juce_linux_WebBrowserComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_WebBrowserComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp; sourceTree = SOURCE_ROOT; };
+		D4444EC6342A2A7BC4F7BC46 /* jucer_ComponentTextProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTextProperty.h; path = ../../Source/ComponentEditor/properties/jucer_ComponentTextProperty.h; sourceTree = SOURCE_ROOT; };
+		D526C38D581425949BA0E4AC /* jucer_FilePreviewComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_FilePreviewComponent.h; path = ../../Source/Application/jucer_FilePreviewComponent.h; sourceTree = SOURCE_ROOT; };
+		D52AF2D2AB5FD27AD5DFF753 /* juce_Socket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Socket.h; path = ../../../JuceLibraryCode/modules/juce_core/network/juce_Socket.h; sourceTree = SOURCE_ROOT; };
+		D57E1008C51B8D4B9A70535F /* juce_ComponentListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentListener.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.h; sourceTree = SOURCE_ROOT; };
+		D58E5FDB639B07A0B6350657 /* juce_LocalisedStrings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LocalisedStrings.cpp; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.cpp; sourceTree = SOURCE_ROOT; };
+		D6070A7CF3873DFD1B1A53A5 /* juce_gui_extra.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_gui_extra.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.h; sourceTree = SOURCE_ROOT; };
+		D61B5AB0906CF9228E8360BF /* juce_SliderPropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SliderPropertyComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
+		D6520F83A0AD0B5BC024CB9F /* juce_GlowEffect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GlowEffect.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.cpp; sourceTree = SOURCE_ROOT; };
+		D673EFEA126BD37BE8DD8D78 /* juce_IPAddress.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_IPAddress.cpp; path = ../../../JuceLibraryCode/modules/juce_core/network/juce_IPAddress.cpp; sourceTree = SOURCE_ROOT; };
+		D70400A648DD2EE1FB29ED0A /* juce_CharPointer_UTF16.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharPointer_UTF16.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF16.h; sourceTree = SOURCE_ROOT; };
+		D7C052388BB7D6FAE4A15999 /* juce_ResizableWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ResizableWindow.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.h; sourceTree = SOURCE_ROOT; };
+		D7F64C0E6B3CBA49A9F0341C /* juce_Font.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Font.h; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_Font.h; sourceTree = SOURCE_ROOT; };
+		D87FC8F6834E9DC9C8E88B94 /* jucer_JustificationProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JustificationProperty.h; path = ../../Source/ComponentEditor/properties/jucer_JustificationProperty.h; sourceTree = SOURCE_ROOT; };
+		D8FA66DEA9117C2D0239B11B /* juce_ScopedLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ScopedLock.h; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_ScopedLock.h; sourceTree = SOURCE_ROOT; };
+		D902B5961F78F2A6DFBF4B7F /* juce_UIViewComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_UIViewComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/embedding/juce_UIViewComponent.h; sourceTree = SOURCE_ROOT; };
+		D92A6E9404A30EED32DCE4ED /* jucer_RelativePositionedRectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_RelativePositionedRectangle.h; path = ../../Source/ComponentEditor/ui/jucer_RelativePositionedRectangle.h; sourceTree = SOURCE_ROOT; };
+		D96D764ABA74D392B9F7C30E /* juce_File.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_File.cpp; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_File.cpp; sourceTree = SOURCE_ROOT; };
+		D9F50E5D2A0644E9DF20B1BA /* juce_IPAddress.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_IPAddress.h; path = ../../../JuceLibraryCode/modules/juce_core/network/juce_IPAddress.h; sourceTree = SOURCE_ROOT; };
+		DA345D5B9DABD049F90DC96F /* jucer_GeneratedCode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GeneratedCode.h; path = ../../Source/ComponentEditor/jucer_GeneratedCode.h; sourceTree = SOURCE_ROOT; };
+		DA52CB613FB5AEB736624AB1 /* juce_win32_Fonts.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Fonts.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_Fonts.cpp; sourceTree = SOURCE_ROOT; };
+		DABFA41975B51A33C19FD7C2 /* juce_XmlElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_XmlElement.cpp; path = ../../../JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.cpp; sourceTree = SOURCE_ROOT; };
+		DADCCD453FA0BCBE7E423FAA /* juce_ToolbarItemFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarItemFactory.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h; sourceTree = SOURCE_ROOT; };
+		DAF84A553D264705FA6EB6FF /* jucer_TreeViewHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TreeViewHandler.h; path = ../../Source/ComponentEditor/components/jucer_TreeViewHandler.h; sourceTree = SOURCE_ROOT; };
+		DB5C7AA110B217372A52159A /* juce_ApplicationCommandTarget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationCommandTarget.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp; sourceTree = SOURCE_ROOT; };
+		DBC8F8E3236577FB623E1F69 /* juce_Value.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Value.cpp; path = ../../../JuceLibraryCode/modules/juce_data_structures/values/juce_Value.cpp; sourceTree = SOURCE_ROOT; };
+		DBE0CDE1B017190ABBFF557C /* jucer_ProjectExport_CodeBlocks.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_CodeBlocks.h; path = "../../Source/Project Saving/jucer_ProjectExport_CodeBlocks.h"; sourceTree = SOURCE_ROOT; };
+		DC922C6A65D260C18E888E49 /* jucer_ComponentTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentTemplate.cpp; path = ../../Source/BinaryData/jucer_ComponentTemplate.cpp; sourceTree = SOURCE_ROOT; };
+		DD36B6A35D7350B32D2BF727 /* juce_FileInputStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FileInputStream.h; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_FileInputStream.h; sourceTree = SOURCE_ROOT; };
+		DD5E98AA79A9883B74F5D38A /* juce_SliderPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SliderPropertyComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h; sourceTree = SOURCE_ROOT; };
+		DD737A82676BCF9CD2F2B367 /* juce_graphics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_graphics.h; path = ../../../JuceLibraryCode/modules/juce_graphics/juce_graphics.h; sourceTree = SOURCE_ROOT; };
+		DD95F4D24DEADB6030D5959E /* juce_ImageComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ImageComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.h; sourceTree = SOURCE_ROOT; };
+		DDA9B189B27A9FA240CC04EA /* juce_SubregionStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SubregionStream.h; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_SubregionStream.h; sourceTree = SOURCE_ROOT; };
+		DDDAD9BCDC99DBAE63B106DC /* juce_ApplicationBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationBase.cpp; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_ApplicationBase.cpp; sourceTree = SOURCE_ROOT; };
+		DDDCB9E999C4FF41EE6859DA /* juce_TabbedComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TabbedComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.cpp; sourceTree = SOURCE_ROOT; };
+		DDF2C578191FFE07300541E8 /* juce_gui_extra.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_gui_extra.mm; path = ../../../JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.mm; sourceTree = SOURCE_ROOT; };
+		DEDF05B176E4165376AC6D4F /* juce_win32_HiddenMessageWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_HiddenMessageWindow.h; path = ../../../JuceLibraryCode/modules/juce_events/native/juce_win32_HiddenMessageWindow.h; sourceTree = SOURCE_ROOT; };
+		DF12EEE63E6D19610B89CA22 /* juce_win32_ComSmartPtr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_ComSmartPtr.h; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_win32_ComSmartPtr.h; sourceTree = SOURCE_ROOT; };
+		DF1E044516CA91C20B31FB6F /* juce_Logger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Logger.h; path = ../../../JuceLibraryCode/modules/juce_core/logging/juce_Logger.h; sourceTree = SOURCE_ROOT; };
+		DF45CF7F287FC822F45A5AA9 /* juce_Label.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Label.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.h; sourceTree = SOURCE_ROOT; };
+		DF725A596B7BCD7520CC0A9F /* jucer_ResourceEditorPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ResourceEditorPanel.cpp; path = ../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp; sourceTree = SOURCE_ROOT; };
+		DF8FBA0269590E5FAC7FE213 /* juce_GZIPDecompressorInputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GZIPDecompressorInputStream.cpp; path = ../../../JuceLibraryCode/modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp; sourceTree = SOURCE_ROOT; };
+		E0366FD0E45684229CBF9775 /* juce_Path.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Path.h; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_Path.h; sourceTree = SOURCE_ROOT; };
+		E0E99D3CFACF9CB9B503EDD8 /* juce_StretchableLayoutResizerBar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StretchableLayoutResizerBar.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h; sourceTree = SOURCE_ROOT; };
+		E0F9CA57E44F7F7E7E217E47 /* jucer_ComponentUndoableAction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentUndoableAction.h; path = ../../Source/ComponentEditor/components/jucer_ComponentUndoableAction.h; sourceTree = SOURCE_ROOT; };
+		E1139B64E290711F9DE2DCDE /* juce_DialogWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DialogWindow.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_DialogWindow.cpp; sourceTree = SOURCE_ROOT; };
+		E1D39D158E760B202DBEDA81 /* juce_BubbleMessageComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BubbleMessageComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h; sourceTree = SOURCE_ROOT; };
+		E224B3D37F624F7AE682E499 /* juce_CharacterFunctions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CharacterFunctions.cpp; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_CharacterFunctions.cpp; sourceTree = SOURCE_ROOT; };
+		E2374E15D65425C4101237E2 /* jucer_NewComponentTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewComponentTemplate.h; path = ../../Source/BinaryData/jucer_NewComponentTemplate.h; sourceTree = SOURCE_ROOT; };
+		E24325B47AEC8B77DDC456F6 /* juce_Component.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Component.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_Component.h; sourceTree = SOURCE_ROOT; };
+		E2E00F66C14EEAE78119C0C6 /* juce_StandardHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StandardHeader.h; path = ../../../JuceLibraryCode/modules/juce_core/system/juce_StandardHeader.h; sourceTree = SOURCE_ROOT; };
+		E3051371FE51A993DBFC9338 /* juce_SparseSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_SparseSet.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_SparseSet.h; sourceTree = SOURCE_ROOT; };
+		E32210D5760697609D084C93 /* juce_RSAKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RSAKey.h; path = ../../../JuceLibraryCode/modules/juce_cryptography/encryption/juce_RSAKey.h; sourceTree = SOURCE_ROOT; };
+		E39C4DD3100879AC614060C2 /* juce_MACAddress.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MACAddress.h; path = ../../../JuceLibraryCode/modules/juce_core/network/juce_MACAddress.h; sourceTree = SOURCE_ROOT; };
+		E39CCC282936B2F3062E9143 /* juce_Time.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Time.h; path = ../../../JuceLibraryCode/modules/juce_core/time/juce_Time.h; sourceTree = SOURCE_ROOT; };
+		E3E08397D63E4E96CECB2569 /* juce_MenuBarModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MenuBarModel.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarModel.h; sourceTree = SOURCE_ROOT; };
+		E4389603AF8A3143883BFCE8 /* juce_StringPairArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_StringPairArray.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_StringPairArray.h; sourceTree = SOURCE_ROOT; };
+		E44D93C93617D6314424CB46 /* juce_mac_MessageManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_MessageManager.mm; path = ../../../JuceLibraryCode/modules/juce_events/native/juce_mac_MessageManager.mm; sourceTree = SOURCE_ROOT; };
+		E4BB22E27C5AA4B666F265BD /* jucer_TextButtonHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextButtonHandler.h; path = ../../Source/ComponentEditor/components/jucer_TextButtonHandler.h; sourceTree = SOURCE_ROOT; };
+		E5030E4FB09EEFDEC6E17F33 /* juce_GlyphArrangement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GlyphArrangement.h; path = ../../../JuceLibraryCode/modules/juce_graphics/fonts/juce_GlyphArrangement.h; sourceTree = SOURCE_ROOT; };
+		E509DD48975A90978E116EBD /* juce_gui_basics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_gui_basics.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.h; sourceTree = SOURCE_ROOT; };
+		E5C0F0324C408196C1E3AB24 /* juce_ColourGradient.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourGradient.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/colour/juce_ColourGradient.cpp; sourceTree = SOURCE_ROOT; };
+		E5D6C36496F5BC84D7213BE8 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+		E60E28D1B7491047DEA236AE /* jucer_ProjectContentComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectContentComponent.h; path = ../../Source/Project/jucer_ProjectContentComponent.h; sourceTree = SOURCE_ROOT; };
+		E626D36E7158BA472EF89AD5 /* juce_DrawableComposite.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableComposite.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.h; sourceTree = SOURCE_ROOT; };
+		E65A820D34BF39478B7C5925 /* jucer_DocumentEditorComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DocumentEditorComponent.h; path = ../../Source/Application/jucer_DocumentEditorComponent.h; sourceTree = SOURCE_ROOT; };
+		E6697A0594C3625F9025FD3B /* juce_freetype_Fonts.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_freetype_Fonts.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_freetype_Fonts.cpp; sourceTree = SOURCE_ROOT; };
+		E69046467FD9DC88B664447B /* juce_osx_ObjCHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_osx_ObjCHelpers.h; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_osx_ObjCHelpers.h; sourceTree = SOURCE_ROOT; };
+		E691B76C2F16D0E4A2BFABC2 /* juce_ZipFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ZipFile.cpp; path = ../../../JuceLibraryCode/modules/juce_core/zip/juce_ZipFile.cpp; sourceTree = SOURCE_ROOT; };
+		E6C8D5E6CB5649F8181F3663 /* juce_ImageComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.cpp; sourceTree = SOURCE_ROOT; };
+		E70CA21960A64CCB835725FF /* jucer_ProjectType.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectType.cpp; path = ../../Source/Project/jucer_ProjectType.cpp; sourceTree = SOURCE_ROOT; };
+		E76DA0073983CF90CCE4096B /* juce_KeyPressMappingSet.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyPressMappingSet.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp; sourceTree = SOURCE_ROOT; };
+		E791EF4AE50CCD190A8BC5D0 /* juce_CachedComponentImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CachedComponentImage.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_CachedComponentImage.h; sourceTree = SOURCE_ROOT; };
+		E794F8DCA1BD195F1D0BC64B /* juce_SplashScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SplashScreen.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_SplashScreen.cpp; sourceTree = SOURCE_ROOT; };
+		E83203CFAA037EF461E3ACBD /* juce_NamedPipe.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_NamedPipe.cpp; path = ../../../JuceLibraryCode/modules/juce_core/network/juce_NamedPipe.cpp; sourceTree = SOURCE_ROOT; };
+		E85876BF1128CB4E29D7CB64 /* juce_PerformanceCounter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PerformanceCounter.cpp; path = ../../../JuceLibraryCode/modules/juce_core/time/juce_PerformanceCounter.cpp; sourceTree = SOURCE_ROOT; };
+		E96597BBC6A98255B51B94DC /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
+		EA362B80219C97D85ED267A9 /* juce_RectangleList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RectangleList.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_RectangleList.cpp; sourceTree = SOURCE_ROOT; };
+		EA48567DDE6E64CF4DB9B23A /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../../JuceLibraryCode/modules/juce_events/juce_module_info; sourceTree = SOURCE_ROOT; };
+		EA5EA4BEAC60FE65FC18B26E /* juce_Memory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Memory.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_Memory.h; sourceTree = SOURCE_ROOT; };
+		EA8D7BB28F79E1545758D636 /* juce_GroupComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GroupComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.h; sourceTree = SOURCE_ROOT; };
+		EAA4FD2E9CB12F1B946D2A62 /* juce_Slider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Slider.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h; sourceTree = SOURCE_ROOT; };
+		EB1F11E213640441C36CDD21 /* juce_CodeEditorComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CodeEditorComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h; sourceTree = SOURCE_ROOT; };
+		EB71BA07D6F667E69721E577 /* jucer_GradientPointComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GradientPointComponent.h; path = ../../Source/ComponentEditor/paintelements/jucer_GradientPointComponent.h; sourceTree = SOURCE_ROOT; };
+		EBB34E4A7C7DE86F68EE7A7E /* juce_FilenameComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FilenameComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp; sourceTree = SOURCE_ROOT; };
+		EC1A0BD441203369A933D00C /* juce_ListBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ListBox.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.h; sourceTree = SOURCE_ROOT; };
+		EC2E7A527518F2A8F8DEC27C /* juce_Atomic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Atomic.h; path = ../../../JuceLibraryCode/modules/juce_core/memory/juce_Atomic.h; sourceTree = SOURCE_ROOT; };
+		EC736CD3AAE2E052E7D95076 /* juce_Initialisation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_Initialisation.h; path = ../../../JuceLibraryCode/modules/juce_events/messages/juce_Initialisation.h; sourceTree = SOURCE_ROOT; };
+		EE34B44EC8BF50DF2A1EADA6 /* juce_RelativePoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativePoint.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePoint.cpp; sourceTree = SOURCE_ROOT; };
+		EE690110171E1648FF2118B8 /* jucer_Application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Application.h; path = ../../Source/Application/jucer_Application.h; sourceTree = SOURCE_ROOT; };
+		EEA69803BC87FC7DF32A9816 /* juce_MouseCursor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseCursor.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.cpp; sourceTree = SOURCE_ROOT; };
+		EEF2B5CF27493A0E5432F495 /* juce_mac_CoreGraphicsContext.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_CoreGraphicsContext.mm; path = ../../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm; sourceTree = SOURCE_ROOT; };
+		EF24C96CD12FC8589756DEF1 /* juce_KeyMappingEditorComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyMappingEditorComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp; sourceTree = SOURCE_ROOT; };
+		EF30A74B566A461A171BBF83 /* jucer_ComponentLayoutEditor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentLayoutEditor.cpp; path = ../../Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.cpp; sourceTree = SOURCE_ROOT; };
+		EFA8CF715611D845AB284500 /* jucer_JucerComponentHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerComponentHandler.h; path = ../../Source/ComponentEditor/components/jucer_JucerComponentHandler.h; sourceTree = SOURCE_ROOT; };
+		F004FD803D0EDAAB81667345 /* juce_DrawableShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableShape.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableShape.cpp; sourceTree = SOURCE_ROOT; };
+		F03E2BDD36E6F4F53AB767A8 /* jucer_Headers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Headers.h; path = ../../Source/jucer_Headers.h; sourceTree = SOURCE_ROOT; };
+		F0781CFA5B984F75F7F56443 /* juce_WildcardFileFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_WildcardFileFilter.h; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.h; sourceTree = SOURCE_ROOT; };
+		F0793C460694102BA8D6D293 /* juce_win32_SystemStats.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_SystemStats.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_win32_SystemStats.cpp; sourceTree = SOURCE_ROOT; };
+		F0A49FF985A114AC31ED8F87 /* juce_NSViewComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NSViewComponent.h; path = ../../../JuceLibraryCode/modules/juce_gui_extra/embedding/juce_NSViewComponent.h; sourceTree = SOURCE_ROOT; };
+		F0D0CC4696419D4606EF5AE6 /* juce_NewLine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NewLine.h; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_NewLine.h; sourceTree = SOURCE_ROOT; };
+		F1163B7856FDABA413A88D90 /* jucer_NewFileWizard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_NewFileWizard.cpp; path = ../../Source/Project/jucer_NewFileWizard.cpp; sourceTree = SOURCE_ROOT; };
+		F18AE75F1831D13FF53A8CCC /* jucer_PaintElementRectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementRectangle.h; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElementRectangle.h; sourceTree = SOURCE_ROOT; };
+		F2A27DDB3055518A62BA7C25 /* juce_android_JNIHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_android_JNIHelpers.h; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_android_JNIHelpers.h; sourceTree = SOURCE_ROOT; };
+		F361B20780764ADD61B1B692 /* juce_ios_UIViewComponentPeer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_ios_UIViewComponentPeer.mm; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm; sourceTree = SOURCE_ROOT; };
+		F3ABB8336986650F0B800F7B /* juce_ArrayAllocationBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ArrayAllocationBase.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_ArrayAllocationBase.h; sourceTree = SOURCE_ROOT; };
+		F3F4D8AEFD5290E8FDF0623E /* juce_LowLevelGraphicsContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_LowLevelGraphicsContext.h; path = ../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h; sourceTree = SOURCE_ROOT; };
+		F4418E2C7AD718FE942DDF0A /* juce_EdgeTable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_EdgeTable.h; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_EdgeTable.h; sourceTree = SOURCE_ROOT; };
+		F4A450ECDFAAFE68DA0FB6C6 /* juce_ModalComponentManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ModalComponentManager.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ModalComponentManager.h; sourceTree = SOURCE_ROOT; };
+		F4C1A19AAC280B0A58F73FAD /* juce_TextButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_TextButton.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_TextButton.h; sourceTree = SOURCE_ROOT; };
+		F4E3F9ED208CDD495BA720F9 /* juce_NamedPipe.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NamedPipe.h; path = ../../../JuceLibraryCode/modules/juce_core/network/juce_NamedPipe.h; sourceTree = SOURCE_ROOT; };
+		F54E3F6CA70967D469913C48 /* juce_PropertyComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertyComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.cpp; sourceTree = SOURCE_ROOT; };
+		F561D4822324D6D1650221FA /* juce_Thread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Thread.cpp; path = ../../../JuceLibraryCode/modules/juce_core/threads/juce_Thread.cpp; sourceTree = SOURCE_ROOT; };
+		F59077841FC17DD07060A2A9 /* jucer_TextEditorHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextEditorHandler.h; path = ../../Source/ComponentEditor/components/jucer_TextEditorHandler.h; sourceTree = SOURCE_ROOT; };
+		F61D66D41025A0E4F9CDBE7A /* juce_linux_Windowing.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_linux_Windowing.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Windowing.cpp; sourceTree = SOURCE_ROOT; };
+		F6AE2E230EF9FF9F3387394A /* juce_ComponentDragger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentDragger.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_ComponentDragger.h; sourceTree = SOURCE_ROOT; };
+		F6BD39AD06B0E7E7C9D8B0CE /* juce_FileInputSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileInputSource.cpp; path = ../../../JuceLibraryCode/modules/juce_core/streams/juce_FileInputSource.cpp; sourceTree = SOURCE_ROOT; };
+		F6D3F208B6EE2A50CE1F0A18 /* jucer_JucerCommandIDs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerCommandIDs.h; path = ../../Source/ComponentEditor/ui/jucer_JucerCommandIDs.h; sourceTree = SOURCE_ROOT; };
+		F71AF6D2DF3E652F8B51EBAB /* jucer_ProjectExporter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectExporter.cpp; path = "../../Source/Project Saving/jucer_ProjectExporter.cpp"; sourceTree = SOURCE_ROOT; };
+		F73142334238E8D5B5D3E3B1 /* juce_EdgeTable.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_EdgeTable.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_EdgeTable.cpp; sourceTree = SOURCE_ROOT; };
+		F74B09C0BC8F9038B7464F74 /* juce_ComboBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComboBox.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.cpp; sourceTree = SOURCE_ROOT; };
+		F784E90F14BB554B2D97A4E7 /* juce_module_info */ = {isa = PBXFileReference; lastKnownFileType = text; name = juce_module_info; path = ../../../JuceLibraryCode/modules/juce_graphics/juce_module_info; sourceTree = SOURCE_ROOT; };
+		F797071D88542C813CF7222A /* jucer_Module.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Module.cpp; path = ../../Source/Project/jucer_Module.cpp; sourceTree = SOURCE_ROOT; };
+		F7A91434FEFBE9AC130CD814 /* jucer_NewProjectWizard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewProjectWizard.h; path = ../../Source/Project/jucer_NewProjectWizard.h; sourceTree = SOURCE_ROOT; };
+		F7CAB5BC15EE351949D3F2C3 /* jucer_NewInlineComponentTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewInlineComponentTemplate.h; path = ../../Source/BinaryData/jucer_NewInlineComponentTemplate.h; sourceTree = SOURCE_ROOT; };
+		F80B253C502FB1EB649082E9 /* juce_FileInputStream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileInputStream.cpp; path = ../../../JuceLibraryCode/modules/juce_core/files/juce_FileInputStream.cpp; sourceTree = SOURCE_ROOT; };
+		F9505DCCE2815E8238BB88B7 /* juce_FileTreeComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileTreeComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp; sourceTree = SOURCE_ROOT; };
+		F98D95171F5605A4905E6516 /* juce_GraphicsContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_GraphicsContext.h; path = ../../../JuceLibraryCode/modules/juce_graphics/contexts/juce_GraphicsContext.h; sourceTree = SOURCE_ROOT; };
+		F9B4B5E9595EC2CD47736BAC /* juce_DrawableShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableShape.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableShape.h; sourceTree = SOURCE_ROOT; };
+		F9CFCE9A63B208A180F2AC3A /* juce_android_Misc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Misc.cpp; path = ../../../JuceLibraryCode/modules/juce_core/native/juce_android_Misc.cpp; sourceTree = SOURCE_ROOT; };
+		FA04E39EE7E83D445AF9E406 /* jucer_FillType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_FillType.h; path = ../../Source/ComponentEditor/paintelements/jucer_FillType.h; sourceTree = SOURCE_ROOT; };
+		FA72B8D84B97CAC1AD24DA22 /* juce_StringPairArray.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StringPairArray.cpp; path = ../../../JuceLibraryCode/modules/juce_core/text/juce_StringPairArray.cpp; sourceTree = SOURCE_ROOT; };
+		FA9E4210846A6425A2B54856 /* juce_FillType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_FillType.h; path = ../../../JuceLibraryCode/modules/juce_graphics/colour/juce_FillType.h; sourceTree = SOURCE_ROOT; };
+		FB6BACB4F1E834A6934E4DC2 /* juce_ChangeListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ChangeListener.h; path = ../../../JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeListener.h; sourceTree = SOURCE_ROOT; };
+		FBBDD70D47163D341B2F0A8D /* jucer_ComponentOverlayComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentOverlayComponent.h; path = ../../Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.h; sourceTree = SOURCE_ROOT; };
+		FBD5E2A21019AF2EAD45BAD1 /* juce_ToolbarItemComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToolbarItemComponent.cpp; path = ../../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp; sourceTree = SOURCE_ROOT; };
+		FBDAD6DDA8200BF53FCB5734 /* juce_PathStrokeType.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PathStrokeType.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_PathStrokeType.cpp; sourceTree = SOURCE_ROOT; };
+		FDF068E783DD784E3C2221C5 /* juce_AffineTransform.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AffineTransform.cpp; path = ../../../JuceLibraryCode/modules/juce_graphics/geometry/juce_AffineTransform.cpp; sourceTree = SOURCE_ROOT; };
+		FE6AA1851DA877743D606FC0 /* juce_ValueTree.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ValueTree.cpp; path = ../../../JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTree.cpp; sourceTree = SOURCE_ROOT; };
+		FEBB5ECA2C071F61AFD9A9D2 /* juce_DrawableButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DrawableButton.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_DrawableButton.h; sourceTree = SOURCE_ROOT; };
+		FF11D6B512FDC5D887E06F66 /* jucer_PaintElementImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementImage.h; path = ../../Source/ComponentEditor/paintelements/jucer_PaintElementImage.h; sourceTree = SOURCE_ROOT; };
+		FF1E5535A2AC41B9B355A1B6 /* juce_OwnedArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_OwnedArray.h; path = ../../../JuceLibraryCode/modules/juce_core/containers/juce_OwnedArray.h; sourceTree = SOURCE_ROOT; };
+		FF320FE35050A585E08FF993 /* juce_RelativeCoordinatePositioner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_RelativeCoordinatePositioner.h; path = ../../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h; sourceTree = SOURCE_ROOT; };
+		FF94FF5C4BEC605E56149EFC /* jucer_LabelHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_LabelHandler.h; path = ../../Source/ComponentEditor/components/jucer_LabelHandler.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		B8D802107FEE6AD60F5309A3 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				1E76E36772355E2A43CF4961 /* Carbon.framework in Frameworks */,
+				241F29FCBB7A17BB44A0B10C /* Cocoa.framework in Frameworks */,
+				49C22786B54C5DC94E4654B8 /* IOKit.framework in Frameworks */,
+				11D42F7EC6E6539D79A7F4B1 /* QuartzCore.framework in Frameworks */,
+				B980464FA2761CCD64B1FAD6 /* WebKit.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		00C2E5EAA46FC2E94B735C42 /* filebrowser */ = {
+			isa = PBXGroup;
+			children = (
+				AD828AEF8A826DCAD19095B7 /* juce_DirectoryContentsDisplayComponent.cpp */,
+				0FAD42641F0AAC0B7E906D18 /* juce_DirectoryContentsDisplayComponent.h */,
+				334E3DFFA297DD18AD57F40F /* juce_DirectoryContentsList.cpp */,
+				C2EEEB5E55C76817AC291BF0 /* juce_DirectoryContentsList.h */,
+				0F9DBA4AB2BD63773528D805 /* juce_FileBrowserComponent.cpp */,
+				33B2073D379E18BC2919FA07 /* juce_FileBrowserComponent.h */,
+				27C16EA8D243AC7934DF11B1 /* juce_FileBrowserListener.h */,
+				A3F5671F82CBAC136EEA4D26 /* juce_FileChooser.cpp */,
+				2875464712C12E9BFCCEE57D /* juce_FileChooser.h */,
+				97227974323F8526EB062F78 /* juce_FileChooserDialogBox.cpp */,
+				1270CC27AD4D0805DD4BA465 /* juce_FileChooserDialogBox.h */,
+				9A154A0F904C15BF6E1253F5 /* juce_FileFilter.cpp */,
+				73D0EA57406DF9583EE8FB3B /* juce_FileFilter.h */,
+				87B65D3DBFD7D35B15010226 /* juce_FileListComponent.cpp */,
+				507C2DFBFDA8AB08F71ED82D /* juce_FileListComponent.h */,
+				EBB34E4A7C7DE86F68EE7A7E /* juce_FilenameComponent.cpp */,
+				3131C94D973A735EA68C1C77 /* juce_FilenameComponent.h */,
+				4E2A191756179C6616D50B58 /* juce_FilePreviewComponent.h */,
+				A99E772786C0A210E4CDF0D4 /* juce_FileSearchPathListComponent.cpp */,
+				7F3AE35521DFE092953385B6 /* juce_FileSearchPathListComponent.h */,
+				F9505DCCE2815E8238BB88B7 /* juce_FileTreeComponent.cpp */,
+				668D7FDE00212229DFCB2175 /* juce_FileTreeComponent.h */,
+				2802BE05CAC2BE78EFD5A239 /* juce_ImagePreviewComponent.cpp */,
+				36F06F123E9717834A627F8D /* juce_ImagePreviewComponent.h */,
+				39698748BDD86977C4474DE4 /* juce_WildcardFileFilter.cpp */,
+				44F454FF28C39CC641FF410B /* juce_WildcardFileFilter.h */,
+			);
+			name = filebrowser;
+			sourceTree = "<group>";
+		};
+		01C121A5814A16A7CB907FB9 /* memory */ = {
+			isa = PBXGroup;
+			children = (
+				EC2E7A527518F2A8F8DEC27C /* juce_Atomic.h */,
+				257104EA81085B98E8AFCFB3 /* juce_ByteOrder.h */,
+				439A60BB029251ED3752A69A /* juce_ContainerDeletePolicy.h */,
+				7E1CE53CFD909089387910AF /* juce_HeapBlock.h */,
+				957D4AC1FE338B82C790FDF7 /* juce_LeakedObjectDetector.h */,
+				EA5EA4BEAC60FE65FC18B26E /* juce_Memory.h */,
+				6DB44C43D1260559163A47F0 /* juce_MemoryBlock.cpp */,
+				4DAF01670050184A3BAAA93B /* juce_MemoryBlock.h */,
+				64EDFDAE0755DC1451F181B8 /* juce_OptionalScopedPointer.h */,
+				C159CA71B03DCB9D7BC31A4E /* juce_ReferenceCountedObject.h */,
+				6AC5756EBCB78FD82C15B829 /* juce_ScopedPointer.h */,
+				4064AE577A11F735B2CE87F0 /* juce_SharedResourcePointer.h */,
+				28E9116333CAD9E8164008A9 /* juce_Singleton.h */,
+				B68B2E4185C6FDCEEE0DBA79 /* juce_WeakReference.h */,
+			);
+			name = memory;
+			sourceTree = "<group>";
+		};
+		06D5C2B5F1F4E37AF1C7A425 /* streams */ = {
+			isa = PBXGroup;
+			children = (
+				8216291F3E0D0926D64AD98C /* juce_BufferedInputStream.cpp */,
+				51DAFE574A52F68CC4A10274 /* juce_BufferedInputStream.h */,
+				F6BD39AD06B0E7E7C9D8B0CE /* juce_FileInputSource.cpp */,
+				4301D29792107D6471F29FDF /* juce_FileInputSource.h */,
+				16C7EFDF9ED765D02DA12C55 /* juce_InputSource.h */,
+				39D907284C634E6A9FC45E3E /* juce_InputStream.cpp */,
+				14BE817BFCB5B1CF2799C860 /* juce_InputStream.h */,
+				2CF191F1A61F2C167FF2DADA /* juce_MemoryInputStream.cpp */,
+				9DBDA8C274E693DF449FF525 /* juce_MemoryInputStream.h */,
+				6CA3455CFAA1A52891F55CEF /* juce_MemoryOutputStream.cpp */,
+				4F5572380B51C24AE8D34450 /* juce_MemoryOutputStream.h */,
+				D1B7039DE915ECD72000679E /* juce_OutputStream.cpp */,
+				68164EA5DFF5CE5AC2402670 /* juce_OutputStream.h */,
+				D0EB880DBD68B9C44734E26F /* juce_SubregionStream.cpp */,
+				DDA9B189B27A9FA240CC04EA /* juce_SubregionStream.h */,
+			);
+			name = streams;
+			sourceTree = "<group>";
+		};
+		084F5B9CA3F5822A7D9156AF /* interprocess */ = {
+			isa = PBXGroup;
+			children = (
+				85B48563B4437E1E27ACABAD /* juce_ConnectedChildProcess.cpp */,
+				CCE50A531D751FD10817A9E7 /* juce_ConnectedChildProcess.h */,
+				963891BF1C9BC566FCF433B7 /* juce_InterprocessConnection.cpp */,
+				C21AD85C35257A4B9A74D522 /* juce_InterprocessConnection.h */,
+				D2A888E0C5D10BE75BD69E46 /* juce_InterprocessConnectionServer.cpp */,
+				1233E258E4C1FD4AAA7A6D1A /* juce_InterprocessConnectionServer.h */,
+			);
+			name = interprocess;
+			sourceTree = "<group>";
+		};
+		0B795464B0BFEE19C4F89F0F /* files */ = {
+			isa = PBXGroup;
+			children = (
+				3ED948823F776108CD873C68 /* juce_DirectoryIterator.cpp */,
+				9A7D5A94730758251DC8E4FD /* juce_DirectoryIterator.h */,
+				D96D764ABA74D392B9F7C30E /* juce_File.cpp */,
+				1BE0A264A6AA494EF75B582B /* juce_File.h */,
+				AC70D9D3E27592DD5D19B935 /* juce_FileFilter.cpp */,
+				3CF3F730EA232DA860D1B79D /* juce_FileFilter.h */,
+				F80B253C502FB1EB649082E9 /* juce_FileInputStream.cpp */,
+				DD36B6A35D7350B32D2BF727 /* juce_FileInputStream.h */,
+				36E341F289B15DB1B7FA7528 /* juce_FileOutputStream.cpp */,
+				B90DA9BF88AD7AA018CD1F6B /* juce_FileOutputStream.h */,
+				46515892E00E0D91D920B90C /* juce_FileSearchPath.cpp */,
+				1848EB565B679F72C560EBAD /* juce_FileSearchPath.h */,
+				9153965AAA76A86DFCAEE86E /* juce_MemoryMappedFile.h */,
+				6C7A1929978639A482D5096D /* juce_TemporaryFile.cpp */,
+				A6B4EF8DBA1476D85FE0E927 /* juce_TemporaryFile.h */,
+				4A19E61C47E844D661C34DDD /* juce_WildcardFileFilter.cpp */,
+				F0781CFA5B984F75F7F56443 /* juce_WildcardFileFilter.h */,
+			);
+			name = files;
+			sourceTree = "<group>";
+		};
+		0FFEF043CA89142B18C79ABE /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				D00F311BFC3C2625C457CB9B /* Carbon.framework */,
+				D1F9B0E9F5D54FE48BEB46EA /* Cocoa.framework */,
+				E96597BBC6A98255B51B94DC /* IOKit.framework */,
+				E5D6C36496F5BC84D7213BE8 /* QuartzCore.framework */,
+				CF6C8BD0DA3D8CD4E99EBADA /* WebKit.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		101599FA5E724FC0C78144B3 /* containers */ = {
+			isa = PBXGroup;
+			children = (
+				385426A4A6D3BFC4B2FD310C /* juce_AbstractFifo.cpp */,
+				514B0E8E2796ACE7385F6717 /* juce_AbstractFifo.h */,
+				2C5E67AA30FCCE2E09C8CB6B /* juce_Array.h */,
+				F3ABB8336986650F0B800F7B /* juce_ArrayAllocationBase.h */,
+				D052CBF83BDE89CDEDD3CA53 /* juce_DynamicObject.cpp */,
+				1F869D818F79BE6EEE2305FD /* juce_DynamicObject.h */,
+				849641B50DB4AE6CCA1C543F /* juce_ElementComparator.h */,
+				497E5C615BFF59384CB2284C /* juce_HashMap.h */,
+				0153A6801552D0B4C21BE911 /* juce_LinkedListPointer.h */,
+				1FDBC89D596C6E959E7A8825 /* juce_NamedValueSet.cpp */,
+				231F4AC6660B650E08EF1E54 /* juce_NamedValueSet.h */,
+				FF1E5535A2AC41B9B355A1B6 /* juce_OwnedArray.h */,
+				8EE709A982B89A4C752303BC /* juce_PropertySet.cpp */,
+				61804EF1D5DC1451EBDAF6C5 /* juce_PropertySet.h */,
+				159A5AC2CAF01A7A17ECA0A0 /* juce_ReferenceCountedArray.h */,
+				B93A82D11582820D193C9131 /* juce_ScopedValueSetter.h */,
+				3FDA82F89379E99C9E3B5C64 /* juce_SortedSet.h */,
+				E3051371FE51A993DBFC9338 /* juce_SparseSet.h */,
+				5B28BE68400342E97C084ACC /* juce_Variant.cpp */,
+				1F04ABB8C6FA1598902FE33A /* juce_Variant.h */,
+			);
+			name = containers;
+			sourceTree = "<group>";
+		};
+		1183520311BFD05477F94ECA /* menus */ = {
+			isa = PBXGroup;
+			children = (
+				04A2C05B7935B8D335B5FD39 /* juce_MenuBarComponent.cpp */,
+				94232610F41512C7040EDA38 /* juce_MenuBarComponent.h */,
+				2E183952277F99D860EEB3F3 /* juce_MenuBarModel.cpp */,
+				E3E08397D63E4E96CECB2569 /* juce_MenuBarModel.h */,
+				64520235EF5529F8C0E4A9A7 /* juce_PopupMenu.cpp */,
+				83C7547CCAFCBB88F791FED8 /* juce_PopupMenu.h */,
+			);
+			name = menus;
+			sourceTree = "<group>";
+		};
+		14995D34FE0826A52FA5262D /* placement */ = {
+			isa = PBXGroup;
+			children = (
+				BC975A241710644E779FAB84 /* juce_Justification.cpp */,
+				241A48F1D188BF19314065C2 /* juce_Justification.h */,
+				27F7865BD6FE03B970B8DBFB /* juce_RectanglePlacement.cpp */,
+				513AF2A4DB37CC6F47E6CEF0 /* juce_RectanglePlacement.h */,
+			);
+			name = placement;
+			sourceTree = "<group>";
+		};
+		1D09D8A2B803860D8927C366 /* documents */ = {
+			isa = PBXGroup;
+			children = (
+				D27D257731AF8F925F652C8F /* juce_FileBasedDocument.cpp */,
+				CB19A2F9C480B0739BC1D9F9 /* juce_FileBasedDocument.h */,
+			);
+			name = documents;
+			sourceTree = "<group>";
+		};
+		1EB4CE7119697D9CCE604271 /* hashing */ = {
+			isa = PBXGroup;
+			children = (
+				9C1D8A8FAA2439A8EA2DD800 /* juce_MD5.cpp */,
+				665EDD760E47A6AD1A1DBC2D /* juce_MD5.h */,
+				24D73A13CD0F89E299E11B0E /* juce_SHA256.cpp */,
+				482C35BB3B7DDE1B452C8455 /* juce_SHA256.h */,
+			);
+			name = hashing;
+			sourceTree = "<group>";
+		};
+		20F9DB293E2CC9F98F43758C /* network */ = {
+			isa = PBXGroup;
+			children = (
+				D673EFEA126BD37BE8DD8D78 /* juce_IPAddress.cpp */,
+				D9F50E5D2A0644E9DF20B1BA /* juce_IPAddress.h */,
+				8F14D66EAF9B6219C5D1C510 /* juce_MACAddress.cpp */,
+				E39C4DD3100879AC614060C2 /* juce_MACAddress.h */,
+				E83203CFAA037EF461E3ACBD /* juce_NamedPipe.cpp */,
+				F4E3F9ED208CDD495BA720F9 /* juce_NamedPipe.h */,
+				4BF00AE19C332EF226420C57 /* juce_Socket.cpp */,
+				D52AF2D2AB5FD27AD5DFF753 /* juce_Socket.h */,
+				523B197F8A3BCA94C58C6DEF /* juce_URL.cpp */,
+				7C0528B4912955DA59C28356 /* juce_URL.h */,
+			);
+			name = network;
+			sourceTree = "<group>";
+		};
+		2287744248275B6237708450 /* messages */ = {
+			isa = PBXGroup;
+			children = (
+				DDDAD9BCDC99DBAE63B106DC /* juce_ApplicationBase.cpp */,
+				9245B8936083D87061E4FE15 /* juce_ApplicationBase.h */,
+				72EC62B05E134F85761E642E /* juce_CallbackMessage.h */,
+				43BFDF9214946C6B76CA666D /* juce_DeletedAtShutdown.cpp */,
+				69A1792C863C7957A80F6945 /* juce_DeletedAtShutdown.h */,
+				EC736CD3AAE2E052E7D95076 /* juce_Initialisation.h */,
+				9DBE1CE382EE797178B3D35F /* juce_Message.h */,
+				AAC42C49D961A534FE64882E /* juce_MessageListener.cpp */,
+				72A66FD9571871FFB455F8B5 /* juce_MessageListener.h */,
+				C7B6983AD1896535B9B98F40 /* juce_MessageManager.cpp */,
+				9899685BD109C2475BA4F8A1 /* juce_MessageManager.h */,
+				043FC175E80305E3D95ECAF8 /* juce_NotificationType.h */,
+			);
+			name = messages;
+			sourceTree = "<group>";
+		};
+		248A3D6E995D23F2AFDBF78B /* unit_tests */ = {
+			isa = PBXGroup;
+			children = (
+				93B474F28D09D858DE16E881 /* juce_UnitTest.cpp */,
+				4467B3824742815D1355DB81 /* juce_UnitTest.h */,
+			);
+			name = unit_tests;
+			sourceTree = "<group>";
+		};
+		2A27F41171A44038C2A1CB56 /* juce_gui_basics */ = {
+			isa = PBXGroup;
+			children = (
+				2CEAE8B236FEF5E06317EF3B /* components */,
+				CD1AFCF4DFA46BA5BACBB1CB /* mouse */,
+				A186EF5D092D513F30A4FE23 /* keyboard */,
+				617C7A87C00C7357D6B4CA43 /* widgets */,
+				FDA3E07A3631D25DFEA73850 /* windows */,
+				1183520311BFD05477F94ECA /* menus */,
+				3644BF38DFC789105B7D80FB /* layout */,
+				58CA858FC033FD1F47ADA039 /* buttons */,
+				A3BF94AE00810C812E121816 /* positioning */,
+				69E5820210E99179A52F1A77 /* drawables */,
+				B2243BBE276C148522C5987E /* properties */,
+				C2A68B1BEC638D0513BF25C1 /* lookandfeel */,
+				00C2E5EAA46FC2E94B735C42 /* filebrowser */,
+				952AFE51A503A04FFF4B0EF7 /* commands */,
+				76F28FCB72DD5943D08F3342 /* misc */,
+				DD0FDFC530E403BD51C86315 /* application */,
+				8EAF68A83656BC02B4B7C9C9 /* native */,
+				5B9EE26978797CC153F5E24F /* juce_module_info */,
+				E509DD48975A90978E116EBD /* juce_gui_basics.h */,
+			);
+			name = juce_gui_basics;
+			sourceTree = "<group>";
+		};
+		2A8293EA2395BFFCA229F799 /* values */ = {
+			isa = PBXGroup;
+			children = (
+				DBC8F8E3236577FB623E1F69 /* juce_Value.cpp */,
+				AF51A8DC8E67D8EB660AD6D0 /* juce_Value.h */,
+				FE6AA1851DA877743D606FC0 /* juce_ValueTree.cpp */,
+				945A4B296E9562BEFF95884A /* juce_ValueTree.h */,
+			);
+			name = values;
+			sourceTree = "<group>";
+		};
+		2BA1ACF18E7E078C7171B162 /* documents */ = {
+			isa = PBXGroup;
+			children = (
+				3E03B7C7A19E63A724EB79F4 /* jucer_ButtonDocument.cpp */,
+				1FA92F8F2B26C6CEC8B1D737 /* jucer_ButtonDocument.h */,
+				662C76394C5D1B56766FAFD9 /* jucer_ComponentDocument.cpp */,
+				9C803826E5E3FDB1B37660D5 /* jucer_ComponentDocument.h */,
+			);
+			name = documents;
+			sourceTree = "<group>";
+		};
+		2C6746F66EF4444F53B3221F /* Juce Library Code */ = {
+			isa = PBXGroup;
+			children = (
+				8702F43110E4CCA5E5F827F5 /* AppConfig.h */,
+				472F9A90F685220D730EBF6C /* BinaryData.cpp */,
+				4F687965FBE86EAFDB3ACFEC /* BinaryData.h */,
+				B72DAC469A62BD52C86102E7 /* juce_core.mm */,
+				2D5E55D7E0BC08AAF7B6E150 /* juce_cryptography.mm */,
+				2C53E412EF7FC1036E4B11AC /* juce_data_structures.mm */,
+				BB72D9AA25D5D5B090F16513 /* juce_events.mm */,
+				9993F2BAA90AA22D16B7F40B /* juce_graphics.mm */,
+				20EABC08F7EFE741D7C3B622 /* juce_gui_basics.mm */,
+				DDF2C578191FFE07300541E8 /* juce_gui_extra.mm */,
+				364D1A9B113320407A7E57B9 /* JuceHeader.h */,
+			);
+			name = "Juce Library Code";
+			sourceTree = "<group>";
+		};
+		2CEAE8B236FEF5E06317EF3B /* components */ = {
+			isa = PBXGroup;
+			children = (
+				E791EF4AE50CCD190A8BC5D0 /* juce_CachedComponentImage.h */,
+				46F449C23355573E967D351F /* juce_Component.cpp */,
+				E24325B47AEC8B77DDC456F6 /* juce_Component.h */,
+				A6D3D648059361F5836DE280 /* juce_ComponentListener.cpp */,
+				D57E1008C51B8D4B9A70535F /* juce_ComponentListener.h */,
+				3706C20941A79E5A8DE08DE4 /* juce_Desktop.cpp */,
+				149020249A77110311411E15 /* juce_Desktop.h */,
+				987490B430B80B4FA2792176 /* juce_ModalComponentManager.cpp */,
+				F4A450ECDFAAFE68DA0FB6C6 /* juce_ModalComponentManager.h */,
+			);
+			name = components;
+			sourceTree = "<group>";
+		};
+		334607E7051C2D75E0AC85F6 /* native */ = {
+			isa = PBXGroup;
+			children = (
+				66448E472FD5BB3D34B1509B /* juce_android_Messaging.cpp */,
+				9E6BAEF28A55F7F349A15DDC /* juce_ios_MessageManager.mm */,
+				33E0A6C9F0AE53BEC8778775 /* juce_linux_Messaging.cpp */,
+				E44D93C93617D6314424CB46 /* juce_mac_MessageManager.mm */,
+				B420AC0E3CF485CCFFE5C625 /* juce_osx_MessageQueue.h */,
+				B5F94A37629F841C6C2B4CA7 /* juce_ScopedXLock.h */,
+				DEDF05B176E4165376AC6D4F /* juce_win32_HiddenMessageWindow.h */,
+				530ADBF1045867FE90EB8F1F /* juce_win32_Messaging.cpp */,
+			);
+			name = native;
+			sourceTree = "<group>";
+		};
+		3644BF38DFC789105B7D80FB /* layout */ = {
+			isa = PBXGroup;
+			children = (
+				5603954CFF21E81C86CCA1CB /* juce_AnimatedPosition.h */,
+				2C0D1EB0AE7676CE3458764C /* juce_AnimatedPositionBehaviours.h */,
+				A191412DDC58FCC5A67373FD /* juce_ComponentAnimator.cpp */,
+				3A3CD53AEB64CF57B6CADB59 /* juce_ComponentAnimator.h */,
+				A9888AA5368432DCA5F64910 /* juce_ComponentBoundsConstrainer.cpp */,
+				6FB8B11C25BB74994A407113 /* juce_ComponentBoundsConstrainer.h */,
+				32184C99C6A9A997E6534029 /* juce_ComponentBuilder.cpp */,
+				BCB8D7D4B1AFA15D3ACEFCEA /* juce_ComponentBuilder.h */,
+				7BB3AB4907661D6FED799B7C /* juce_ComponentMovementWatcher.cpp */,
+				65E82ADF9AEE696576F43E92 /* juce_ComponentMovementWatcher.h */,
+				43ACFC660A375B2DEDFE2274 /* juce_ConcertinaPanel.cpp */,
+				10F328BCD86EF125C5DDA33D /* juce_ConcertinaPanel.h */,
+				727511F6927A7B2602A6C689 /* juce_GroupComponent.cpp */,
+				EA8D7BB28F79E1545758D636 /* juce_GroupComponent.h */,
+				D3C9856B677A34F8C60469F2 /* juce_MultiDocumentPanel.cpp */,
+				5C454FECFF7234355CEA17D4 /* juce_MultiDocumentPanel.h */,
+				8B5073191880BFFDF8B3BE6E /* juce_ResizableBorderComponent.cpp */,
+				BE0926F2599AC33A59DF23E1 /* juce_ResizableBorderComponent.h */,
+				0ACD709DE0EBA4A3D73325FD /* juce_ResizableCornerComponent.cpp */,
+				75087C822B7871FA849D2909 /* juce_ResizableCornerComponent.h */,
+				7E47A29DD9817618F48068FF /* juce_ResizableEdgeComponent.cpp */,
+				4C8154CEB5C33EFB9E5CB8DC /* juce_ResizableEdgeComponent.h */,
+				0A6652042F8E043F43239E75 /* juce_ScrollBar.cpp */,
+				16E61715753895412F61F93B /* juce_ScrollBar.h */,
+				66B4C39694799AC85ADDBECC /* juce_StretchableLayoutManager.cpp */,
+				9091730D608EEEA35977BC1D /* juce_StretchableLayoutManager.h */,
+				987C3D5A7CC55FB19AD24294 /* juce_StretchableLayoutResizerBar.cpp */,
+				E0E99D3CFACF9CB9B503EDD8 /* juce_StretchableLayoutResizerBar.h */,
+				5C96DDE9CD90B82EA3CD6ED8 /* juce_StretchableObjectResizer.cpp */,
+				9EDDEEBCF410FDF5B96FAD65 /* juce_StretchableObjectResizer.h */,
+				BAB603B7CA702368B2513074 /* juce_TabbedButtonBar.cpp */,
+				0737A6A737019EFC6BC4CED0 /* juce_TabbedButtonBar.h */,
+				DDDCB9E999C4FF41EE6859DA /* juce_TabbedComponent.cpp */,
+				C9441D8978D4B1F14F270228 /* juce_TabbedComponent.h */,
+				48F1E4DDD3B2B8E5CC410EE1 /* juce_Viewport.cpp */,
+				5017AF048B9A8F840DA442A0 /* juce_Viewport.h */,
+			);
+			name = layout;
+			sourceTree = "<group>";
+		};
+		3CC531922CC2D398E283A845 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				D3109994DA6AD871BE85C4E2 /* The Introjucer */,
+				8A24D1B6925535A868974986 /* Juce Modules */,
+				2C6746F66EF4444F53B3221F /* Juce Library Code */,
+				8180B5894A78501084B8F133 /* Resources */,
+				0FFEF043CA89142B18C79ABE /* Frameworks */,
+				92ABB8016546F41128399E9D /* Products */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		43F993699B5DE3F1B3D3C905 /* native */ = {
+			isa = PBXGroup;
+			children = (
+				61096C79B4C094699E9ED296 /* juce_android_Files.cpp */,
+				F2A27DDB3055518A62BA7C25 /* juce_android_JNIHelpers.h */,
+				F9CFCE9A63B208A180F2AC3A /* juce_android_Misc.cpp */,
+				C43808AF23AC4F25CB26733D /* juce_android_Network.cpp */,
+				40B9BA6D711F58DEB6E871BF /* juce_android_SystemStats.cpp */,
+				94A8C75647A8777AC35F13FC /* juce_android_Threads.cpp */,
+				CF4C51480A8E95AC5F107FF3 /* juce_BasicNativeHeaders.h */,
+				6C867E1E3FEC31970950C620 /* juce_linux_CommonFile.cpp */,
+				BC629A17FC45C9D48E2A383F /* juce_linux_Files.cpp */,
+				7545BFF1C7C857A810B0483D /* juce_linux_Network.cpp */,
+				B53BBDA475207303A77FAD40 /* juce_linux_SystemStats.cpp */,
+				86EC32D1F0A4D7678B298631 /* juce_linux_Threads.cpp */,
+				CAC9FBFB722FE3DA7CE3BE12 /* juce_mac_Files.mm */,
+				63754DF4DA5063BF038C359B /* juce_mac_Network.mm */,
+				29FD4A27890434E137DBC3B9 /* juce_mac_Strings.mm */,
+				5659718DF6BD054B2B0A875C /* juce_mac_SystemStats.mm */,
+				633CC0CEF05B3ADCEEE1325E /* juce_mac_Threads.mm */,
+				E69046467FD9DC88B664447B /* juce_osx_ObjCHelpers.h */,
+				BE6E4546B1A6458DEA0C7FD4 /* juce_posix_NamedPipe.cpp */,
+				61538AD86AB82CE59EF6C68D /* juce_posix_SharedCode.h */,
+				DF12EEE63E6D19610B89CA22 /* juce_win32_ComSmartPtr.h */,
+				63A4A00461C033BC464E4D34 /* juce_win32_Files.cpp */,
+				99623EB9527119388EEDC8E6 /* juce_win32_Network.cpp */,
+				40B4AB02D26ED520104B9363 /* juce_win32_Registry.cpp */,
+				F0793C460694102BA8D6D293 /* juce_win32_SystemStats.cpp */,
+				A3A4DC7DB79039626E4A311C /* juce_win32_Threads.cpp */,
+			);
+			name = native;
+			sourceTree = "<group>";
+		};
+		4C0BD8F18173E3D675D03872 /* native */ = {
+			isa = PBXGroup;
+			children = (
+				D03B334EFDF780C2C0FE33B8 /* juce_android_WebBrowserComponent.cpp */,
+				BA9B833DA92A957DB959CECC /* juce_ios_UIViewComponent.mm */,
+				AC544E614702255B972E1E8F /* juce_linux_SystemTrayIcon.cpp */,
+				D439FCBFE0FCAA2C67548362 /* juce_linux_WebBrowserComponent.cpp */,
+				4BE6A47DF33CCD5619DFE82A /* juce_mac_AppleRemote.mm */,
+				742B8388A246A9E984457C7A /* juce_mac_CarbonViewWrapperComponent.h */,
+				8B2E98629FB118FAAB8E2476 /* juce_mac_NSViewComponent.mm */,
+				0B9187D02C50D0A3C4516DC4 /* juce_mac_SystemTrayIcon.cpp */,
+				2FAD2E774B5F20B781D5AEB2 /* juce_mac_WebBrowserComponent.mm */,
+				5377705718D6D60A6AA2848F /* juce_win32_ActiveXComponent.cpp */,
+				C5424781C756A8FF3D66670D /* juce_win32_SystemTrayIcon.cpp */,
+				9EFFD9F226690A84BBA574C4 /* juce_win32_WebBrowserComponent.cpp */,
+			);
+			name = native;
+			sourceTree = "<group>";
+		};
+		4FDE8BC3A59AA207C6CE77F8 /* ui */ = {
+			isa = PBXGroup;
+			children = (
+				EF30A74B566A461A171BBF83 /* jucer_ComponentLayoutEditor.cpp */,
+				263D9041F9B7D6A79DC38CD6 /* jucer_ComponentLayoutEditor.h */,
+				3514E78B58A08F4C98F54C5A /* jucer_ComponentLayoutPanel.h */,
+				4E191CDCE7565DB726CF7065 /* jucer_ComponentOverlayComponent.cpp */,
+				FBBDD70D47163D341B2F0A8D /* jucer_ComponentOverlayComponent.h */,
+				98F42686D9DAC974F2514217 /* jucer_EditingPanelBase.cpp */,
+				97E75A598791645465FEDCE1 /* jucer_EditingPanelBase.h */,
+				F6D3F208B6EE2A50CE1F0A18 /* jucer_JucerCommandIDs.h */,
+				9C7FA58D223674C4C2AC6595 /* jucer_JucerDocumentEditor.cpp */,
+				1125D1B2AE54AEF2EB3D51C0 /* jucer_JucerDocumentEditor.h */,
+				B15E33E7342F6EB4F95C9B1D /* jucer_PaintRoutineEditor.cpp */,
+				4E60769DE992CA7FC1A4A486 /* jucer_PaintRoutineEditor.h */,
+				16203C6791259C9718A04C3A /* jucer_PaintRoutinePanel.cpp */,
+				B06C7C053DB0660CDA8B5C2C /* jucer_PaintRoutinePanel.h */,
+				D92A6E9404A30EED32DCE4ED /* jucer_RelativePositionedRectangle.h */,
+				DF725A596B7BCD7520CC0A9F /* jucer_ResourceEditorPanel.cpp */,
+				641B57E5FAE6BEFDB6462921 /* jucer_ResourceEditorPanel.h */,
+				3A5B5DC92BE6D22CA15B9671 /* jucer_SnapGridPainter.h */,
+				921752D9B004A15973DDF56F /* jucer_TestComponent.cpp */,
+				9F41F3338BF00D0FC74C6390 /* jucer_TestComponent.h */,
+			);
+			name = ui;
+			sourceTree = "<group>";
+		};
+		58CA858FC033FD1F47ADA039 /* buttons */ = {
+			isa = PBXGroup;
+			children = (
+				240283D05A8E1886987E07F2 /* juce_ArrowButton.cpp */,
+				3B059A5FF36DA71C1433CA60 /* juce_ArrowButton.h */,
+				33644BFBB02CBC8EFB61C5D2 /* juce_Button.cpp */,
+				63717F00538E1367E2B9D812 /* juce_Button.h */,
+				B83E41BC9767A790F2D04403 /* juce_DrawableButton.cpp */,
+				FEBB5ECA2C071F61AFD9A9D2 /* juce_DrawableButton.h */,
+				92E4C9A69A2DAD900D128A02 /* juce_HyperlinkButton.cpp */,
+				A947623ED5EA00C6C3FD8EBE /* juce_HyperlinkButton.h */,
+				6C25EB12F6DB9F5225E75667 /* juce_ImageButton.cpp */,
+				5805FE3FCA0B3CD8E2851774 /* juce_ImageButton.h */,
+				8681C46D7B7D05BEEB56E44E /* juce_ShapeButton.cpp */,
+				700F6188EAA73DD57767694F /* juce_ShapeButton.h */,
+				B18059D88300EB8EF703A82B /* juce_TextButton.cpp */,
+				F4C1A19AAC280B0A58F73FAD /* juce_TextButton.h */,
+				22C0EC04F7C30AAE16E632A7 /* juce_ToggleButton.cpp */,
+				5801B222830CA1E1006968BA /* juce_ToggleButton.h */,
+				2DE3560E8DB420766D385023 /* juce_ToolbarButton.cpp */,
+				B895CACE6FF447C83DC7ABF1 /* juce_ToolbarButton.h */,
+			);
+			name = buttons;
+			sourceTree = "<group>";
+		};
+		59884479C6FFC940D3992EE6 /* zip */ = {
+			isa = PBXGroup;
+			children = (
+				37C65F13D7CF8A718D1569AE /* juce_GZIPCompressorOutputStream.cpp */,
+				BE4A96EF54B366C811255141 /* juce_GZIPCompressorOutputStream.h */,
+				DF8FBA0269590E5FAC7FE213 /* juce_GZIPDecompressorInputStream.cpp */,
+				88332B74FC9B9BE2F60D7EAB /* juce_GZIPDecompressorInputStream.h */,
+				E691B76C2F16D0E4A2BFABC2 /* juce_ZipFile.cpp */,
+				C695512ADA3E687DD1E55C0E /* juce_ZipFile.h */,
+			);
+			name = zip;
+			sourceTree = "<group>";
+		};
+		59C2687AA614A77DA150AFAB /* fonts */ = {
+			isa = PBXGroup;
+			children = (
+				7577BF4DE64CD865088A612E /* juce_AttributedString.cpp */,
+				5F99D905AAF0C3F89CEAD965 /* juce_AttributedString.h */,
+				51D9906830CE2006B74DBFCC /* juce_CustomTypeface.cpp */,
+				5F4AF4400A9511B74E2425EE /* juce_CustomTypeface.h */,
+				760A535A2680C8B3C44B59C5 /* juce_Font.cpp */,
+				D7F64C0E6B3CBA49A9F0341C /* juce_Font.h */,
+				0FD7364EC64E25AE854E9A9D /* juce_GlyphArrangement.cpp */,
+				E5030E4FB09EEFDEC6E17F33 /* juce_GlyphArrangement.h */,
+				801143A09B8A467EA47EBA27 /* juce_TextLayout.cpp */,
+				95CBFF7351F89C117E30292A /* juce_TextLayout.h */,
+				785740092163D40EE36BDA5B /* juce_Typeface.cpp */,
+				419A5389244CCE7390877F1D /* juce_Typeface.h */,
+			);
+			name = fonts;
+			sourceTree = "<group>";
+		};
+		617C7A87C00C7357D6B4CA43 /* widgets */ = {
+			isa = PBXGroup;
+			children = (
+				F74B09C0BC8F9038B7464F74 /* juce_ComboBox.cpp */,
+				3EFC8EEA0D7714261BB90A41 /* juce_ComboBox.h */,
+				E6C8D5E6CB5649F8181F3663 /* juce_ImageComponent.cpp */,
+				DD95F4D24DEADB6030D5959E /* juce_ImageComponent.h */,
+				A9208187F15083F4FC55E0E8 /* juce_Label.cpp */,
+				DF45CF7F287FC822F45A5AA9 /* juce_Label.h */,
+				A3632F10CD01DB5263F628F0 /* juce_ListBox.cpp */,
+				EC1A0BD441203369A933D00C /* juce_ListBox.h */,
+				CF4BDE076A0E86E887C842BD /* juce_ProgressBar.cpp */,
+				5EAA527023FD40745056F13B /* juce_ProgressBar.h */,
+				CE4A609A9FB2403D506B3068 /* juce_Slider.cpp */,
+				EAA4FD2E9CB12F1B946D2A62 /* juce_Slider.h */,
+				55A56A4C2EC5DECEC307EC37 /* juce_TableHeaderComponent.cpp */,
+				6E2B6FE06BE3735AA969B526 /* juce_TableHeaderComponent.h */,
+				2D035221BF4D4B8C56FA3653 /* juce_TableListBox.cpp */,
+				B292B170AC30407623358E6F /* juce_TableListBox.h */,
+				A42E6A76BCFC6504676EBE8B /* juce_TextEditor.cpp */,
+				85B2B84227B39C31FE9D790A /* juce_TextEditor.h */,
+				C85BCA043B9CB378FA6876B5 /* juce_Toolbar.cpp */,
+				659B75A15D70B8FE57D1A1BE /* juce_Toolbar.h */,
+				FBD5E2A21019AF2EAD45BAD1 /* juce_ToolbarItemComponent.cpp */,
+				9559DA09C937A41B88227D80 /* juce_ToolbarItemComponent.h */,
+				DADCCD453FA0BCBE7E423FAA /* juce_ToolbarItemFactory.h */,
+				61F8ED9B6C0D09E2665531D3 /* juce_ToolbarItemPalette.cpp */,
+				61151BEBE0F7E79DFA313076 /* juce_ToolbarItemPalette.h */,
+				700138BDDB27754A06B56C87 /* juce_TreeView.cpp */,
+				B388675858A6323C1A1F7BFE /* juce_TreeView.h */,
+			);
+			name = widgets;
+			sourceTree = "<group>";
+		};
+		69E5820210E99179A52F1A77 /* drawables */ = {
+			isa = PBXGroup;
+			children = (
+				7BD8AE7287AB53880575A757 /* juce_Drawable.cpp */,
+				B290C6821BDC0912A94A1127 /* juce_Drawable.h */,
+				909FCA929A162A919ABF6575 /* juce_DrawableComposite.cpp */,
+				E626D36E7158BA472EF89AD5 /* juce_DrawableComposite.h */,
+				7E8730C293CF253B56930440 /* juce_DrawableImage.cpp */,
+				84493A7AD6B0398B732461FB /* juce_DrawableImage.h */,
+				630428D04F157F7162C05D59 /* juce_DrawablePath.cpp */,
+				5FDE1D586B6984E67E3B1E19 /* juce_DrawablePath.h */,
+				7DBCC7A6E5B251DA94AB0EE0 /* juce_DrawableRectangle.cpp */,
+				641338764B8C715715DA7351 /* juce_DrawableRectangle.h */,
+				F004FD803D0EDAAB81667345 /* juce_DrawableShape.cpp */,
+				F9B4B5E9595EC2CD47736BAC /* juce_DrawableShape.h */,
+				55B79C48660935077095DBFD /* juce_DrawableText.cpp */,
+				5EE461C6611D3669B36F639D /* juce_DrawableText.h */,
+				1FEE53F170737A23D412C425 /* juce_SVGParser.cpp */,
+			);
+			name = drawables;
+			sourceTree = "<group>";
+		};
+		6A6672A570C2C2418F926C82 /* juce_data_structures */ = {
+			isa = PBXGroup;
+			children = (
+				2A8293EA2395BFFCA229F799 /* values */,
+				8E7A1020B8096653D203C38A /* undomanager */,
+				BD9E9E80DDC81539B00DCAB6 /* app_properties */,
+				2CB1AA089385D7399AC615CE /* juce_module_info */,
+				4760F25A96CAB18E75573C0B /* juce_data_structures.h */,
+			);
+			name = juce_data_structures;
+			sourceTree = "<group>";
+		};
+		6CA37BA48005B8EF0478B69E /* native */ = {
+			isa = PBXGroup;
+			children = (
+				C18696515B6681B033F06D44 /* juce_android_Fonts.cpp */,
+				76E2E826701240CDD4DEDA57 /* juce_android_GraphicsContext.cpp */,
+				E6697A0594C3625F9025FD3B /* juce_freetype_Fonts.cpp */,
+				9B4AAEAD95B93FA8F2348E27 /* juce_linux_Fonts.cpp */,
+				7BD4BCAA20B1ACED28EBBFD9 /* juce_mac_CoreGraphicsContext.h */,
+				EEF2B5CF27493A0E5432F495 /* juce_mac_CoreGraphicsContext.mm */,
+				6350DFE5844B6CB31FB54A80 /* juce_mac_CoreGraphicsHelpers.h */,
+				5D33FED578ADEEBAA8A4CFED /* juce_mac_Fonts.mm */,
+				479E55D2A68FC2E14FF2E39A /* juce_RenderingHelpers.h */,
+				09BB016660D64FDCD2A9866F /* juce_win32_Direct2DGraphicsContext.cpp */,
+				95220AF02A9BEC790D84413E /* juce_win32_DirectWriteTypeface.cpp */,
+				21822729E1EF7CC3D3528BFE /* juce_win32_DirectWriteTypeLayout.cpp */,
+				DA52CB613FB5AEB736624AB1 /* juce_win32_Fonts.cpp */,
+			);
+			name = native;
+			sourceTree = "<group>";
+		};
+		76F28FCB72DD5943D08F3342 /* misc */ = {
+			isa = PBXGroup;
+			children = (
+				2D6B797AC8B1B5E7C8E7D1E9 /* juce_BubbleComponent.cpp */,
+				CD9FC835C7A1DE440792F5B4 /* juce_BubbleComponent.h */,
+				92BE7C40FE77D34FFF39D9BB /* juce_DropShadower.cpp */,
+				4F8DCA25AFAD089510C8B48B /* juce_DropShadower.h */,
+			);
+			name = misc;
+			sourceTree = "<group>";
+		};
+		815C2090B70E6EECD913C0CA /* threads */ = {
+			isa = PBXGroup;
+			children = (
+				96BD2AC4C892C245E04B8A93 /* juce_ChildProcess.cpp */,
+				5909E278D645E1F91C0AE2BB /* juce_ChildProcess.h */,
+				84E06858791DF81E37B9A484 /* juce_CriticalSection.h */,
+				1320D638B7BACCADEDA5ABD2 /* juce_DynamicLibrary.h */,
+				3D577E9A14625124F5933387 /* juce_HighResolutionTimer.cpp */,
+				92B6276B30F89F742E78A265 /* juce_HighResolutionTimer.h */,
+				82976E18712BAE638A132F02 /* juce_InterProcessLock.h */,
+				689996FF463D52FEF125AFF3 /* juce_Process.h */,
+				5C6893F610657B9383F9333F /* juce_ReadWriteLock.cpp */,
+				800206C482A2C7E62682C324 /* juce_ReadWriteLock.h */,
+				D8FA66DEA9117C2D0239B11B /* juce_ScopedLock.h */,
+				34D4199F01C019ED54544C1E /* juce_ScopedReadLock.h */,
+				7861B7ACECC987D58C7D0309 /* juce_ScopedWriteLock.h */,
+				C07856C24F305E7D50660F67 /* juce_SpinLock.h */,
+				F561D4822324D6D1650221FA /* juce_Thread.cpp */,
+				C7B2FE883FA1401854BEDE8F /* juce_Thread.h */,
+				C8DED829D0662D34D09A0C5B /* juce_ThreadLocalValue.h */,
+				6ED2213CA4E7E418E74A91E4 /* juce_ThreadPool.cpp */,
+				1C94985541E125A49C70C07C /* juce_ThreadPool.h */,
+				54652695DEEBAB24E462DDD9 /* juce_TimeSliceThread.cpp */,
+				5BDAE5FD683C0005A609495E /* juce_TimeSliceThread.h */,
+				95604CB3BD2C7745FD8FDB74 /* juce_WaitableEvent.h */,
+			);
+			name = threads;
+			sourceTree = "<group>";
+		};
+		8180B5894A78501084B8F133 /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				4CA1C3E6585D7694AA9C309F /* Info.plist */,
+				6678E9B3EEACAD47F438B264 /* RecentFilesMenuTemplate.nib */,
+				951128CA33CCDEF570436B1C /* Icon.icns */,
+				B483D960309FAFC193F9CDA2 /* juce_icon.png */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		825956EA572E23B506C8236F /* ComponentEditor */ = {
+			isa = PBXGroup;
+			children = (
+				DA3DF56D3295CCD84DA4E882 /* components */,
+				2BA1ACF18E7E078C7171B162 /* documents */,
+				B3DB7CF28491BD6FFAAC716A /* paintelements */,
+				AECCE15B651C9EBBD07B925F /* properties */,
+				4FDE8BC3A59AA207C6CE77F8 /* ui */,
+				9EF583A6201DBC813C2F63C4 /* jucer_BinaryResources.cpp */,
+				6AC88EFC247C225CC5C11A43 /* jucer_BinaryResources.h */,
+				133F1E428260C5ADDF496DF9 /* jucer_ComponentLayout.cpp */,
+				3F9D4C7F6E5779D4E4AE655D /* jucer_ComponentLayout.h */,
+				78D0DBC4798FF040FDB90F6D /* jucer_GeneratedCode.cpp */,
+				DA345D5B9DABD049F90DC96F /* jucer_GeneratedCode.h */,
+				269A454F1FF081DA67FFD578 /* jucer_JucerDocument.cpp */,
+				8F30A53C7FE4BC65171FB3E2 /* jucer_JucerDocument.h */,
+				9D7689451732AF8333402B3A /* jucer_ObjectTypes.cpp */,
+				50498FF6EA3901CBD58223B3 /* jucer_ObjectTypes.h */,
+				C187718F7B9EBA88584B43F3 /* jucer_PaintRoutine.cpp */,
+				66B49F08C5EC3E4974825FF8 /* jucer_PaintRoutine.h */,
+				5432B7B9B2CF2EAEC8B66D5C /* jucer_UtilityFunctions.h */,
+			);
+			name = ComponentEditor;
+			sourceTree = "<group>";
+		};
+		83DEE68BC6A9B685C3E75FEA /* timers */ = {
+			isa = PBXGroup;
+			children = (
+				4CC9356FA92F5C94E4DC65D9 /* juce_MultiTimer.cpp */,
+				5797A65A441D030729C6E886 /* juce_MultiTimer.h */,
+				ABD9D1389B5591B2303990F9 /* juce_Timer.cpp */,
+				4EBA5CEE07FB8B2DAA9A0315 /* juce_Timer.h */,
+			);
+			name = timers;
+			sourceTree = "<group>";
+		};
+		88DFD62CB6545EE8CA5C485B /* BinaryData */ = {
+			isa = PBXGroup;
+			children = (
+				5F4F4EAB042F2730F94A1CEA /* AudioPluginXCodeScript.txt */,
+				301592EBAC0FFF6F5B268E99 /* background_tile.png */,
+				41105E536155E394E54BDD35 /* colourscheme_dark.xml */,
+				5F6584B675E30761521A9F42 /* colourscheme_light.xml */,
+				B483D960309FAFC193F9CDA2 /* juce_icon.png */,
+				0075C5208947159AF2802F3B /* jucer_AudioPluginEditorTemplate.cpp */,
+				AFF72BA2B130F3F9AC029080 /* jucer_AudioPluginEditorTemplate.h */,
+				65F4749184C84C2FDBB4C305 /* jucer_AudioPluginFilterTemplate.cpp */,
+				03D3053EDE47FED1919C6674 /* jucer_AudioPluginFilterTemplate.h */,
+				DC922C6A65D260C18E888E49 /* jucer_ComponentTemplate.cpp */,
+				963E0740B7B4D59EF2D16740 /* jucer_ComponentTemplate.h */,
+				9683B04CA3BD7F73E8236FE2 /* jucer_ContentCompTemplate.cpp */,
+				35E6EE1E98DD7050DDFECD9B /* jucer_ContentCompTemplate.h */,
+				24C34D0578AE6C7A3EA18781 /* jucer_InlineComponentTemplate.h */,
+				18D9EBA1DAE45EEF81FD5C8F /* jucer_MainConsoleAppTemplate.cpp */,
+				AE1BC6DCCFC1A18E2ACE23F1 /* jucer_MainTemplate_NoWindow.cpp */,
+				86E8A40E5A83781A8478454D /* jucer_MainTemplate_Window.cpp */,
+				61BE37E2B26C25056D9E8FE2 /* jucer_NewComponentTemplate.cpp */,
+				E2374E15D65425C4101237E2 /* jucer_NewComponentTemplate.h */,
+				CF8011B3C67B609032974DA5 /* jucer_NewCppFileTemplate.cpp */,
+				53151B683E11F420203E61C2 /* jucer_NewCppFileTemplate.h */,
+				F7CAB5BC15EE351949D3F2C3 /* jucer_NewInlineComponentTemplate.h */,
+				58139D8D454051C59E77609B /* RecentFilesMenuTemplate.nib */,
+			);
+			name = BinaryData;
+			sourceTree = "<group>";
+		};
+		891F84627A03FA733F37A199 /* Project */ = {
+			isa = PBXGroup;
+			children = (
+				93D03B2BC76998A3BDA747E8 /* jucer_AudioPluginModule.h */,
+				8F8BF1A7130D858E0A239F9E /* jucer_ConfigTree_Base.h */,
+				7B4E33B1E04139F359FB484B /* jucer_ConfigTree_Exporter.h */,
+				9F75811FE7B5F8D1321BEC69 /* jucer_ConfigTree_Modules.h */,
+				C7B47372A9D5970E3D9A5400 /* jucer_GroupInformationComponent.h */,
+				F797071D88542C813CF7222A /* jucer_Module.cpp */,
+				7211101FFA28400ADBB1D47A /* jucer_Module.h */,
+				AFEBD8423B07599B1DE175A3 /* jucer_ModulesPanel.h */,
+				F1163B7856FDABA413A88D90 /* jucer_NewFileWizard.cpp */,
+				5852830ECC222BA36A30EC20 /* jucer_NewFileWizard.h */,
+				69A5D13490A62DAE9A7D5A22 /* jucer_NewProjectWizard.cpp */,
+				F7A91434FEFBE9AC130CD814 /* jucer_NewProjectWizard.h */,
+				BAC43B20E14A340CCF14119C /* jucer_Project.cpp */,
+				BF3CEF080FA013E2778DCE90 /* jucer_Project.h */,
+				86E468DE6556BB2AD76A3D80 /* jucer_ProjectContentComponent.cpp */,
+				E60E28D1B7491047DEA236AE /* jucer_ProjectContentComponent.h */,
+				375AFDF06A908D89DEC5205F /* jucer_ProjectTree_Base.h */,
+				47B49049B85EED74D29C9906 /* jucer_ProjectTree_File.h */,
+				4F6365A0D2D51337151D85C3 /* jucer_ProjectTree_Group.h */,
+				E70CA21960A64CCB835725FF /* jucer_ProjectType.cpp */,
+				B8385E9A644BD3CD94876448 /* jucer_ProjectType.h */,
+			);
+			name = Project;
+			sourceTree = "<group>";
+		};
+		8A24D1B6925535A868974986 /* Juce Modules */ = {
+			isa = PBXGroup;
+			children = (
+				8BA5B0B5CBCE8D29F02D341A /* juce_core */,
+				E58F94F6CDB786C1ED488C9C /* juce_cryptography */,
+				6A6672A570C2C2418F926C82 /* juce_data_structures */,
+				DE7F542DC0967F8EDCC4DCD0 /* juce_events */,
+				E9819C83D0B797FC71811B1B /* juce_graphics */,
+				2A27F41171A44038C2A1CB56 /* juce_gui_basics */,
+				DFC8A876133A671741A5FCA2 /* juce_gui_extra */,
+			);
+			name = "Juce Modules";
+			sourceTree = "<group>";
+		};
+		8BA5B0B5CBCE8D29F02D341A /* juce_core */ = {
+			isa = PBXGroup;
+			children = (
+				ED7BB3F297250D7B43B2A536 /* text */,
+				F824830BD560E7906A8CD82B /* maths */,
+				01C121A5814A16A7CB907FB9 /* memory */,
+				101599FA5E724FC0C78144B3 /* containers */,
+				815C2090B70E6EECD913C0CA /* threads */,
+				D385600698057B290BC2AEF7 /* time */,
+				0B795464B0BFEE19C4F89F0F /* files */,
+				20F9DB293E2CC9F98F43758C /* network */,
+				06D5C2B5F1F4E37AF1C7A425 /* streams */,
+				CBF105D9162BB597EBC1B981 /* logging */,
+				ABD92B739720D08778AF88F8 /* system */,
+				F6C04F077B187FD605483DEB /* xml */,
+				E659B9C71FCEAA788CFEF8F0 /* javascript */,
+				59884479C6FFC940D3992EE6 /* zip */,
+				248A3D6E995D23F2AFDBF78B /* unit_tests */,
+				A09D1A158BCD0A396549C1F3 /* misc */,
+				43F993699B5DE3F1B3D3C905 /* native */,
+				00E86D533C0149A56F21D804 /* juce_module_info */,
+				90B9A4673FDC35841E5D4562 /* juce_core.h */,
+			);
+			name = juce_core;
+			sourceTree = "<group>";
+		};
+		8E7A1020B8096653D203C38A /* undomanager */ = {
+			isa = PBXGroup;
+			children = (
+				199E3F67A1E48F7D95AC6E1E /* juce_UndoableAction.h */,
+				1602D140D6F478765ACEA660 /* juce_UndoManager.cpp */,
+				C9CA4A5BF4D2A1109432BA49 /* juce_UndoManager.h */,
+			);
+			name = undomanager;
+			sourceTree = "<group>";
+		};
+		8EAF68A83656BC02B4B7C9C9 /* native */ = {
+			isa = PBXGroup;
+			children = (
+				529B9F1BADEE58EA9F4F8C09 /* juce_android_FileChooser.cpp */,
+				822A59FE23E0E962993EFF1C /* juce_android_Windowing.cpp */,
+				F361B20780764ADD61B1B692 /* juce_ios_UIViewComponentPeer.mm */,
+				6F4A2CF770F9E789E695825E /* juce_ios_Windowing.mm */,
+				27E909E8C27DFBF0F184DCBD /* juce_linux_Clipboard.cpp */,
+				D0B6A9AF3EC42C025B11894D /* juce_linux_FileChooser.cpp */,
+				F61D66D41025A0E4F9CDBE7A /* juce_linux_Windowing.cpp */,
+				5293C026D920F2E0E710447C /* juce_mac_FileChooser.mm */,
+				08AF500230E8F8644B3682F5 /* juce_mac_MainMenu.mm */,
+				8E673D43C2CD68894A10B99D /* juce_mac_MouseCursor.mm */,
+				A36D9A1D559944BB4EAF2F5E /* juce_mac_NSViewComponentPeer.mm */,
+				921FBD47F9842396F1CB22ED /* juce_mac_Windowing.mm */,
+				101572E83E487C91969D671C /* juce_MultiTouchMapper.h */,
+				C89684A359852FD2B16D705A /* juce_win32_DragAndDrop.cpp */,
+				0F4EFF11F984ED5E2A2045A1 /* juce_win32_FileChooser.cpp */,
+				3832E22BBFD9A9A1E9EEED6F /* juce_win32_Windowing.cpp */,
+			);
+			name = native;
+			sourceTree = "<group>";
+		};
+		8EB51FAF42AAEC7AC357396B /* effects */ = {
+			isa = PBXGroup;
+			children = (
+				519269C6218CA35F731ECA61 /* juce_DropShadowEffect.cpp */,
+				46392AD7FE5D6BFED1BE827C /* juce_DropShadowEffect.h */,
+				D6520F83A0AD0B5BC024CB9F /* juce_GlowEffect.cpp */,
+				C4B158D37FF6B3125BEED598 /* juce_GlowEffect.h */,
+				136A3229F6535E2FBB9993E2 /* juce_ImageEffectFilter.h */,
+			);
+			name = effects;
+			sourceTree = "<group>";
+		};
+		92ABB8016546F41128399E9D /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				25F52316D256B4534BED16D1 /* Introjucer.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		952AFE51A503A04FFF4B0EF7 /* commands */ = {
+			isa = PBXGroup;
+			children = (
+				993AD03D61870459F867B2F5 /* juce_ApplicationCommandID.h */,
+				97C816B1B6B7FBC38DF10303 /* juce_ApplicationCommandInfo.cpp */,
+				95A64B8A811BB2D78C6F13B9 /* juce_ApplicationCommandInfo.h */,
+				60285932750263E48A18908C /* juce_ApplicationCommandManager.cpp */,
+				56ECDE6643205406C32D1CE8 /* juce_ApplicationCommandManager.h */,
+				DB5C7AA110B217372A52159A /* juce_ApplicationCommandTarget.cpp */,
+				4F052A9DD4EFD3C761C7EBA2 /* juce_ApplicationCommandTarget.h */,
+				E76DA0073983CF90CCE4096B /* juce_KeyPressMappingSet.cpp */,
+				914C0B02F52FA4C06116EDB1 /* juce_KeyPressMappingSet.h */,
+			);
+			name = commands;
+			sourceTree = "<group>";
+		};
+		9DEFBE65118D0527555955A2 /* code_editor */ = {
+			isa = PBXGroup;
+			children = (
+				C7D4CFEA33205B2D33955B9E /* juce_CodeDocument.cpp */,
+				69BB2D7A2EDAB1C87EA1F688 /* juce_CodeDocument.h */,
+				981A11A17B5DD50BC2A69F33 /* juce_CodeEditorComponent.cpp */,
+				EB1F11E213640441C36CDD21 /* juce_CodeEditorComponent.h */,
+				A9BAF0420FC4DC07011EA244 /* juce_CodeTokeniser.h */,
+				67FF4A3F3E1CD9583EABE1F6 /* juce_CPlusPlusCodeTokeniser.cpp */,
+				8C48F6C90CB6D2CBB19511B3 /* juce_CPlusPlusCodeTokeniser.h */,
+				0E24C59E408559F9DF1DC31A /* juce_CPlusPlusCodeTokeniserFunctions.h */,
+				421BFE95D4EE1C5D12BBB848 /* juce_LuaCodeTokeniser.cpp */,
+				D409BCF0D1C42B2761F89C6F /* juce_LuaCodeTokeniser.h */,
+				3F9D0CEF873510CCD254A9C5 /* juce_XMLCodeTokeniser.cpp */,
+				28E80FBE60ED3FE73CCAB834 /* juce_XMLCodeTokeniser.h */,
+			);
+			name = code_editor;
+			sourceTree = "<group>";
+		};
+		A09D1A158BCD0A396549C1F3 /* misc */ = {
+			isa = PBXGroup;
+			children = (
+				084171D9475B3491A4EFAB5F /* juce_Result.cpp */,
+				81A3DED7F13085DF8C8190AB /* juce_Result.h */,
+				A7DD1B727D226AE589E87E4A /* juce_Uuid.cpp */,
+				333B1D00E46AF5A642C1DCDE /* juce_Uuid.h */,
+				34705FA6042CBE98AAF77B61 /* juce_WindowsRegistry.h */,
+			);
+			name = misc;
+			sourceTree = "<group>";
+		};
+		A186EF5D092D513F30A4FE23 /* keyboard */ = {
+			isa = PBXGroup;
+			children = (
+				7D6B19FB1AAA04D27716457B /* juce_CaretComponent.cpp */,
+				6059BA2EC2D80F1A58D047A2 /* juce_CaretComponent.h */,
+				91A9050F591F2E03EA96203A /* juce_KeyboardFocusTraverser.cpp */,
+				104463B9110789FCDA7BD4FB /* juce_KeyboardFocusTraverser.h */,
+				CB5760497CA6F044DA18D3A1 /* juce_KeyListener.cpp */,
+				09F93EBC7C2C877F3446A0C7 /* juce_KeyListener.h */,
+				2FF61C42E37986022C189531 /* juce_KeyPress.cpp */,
+				CB37D7E91B0DA0927BA435F4 /* juce_KeyPress.h */,
+				1B4284167C1A10170537305A /* juce_ModifierKeys.cpp */,
+				0FB3551C6845EF0E9312F850 /* juce_ModifierKeys.h */,
+				AFFC3BBF8BBC82DD09B25EEE /* juce_SystemClipboard.h */,
+				69F318BBA51FA30B777135B8 /* juce_TextEditorKeyMapper.h */,
+				4BD96E9231831D77755CC803 /* juce_TextInputTarget.h */,
+			);
+			name = keyboard;
+			sourceTree = "<group>";
+		};
+		A1B124604F7F471E01D8AA6E /* embedding */ = {
+			isa = PBXGroup;
+			children = (
+				189BC87D79A9670E686ACE00 /* juce_ActiveXControlComponent.h */,
+				F0A49FF985A114AC31ED8F87 /* juce_NSViewComponent.h */,
+				D902B5961F78F2A6DFBF4B7F /* juce_UIViewComponent.h */,
+			);
+			name = embedding;
+			sourceTree = "<group>";
+		};
+		A3BF94AE00810C812E121816 /* positioning */ = {
+			isa = PBXGroup;
+			children = (
+				405388248E6EF4212019AC65 /* juce_MarkerList.cpp */,
+				393E7A4E9BEC14AFC441E73F /* juce_MarkerList.h */,
+				18AAAE2846B4512094CF9E64 /* juce_RelativeCoordinate.cpp */,
+				C7790615097597DFBFBFADC8 /* juce_RelativeCoordinate.h */,
+				4108E23948D43A46FB88B23E /* juce_RelativeCoordinatePositioner.cpp */,
+				FF320FE35050A585E08FF993 /* juce_RelativeCoordinatePositioner.h */,
+				A2F1EA2989EF154ADBFDC4C3 /* juce_RelativeParallelogram.cpp */,
+				8531F4060FE4BEBEC2E8EF9F /* juce_RelativeParallelogram.h */,
+				EE34B44EC8BF50DF2A1EADA6 /* juce_RelativePoint.cpp */,
+				786095D2FAF63CBC05B170C6 /* juce_RelativePoint.h */,
+				CF736AF0DD24273D1F1FF37A /* juce_RelativePointPath.cpp */,
+				9F58502C5ADE97059BD8BFE3 /* juce_RelativePointPath.h */,
+				3AC808D92D13832338534F7F /* juce_RelativeRectangle.cpp */,
+				4AD7BBD9D7EA422981A8C536 /* juce_RelativeRectangle.h */,
+			);
+			name = positioning;
+			sourceTree = "<group>";
+		};
+		ABD92B739720D08778AF88F8 /* system */ = {
+			isa = PBXGroup;
+			children = (
+				10AC5E5349AFAF11362E4199 /* juce_PlatformDefs.h */,
+				E2E00F66C14EEAE78119C0C6 /* juce_StandardHeader.h */,
+				5EA02C28A509FAC9D2561AC5 /* juce_SystemStats.cpp */,
+				1DC3F7820AA6D950B2C6D628 /* juce_SystemStats.h */,
+				318467BF5A24F08E30FB78DF /* juce_TargetPlatform.h */,
+			);
+			name = system;
+			sourceTree = "<group>";
+		};
+		ACBAFA7D92DD82AD44ABE68A /* Application */ = {
+			isa = PBXGroup;
+			children = (
+				441CFEA771BAA50E187342E9 /* jucer_AppearanceSettings.cpp */,
+				223C4209F18A221EB183A056 /* jucer_AppearanceSettings.h */,
+				EE690110171E1648FF2118B8 /* jucer_Application.h */,
+				23A8DE16C0CDB8EED18B008B /* jucer_CommandIDs.h */,
+				0400CB0E056A1D840304D2DE /* jucer_CommandLine.cpp */,
+				2EEB1C074162F363C6599282 /* jucer_CommandLine.h */,
+				6E6140969908E7619F858740 /* jucer_CommonHeaders.h */,
+				C7608A3967D9AB9481848F2B /* jucer_DocumentEditorComponent.cpp */,
+				E65A820D34BF39478B7C5925 /* jucer_DocumentEditorComponent.h */,
+				D526C38D581425949BA0E4AC /* jucer_FilePreviewComponent.h */,
+				F03E2BDD36E6F4F53AB767A8 /* jucer_Headers.h */,
+				8C52A3DDA62A746AA7A68535 /* jucer_Main.cpp */,
+				9069981E414A631B036CC9AC /* jucer_MainWindow.cpp */,
+				2CD34A70B4032C0426F7AA10 /* jucer_MainWindow.h */,
+				2247EE920DF0610CAF9F4513 /* jucer_OpenDocumentManager.cpp */,
+				563091B0916AD9AAA36C7DC5 /* jucer_OpenDocumentManager.h */,
+			);
+			name = Application;
+			sourceTree = "<group>";
+		};
+		AECCE15B651C9EBBD07B925F /* properties */ = {
+			isa = PBXGroup;
+			children = (
+				B00F60201606F195058BB575 /* jucer_ColourPropertyComponent.h */,
+				04C1267B2BD11A6ECCCA654C /* jucer_ComponentBooleanProperty.h */,
+				6A337C69A928E3CE79C55457 /* jucer_ComponentChoiceProperty.h */,
+				AA8EED79F095953D2B5923B8 /* jucer_ComponentColourProperty.h */,
+				D4444EC6342A2A7BC4F7BC46 /* jucer_ComponentTextProperty.h */,
+				295A9B126C98FE15F5A8B81E /* jucer_FilePropertyComponent.h */,
+				8138A55052E9FC27284B74DD /* jucer_FontPropertyComponent.h */,
+				D87FC8F6834E9DC9C8E88B94 /* jucer_JustificationProperty.h */,
+				576D62C0C9C1BA4B7A514721 /* jucer_PositionPropertyBase.h */,
+			);
+			name = properties;
+			sourceTree = "<group>";
+		};
+		B2243BBE276C148522C5987E /* properties */ = {
+			isa = PBXGroup;
+			children = (
+				486683F365BE1E8CEE34D4D3 /* juce_BooleanPropertyComponent.cpp */,
+				2249F79A9B7FFE48DACC14CF /* juce_BooleanPropertyComponent.h */,
+				4CA96F577DD15FB5085518E9 /* juce_ButtonPropertyComponent.cpp */,
+				29C79CFD0760D5BEF0C11D4D /* juce_ButtonPropertyComponent.h */,
+				BBBBDB341B49EA3277A24D8C /* juce_ChoicePropertyComponent.cpp */,
+				09261261800229B6438A9A5B /* juce_ChoicePropertyComponent.h */,
+				F54E3F6CA70967D469913C48 /* juce_PropertyComponent.cpp */,
+				B941446353FA94BCE78D001D /* juce_PropertyComponent.h */,
+				0E06FB23B05CE46487F509C8 /* juce_PropertyPanel.cpp */,
+				2F9762C3866D161E38B4FD00 /* juce_PropertyPanel.h */,
+				D61B5AB0906CF9228E8360BF /* juce_SliderPropertyComponent.cpp */,
+				DD5E98AA79A9883B74F5D38A /* juce_SliderPropertyComponent.h */,
+				B54CB8DDB5000BDCBDECD8BA /* juce_TextPropertyComponent.cpp */,
+				43B30439D7A63B0D2CF12AC9 /* juce_TextPropertyComponent.h */,
+			);
+			name = properties;
+			sourceTree = "<group>";
+		};
+		B3DB7CF28491BD6FFAAC716A /* paintelements */ = {
+			isa = PBXGroup;
+			children = (
+				93B419190CCE92ACAB1ED25B /* jucer_ColouredElement.cpp */,
+				B1963F0D8C0046E54FD9E023 /* jucer_ColouredElement.h */,
+				5091B14CC87C6238CF044258 /* jucer_ElementSiblingComponent.h */,
+				FA04E39EE7E83D445AF9E406 /* jucer_FillType.h */,
+				EB71BA07D6F667E69721E577 /* jucer_GradientPointComponent.h */,
+				3F00C034B140193B3754969B /* jucer_ImageResourceProperty.h */,
+				1C216FE9B7A5209C5CCF2517 /* jucer_PaintElement.cpp */,
+				786BAF436828865F45314440 /* jucer_PaintElement.h */,
+				4E8FE9B1B8C90FC28D56523B /* jucer_PaintElementEllipse.h */,
+				C094F3B6A65A79A6DF87C9C2 /* jucer_PaintElementGroup.h */,
+				FF11D6B512FDC5D887E06F66 /* jucer_PaintElementImage.h */,
+				0169ACAA0FAE70CCEEE4F650 /* jucer_PaintElementPath.cpp */,
+				1D3D6A19A60F0B03DE2F1C14 /* jucer_PaintElementPath.h */,
+				F18AE75F1831D13FF53A8CCC /* jucer_PaintElementRectangle.h */,
+				41CA95403E264AA7457A61F4 /* jucer_PaintElementRoundedRectangle.h */,
+				9C51394634F102DEBBE6C9EB /* jucer_PaintElementText.h */,
+				27A2B025813B7E54E0862642 /* jucer_PaintElementUndoableAction.h */,
+				7A3E96D22F1C9EB4C739834F /* jucer_PointComponent.h */,
+				D0D8B580D0689FFF4B9B823B /* jucer_StrokeType.h */,
+			);
+			name = paintelements;
+			sourceTree = "<group>";
+		};
+		BD9E9E80DDC81539B00DCAB6 /* app_properties */ = {
+			isa = PBXGroup;
+			children = (
+				5CE5E5132CEFADC6D48ECB08 /* juce_ApplicationProperties.cpp */,
+				12ABAFDD4C4BCA2B8313F1CE /* juce_ApplicationProperties.h */,
+				79DF7512BC6437E5E29E3CFB /* juce_PropertiesFile.cpp */,
+				8887ADA2A339C0BD9AFF83DA /* juce_PropertiesFile.h */,
+			);
+			name = app_properties;
+			sourceTree = "<group>";
+		};
+		C2A68B1BEC638D0513BF25C1 /* lookandfeel */ = {
+			isa = PBXGroup;
+			children = (
+				CD0146FF182F74D52D481EB7 /* juce_LookAndFeel.cpp */,
+				12D78FB671BC817D433079B1 /* juce_LookAndFeel.h */,
+				498E9D7F6E7F61A84E0D7792 /* juce_LookAndFeel_V1.cpp */,
+				2412E1E63124369CE418894D /* juce_LookAndFeel_V1.h */,
+				23D5A9D86894973926E3EFB8 /* juce_LookAndFeel_V2.cpp */,
+				58FA9E2B67AED7330158A903 /* juce_LookAndFeel_V2.h */,
+				0AE2B4F22C863455A366D251 /* juce_LookAndFeel_V3.cpp */,
+				7BBA8AF8E7872672F190C1C7 /* juce_LookAndFeel_V3.h */,
+			);
+			name = lookandfeel;
+			sourceTree = "<group>";
+		};
+		C3FB0CB81D460B4263689CAF /* colour */ = {
+			isa = PBXGroup;
+			children = (
+				2FD9D5944388186AAA32FEE2 /* juce_Colour.cpp */,
+				95BAFFF3DDCB31F1E4F5F807 /* juce_Colour.h */,
+				E5C0F0324C408196C1E3AB24 /* juce_ColourGradient.cpp */,
+				9B3076A1D57D614DB7B4657E /* juce_ColourGradient.h */,
+				880D1F031B50F965A56B7240 /* juce_Colours.cpp */,
+				00CBA904DE3B8686A6F569CD /* juce_Colours.h */,
+				45AE1D139D938D43891501E1 /* juce_FillType.cpp */,
+				FA9E4210846A6425A2B54856 /* juce_FillType.h */,
+				1908920B3166E7B7A7A095BC /* juce_PixelFormats.h */,
+			);
+			name = colour;
+			sourceTree = "<group>";
+		};
+		CBF105D9162BB597EBC1B981 /* logging */ = {
+			isa = PBXGroup;
+			children = (
+				12875173A50B701B72E68F90 /* juce_FileLogger.cpp */,
+				4C80A175986D336D4E1044A7 /* juce_FileLogger.h */,
+				24319DEF365C8368FD3AA4EC /* juce_Logger.cpp */,
+				DF1E044516CA91C20B31FB6F /* juce_Logger.h */,
+			);
+			name = logging;
+			sourceTree = "<group>";
+		};
+		CD1AFCF4DFA46BA5BACBB1CB /* mouse */ = {
+			isa = PBXGroup;
+			children = (
+				9CADF9A1F79D9D1ECC7147E9 /* juce_ComponentDragger.cpp */,
+				F6AE2E230EF9FF9F3387394A /* juce_ComponentDragger.h */,
+				76EF37EBCCA75161A3561F9D /* juce_DragAndDropContainer.cpp */,
+				48ADBB0A2A258CF72F04891A /* juce_DragAndDropContainer.h */,
+				174CE62B43D97B83AF1D3338 /* juce_DragAndDropTarget.h */,
+				6737B22BED56A0544E39FD15 /* juce_FileDragAndDropTarget.h */,
+				D41524385F8D560212C9D798 /* juce_LassoComponent.h */,
+				EEA69803BC87FC7DF32A9816 /* juce_MouseCursor.cpp */,
+				68077882A46E2C4E398E4C99 /* juce_MouseCursor.h */,
+				984CCFC22599870F2BC0611E /* juce_MouseEvent.cpp */,
+				B1DF858F499D12D442679683 /* juce_MouseEvent.h */,
+				79366BF7CA160E7EFC7823C4 /* juce_MouseInactivityDetector.cpp */,
+				599957E884512B8314720BBD /* juce_MouseInactivityDetector.h */,
+				82C7BF9F5E863E647438A8AA /* juce_MouseInputSource.cpp */,
+				4F129F3B2CD7B03E97C2F168 /* juce_MouseInputSource.h */,
+				9EFCD465B3A75D9E2556DA0E /* juce_MouseListener.cpp */,
+				61A6870CF7A0DE01A70799B0 /* juce_MouseListener.h */,
+				88E1573706105D51541F4CA5 /* juce_SelectedItemSet.h */,
+				17173DDA0532B81C71D95B05 /* juce_TextDragAndDropTarget.h */,
+				B9F917BA04B3A715B7E49128 /* juce_TooltipClient.h */,
+			);
+			name = mouse;
+			sourceTree = "<group>";
+		};
+		D3109994DA6AD871BE85C4E2 /* The Introjucer */ = {
+			isa = PBXGroup;
+			children = (
+				ACBAFA7D92DD82AD44ABE68A /* Application */,
+				891F84627A03FA733F37A199 /* Project */,
+				E345840128627D533DF908AC /* Project Saving */,
+				D93DED1F5F1B0E49E10A6760 /* Utility */,
+				FC22321797D433148500EDDA /* Code Editor */,
+				825956EA572E23B506C8236F /* ComponentEditor */,
+				88DFD62CB6545EE8CA5C485B /* BinaryData */,
+			);
+			name = "The Introjucer";
+			sourceTree = "<group>";
+		};
+		D385600698057B290BC2AEF7 /* time */ = {
+			isa = PBXGroup;
+			children = (
+				E85876BF1128CB4E29D7CB64 /* juce_PerformanceCounter.cpp */,
+				756D2E74350285D4082EFD8E /* juce_PerformanceCounter.h */,
+				3A9ACE7B66413BF99882ECC6 /* juce_RelativeTime.cpp */,
+				4B138A2FD1EF34BB254F7C7A /* juce_RelativeTime.h */,
+				BDDD7A81586798621C6EF327 /* juce_Time.cpp */,
+				E39CCC282936B2F3062E9143 /* juce_Time.h */,
+			);
+			name = time;
+			sourceTree = "<group>";
+		};
+		D93DED1F5F1B0E49E10A6760 /* Utility */ = {
+			isa = PBXGroup;
+			children = (
+				9B9CAD20E1243B4351B4C8D8 /* jucer_CodeHelpers.cpp */,
+				914ADDB50ED7365F08BA91F9 /* jucer_CodeHelpers.h */,
+				188D03A4247F4BC0539F5C49 /* jucer_Colours.h */,
+				1729AEDC34001C31B8CC357C /* jucer_FileHelpers.cpp */,
+				553725A0E3A391651ED1731E /* jucer_FileHelpers.h */,
+				CF21D9DB3AEC0A4DCAB36A99 /* jucer_Icons.cpp */,
+				515FF6E74826E3E3F7273621 /* jucer_Icons.h */,
+				47DD50A5A9091F9900E0EAD9 /* jucer_JucerTreeViewBase.cpp */,
+				820291543BF93243B718F0EE /* jucer_JucerTreeViewBase.h */,
+				0F249640243FBD5717F6ADD9 /* jucer_MiscUtilities.cpp */,
+				4A41FD3066D0979DB48691E5 /* jucer_MiscUtilities.h */,
+				1AF7EFBE4961C7B6C834BF54 /* jucer_PresetIDs.h */,
+				1F421199C40092BFEE0658C2 /* jucer_RelativePath.h */,
+				631983AA62673015F8D7453B /* jucer_StoredSettings.cpp */,
+				9BC8AE609A07657CEF587548 /* jucer_StoredSettings.h */,
+				D3E139185095C486DD3D61F2 /* jucer_TranslationTool.h */,
+				8090981F07A76E465DAAADF4 /* jucer_ValueSourceHelpers.h */,
+			);
+			name = Utility;
+			sourceTree = "<group>";
+		};
+		DA3DF56D3295CCD84DA4E882 /* components */ = {
+			isa = PBXGroup;
+			children = (
+				0FF1C6905150EAAB1AE081A7 /* jucer_ButtonHandler.h */,
+				008C8B2C2328CFBB9375397D /* jucer_ComboBoxHandler.h */,
+				B741170E45D74F30B7D5CDDF /* jucer_ComponentNameProperty.h */,
+				65C498761CE166072A202AA0 /* jucer_ComponentTypeHandler.cpp */,
+				5D9E7814B713670624F0028F /* jucer_ComponentTypeHandler.h */,
+				E0F9CA57E44F7F7E7E217E47 /* jucer_ComponentUndoableAction.h */,
+				92F91DC29B64AD85B1F508BD /* jucer_GenericComponentHandler.h */,
+				D374DC78AAC02504576AA9B3 /* jucer_GroupComponentHandler.h */,
+				1F9BBDFA52513AD34D906D2A /* jucer_HyperlinkButtonHandler.h */,
+				4C2093BCD3528ACEDC7A2B33 /* jucer_ImageButtonHandler.h */,
+				EFA8CF715611D845AB284500 /* jucer_JucerComponentHandler.h */,
+				FF94FF5C4BEC605E56149EFC /* jucer_LabelHandler.h */,
+				BCCFDFB2C02C4AA436C0ECF8 /* jucer_SliderHandler.h */,
+				400E4C67ABCDDB1D49EBB85E /* jucer_TabbedComponentHandler.h */,
+				E4BB22E27C5AA4B666F265BD /* jucer_TextButtonHandler.h */,
+				F59077841FC17DD07060A2A9 /* jucer_TextEditorHandler.h */,
+				084C0070BC67BC893B967EF1 /* jucer_ToggleButtonHandler.h */,
+				DAF84A553D264705FA6EB6FF /* jucer_TreeViewHandler.h */,
+				A0951828C3BF47FA7E1E52F8 /* jucer_ViewportHandler.h */,
+			);
+			name = components;
+			sourceTree = "<group>";
+		};
+		DCBE58B4AFE058653EBBBAAE /* broadcasters */ = {
+			isa = PBXGroup;
+			children = (
+				BA3CF913C966148DF5059C9F /* juce_ActionBroadcaster.cpp */,
+				C8A160E05C7F8F5CF534AC03 /* juce_ActionBroadcaster.h */,
+				2AB28295C237EC79481F5F9D /* juce_ActionListener.h */,
+				5CD44EFDD7BA487CDF41760A /* juce_AsyncUpdater.cpp */,
+				D1A54DEEAD15A98719002174 /* juce_AsyncUpdater.h */,
+				37AD2C828C069B17DB0C70EE /* juce_ChangeBroadcaster.cpp */,
+				BF09E9E179BA0B07203DC9FE /* juce_ChangeBroadcaster.h */,
+				FB6BACB4F1E834A6934E4DC2 /* juce_ChangeListener.h */,
+				26B7487E9A0CB5C6CA5ACE58 /* juce_ListenerList.h */,
+			);
+			name = broadcasters;
+			sourceTree = "<group>";
+		};
+		DD0FDFC530E403BD51C86315 /* application */ = {
+			isa = PBXGroup;
+			children = (
+				A3AC7148A7357852CA7018AF /* juce_Application.cpp */,
+				323BA212B37224C61A9C1740 /* juce_Application.h */,
+				814A077ED7A54254415C309C /* juce_Initialisation.h */,
+			);
+			name = application;
+			sourceTree = "<group>";
+		};
+		DD35BF639F13CB10E9ACF910 /* lookandfeel */ = {
+			isa = PBXGroup;
+			children = (
+				BE876A77E905E3C0D9B66450 /* juce_OldSchoolLookAndFeel.cpp */,
+				258C17078206C550B08DD0F4 /* juce_OldSchoolLookAndFeel.h */,
+			);
+			name = lookandfeel;
+			sourceTree = "<group>";
+		};
+		DE7F542DC0967F8EDCC4DCD0 /* juce_events */ = {
+			isa = PBXGroup;
+			children = (
+				2287744248275B6237708450 /* messages */,
+				83DEE68BC6A9B685C3E75FEA /* timers */,
+				DCBE58B4AFE058653EBBBAAE /* broadcasters */,
+				084F5B9CA3F5822A7D9156AF /* interprocess */,
+				334607E7051C2D75E0AC85F6 /* native */,
+				EA48567DDE6E64CF4DB9B23A /* juce_module_info */,
+				2101B4CC3E5BDC7BD806678B /* juce_events.h */,
+			);
+			name = juce_events;
+			sourceTree = "<group>";
+		};
+		DECB572AE46DB4A77186D494 /* images */ = {
+			isa = PBXGroup;
+			children = (
+				CF7F48D267805732933DF82C /* juce_Image.cpp */,
+				4C2394A14C140490F5F4E9BD /* juce_Image.h */,
+				A039067FA15840674DB4CA0B /* juce_ImageCache.cpp */,
+				8F355E9A0D4E3B4DF00E7BA9 /* juce_ImageCache.h */,
+				5A11499F36DB882429253BA5 /* juce_ImageConvolutionKernel.cpp */,
+				3FB2A9225024422947E6E654 /* juce_ImageConvolutionKernel.h */,
+				A8C8924ADBF29D01FDFD62BE /* juce_ImageFileFormat.cpp */,
+				43E13FBEEA6CF191A0D501E5 /* juce_ImageFileFormat.h */,
+			);
+			name = images;
+			sourceTree = "<group>";
+		};
+		DFC8A876133A671741A5FCA2 /* juce_gui_extra */ = {
+			isa = PBXGroup;
+			children = (
+				9DEFBE65118D0527555955A2 /* code_editor */,
+				1D09D8A2B803860D8927C366 /* documents */,
+				A1B124604F7F471E01D8AA6E /* embedding */,
+				DD35BF639F13CB10E9ACF910 /* lookandfeel */,
+				F50C1ADB9086D61160516CB7 /* misc */,
+				4C0BD8F18173E3D675D03872 /* native */,
+				C82094E39B4C9B4DE35A7EB4 /* juce_module_info */,
+				D6070A7CF3873DFD1B1A53A5 /* juce_gui_extra.h */,
+			);
+			name = juce_gui_extra;
+			sourceTree = "<group>";
+		};
+		E345840128627D533DF908AC /* Project Saving */ = {
+			isa = PBXGroup;
+			children = (
+				6E7353DFEA8825B515049ABB /* jucer_ProjectExport_Android.h */,
+				DBE0CDE1B017190ABBFF557C /* jucer_ProjectExport_CodeBlocks.h */,
+				05076CDF1511A5F8A8E18F1D /* jucer_ProjectExport_Make.h */,
+				C8A229ACD244F402C57286CD /* jucer_ProjectExport_MSVC.h */,
+				974B862C51DA9A16CBBB3A29 /* jucer_ProjectExport_XCode.h */,
+				F71AF6D2DF3E652F8B51EBAB /* jucer_ProjectExporter.cpp */,
+				35CB48D497F35BF3F6998F5D /* jucer_ProjectExporter.h */,
+				9C04F9680F82BF279D528688 /* jucer_ProjectSaver.h */,
+				D10D51A0A2D63F38B4D86A60 /* jucer_ResourceFile.cpp */,
+				C9616830BB2474066AC8C910 /* jucer_ResourceFile.h */,
+			);
+			name = "Project Saving";
+			sourceTree = "<group>";
+		};
+		E45B4DA7B49FC8D397F1EA56 /* encryption */ = {
+			isa = PBXGroup;
+			children = (
+				22B29C61E4EB0C2FC4E54378 /* juce_BlowFish.cpp */,
+				1F86FB8B8336D44337AE7119 /* juce_BlowFish.h */,
+				A73C997FBB6C26B632CBAE15 /* juce_Primes.cpp */,
+				0329C05B4EE23CBB5578BF02 /* juce_Primes.h */,
+				20D0FBDE77A58A302859A206 /* juce_RSAKey.cpp */,
+				E32210D5760697609D084C93 /* juce_RSAKey.h */,
+			);
+			name = encryption;
+			sourceTree = "<group>";
+		};
+		E58F94F6CDB786C1ED488C9C /* juce_cryptography */ = {
+			isa = PBXGroup;
+			children = (
+				E45B4DA7B49FC8D397F1EA56 /* encryption */,
+				1EB4CE7119697D9CCE604271 /* hashing */,
+				2C9ED03E1C345D9A81BEB361 /* juce_module_info */,
+				B271F77C266131705FF6F92B /* juce_cryptography.h */,
+			);
+			name = juce_cryptography;
+			sourceTree = "<group>";
+		};
+		E659B9C71FCEAA788CFEF8F0 /* javascript */ = {
+			isa = PBXGroup;
+			children = (
+				3970C8444A2A081455299CE8 /* juce_Javascript.cpp */,
+				72BB08B37FC311C133A01F95 /* juce_Javascript.h */,
+				70C4E93E7132BEEDDABFDA10 /* juce_JSON.cpp */,
+				B4E428E2D02619F18757BBF5 /* juce_JSON.h */,
+			);
+			name = javascript;
+			sourceTree = "<group>";
+		};
+		E9819C83D0B797FC71811B1B /* juce_graphics */ = {
+			isa = PBXGroup;
+			children = (
+				C3FB0CB81D460B4263689CAF /* colour */,
+				F417C2CB1A694D2C1A892F63 /* contexts */,
+				DECB572AE46DB4A77186D494 /* images */,
+				F3174EF36ADC4DC23BB304F2 /* image_formats */,
+				EEE23FCA48A7F9A0152A68EE /* geometry */,
+				14995D34FE0826A52FA5262D /* placement */,
+				59C2687AA614A77DA150AFAB /* fonts */,
+				8EB51FAF42AAEC7AC357396B /* effects */,
+				6CA37BA48005B8EF0478B69E /* native */,
+				F784E90F14BB554B2D97A4E7 /* juce_module_info */,
+				DD737A82676BCF9CD2F2B367 /* juce_graphics.h */,
+			);
+			name = juce_graphics;
+			sourceTree = "<group>";
+		};
+		ED7BB3F297250D7B43B2A536 /* text */ = {
+			isa = PBXGroup;
+			children = (
+				E224B3D37F624F7AE682E499 /* juce_CharacterFunctions.cpp */,
+				0A8D062EF44529B793CC5098 /* juce_CharacterFunctions.h */,
+				923B69234C15988DFF1E8423 /* juce_CharPointer_ASCII.h */,
+				6245DA2AC30B91552C12AD1F /* juce_CharPointer_UTF8.h */,
+				D70400A648DD2EE1FB29ED0A /* juce_CharPointer_UTF16.h */,
+				237496FB515C526B510BB0C3 /* juce_CharPointer_UTF32.h */,
+				BF24E0D37EAD41130FE149A3 /* juce_Identifier.cpp */,
+				2D6B77C09B5AF1BBD821D224 /* juce_Identifier.h */,
+				D58E5FDB639B07A0B6350657 /* juce_LocalisedStrings.cpp */,
+				056E44027E3F3AFAB32FBC44 /* juce_LocalisedStrings.h */,
+				F0D0CC4696419D4606EF5AE6 /* juce_NewLine.h */,
+				553F3388AADBF8B529B78824 /* juce_String.cpp */,
+				BED52FDD3843979E898DA4CE /* juce_String.h */,
+				AF9453BB7F2479400D4A144B /* juce_StringArray.cpp */,
+				2A7B44B9D6C81585064098C3 /* juce_StringArray.h */,
+				FA72B8D84B97CAC1AD24DA22 /* juce_StringPairArray.cpp */,
+				E4389603AF8A3143883BFCE8 /* juce_StringPairArray.h */,
+				BF1B82B8DD7429ECA96AD4C7 /* juce_StringPool.cpp */,
+				529B0A44694A54ED99444A0F /* juce_StringPool.h */,
+				4DEBB89A00FBD2C11515FD07 /* juce_StringRef.h */,
+				8C07D2E980420174DF513BEF /* juce_TextDiff.cpp */,
+				AA4578A9110E724AB87DF869 /* juce_TextDiff.h */,
+			);
+			name = text;
+			sourceTree = "<group>";
+		};
+		EEE23FCA48A7F9A0152A68EE /* geometry */ = {
+			isa = PBXGroup;
+			children = (
+				FDF068E783DD784E3C2221C5 /* juce_AffineTransform.cpp */,
+				CFBF253B95F793D399C7C7BE /* juce_AffineTransform.h */,
+				4DFDC4E1F50427FBAF0B8F81 /* juce_BorderSize.h */,
+				F73142334238E8D5B5D3E3B1 /* juce_EdgeTable.cpp */,
+				F4418E2C7AD718FE942DDF0A /* juce_EdgeTable.h */,
+				647EBD8D1EAD21592951DD9B /* juce_Line.h */,
+				C6ED030DED8F5A53636C4EBB /* juce_Path.cpp */,
+				E0366FD0E45684229CBF9775 /* juce_Path.h */,
+				865F57EEFDD6F194FCE3FD8F /* juce_PathIterator.cpp */,
+				06BB2D547BF07A31E8D46977 /* juce_PathIterator.h */,
+				FBDAD6DDA8200BF53FCB5734 /* juce_PathStrokeType.cpp */,
+				73425A7FACB8FEE3D7A7C567 /* juce_PathStrokeType.h */,
+				87C711AFE0DEEC1FA8AD9465 /* juce_Point.h */,
+				28C9E13B1A70FDC728770C6E /* juce_Rectangle.h */,
+				EA362B80219C97D85ED267A9 /* juce_RectangleList.cpp */,
+				2D9E9803A9DF82BBA42294E9 /* juce_RectangleList.h */,
+			);
+			name = geometry;
+			sourceTree = "<group>";
+		};
+		F3174EF36ADC4DC23BB304F2 /* image_formats */ = {
+			isa = PBXGroup;
+			children = (
+				CE08955E457642C4D6DFBA30 /* juce_GIFLoader.cpp */,
+				A350F5C1C50024670090021B /* juce_JPEGLoader.cpp */,
+				7038159E5F04B3C75B6A7655 /* juce_PNGLoader.cpp */,
+			);
+			name = image_formats;
+			sourceTree = "<group>";
+		};
+		F417C2CB1A694D2C1A892F63 /* contexts */ = {
+			isa = PBXGroup;
+			children = (
+				BAC2D13A5ED7622DD43BF752 /* juce_GraphicsContext.cpp */,
+				F98D95171F5605A4905E6516 /* juce_GraphicsContext.h */,
+				F3F4D8AEFD5290E8FDF0623E /* juce_LowLevelGraphicsContext.h */,
+				28A5DF3CEA69B587C9CA7C4A /* juce_LowLevelGraphicsPostScriptRenderer.cpp */,
+				B43D35488A61101480983DA3 /* juce_LowLevelGraphicsPostScriptRenderer.h */,
+				5823F1EE0F39AE16B560665A /* juce_LowLevelGraphicsSoftwareRenderer.cpp */,
+				B7D930DDBE81040985D1B48C /* juce_LowLevelGraphicsSoftwareRenderer.h */,
+			);
+			name = contexts;
+			sourceTree = "<group>";
+		};
+		F50C1ADB9086D61160516CB7 /* misc */ = {
+			isa = PBXGroup;
+			children = (
+				A51E4D49C37A60CC0BCE4246 /* juce_AppleRemote.h */,
+				6F2DEA817E140C2659915138 /* juce_BubbleMessageComponent.cpp */,
+				E1D39D158E760B202DBEDA81 /* juce_BubbleMessageComponent.h */,
+				02CA8C3BE552E240C77A3722 /* juce_ColourSelector.cpp */,
+				B9B67E7AC6527BDB9D4D42D0 /* juce_ColourSelector.h */,
+				EF24C96CD12FC8589756DEF1 /* juce_KeyMappingEditorComponent.cpp */,
+				29CA2D82E54BA471A7F0D4A7 /* juce_KeyMappingEditorComponent.h */,
+				C68D8C25B8BD332BA1DFB32E /* juce_LiveConstantEditor.cpp */,
+				5B8805BE8EFB29BFC7BD6D31 /* juce_LiveConstantEditor.h */,
+				8D89602169EF2FB7E38F8C0D /* juce_PreferencesPanel.cpp */,
+				3F8D9C9557E45D151F339F5E /* juce_PreferencesPanel.h */,
+				84BC9171F02182D3AFD04F66 /* juce_RecentlyOpenedFilesList.cpp */,
+				60138E309DBA8366F9AA83A5 /* juce_RecentlyOpenedFilesList.h */,
+				E794F8DCA1BD195F1D0BC64B /* juce_SplashScreen.cpp */,
+				62112F8E435A750E1D2B28E0 /* juce_SplashScreen.h */,
+				24B8D9E228BF396D1B8C705E /* juce_SystemTrayIconComponent.cpp */,
+				2F365E601995A1B068BAC1C2 /* juce_SystemTrayIconComponent.h */,
+				825F21A8A32CC0FD20B845A6 /* juce_WebBrowserComponent.h */,
+			);
+			name = misc;
+			sourceTree = "<group>";
+		};
+		F6C04F077B187FD605483DEB /* xml */ = {
+			isa = PBXGroup;
+			children = (
+				114845541FC5BE3453B6BD4C /* juce_XmlDocument.cpp */,
+				A2B4202B1078374D5D0A2FA0 /* juce_XmlDocument.h */,
+				DABFA41975B51A33C19FD7C2 /* juce_XmlElement.cpp */,
+				800B30FB2437B98A1423838A /* juce_XmlElement.h */,
+			);
+			name = xml;
+			sourceTree = "<group>";
+		};
+		F824830BD560E7906A8CD82B /* maths */ = {
+			isa = PBXGroup;
+			children = (
+				13E76507D88192A1B9554073 /* juce_BigInteger.cpp */,
+				16413B69F7D1E2862AFBE61F /* juce_BigInteger.h */,
+				4653C504CADC3A365DCD59D0 /* juce_Expression.cpp */,
+				1958777C37415EC581CD4B74 /* juce_Expression.h */,
+				94E38DB823EBBA437181682F /* juce_MathsFunctions.h */,
+				93C5BEADA1AB1CFF7B167D2F /* juce_Random.cpp */,
+				B2CEB1DE8F290AFCDE9585BB /* juce_Random.h */,
+				140ABB31EF22CAE40D874BB0 /* juce_Range.h */,
+			);
+			name = maths;
+			sourceTree = "<group>";
+		};
+		FC22321797D433148500EDDA /* Code Editor */ = {
+			isa = PBXGroup;
+			children = (
+				2E680E2C65684A4272AE079A /* jucer_SourceCodeEditor.cpp */,
+				78CA0E0F336229E2E2F111B0 /* jucer_SourceCodeEditor.h */,
+			);
+			name = "Code Editor";
+			sourceTree = "<group>";
+		};
+		FDA3E07A3631D25DFEA73850 /* windows */ = {
+			isa = PBXGroup;
+			children = (
+				502A6F378DA7D0BED1380D86 /* juce_AlertWindow.cpp */,
+				0CF3C0EC356169F25B0BAA9D /* juce_AlertWindow.h */,
+				BA61CF61BDB1194FF4A85DA7 /* juce_CallOutBox.cpp */,
+				2A631496A56813D0EB2D0E5E /* juce_CallOutBox.h */,
+				7AEAEEF9959046D9827CCB56 /* juce_ComponentPeer.cpp */,
+				00F860FEF209ABF0E800FA09 /* juce_ComponentPeer.h */,
+				E1139B64E290711F9DE2DCDE /* juce_DialogWindow.cpp */,
+				5D77828FECF00CF108E16599 /* juce_DialogWindow.h */,
+				867952C0062DAA52FE4345B1 /* juce_DocumentWindow.cpp */,
+				7D33879BE42FD18DA0E7833E /* juce_DocumentWindow.h */,
+				6AC17B5D88D0ADBF77420048 /* juce_NativeMessageBox.h */,
+				C81BC495F7C4B665C8856AA9 /* juce_ResizableWindow.cpp */,
+				D7C052388BB7D6FAE4A15999 /* juce_ResizableWindow.h */,
+				6E1D22B93CCB47AB339085E1 /* juce_ThreadWithProgressWindow.cpp */,
+				C017261AE701010986A93D34 /* juce_ThreadWithProgressWindow.h */,
+				84EB1282EE3C5F3A1DF70A54 /* juce_TooltipWindow.cpp */,
+				5BE9E1B6197D01AB97288253 /* juce_TooltipWindow.h */,
+				5B45BF234C7184BE28C59741 /* juce_TopLevelWindow.cpp */,
+				81704510C0CA45994B69AF05 /* juce_TopLevelWindow.h */,
+			);
+			name = windows;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		FE688C03195D5E72123A75BF /* The Introjucer */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7584E9B3803102EC798231 /* Build configuration list for PBXNativeTarget "The Introjucer" */;
+			buildPhases = (
+				C009859650B4628FDD068941 /* Resources */,
+				84449D044096A03F2582904B /* Sources */,
+				B8D802107FEE6AD60F5309A3 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "The Introjucer";
+			productInstallPath = "$(HOME)/Applications";
+			productName = "The Introjucer";
+			productReference = 25F52316D256B4534BED16D1 /* Introjucer.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		74EA481348A24104E6ACE009 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0510;
+			};
+			buildConfigurationList = F90407F24422C589DA251604 /* Build configuration list for PBXProject "The Introjucer" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 3CC531922CC2D398E283A845 /* Source */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				FE688C03195D5E72123A75BF /* The Introjucer */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		C009859650B4628FDD068941 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				2610F357881240ACBF612F48 /* RecentFilesMenuTemplate.nib in Resources */,
+				1321E6C1C6170B6C898AD09D /* Icon.icns in Resources */,
+				6FC19EBA7A51423C3D22F77B /* juce_icon.png in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		84449D044096A03F2582904B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				357A6AA6960EF95D92929BEE /* jucer_AppearanceSettings.cpp in Sources */,
+				954A036F5DDB375DB23FFB3E /* jucer_CommandLine.cpp in Sources */,
+				3EB3D569250C4BA4CA9AF578 /* jucer_DocumentEditorComponent.cpp in Sources */,
+				95B44E6C74B1DED31DBE37EB /* jucer_Main.cpp in Sources */,
+				AA9D0B8E23F3D87A23DE9F8A /* jucer_MainWindow.cpp in Sources */,
+				244BA1BDA5FAA465EA3F9C6D /* jucer_OpenDocumentManager.cpp in Sources */,
+				3FCA61C401007B243E2E9035 /* jucer_Module.cpp in Sources */,
+				5BC89E7905397ABECD25ACCD /* jucer_NewFileWizard.cpp in Sources */,
+				FBE57B26FE59319AA2E8B59D /* jucer_NewProjectWizard.cpp in Sources */,
+				30B921C38DCEE787B294B746 /* jucer_Project.cpp in Sources */,
+				676D2E1E750E61AA2FAA335E /* jucer_ProjectContentComponent.cpp in Sources */,
+				8012E6487639A7368E4C4470 /* jucer_ProjectType.cpp in Sources */,
+				1F37544891EC8DBB5E500C1C /* jucer_ProjectExporter.cpp in Sources */,
+				110221CD5578153B528AD2BE /* jucer_ResourceFile.cpp in Sources */,
+				CD4F7B119CE718BCE78D61F4 /* jucer_CodeHelpers.cpp in Sources */,
+				78CB463DD98A55313A543859 /* jucer_FileHelpers.cpp in Sources */,
+				1499DF2E85B05AC1BF423773 /* jucer_Icons.cpp in Sources */,
+				123810DAF8AF758928916ECE /* jucer_JucerTreeViewBase.cpp in Sources */,
+				C9F11BA62D6D092A300363F7 /* jucer_MiscUtilities.cpp in Sources */,
+				F6635694A01FFBF5EF0968DB /* jucer_StoredSettings.cpp in Sources */,
+				FCE6F604C00039A32649CB69 /* jucer_SourceCodeEditor.cpp in Sources */,
+				9BF773500BA51A8B5C6C7348 /* jucer_ComponentTypeHandler.cpp in Sources */,
+				57B1F32A372143B4D3B1C517 /* jucer_ButtonDocument.cpp in Sources */,
+				3DC282564876B1FC88AAA9B3 /* jucer_ComponentDocument.cpp in Sources */,
+				C49E1D32A9DCE3D59BC48B1D /* jucer_ColouredElement.cpp in Sources */,
+				E1268E019B434F6B5E9317DC /* jucer_PaintElement.cpp in Sources */,
+				CE91112DADB97C573C3C674D /* jucer_PaintElementPath.cpp in Sources */,
+				A70F0274076C0D44ED71C980 /* jucer_ComponentLayoutEditor.cpp in Sources */,
+				BD1E0CBE74DDD2F303978E1F /* jucer_ComponentOverlayComponent.cpp in Sources */,
+				8C1CC0E7A772D66635BA482F /* jucer_EditingPanelBase.cpp in Sources */,
+				A69BF71FA90E5A66B6EB2E0F /* jucer_JucerDocumentEditor.cpp in Sources */,
+				D68DE111AFBD82F0D44A3B69 /* jucer_PaintRoutineEditor.cpp in Sources */,
+				EC6A34EC9A9D454BF26AAD32 /* jucer_PaintRoutinePanel.cpp in Sources */,
+				8AD28823205783E6F676F254 /* jucer_ResourceEditorPanel.cpp in Sources */,
+				34716A3539FD288C09CBA38A /* jucer_TestComponent.cpp in Sources */,
+				45A53AF13B0D663050632E8C /* jucer_BinaryResources.cpp in Sources */,
+				C2A85091A28C907A4E1E1687 /* jucer_ComponentLayout.cpp in Sources */,
+				83431B7234A78ECFB3C15F63 /* jucer_GeneratedCode.cpp in Sources */,
+				209FCCC2155A1FCB7E11E20D /* jucer_JucerDocument.cpp in Sources */,
+				C93569F47B4AC1A8E37992ED /* jucer_ObjectTypes.cpp in Sources */,
+				1B988E139004D8E2850EB656 /* jucer_PaintRoutine.cpp in Sources */,
+				3C5267E06A897B0DC0F7EA50 /* BinaryData.cpp in Sources */,
+				F70594FF1FFED9AC12F43709 /* juce_core.mm in Sources */,
+				01D45DD829D8848733090B67 /* juce_cryptography.mm in Sources */,
+				4028CA96EA50175DD6B8D976 /* juce_data_structures.mm in Sources */,
+				F743B7B2709E72250982F2FB /* juce_events.mm in Sources */,
+				45576193A53DE94F5BF4C3D4 /* juce_graphics.mm in Sources */,
+				BF57EEE3415D6F8F03206846 /* juce_gui_basics.mm in Sources */,
+				20102F921FAA2A92CED056C0 /* juce_gui_extra.mm in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		70135D15D7E0D8410C42BBA3 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				GCC_C_LANGUAGE_STANDARD = c99;
+				GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
+				GCC_WARN_MISSING_PARENTHESES = YES;
+				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
+				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PRODUCT_NAME = Introjucer;
+				WARNING_CFLAGS = "-Wreorder";
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		B159CF4275B8A90122629FF4 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_LINK_OBJC_RUNTIME = NO;
 				COMBINE_HIDPI_IMAGES = YES;
@@ -1949,19 +2598,38 @@
 					"NDEBUG=1",
 					"JUCER_XCODE_MAC_F6D2F4CF=1",
 					"JUCE_APP_VERSION=3.1.0",
-					"JUCE_APP_VERSION_HEX=0x30100", );
+					"JUCE_APP_VERSION_HEX=0x30100",
+				);
 				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../JuceLibraryCode/modules", "$(inherited)");
+				HEADER_SEARCH_PATHS = (
+					../../JuceLibraryCode,
+					../../../JuceLibraryCode/modules,
+					"$(inherited)",
+				);
 				INFOPLIST_FILE = Info.plist;
 				INSTALL_PATH = "$(HOME)/Applications";
 				MACOSX_DEPLOYMENT_TARGET = 10.5;
 				MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
-				OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter";
-				SDKROOT_ppc = macosx10.5; }; name = Release; };
-		C42924A24AB55E6A940423EA = {isa = XCBuildConfiguration; buildSettings = {
+				OTHER_CPLUSPLUSFLAGS = (
+					"-Wall",
+					"-Wshadow",
+					"-Wno-missing-field-initializers",
+					"-Wshadow",
+					"-Wshorten-64-to-32",
+					"-Wstrict-aliasing",
+					"-Wuninitialized",
+					"-Wunused-parameter",
+				);
+				SDKROOT_ppc = macosx10.5;
+			};
+			name = Release;
+		};
+		C42924A24AB55E6A940423EA /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf";
+				DEBUG_INFORMATION_FORMAT = dwarf;
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
 				GCC_MODEL_TUNING = G5;
@@ -1971,95 +2639,75 @@
 				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
 				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				PRODUCT_NAME = "Introjucer";
-				WARNING_CFLAGS = -Wreorder;
-				ZERO_LINK = NO; }; name = Debug; };
-		70135D15D7E0D8410C42BBA3 = {isa = XCBuildConfiguration; buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf";
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
-				GCC_WARN_MISSING_PARENTHESES = YES;
-				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
-				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PRODUCT_NAME = "Introjucer";
-				WARNING_CFLAGS = -Wreorder;
-				ZERO_LINK = NO; }; name = Release; };
-		F90407F24422C589DA251604 = {isa = XCConfigurationList; buildConfigurations = (
-					C42924A24AB55E6A940423EA,
-					70135D15D7E0D8410C42BBA3, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; };
-		9D7584E9B3803102EC798231 = {isa = XCConfigurationList; buildConfigurations = (
-					EA0BCC969703B2D179089E55,
-					B159CF4275B8A90122629FF4, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; };
-		C009859650B4628FDD068941 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = (
-					2610F357881240ACBF612F48,
-					1321E6C1C6170B6C898AD09D,
-					6FC19EBA7A51423C3D22F77B, ); runOnlyForDeploymentPostprocessing = 0; };
-		84449D044096A03F2582904B = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = (
-					357A6AA6960EF95D92929BEE,
-					954A036F5DDB375DB23FFB3E,
-					3EB3D569250C4BA4CA9AF578,
-					95B44E6C74B1DED31DBE37EB,
-					AA9D0B8E23F3D87A23DE9F8A,
-					244BA1BDA5FAA465EA3F9C6D,
-					3FCA61C401007B243E2E9035,
-					5BC89E7905397ABECD25ACCD,
-					FBE57B26FE59319AA2E8B59D,
-					30B921C38DCEE787B294B746,
-					676D2E1E750E61AA2FAA335E,
-					8012E6487639A7368E4C4470,
-					1F37544891EC8DBB5E500C1C,
-					110221CD5578153B528AD2BE,
-					CD4F7B119CE718BCE78D61F4,
-					78CB463DD98A55313A543859,
-					1499DF2E85B05AC1BF423773,
-					123810DAF8AF758928916ECE,
-					C9F11BA62D6D092A300363F7,
-					F6635694A01FFBF5EF0968DB,
-					FCE6F604C00039A32649CB69,
-					9BF773500BA51A8B5C6C7348,
-					57B1F32A372143B4D3B1C517,
-					3DC282564876B1FC88AAA9B3,
-					C49E1D32A9DCE3D59BC48B1D,
-					E1268E019B434F6B5E9317DC,
-					CE91112DADB97C573C3C674D,
-					A70F0274076C0D44ED71C980,
-					BD1E0CBE74DDD2F303978E1F,
-					8C1CC0E7A772D66635BA482F,
-					A69BF71FA90E5A66B6EB2E0F,
-					D68DE111AFBD82F0D44A3B69,
-					EC6A34EC9A9D454BF26AAD32,
-					8AD28823205783E6F676F254,
-					34716A3539FD288C09CBA38A,
-					45A53AF13B0D663050632E8C,
-					C2A85091A28C907A4E1E1687,
-					83431B7234A78ECFB3C15F63,
-					209FCCC2155A1FCB7E11E20D,
-					C93569F47B4AC1A8E37992ED,
-					1B988E139004D8E2850EB656,
-					3C5267E06A897B0DC0F7EA50,
-					F70594FF1FFED9AC12F43709,
-					01D45DD829D8848733090B67,
-					4028CA96EA50175DD6B8D976,
-					F743B7B2709E72250982F2FB,
-					45576193A53DE94F5BF4C3D4,
-					BF57EEE3415D6F8F03206846,
-					20102F921FAA2A92CED056C0, ); runOnlyForDeploymentPostprocessing = 0; };
-		B8D802107FEE6AD60F5309A3 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = (
-					1E76E36772355E2A43CF4961,
-					241F29FCBB7A17BB44A0B10C,
-					49C22786B54C5DC94E4654B8,
-					11D42F7EC6E6539D79A7F4B1,
-					B980464FA2761CCD64B1FAD6, ); runOnlyForDeploymentPostprocessing = 0; };
-		FE688C03195D5E72123A75BF = {isa = PBXNativeTarget; buildConfigurationList = 9D7584E9B3803102EC798231; buildPhases = (
-					C009859650B4628FDD068941,
-					84449D044096A03F2582904B,
-					B8D802107FEE6AD60F5309A3, ); buildRules = ( ); dependencies = ( ); name = "The Introjucer"; productName = "The Introjucer"; productReference = 25F52316D256B4534BED16D1; productInstallPath = "$(HOME)/Applications"; productType = "com.apple.product-type.application"; };
-		74EA481348A24104E6ACE009 = {isa = PBXProject; buildConfigurationList = F90407F24422C589DA251604; attributes = { LastUpgradeCheck = 0440; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 3CC531922CC2D398E283A845; projectDirPath = ""; projectRoot = ""; targets = ( FE688C03195D5E72123A75BF ); };
+				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_NAME = Introjucer;
+				WARNING_CFLAGS = "-Wreorder";
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		EA0BCC969703B2D179089E55 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+				CLANG_LINK_OBJC_RUNTIME = NO;
+				COMBINE_HIDPI_IMAGES = YES;
+				CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)";
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"_DEBUG=1",
+					"DEBUG=1",
+					"JUCER_XCODE_MAC_F6D2F4CF=1",
+					"JUCE_APP_VERSION=3.1.0",
+					"JUCE_APP_VERSION_HEX=0x30100",
+				);
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = (
+					../../JuceLibraryCode,
+					../../../JuceLibraryCode/modules,
+					"$(inherited)",
+				);
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
+				OTHER_CPLUSPLUSFLAGS = (
+					"-Wall",
+					"-Wshadow",
+					"-Wno-missing-field-initializers",
+					"-Wshadow",
+					"-Wshorten-64-to-32",
+					"-Wstrict-aliasing",
+					"-Wuninitialized",
+					"-Wunused-parameter",
+				);
+				SDKROOT_ppc = macosx10.5;
+			};
+			name = Debug;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		9D7584E9B3803102EC798231 /* Build configuration list for PBXNativeTarget "The Introjucer" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				EA0BCC969703B2D179089E55 /* Debug */,
+				B159CF4275B8A90122629FF4 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+		F90407F24422C589DA251604 /* Build configuration list for PBXProject "The Introjucer" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C42924A24AB55E6A940423EA /* Debug */,
+				70135D15D7E0D8410C42BBA3 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+/* End XCConfigurationList section */
 	};
-	rootObject = 74EA481348A24104E6ACE009;
+	rootObject = 74EA481348A24104E6ACE009 /* Project object */;
 }
diff --git a/JuceLibraryCode/BinaryData.cpp b/JuceLibraryCode/BinaryData.cpp
index c2c491f97a3cb69135061fc6d94fdefd30a211ce..9ae1e8819cec0b9e6bfde49bdae88398d456449c 100644
--- a/JuceLibraryCode/BinaryData.cpp
+++ b/JuceLibraryCode/BinaryData.cpp
@@ -8,7 +8,7 @@ namespace BinaryData
 {
 
 //================== cpmono-black-serialized ==================
-static const unsigned char temp_77517bbb[] =
+static const unsigned char temp_binary_data_0[] =
 { 120,156,237,157,127,156,149,85,181,255,71,65,64,12,10,47,132,9,130,81,152,63,80,233,226,197,66,158,103,176,240,66,23,47,136,93,12,186,24,196,211,65,177,51,228,185,151,210,11,134,66,141,97,160,32,40,5,57,6,130,130,160,99,16,36,8,231,57,6,66,98,160,24,
 212,24,228,143,33,212,41,16,20,196,194,160,190,251,253,89,207,179,103,200,31,13,126,49,61,190,248,99,102,125,94,103,255,90,251,199,179,247,218,107,175,189,246,231,47,249,207,111,140,252,198,144,111,117,62,191,164,164,100,240,228,207,149,158,90,242,55,
 135,142,41,89,184,160,105,233,200,50,7,75,102,111,106,20,102,1,35,103,117,41,100,245,123,10,8,138,202,58,116,184,43,56,99,112,251,66,22,16,54,253,82,144,221,176,126,103,232,1,65,81,217,105,133,167,2,151,199,13,217,19,170,162,176,124,199,173,113,150,95,
@@ -229,10 +229,10 @@ static const unsigned char temp_77517bbb[] =
 33,16,98,208,66,64,165,133,0,168,139,0,116,17,81,213,69,164,165,35,200,236,208,187,111,169,2,12,170,46,2,72,31,2,160,188,148,147,168,140,108,213,204,0,29,214,114,202,236,65,226,103,102,120,232,129,212,29,171,247,93,105,234,14,91,227,94,138,253,11,117,
 39,245,137,109,181,198,15,39,160,102,201,43,166,238,224,78,3,234,14,168,158,218,3,104,152,0,24,38,68,213,48,33,173,29,159,199,233,48,177,155,126,42,15,0,3,176,29,101,254,118,116,116,191,107,163,251,200,205,65,174,242,37,255,15,41,157,224,99,0,0 };
 
-const char* cpmonoblackserialized = (const char*) temp_77517bbb;
+const char* cpmonoblackserialized = (const char*) temp_binary_data_0;
 
 //================== cpmono-bold-serialized ==================
-static const unsigned char temp_62a06903[] =
+static const unsigned char temp_binary_data_1[] =
 { 120,156,237,157,15,156,87,69,185,255,65,8,20,47,36,94,76,19,83,219,46,94,52,77,10,131,90,247,28,212,48,45,188,24,118,53,236,210,213,56,125,81,185,223,37,206,109,11,46,118,81,40,188,32,38,136,134,129,173,173,130,65,144,171,16,40,202,126,207,33,8,10,131,
 194,160,182,32,44,8,107,11,68,3,177,48,200,223,188,63,207,57,243,101,213,250,129,47,42,191,190,120,189,246,181,207,231,245,157,63,231,153,153,103,102,158,153,121,230,153,15,124,228,223,62,61,226,211,215,124,174,87,223,54,109,218,12,153,114,81,191,211,
 219,188,228,80,219,54,243,231,117,234,55,162,214,193,54,247,173,239,16,22,1,35,26,122,167,69,253,158,3,130,162,218,150,69,227,130,117,55,188,35,45,2,174,222,53,57,40,158,210,242,124,232,1,65,81,237,236,145,165,192,229,113,115,241,198,110,35,194,9,219,
@@ -466,10 +466,10 @@ static const unsigned char temp_62a06903[] =
 51,181,25,217,171,205,216,211,1,112,175,76,109,134,99,37,218,12,170,54,3,48,217,40,132,199,124,136,58,145,7,18,72,11,71,57,175,81,45,31,86,203,0,116,100,204,109,66,15,50,39,17,131,66,15,180,131,130,86,170,29,20,118,124,144,10,58,153,164,3,85,87,26,1,
 62,84,1,80,61,172,2,144,220,0,108,87,189,201,228,134,196,146,27,228,18,64,246,48,21,21,94,58,34,238,127,63,113,63,124,163,148,171,141,54,255,15,230,92,172,169,0,0 };
 
-const char* cpmonoboldserialized = (const char*) temp_62a06903;
+const char* cpmonoboldserialized = (const char*) temp_binary_data_1;
 
 //================== cpmono-extralight-serialized ==================
-static const unsigned char temp_b510c8a2[] =
+static const unsigned char temp_binary_data_2[] =
 { 120,156,237,157,127,188,149,69,181,255,81,16,232,24,24,10,65,129,98,20,132,133,129,97,218,69,246,3,26,126,177,139,23,193,210,176,75,87,227,113,195,133,246,38,118,151,130,164,48,40,16,195,4,81,143,74,29,5,193,32,240,158,194,64,65,206,126,54,129,160,32,
 40,4,122,8,130,4,33,143,65,160,32,42,134,117,231,253,89,207,51,251,80,118,191,71,47,254,216,190,248,99,191,230,243,218,243,107,61,107,214,172,89,51,179,102,230,11,253,254,237,155,195,191,121,245,119,186,156,95,175,94,189,129,83,46,234,113,102,189,191,
 57,116,66,189,249,243,202,122,12,207,58,88,111,230,198,134,65,6,48,124,70,215,66,70,255,39,128,168,48,123,227,164,73,221,207,26,216,185,144,1,180,157,176,39,149,25,50,184,97,15,15,136,10,179,77,71,126,53,229,202,248,65,230,236,195,19,130,9,123,110,137,
@@ -713,10 +713,10 @@ static const unsigned char temp_b510c8a2[] =
 120,66,120,32,139,155,40,15,180,126,150,157,113,154,128,107,216,179,37,108,220,194,47,233,224,13,93,89,4,92,176,15,24,56,101,167,173,159,113,105,17,195,62,33,235,103,186,197,72,130,4,64,144,72,42,65,34,47,226,66,97,18,36,138,143,5,233,108,1,8,128,236,
 48,253,183,227,242,255,46,202,255,177,211,99,142,61,245,254,7,170,167,234,165,0,0 };
 
-const char* cpmonoextralightserialized = (const char*) temp_b510c8a2;
+const char* cpmonoextralightserialized = (const char*) temp_binary_data_2;
 
 //================== cpmono-light-serialized ==================
-static const unsigned char temp_72729244[] =
+static const unsigned char temp_binary_data_3[] =
 { 120,156,237,157,127,160,149,69,181,247,81,16,12,195,196,32,40,8,184,167,80,41,20,13,195,222,19,207,6,12,47,118,233,98,120,47,132,69,65,60,110,12,218,155,216,93,186,16,118,17,168,99,7,161,32,48,76,13,131,192,32,168,83,120,161,64,206,126,54,129,135,4,65,
 65,168,99,32,40,4,117,18,2,130,208,11,65,189,243,249,174,231,153,125,200,122,47,250,226,143,109,252,115,230,123,246,252,90,207,204,154,53,107,102,214,172,249,208,71,255,245,115,163,62,55,228,63,175,190,174,65,131,6,131,167,95,223,163,67,131,191,56,116,
 94,131,37,139,155,246,24,149,117,176,193,188,173,141,83,25,192,168,185,93,11,25,253,158,0,162,194,236,202,118,23,4,147,251,189,183,144,1,236,107,245,88,144,41,12,58,191,135,7,68,133,217,41,149,149,129,43,99,98,102,204,246,137,169,138,253,223,136,50,252,
@@ -973,10 +973,10 @@ static const unsigned char temp_72729244[] =
 195,60,113,76,68,82,189,98,69,94,234,75,40,9,179,212,163,142,0,200,180,129,55,79,61,208,165,32,162,60,208,222,215,218,99,87,216,222,23,55,12,225,138,77,27,99,207,194,67,59,175,52,141,128,61,47,211,39,127,99,123,95,139,154,253,81,123,95,132,58,191,0,136,
 145,0,48,18,73,197,72,228,133,93,40,76,140,68,241,98,164,228,70,35,4,64,118,152,254,203,57,254,127,13,249,255,236,201,49,215,60,13,254,47,224,111,82,132,0,0 };
 
-const char* cpmonolightserialized = (const char*) temp_72729244;
+const char* cpmonolightserialized = (const char*) temp_binary_data_3;
 
 //================== cpmono-plain-serialized ==================
-static const unsigned char temp_7b72b510[] =
+static const unsigned char temp_binary_data_4[] =
 { 120,156,237,157,127,188,86,69,181,255,143,130,96,40,36,6,98,65,104,39,33,44,8,10,67,67,246,62,80,120,177,240,106,88,16,118,241,66,108,31,20,122,14,185,187,20,132,93,68,12,67,161,48,48,76,234,212,65,84,16,244,24,4,10,194,179,31,2,193,64,240,30,131,194,
 32,44,8,12,131,192,48,72,184,144,119,222,159,181,247,28,200,238,247,162,95,127,61,198,31,231,181,62,231,153,31,123,205,204,154,153,53,51,107,214,124,242,51,255,250,229,225,95,30,248,181,78,23,150,149,149,13,152,252,137,138,115,203,94,114,232,164,178,
 185,115,26,85,12,175,116,176,108,198,250,6,97,30,48,188,186,115,49,175,223,51,64,80,84,233,146,5,155,187,127,160,152,7,76,29,248,64,144,239,52,237,112,232,1,65,81,101,121,249,221,129,203,99,108,126,212,200,145,225,248,93,223,77,242,252,50,126,87,211,
@@ -1230,10 +1230,10 @@ static const unsigned char temp_7b72b510[] =
 0,27,91,68,213,198,22,105,225,40,227,53,170,180,27,162,231,22,196,138,108,12,220,164,29,120,160,235,41,4,121,160,125,43,154,68,251,86,204,159,72,5,47,118,73,58,120,227,78,42,194,244,187,14,10,64,101,123,97,160,204,66,144,14,162,74,110,72,156,118,156,
 171,5,200,30,166,162,220,75,39,196,253,141,19,247,215,110,148,114,252,151,253,15,5,44,29,103,0,0 };
 
-const char* cpmonoplainserialized = (const char*) temp_7b72b510;
+const char* cpmonoplainserialized = (const char*) temp_binary_data_4;
 
 //================== BebasNeue.otf ==================
-static const unsigned char temp_7b880677[] =
+static const unsigned char temp_binary_data_5[] =
 { 79,84,84,79,0,11,0,128,0,3,0,48,67,70,70,32,57,136,64,140,0,0,39,76,0,0,70,154,71,80,79,83,223,12,110,56,0,0,116,248,0,0,73,16,71,83,85,66,114,203,114,178,0,0,116,0,0,0,0,246,79,83,47,50,102,169,27,20,0,0,1,32,0,0,0,96,99,109,97,112,211,17,247,228,0,
 0,35,232,0,0,3,68,104,101,97,100,243,84,238,113,0,0,0,188,0,0,0,54,104,104,101,97,6,215,3,186,0,0,0,244,0,0,0,36,104,109,116,120,67,128,39,22,0,0,109,232,0,0,6,24,109,97,120,112,1,134,80,0,0,0,1,24,0,0,0,6,110,97,109,101,230,56,31,140,0,0,1,128,0,0,34,
 101,112,111,115,116,255,184,0,50,0,0,39,44,0,0,0,32,0,1,0,0,0,1,0,131,131,184,68,27,95,15,60,245,0,3,3,232,0,0,0,0,200,111,85,40,0,0,0,0,200,111,85,40,255,119,255,60,3,232,3,130,0,0,0,3,0,2,0,0,0,0,0,0,0,1,0,0,2,188,254,212,0,185,3,232,255,119,255,119,
@@ -1843,10 +1843,10 @@ static const unsigned char temp_7b880677[] =
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,10,0,3,0,10,0,3,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,24,0,22,0,24,0,22,0,24,0,22,0,24,0,4,0,11,0,4,0,11,0,4,0,11,0,23,0,25,0,23,0,25,0,23,0,25,0,23,0,25,0,23,0,25,0,23,0,25,0,5,0,12,0,6,0,13,0,6,0,19,
 0,21,0,19,0,21,0,19,0,21,0,15,0,17,0,3,0,10,0,22,0,24,0,4,0,11,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,24,0,4,0,11,0,5,0,12,0,5,0,12,0,5,0,12,0,6,0,13,0,0 };
 
-const char* BebasNeue_otf = (const char*) temp_7b880677;
+const char* BebasNeue_otf = (const char*) temp_binary_data_5;
 
 //================== cpmono_bold.otf ==================
-static const unsigned char temp_8e883f13[] =
+static const unsigned char temp_binary_data_6[] =
 { 79,84,84,79,0,10,0,128,0,3,0,32,67,70,70,32,35,187,57,254,0,0,10,112,0,0,84,205,71,83,85,66,106,18,122,98,0,0,98,20,0,0,5,216,79,83,47,50,104,215,98,101,0,0,1,16,0,0,0,96,99,109,97,112,38,198,129,33,0,0,5,56,0,0,5,24,104,101,97,100,237,187,124,213,0,
 0,0,172,0,0,0,54,104,104,101,97,6,229,0,115,0,0,0,228,0,0,0,36,104,109,116,120,58,11,56,208,0,0,95,64,0,0,2,212,109,97,120,112,1,105,80,0,0,0,1,8,0,0,0,6,110,97,109,101,226,66,147,104,0,0,1,112,0,0,3,198,112,111,115,116,255,181,0,161,0,0,10,80,0,0,0,
 32,0,1,0,0,0,1,0,0,64,149,238,152,95,15,60,245,0,3,3,232,0,0,0,0,198,13,28,168,0,0,0,0,198,13,28,168,255,7,255,16,3,131,3,149,0,0,0,3,0,2,0,0,0,0,0,0,0,1,0,0,3,144,254,224,0,200,2,138,255,7,255,7,3,131,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,80,0,1,105,
@@ -2190,10 +2190,10 @@ static const unsigned char temp_8e883f13[] =
 0,2,0,21,0,4,0,12,0,0,0,14,0,19,0,9,0,21,0,23,0,15,0,28,0,28,0,18,0,36,0,51,0,19,0,53,0,54,0,35,0,57,0,60,0,37,0,63,0,66,0,41,0,71,0,72,0,45,0,82,0,82,0,47,0,92,0,92,0,48,0,99,0,99,0,49,0,103,0,106,0,50,0,140,0,162,0,54,0,165,0,168,0,77,0,179,0,184,0,
 81,0,208,0,209,0,87,0,214,0,214,0,89,0,224,1,6,0,90,1,8,1,8,0,129,1,13,1,13,0,130,0,1,0,26,0,3,0,13,0,20,0,24,0,25,0,26,0,27,0,52,0,55,0,56,0,61,0,62,0,67,0,68,0,69,0,70,0,134,0,135,0,136,0,137,0,138,0,139,0,163,0,164,0,169,1,7,0,0 };
 
-const char* cpmono_bold_otf = (const char*) temp_8e883f13;
+const char* cpmono_bold_otf = (const char*) temp_binary_data_6;
 
 //================== cpmono_extra_light.otf ==================
-static const unsigned char temp_8172799f[] =
+static const unsigned char temp_binary_data_7[] =
 { 79,84,84,79,0,10,0,128,0,3,0,32,67,70,70,32,248,217,201,134,0,0,10,164,0,0,78,103,71,83,85,66,106,18,122,98,0,0,91,224,0,0,5,216,79,83,47,50,104,210,98,59,0,0,1,16,0,0,0,96,99,109,97,112,38,198,129,33,0,0,5,108,0,0,5,24,104,101,97,100,237,187,115,86,
 0,0,0,172,0,0,0,54,104,104,101,97,6,229,0,179,0,0,0,228,0,0,0,36,104,109,116,120,81,57,79,54,0,0,89,12,0,0,2,212,109,97,120,112,1,105,80,0,0,0,1,8,0,0,0,6,110,97,109,101,101,109,217,12,0,0,1,112,0,0,3,252,112,111,115,116,255,181,0,161,0,0,10,132,0,0,
 0,32,0,1,0,0,0,1,0,0,97,176,60,66,95,15,60,245,0,3,3,232,0,0,0,0,198,13,23,248,0,0,0,0,198,13,23,248,255,71,255,16,3,67,3,118,0,0,0,3,0,2,0,0,0,0,0,0,0,1,0,0,3,144,254,224,0,200,2,138,255,71,255,71,3,67,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,80,0,1,
@@ -2518,10 +2518,10 @@ static const unsigned char temp_8172799f[] =
 0,55,0,61,0,62,0,70,0,2,0,21,0,4,0,12,0,0,0,14,0,19,0,9,0,21,0,23,0,15,0,28,0,28,0,18,0,36,0,51,0,19,0,53,0,54,0,35,0,57,0,60,0,37,0,63,0,66,0,41,0,71,0,72,0,45,0,82,0,82,0,47,0,92,0,92,0,48,0,99,0,99,0,49,0,103,0,106,0,50,0,140,0,162,0,54,0,165,0,168,
 0,77,0,179,0,184,0,81,0,208,0,209,0,87,0,214,0,214,0,89,0,224,1,6,0,90,1,8,1,8,0,129,1,13,1,13,0,130,0,1,0,26,0,3,0,13,0,20,0,24,0,25,0,26,0,27,0,52,0,55,0,56,0,61,0,62,0,67,0,68,0,69,0,70,0,134,0,135,0,136,0,137,0,138,0,139,0,163,0,164,0,169,1,7,0,0 };
 
-const char* cpmono_extra_light_otf = (const char*) temp_8172799f;
+const char* cpmono_extra_light_otf = (const char*) temp_binary_data_7;
 
 //================== cpmono_light.otf ==================
-static const unsigned char temp_9ff5f6ce[] =
+static const unsigned char temp_binary_data_8[] =
 { 79,84,84,79,0,10,0,128,0,3,0,32,67,70,70,32,64,226,171,159,0,0,10,124,0,0,81,133,71,83,85,66,106,18,122,98,0,0,94,216,0,0,5,216,79,83,47,50,104,211,98,73,0,0,1,16,0,0,0,96,99,109,97,112,38,198,129,33,0,0,5,68,0,0,5,24,104,101,97,100,237,187,127,116,0,
 0,0,172,0,0,0,54,104,104,101,97,6,229,0,158,0,0,0,228,0,0,0,36,104,109,116,120,73,105,71,167,0,0,92,4,0,0,2,212,109,97,120,112,1,105,80,0,0,0,1,8,0,0,0,6,110,97,109,101,106,76,91,179,0,0,1,112,0,0,3,209,112,111,115,116,255,181,0,161,0,0,10,92,0,0,0,32,
 0,1,0,0,0,1,0,0,215,127,97,71,95,15,60,245,0,3,3,232,0,0,0,0,198,13,30,2,0,0,0,0,198,13,30,2,255,50,255,16,3,88,3,128,0,0,0,3,0,2,0,0,0,0,0,0,0,1,0,0,3,144,254,224,0,200,2,138,255,50,255,50,3,88,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,80,0,1,105,0,0,
@@ -2856,10 +2856,10 @@ static const unsigned char temp_9ff5f6ce[] =
 0,4,0,12,0,0,0,14,0,19,0,9,0,21,0,23,0,15,0,28,0,28,0,18,0,36,0,51,0,19,0,53,0,54,0,35,0,57,0,60,0,37,0,63,0,66,0,41,0,71,0,72,0,45,0,82,0,82,0,47,0,92,0,92,0,48,0,99,0,99,0,49,0,103,0,106,0,50,0,140,0,162,0,54,0,165,0,168,0,77,0,179,0,184,0,81,0,208,
 0,209,0,87,0,214,0,214,0,89,0,224,1,6,0,90,1,8,1,8,0,129,1,13,1,13,0,130,0,1,0,26,0,3,0,13,0,20,0,24,0,25,0,26,0,27,0,52,0,55,0,56,0,61,0,62,0,67,0,68,0,69,0,70,0,134,0,135,0,136,0,137,0,138,0,139,0,163,0,164,0,169,1,7,0,0 };
 
-const char* cpmono_light_otf = (const char*) temp_9ff5f6ce;
+const char* cpmono_light_otf = (const char*) temp_binary_data_8;
 
 //================== cpmono_plain.otf ==================
-static const unsigned char temp_eca62182[] =
+static const unsigned char temp_binary_data_9[] =
 { 79,84,84,79,0,10,0,128,0,3,0,32,67,70,70,32,153,52,71,27,0,0,10,124,0,0,81,49,71,83,85,66,106,18,122,98,0,0,94,132,0,0,5,216,79,83,47,50,104,213,98,87,0,0,1,16,0,0,0,96,99,109,97,112,38,198,129,33,0,0,5,68,0,0,5,24,104,101,97,100,237,186,121,35,0,0,0,
 172,0,0,0,54,104,104,101,97,6,228,0,137,0,0,0,228,0,0,0,36,104,109,116,120,65,179,64,52,0,0,91,176,0,0,2,212,109,97,120,112,1,105,80,0,0,0,1,8,0,0,0,6,110,97,109,101,95,80,74,175,0,0,1,112,0,0,3,209,112,111,115,116,255,181,0,161,0,0,10,92,0,0,0,32,0,
 1,0,0,0,1,0,0,76,64,104,233,95,15,60,245,0,3,3,232,0,0,0,0,198,13,26,212,0,0,0,0,198,13,26,212,255,28,255,16,3,109,3,139,0,0,0,3,0,2,0,0,0,0,0,0,0,1,0,0,3,144,254,224,0,200,2,138,255,28,255,29,3,109,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,80,0,1,105,
@@ -3193,10 +3193,10 @@ static const unsigned char temp_eca62182[] =
 0,50,0,140,0,162,0,54,0,165,0,168,0,77,0,179,0,184,0,81,0,208,0,209,0,87,0,214,0,214,0,89,0,224,1,6,0,90,1,8,1,8,0,129,1,13,1,13,0,130,0,1,0,26,0,3,0,13,0,20,0,24,0,25,0,26,0,27,0,52,0,55,0,56,0,61,0,62,0,67,0,68,0,69,0,70,0,134,0,135,0,136,0,137,0,138,
 0,139,0,163,0,164,0,169,1,7,0,0 };
 
-const char* cpmono_plain_otf = (const char*) temp_eca62182;
+const char* cpmono_plain_otf = (const char*) temp_binary_data_9;
 
 //================== miso-bold.ttf ==================
-static const unsigned char temp_7dfa977e[] =
+static const unsigned char temp_binary_data_10[] =
 { 0,1,0,0,0,17,1,0,0,4,0,16,76,84,83,72,237,157,221,60,0,0,5,108,0,0,0,227,79,83,47,50,81,16,250,27,0,0,1,152,0,0,0,86,86,68,77,88,108,156,116,37,0,0,231,220,0,0,5,224,99,109,97,112,117,108,128,122,0,0,26,212,0,0,6,164,99,118,116,32,0,20,0,0,0,0,34,224,
 0,0,0,2,102,112,103,109,50,77,115,102,0,0,33,120,0,0,1,98,103,108,121,102,122,237,74,59,0,0,34,228,0,0,184,220,104,100,109,120,139,147,218,195,0,0,6,80,0,0,20,132,104,101,97,100,230,15,38,231,0,0,1,28,0,0,0,54,104,104,101,97,6,202,7,163,0,0,1,84,0,0,
 0,36,104,109,116,120,82,131,27,122,0,0,1,240,0,0,3,124,107,101,114,110,23,5,21,255,0,0,221,128,0,0,4,68,108,111,99,97,100,35,145,228,0,0,219,192,0,0,1,192,109,97,120,112,2,241,2,157,0,0,1,120,0,0,0,32,110,97,109,101,215,203,101,65,0,0,225,196,0,0,3,225,
@@ -3880,10 +3880,10 @@ static const unsigned char temp_7dfa977e[] =
 255,203,0,239,0,212,255,203,0,240,0,213,255,203,0,241,0,214,255,202,0,242,0,215,255,202,0,243,0,216,255,202,0,244,0,217,255,202,0,245,0,218,255,202,0,246,0,218,255,201,0,247,0,219,255,201,0,248,0,220,255,201,0,249,0,221,255,201,0,250,0,222,255,201,0,
 251,0,223,255,200,0,252,0,224,255,200,0,253,0,225,255,200,0,254,0,226,255,200,0,255,0,226,255,199,0,0 };
 
-const char* misobold_ttf = (const char*) temp_7dfa977e;
+const char* misobold_ttf = (const char*) temp_binary_data_10;
 
 //================== miso-light.ttf ==================
-static const unsigned char temp_9ecc78ad[] =
+static const unsigned char temp_binary_data_11[] =
 { 0,1,0,0,0,17,1,0,0,4,0,16,76,84,83,72,109,206,108,252,0,0,5,108,0,0,0,227,79,83,47,50,79,98,250,86,0,0,1,152,0,0,0,86,86,68,77,88,108,201,116,87,0,0,229,68,0,0,5,224,99,109,97,112,117,108,128,122,0,0,26,212,0,0,6,164,99,118,116,32,0,20,0,0,0,0,34,224,
 0,0,0,2,102,112,103,109,50,77,115,102,0,0,33,120,0,0,1,98,103,108,121,102,9,54,37,173,0,0,34,228,0,0,182,56,104,100,109,120,120,118,213,147,0,0,6,80,0,0,20,132,104,101,97,100,230,13,38,194,0,0,1,28,0,0,0,54,104,104,101,97,6,201,7,195,0,0,1,84,0,0,0,36,
 104,109,116,120,82,124,51,141,0,0,1,240,0,0,3,124,107,101,114,110,23,5,21,255,0,0,218,220,0,0,4,68,108,111,99,97,249,219,39,62,0,0,217,28,0,0,1,192,109,97,120,112,2,241,2,188,0,0,1,120,0,0,0,32,110,97,109,101,174,204,29,32,0,0,223,32,0,0,3,240,112,111,
@@ -4549,10 +4549,10 @@ static const unsigned char temp_9ecc78ad[] =
 203,0,243,0,216,255,203,0,244,0,217,255,203,0,245,0,218,255,202,0,246,0,218,255,202,0,247,0,219,255,202,0,248,0,220,255,202,0,249,0,221,255,201,0,250,0,222,255,201,0,251,0,223,255,201,0,252,0,224,255,201,0,253,0,225,255,201,0,254,0,226,255,200,0,255,
 0,226,255,200,0,0 };
 
-const char* misolight_ttf = (const char*) temp_9ecc78ad;
+const char* misolight_ttf = (const char*) temp_binary_data_11;
 
 //================== miso-regular.ttf ==================
-static const unsigned char temp_bfd04473[] =
+static const unsigned char temp_binary_data_12[] =
 { 0,1,0,0,0,17,1,0,0,4,0,16,76,84,83,72,96,206,125,196,0,0,5,108,0,0,0,227,79,83,47,50,79,197,250,61,0,0,1,152,0,0,0,86,86,68,77,88,108,201,116,86,0,0,225,224,0,0,5,224,99,109,97,112,117,108,128,122,0,0,26,212,0,0,6,164,99,118,116,32,0,20,0,0,0,0,34,224,
 0,0,0,2,102,112,103,109,50,77,115,102,0,0,33,120,0,0,1,98,103,108,121,102,144,118,127,194,0,0,34,228,0,0,179,20,104,100,109,120,123,104,215,146,0,0,6,80,0,0,20,132,104,101,97,100,230,14,38,213,0,0,1,28,0,0,0,54,104,104,101,97,6,189,7,195,0,0,1,84,0,0,
 0,36,104,109,116,120,82,124,40,229,0,0,1,240,0,0,3,124,107,101,114,110,23,5,21,255,0,0,215,184,0,0,4,68,108,111,99,97,156,38,200,236,0,0,213,248,0,0,1,192,109,97,120,112,2,241,2,186,0,0,1,120,0,0,0,32,110,97,109,101,65,189,188,90,0,0,219,252,0,0,3,174,
@@ -5216,10 +5216,10 @@ static const unsigned char temp_bfd04473[] =
 0,206,255,208,0,236,0,207,255,207,0,237,0,207,255,207,0,238,0,208,255,207,0,239,0,209,255,207,0,240,0,210,255,207,0,241,0,211,255,206,0,242,0,212,255,206,0,243,0,213,255,206,0,244,0,214,255,206,0,245,0,214,255,206,0,246,0,215,255,205,0,247,0,216,255,
 205,0,248,0,217,255,205,0,249,0,218,255,205,0,250,0,219,255,205,0,251,0,220,255,204,0,252,0,220,255,204,0,253,0,221,255,204,0,254,0,222,255,204,0,255,0,223,255,203,0,0 };
 
-const char* misoregular_ttf = (const char*) temp_bfd04473;
+const char* misoregular_ttf = (const char*) temp_binary_data_12;
 
 //================== miso-serialized ==================
-static const unsigned char temp_263ed5c5[] =
+static const unsigned char temp_binary_data_13[] =
 { 120,156,236,221,11,252,253,197,180,63,254,79,244,237,170,139,164,123,73,55,116,165,146,240,221,239,175,168,148,75,95,145,144,16,187,143,67,246,231,155,173,155,131,82,169,164,72,233,34,149,110,18,37,183,82,74,159,253,222,137,238,36,33,169,164,66,116,145,
 20,161,19,254,243,124,205,222,31,250,31,231,156,56,156,195,227,119,122,60,62,205,250,238,247,204,154,153,53,51,107,214,90,179,102,205,139,223,188,219,174,19,19,19,231,156,250,226,57,171,78,252,161,64,243,77,28,59,103,195,102,222,228,163,70,233,163,71,
 233,252,163,116,214,40,93,96,148,46,56,74,23,26,165,11,143,210,69,70,233,162,163,244,49,163,116,177,81,186,248,40,93,98,148,46,57,74,31,59,74,151,26,165,143,27,165,75,143,210,199,143,210,101,70,233,178,163,116,185,81,186,252,40,93,97,148,174,56,74,87,
@@ -6270,10 +6270,10 @@ static const unsigned char temp_263ed5c5[] =
 219,114,86,91,239,25,109,89,219,189,161,215,207,60,247,238,205,109,203,166,45,119,111,203,250,157,123,151,118,230,189,119,251,157,251,182,245,247,109,219,239,219,214,223,183,212,95,163,80,149,125,75,61,229,188,222,155,243,251,188,182,254,188,182,254,
 188,182,254,188,82,223,122,206,43,245,149,251,181,245,246,107,235,237,215,214,219,175,212,91,173,244,183,95,169,167,124,91,91,239,109,109,189,203,123,251,166,252,89,91,222,212,150,255,15,63,201,76,247,0,0 };
 
-const char* misoserialized = (const char*) temp_263ed5c5;
+const char* misoserialized = (const char*) temp_binary_data_13;
 
 //================== nordic.ttf ==================
-static const unsigned char temp_bcaa94b9[] =
+static const unsigned char temp_binary_data_14[] =
 { 0,1,0,0,0,14,0,128,0,3,0,96,79,83,47,50,123,137,164,77,0,0,1,136,0,0,0,86,99,109,97,112,54,197,178,209,0,0,31,240,0,0,1,202,99,118,116,32,15,192,16,0,0,0,26,184,0,0,2,0,102,112,103,109,1,82,156,24,0,0,28,184,0,0,0,179,103,97,115,112,0,23,0,6,0,0,26,168,
 0,0,0,16,103,108,121,102,108,103,13,174,0,0,40,168,0,0,51,44,104,101,97,100,98,133,67,155,0,0,0,236,0,0,0,54,104,104,101,97,6,68,3,192,0,0,1,36,0,0,0,36,104,109,116,120,180,81,19,127,0,0,37,52,0,0,3,116,108,111,99,97,0,33,207,92,0,0,33,188,0,0,3,120,
 109,97,120,112,24,248,0,170,0,0,1,72,0,0,0,32,110,97,109,101,185,229,179,231,0,0,1,224,0,0,24,198,112,111,115,116,255,163,0,48,0,0,1,104,0,0,0,32,112,114,101,112,15,37,62,165,0,0,29,108,0,0,2,130,0,1,0,0,0,5,0,0,166,84,57,97,95,15,60,245,0,1,4,0,0,0,
@@ -6514,10 +6514,10 @@ static const unsigned char temp_bcaa94b9[] =
 6,7,6,39,53,54,55,51,22,23,185,30,74,27,4,1,23,86,22,3,204,31,74,27,4,2,22,86,22,4,2,126,88,56,12,28,214,22,3,3,22,86,88,56,12,28,214,22,3,3,22,0,0,0,2,0,50,1,226,1,133,2,237,0,10,0,21,0,3,0,48,49,19,6,7,6,39,53,54,55,51,22,31,1,6,7,6,39,53,54,55,51,
 22,23,185,30,74,27,4,1,23,86,22,3,204,31,74,27,4,2,22,86,22,4,2,126,88,56,12,28,214,22,3,3,22,86,88,56,12,28,214,22,3,3,22,0,0,0,0 };
 
-const char* nordic_ttf = (const char*) temp_bcaa94b9;
+const char* nordic_ttf = (const char*) temp_binary_data_14;
 
 //================== ostrich.ttf ==================
-static const unsigned char temp_189d4f30[] =
+static const unsigned char temp_binary_data_15[] =
 { 0,1,0,0,0,16,1,0,0,4,0,0,70,70,84,77,91,245,3,49,0,0,1,12,0,0,0,28,71,68,69,70,0,172,0,3,0,0,1,40,0,0,0,32,79,83,47,50,147,188,109,12,0,0,1,72,0,0,0,96,99,109,97,112,43,226,86,187,0,0,1,168,0,0,1,162,99,118,116,32,13,119,11,140,0,0,3,76,0,0,0,34,102,
 112,103,109,15,180,47,167,0,0,3,112,0,0,2,101,103,97,115,112,0,0,0,16,0,0,5,216,0,0,0,8,103,108,121,102,143,7,37,77,0,0,5,224,0,0,69,164,104,101,97,100,248,105,156,174,0,0,75,132,0,0,0,54,104,104,101,97,11,58,5,41,0,0,75,188,0,0,0,36,104,109,116,120,
 102,145,6,220,0,0,75,224,0,0,1,252,108,111,99,97,36,35,54,72,0,0,77,220,0,0,1,0,109,97,120,112,1,156,1,252,0,0,78,220,0,0,0,32,110,97,109,101,44,100,71,147,0,0,78,252,0,0,2,6,112,111,115,116,68,107,181,125,0,0,81,4,0,0,1,187,112,114,101,112,2,242,181,
@@ -6769,10 +6769,10 @@ static const unsigned char temp_189d4f30[] =
 32,69,176,3,43,68,176,12,32,69,186,0,11,127,255,0,2,43,177,3,70,118,43,68,176,13,32,69,178,12,9,2,43,177,3,70,118,43,68,176,14,32,69,178,13,8,2,43,177,3,70,118,43,68,176,15,32,69,186,0,14,1,56,0,2,43,177,3,70,118,43,68,176,16,32,69,178,15,7,2,43,177,
 3,70,118,43,68,89,176,20,43,0,0,0,0 };
 
-const char* ostrich_ttf = (const char*) temp_189d4f30;
+const char* ostrich_ttf = (const char*) temp_binary_data_15;
 
 //================== silkscreen-serialized ==================
-static const unsigned char temp_4c9cd71c[] =
+static const unsigned char temp_binary_data_16[] =
 { 120,156,237,155,7,148,20,69,16,134,215,156,48,39,80,84,204,57,160,120,162,48,123,42,98,206,120,230,132,99,171,200,238,170,140,162,24,49,97,206,57,231,128,57,158,1,238,206,132,1,195,153,21,207,128,17,179,232,138,138,9,39,117,119,245,116,207,78,47,252,
 199,221,170,188,199,123,205,78,239,215,213,85,213,85,93,53,203,128,65,133,193,158,59,132,177,82,46,151,235,217,165,95,125,143,220,20,127,52,131,255,55,87,95,42,246,26,57,185,175,63,26,94,8,6,254,227,150,66,145,77,204,139,65,240,200,45,142,27,59,62,239,
 63,31,93,8,6,19,242,125,90,252,217,195,28,49,8,30,185,108,70,56,113,38,56,113,102,56,113,22,56,113,86,56,113,54,56,113,118,56,113,14,56,113,78,56,113,46,56,177,11,156,56,55,156,56,15,156,56,47,156,56,31,156,56,63,156,184,0,156,184,32,156,184,16,156,184,
@@ -6807,10 +6807,10 @@ static const unsigned char temp_4c9cd71c[] =
 2,78,156,0,39,126,9,39,126,5,39,126,13,39,126,3,39,126,11,39,126,7,39,126,15,39,254,0,39,78,132,19,127,132,19,127,130,19,203,112,226,207,112,226,36,56,241,23,56,241,87,56,241,55,56,113,50,156,248,59,156,248,7,156,248,39,156,248,23,156,248,55,156,56,5,
 78,12,128,255,0,255,66,227,172,0,0 };
 
-const char* silkscreenserialized = (const char*) temp_4c9cd71c;
+const char* silkscreenserialized = (const char*) temp_binary_data_16;
 
 //================== silkscreen.ttf ==================
-static const unsigned char temp_2de8efad[] =
+static const unsigned char temp_binary_data_17[] =
 { 0,1,0,0,0,15,0,48,0,3,0,192,79,83,47,50,121,166,129,146,0,0,64,208,0,0,0,78,80,67,76,84,173,52,110,22,0,0,65,32,0,0,0,54,99,109,97,112,198,58,142,190,0,0,61,32,0,0,2,4,99,118,116,32,7,83,8,77,0,0,64,172,0,0,0,36,102,112,103,109,152,92,220,162,0,0,3,224,
 0,0,0,100,103,108,121,102,48,157,174,66,0,0,4,152,0,0,54,18,104,100,109,120,137,166,202,30,0,0,65,88,0,0,6,72,104,101,97,100,213,88,95,61,0,0,0,252,0,0,0,54,104,104,101,97,2,213,6,14,0,0,1,52,0,0,0,36,104,109,116,120,44,25,4,90,0,0,63,36,0,0,1,136,108,
 111,99,97,0,10,37,204,0,0,58,172,0,0,1,140,109,97,120,112,1,9,0,219,0,0,1,88,0,0,0,32,110,97,109,101,63,98,60,192,0,0,1,120,0,0,2,103,112,111,115,116,9,71,9,62,0,0,60,56,0,0,0,230,112,114,101,112,5,176,112,7,0,0,4,68,0,0,0,83,0,1,0,0,0,1,0,0,124,56,31,
@@ -7017,10 +7017,10 @@ static const unsigned char temp_2de8efad[] =
 14,16,19,16,16,16,16,14,14,16,16,8,16,16,14,19,19,16,16,16,16,16,14,16,19,19,19,19,14,11,14,11,14,16,11,16,16,16,16,14,14,16,16,8,16,16,14,19,19,16,16,16,16,16,14,16,19,19,19,19,14,14,8,14,16,24,20,12,0,11,11,9,14,20,17,20,17,9,11,11,20,20,9,14,6,14,
 17,14,17,17,17,17,17,17,17,17,6,9,14,14,14,17,20,17,17,17,17,14,14,17,17,9,17,17,14,20,20,17,17,17,17,17,14,17,20,20,20,20,14,11,14,11,14,17,11,17,17,17,17,14,14,17,17,9,17,17,14,20,20,17,17,17,17,17,14,17,20,20,20,20,14,14,9,14,17,0,0 };
 
-const char* silkscreen_ttf = (const char*) temp_2de8efad;
+const char* silkscreen_ttf = (const char*) temp_binary_data_17;
 
 //================== ArduinoIcon.png ==================
-static const unsigned char temp_dd579bb9[] =
+static const unsigned char temp_binary_data_18[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,6,47,0,0,4,111,8,6,0,0,0,96,133,119,144,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,10,79,105,67,67,80,80,104,111,116,111,115,104,111,112,32,73,67,67,32,112,114,111,102,105,108,101,
 0,0,120,218,157,83,103,84,83,233,22,61,247,222,244,66,75,136,128,148,75,111,82,21,8,32,82,66,139,128,20,145,38,42,33,9,16,74,136,33,161,217,21,81,193,17,69,69,4,27,200,160,136,3,142,142,128,140,21,81,44,12,138,10,216,7,228,33,162,142,131,163,136,138,
 202,251,225,123,163,107,214,188,247,230,205,254,181,215,62,231,172,243,157,179,207,7,192,8,12,150,72,51,81,53,128,12,169,66,30,17,224,131,199,196,198,225,228,46,64,129,10,36,112,0,16,8,179,100,33,115,253,35,1,0,248,126,60,60,43,34,192,7,190,0,1,120,211,
@@ -7809,10 +7809,10 @@ static const unsigned char temp_dd579bb9[] =
 223,255,212,213,121,32,27,7,166,188,232,223,182,138,0,0,0,0,0,32,99,109,205,214,129,253,183,63,255,249,207,94,222,126,236,75,57,185,187,67,8,23,75,2,0,0,0,0,32,163,252,123,8,225,191,255,169,171,243,68,54,14,206,157,23,76,13,33,108,19,3,0,0,0,0,64,198,
 248,117,8,97,92,182,22,23,33,184,243,130,147,190,148,147,59,46,132,48,51,132,240,223,165,1,0,0,0,0,16,73,39,66,8,91,255,212,213,249,84,182,15,244,255,63,0,215,70,173,194,31,62,235,52,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* ArduinoIcon_png = (const char*) temp_dd579bb9;
+const char* ArduinoIcon_png = (const char*) temp_binary_data_18;
 
 //================== OpenEphysBoardLogoBlack.png ==================
-static const unsigned char temp_ef366d73[] =
+static const unsigned char temp_binary_data_19[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,7,115,0,0,5,27,8,6,0,0,0,52,231,138,245,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,140,165,73,68,65,84,120,218,236,221,209,149,19,71,162,199,225,54,231,30,29,233,9,54,2,228,8,152,141,96,180,17,120,110,4,200,17,236,108,4,30,71,176,16,129,69,4,59,68,176,34,2,102,34,176,136,224,194,147,116,244,194,173,178,
 122,188,44,6,3,51,211,221,127,73,223,119,78,185,13,6,117,119,169,103,95,126,91,213,223,189,127,255,190,33,195,104,60,121,84,14,39,237,47,103,31,252,167,217,71,127,116,90,198,99,51,6,0,0,0,0,0,192,87,122,83,198,234,163,223,91,126,226,223,175,182,155,245,
@@ -8286,10 +8286,10 @@ static const unsigned char temp_ef366d73[] =
 38,188,253,43,192,21,222,214,75,152,155,65,10,120,183,225,238,40,149,248,181,93,188,0,0,0,0,0,0,228,118,87,109,194,218,69,42,243,248,20,220,54,79,152,91,152,116,76,115,188,135,119,148,74,245,197,215,187,226,247,220,209,11,0,0,0,0,0,192,215,196,99,144,
 23,247,124,127,177,243,253,237,215,183,235,213,242,218,144,149,227,255,1,23,88,237,144,160,48,169,201,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* OpenEphysBoardLogoBlack_png = (const char*) temp_ef366d73;
+const char* OpenEphysBoardLogoBlack_png = (const char*) temp_binary_data_19;
 
 //================== OpenEphysBoardLogoGray.png ==================
-static const unsigned char temp_76e84745[] =
+static const unsigned char temp_binary_data_20[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,7,115,0,0,5,27,8,6,0,0,0,52,231,138,245,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,139,144,73,68,65,84,120,218,236,221,223,117,220,198,193,198,97,68,39,247,100,7,98,42,16,115,133,75,174,43,16,191,10,180,174,192,76,5,166,43,8,85,129,86,21,132,170,32,171,203,185,50,89,65,168,14,168,10,242,13,188,160,163,
 40,148,197,63,11,224,197,238,243,156,51,134,100,75,11,96,22,204,205,47,51,248,211,191,255,253,239,134,12,165,148,195,122,56,238,127,187,248,226,63,45,190,250,163,71,117,188,52,99,0,0,0,0,0,0,60,208,167,58,110,190,250,119,235,123,126,125,213,182,237,173,
@@ -8760,10 +8760,10 @@ static const unsigned char temp_76e84745[] =
 194,221,105,190,210,239,85,241,2,0,0,0,0,0,80,218,125,179,13,107,55,249,90,167,187,224,182,127,194,220,202,228,109,154,211,57,188,211,124,53,127,249,253,190,244,103,206,232,5,0,0,0,0,0,224,107,210,54,200,155,7,254,124,179,247,231,187,223,223,133,16,110,
 12,89,61,254,7,181,146,230,16,82,63,166,171,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* OpenEphysBoardLogoGray_png = (const char*) temp_76e84745;
+const char* OpenEphysBoardLogoGray_png = (const char*) temp_binary_data_20;
 
 //================== RadioButtons-01.png ==================
-static const unsigned char temp_bcea9320[] =
+static const unsigned char temp_binary_data_21[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,19,8,6,0,0,0,241,148,15,247,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,191,73,68,65,84,120,218,196,150,219,78,19,81,20,134,255,61,199,118,128,136,209,132,150,27,98,226,133,70,99,104,69,206,82,18,9,166,49,122,161,9,23,92,250,4,190,129,190,130,207,161,55,106,76,19,37,86,40,162,40,109,154,84,4,
 34,98,5,76,228,2,16,122,156,233,28,92,211,169,74,109,109,13,69,88,201,206,236,116,239,174,245,173,127,173,189,103,24,200,60,30,207,29,122,4,104,180,226,144,141,81,240,123,62,255,197,187,221,221,189,80,20,229,80,131,71,34,83,16,36,73,12,140,94,13,226,
@@ -8777,10 +8777,10 @@ static const unsigned char temp_bcea9320[] =
 139,193,13,163,246,157,221,112,9,202,148,32,17,195,47,19,116,2,18,208,41,176,105,214,127,97,252,42,65,58,157,174,251,62,248,31,166,235,142,2,247,227,241,216,176,215,219,78,23,198,225,66,100,179,25,231,142,164,143,146,97,122,12,31,197,55,193,15,1,6,0,
 156,20,41,102,255,70,71,224,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons01_png = (const char*) temp_bcea9320;
+const char* RadioButtons01_png = (const char*) temp_binary_data_21;
 
 //================== RadioButtons-02.png ==================
-static const unsigned char temp_bcf8aaa1[] =
+static const unsigned char temp_binary_data_22[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,197,73,68,65,84,120,218,196,150,107,79,19,65,20,134,223,153,157,221,110,11,36,152,20,104,52,154,144,160,40,69,32,164,40,136,52,38,24,141,31,252,79,254,31,191,154,104,248,224,133,86,80,145,134,91,32,70,32,202,69,46,134,91,
 111,123,233,94,60,179,106,44,180,24,109,19,152,228,100,119,178,115,206,115,230,61,115,38,203,98,177,216,43,156,211,16,137,129,219,247,70,70,146,103,14,78,165,198,33,20,69,129,22,10,157,57,92,114,133,34,8,174,105,167,46,98,140,228,81,200,132,15,159,230,
@@ -8794,10 +8794,10 @@ static const unsigned char temp_bcf8aaa1[] =
 11,27,40,149,78,239,65,201,21,129,236,150,85,243,77,37,93,83,233,37,76,125,252,132,11,205,13,216,219,207,83,89,124,42,135,255,215,254,175,75,246,147,9,20,10,192,254,126,241,159,47,156,95,178,215,183,243,90,135,228,138,98,177,128,157,237,237,51,135,75,
 46,163,63,153,39,231,245,39,243,67,128,1,0,60,21,103,165,70,150,193,96,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons02_png = (const char*) temp_bcf8aaa1;
+const char* RadioButtons02_png = (const char*) temp_binary_data_22;
 
 //================== RadioButtons-03.png ==================
-static const unsigned char temp_bd06c222[] =
+static const unsigned char temp_binary_data_23[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,77,73,68,65,84,120,218,196,150,219,110,211,64,16,134,255,61,196,109,66,165,86,106,47,242,32,173,8,23,69,240,16,136,103,225,142,151,42,92,34,40,32,113,1,151,160,34,78,82,213,67,148,66,147,56,118,236,181,119,205,76,156,162,
 172,157,22,25,161,116,164,141,226,221,153,249,230,228,149,69,183,219,125,129,91,18,189,187,119,247,193,254,254,253,149,131,15,15,95,65,43,165,16,172,173,173,28,206,92,173,52,193,131,160,118,40,37,32,4,45,126,16,75,172,11,192,209,42,230,171,49,92,51,92,
@@ -8809,10 +8809,10 @@ static const unsigned char temp_bd06c222[] =
 253,155,136,179,130,202,88,194,31,61,126,114,163,110,191,63,32,93,202,60,245,225,204,45,203,158,54,203,60,163,88,191,255,56,193,206,246,75,186,44,236,245,21,162,183,228,232,243,49,205,71,74,109,170,102,254,143,101,103,57,59,51,56,120,254,14,66,220,208,
 30,190,255,169,31,214,214,111,160,121,217,155,103,254,63,132,185,58,142,35,244,207,207,87,14,103,174,160,47,153,167,183,245,37,243,91,128,1,0,11,149,65,182,96,70,58,8,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons03_png = (const char*) temp_bd06c222;
+const char* RadioButtons03_png = (const char*) temp_binary_data_23;
 
 //================== RadioButtons-04.png ==================
-static const unsigned char temp_bd14d9a3[] =
+static const unsigned char temp_binary_data_24[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,165,73,68,65,84,120,218,196,150,237,79,211,80,24,197,207,109,111,1,157,74,50,144,76,226,198,139,128,2,66,162,66,136,31,48,42,248,217,232,95,228,127,102,2,74,130,38,203,192,12,84,134,1,231,88,145,142,194,218,117,107,215,23,
 159,219,161,216,161,198,200,132,155,52,109,239,189,233,239,60,231,60,109,202,18,137,196,75,156,211,224,83,211,51,15,103,103,31,156,57,120,113,113,1,92,150,101,180,181,183,159,57,92,112,185,204,9,222,214,118,98,145,177,227,235,32,248,15,112,46,224,146,
@@ -8825,10 +8825,10 @@ static const unsigned char temp_bd14d9a3[] =
 83,92,187,240,93,35,132,215,5,220,9,154,224,30,184,235,122,161,255,167,29,66,196,171,165,45,164,51,219,152,156,184,142,241,241,41,112,101,8,165,210,14,89,236,208,155,19,245,79,112,27,182,219,118,203,190,92,66,196,194,98,14,233,244,39,18,208,143,106,213,
 167,134,182,195,202,209,74,219,255,52,42,21,134,61,109,61,188,246,253,224,196,7,233,200,246,214,86,254,183,67,112,185,101,85,176,171,170,103,14,23,92,70,127,50,47,206,235,79,230,155,0,3,0,91,7,91,249,23,102,61,167,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons04_png = (const char*) temp_bd14d9a3;
+const char* RadioButtons04_png = (const char*) temp_binary_data_24;
 
 //================== RadioButtons-05.png ==================
-static const unsigned char temp_bd22f124[] =
+static const unsigned char temp_binary_data_25[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,30,0,0,0,19,8,6,0,0,0,135,174,189,124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,10,79,105,67,67,80,80,104,111,116,111,115,104,111,112,32,73,67,67,32,112,114,111,102,105,108,101,0,
 0,120,218,157,83,103,84,83,233,22,61,247,222,244,66,75,136,128,148,75,111,82,21,8,32,82,66,139,128,20,145,38,42,33,9,16,74,136,33,161,217,21,81,193,17,69,69,4,27,200,160,136,3,142,142,128,140,21,81,44,12,138,10,216,7,228,33,162,142,131,163,136,138,202,
 251,225,123,163,107,214,188,247,230,205,254,181,215,62,231,172,243,157,179,207,7,192,8,12,150,72,51,81,53,128,12,169,66,30,17,224,131,199,196,198,225,228,46,64,129,10,36,112,0,16,8,179,100,33,115,253,35,1,0,248,126,60,60,43,34,192,7,190,0,1,120,211,11,
@@ -8880,10 +8880,10 @@ static const unsigned char temp_bd22f124[] =
 162,63,207,207,191,252,78,47,76,49,6,14,15,19,62,191,243,5,198,88,140,57,95,51,207,205,73,170,147,228,66,176,16,240,240,225,99,176,159,49,24,68,52,91,17,113,60,230,203,175,118,209,74,32,4,164,153,37,207,237,84,135,186,200,254,53,213,207,44,73,224,94,
 237,224,164,117,254,119,192,197,96,131,206,243,127,62,241,255,97,121,158,163,163,104,72,171,217,188,84,112,20,13,17,213,106,245,211,23,241,3,249,115,0,245,214,95,36,216,96,243,208,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons05_png = (const char*) temp_bd22f124;
+const char* RadioButtons05_png = (const char*) temp_binary_data_25;
 
 //================== RadioButtons_neutral-01.png ==================
-static const unsigned char temp_fbf03e98[] =
+static const unsigned char temp_binary_data_26[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,19,8,6,0,0,0,241,148,15,247,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,103,73,68,65,84,120,218,196,86,221,75,83,97,28,126,206,217,217,161,177,205,64,177,121,154,125,96,132,23,125,144,36,117,219,77,222,108,115,36,74,11,22,140,210,182,187,162,174,130,46,250,83,6,121,83,162,99,69,69,17,164,77,152,
 168,67,48,203,106,141,105,160,172,109,110,147,181,185,243,181,211,123,142,37,68,251,10,199,250,193,15,94,206,251,62,239,243,252,62,248,157,151,82,20,5,28,199,221,49,27,141,55,201,218,140,22,27,67,200,31,234,245,250,251,54,199,32,123,200,194,181,148,252,
@@ -8896,10 +8896,10 @@ static const unsigned char temp_fbf03e98[] =
 209,58,51,61,253,79,231,101,53,3,162,36,255,136,126,90,197,177,158,19,45,255,25,169,101,99,120,129,127,176,188,242,62,176,83,42,193,108,110,237,123,68,18,69,80,191,94,68,151,140,6,131,75,71,211,7,90,157,133,159,2,12,0,238,13,9,71,19,58,158,165,0,0,0,
 0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_neutral01_png = (const char*) temp_fbf03e98;
+const char* RadioButtons_neutral01_png = (const char*) temp_binary_data_26;
 
 //================== RadioButtons_neutral-02.png ==================
-static const unsigned char temp_fbfe5619[] =
+static const unsigned char temp_binary_data_27[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,54,73,68,65,84,120,218,196,150,207,79,19,65,20,199,191,187,157,182,86,131,166,254,72,69,19,13,141,137,49,30,12,218,131,225,102,106,140,129,112,52,210,150,67,19,53,130,240,223,104,188,123,210,196,171,98,148,6,127,20,104,145,
 32,28,48,129,130,201,66,65,91,160,148,110,161,178,219,157,226,204,28,56,176,187,13,182,164,125,201,203,190,153,247,94,62,243,230,205,76,86,186,226,247,43,104,146,144,182,54,255,229,59,119,239,53,28,252,57,246,9,196,225,112,192,229,118,55,28,206,185,68,
@@ -8911,10 +8911,10 @@ static const unsigned char temp_fbfe5619[] =
 158,112,24,14,246,30,124,249,26,199,204,244,76,213,60,81,121,133,87,94,7,156,75,60,62,42,212,235,245,34,111,113,126,44,225,188,114,42,122,174,29,201,123,157,205,102,14,29,75,69,207,217,150,233,53,246,188,30,225,92,98,148,203,88,77,47,55,28,206,185,68,
 85,11,175,152,54,229,79,230,159,0,3,0,178,38,58,166,235,164,14,20,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_neutral02_png = (const char*) temp_fbfe5619;
+const char* RadioButtons_neutral02_png = (const char*) temp_binary_data_27;
 
 //================== RadioButtons_neutral-03.png ==================
-static const unsigned char temp_fc0c6d9a[] =
+static const unsigned char temp_binary_data_28[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,1,165,73,68,65,84,120,218,196,150,109,75,194,80,20,199,207,220,221,172,12,21,122,130,40,76,139,94,7,245,162,122,19,73,244,213,194,143,209,75,251,0,69,169,212,103,136,232,77,132,154,104,69,234,210,72,216,195,189,235,222,13,133,
 218,217,70,19,244,63,198,6,255,115,206,111,231,222,187,187,73,91,185,92,13,166,36,146,205,230,50,199,39,167,19,7,223,150,111,128,200,178,12,106,60,62,113,184,224,146,88,44,6,241,41,192,5,215,129,43,138,226,49,91,141,58,88,166,25,88,192,182,25,100,54,
@@ -8924,10 +8924,10 @@ static const unsigned char temp_fc0c6d9a[] =
 66,33,48,174,82,42,65,235,237,3,239,156,137,206,35,192,219,29,13,170,181,122,104,220,211,115,21,173,47,184,132,58,115,254,127,184,200,185,40,22,35,239,237,212,153,115,190,98,141,8,115,62,174,4,151,136,143,71,179,241,50,113,184,224,146,126,191,119,206,
 207,169,252,201,252,8,48,0,227,76,197,247,89,122,10,69,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_neutral03_png = (const char*) temp_fc0c6d9a;
+const char* RadioButtons_neutral03_png = (const char*) temp_binary_data_28;
 
 //================== RadioButtons_neutral-04.png ==================
-static const unsigned char temp_fc1a851b[] =
+static const unsigned char temp_binary_data_29[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,27,73,68,65,84,120,218,196,150,109,79,211,80,24,134,239,182,167,29,219,50,100,176,110,200,48,203,22,127,5,209,15,4,162,63,68,72,36,209,175,26,241,215,248,7,28,159,36,129,69,92,228,69,167,113,250,9,156,16,141,14,98,125,9,91,
 11,117,93,123,138,61,167,209,4,219,17,18,203,246,36,39,79,211,59,231,190,158,231,188,52,21,174,150,74,159,48,160,32,197,98,169,48,61,123,163,239,224,181,202,10,136,36,73,80,98,177,190,195,25,151,136,162,136,216,0,224,140,203,225,178,44,7,196,159,223,
@@ -8939,10 +8939,10 @@ static const unsigned char temp_fc1a851b[] =
 106,149,103,195,180,60,111,59,212,159,113,9,229,123,110,93,200,247,251,217,218,211,158,26,229,123,78,233,185,14,87,212,193,184,132,221,229,253,47,159,251,14,103,92,162,235,237,71,222,24,200,159,204,111,1,6,0,203,214,249,255,62,204,159,178,0,0,0,0,73,
 69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_neutral04_png = (const char*) temp_fc1a851b;
+const char* RadioButtons_neutral04_png = (const char*) temp_binary_data_29;
 
 //================== RadioButtons_neutral-05.png ==================
-static const unsigned char temp_fc289c9c[] =
+static const unsigned char temp_binary_data_30[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,30,0,0,0,19,8,6,0,0,0,135,174,189,124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,10,79,105,67,67,80,80,104,111,116,111,115,104,111,112,32,73,67,67,32,112,114,111,102,105,108,101,0,
 0,120,218,157,83,103,84,83,233,22,61,247,222,244,66,75,136,128,148,75,111,82,21,8,32,82,66,139,128,20,145,38,42,33,9,16,74,136,33,161,217,21,81,193,17,69,69,4,27,200,160,136,3,142,142,128,140,21,81,44,12,138,10,216,7,228,33,162,142,131,163,136,138,202,
 251,225,123,163,107,214,188,247,230,205,254,181,215,62,231,172,243,157,179,207,7,192,8,12,150,72,51,81,53,128,12,169,66,30,17,224,131,199,196,198,225,228,46,64,129,10,36,112,0,16,8,179,100,33,115,253,35,1,0,248,126,60,60,43,34,192,7,190,0,1,120,211,11,
@@ -8993,10 +8993,10 @@ static const unsigned char temp_fc289c9c[] =
 229,42,213,143,142,62,250,227,151,203,24,65,139,24,130,192,255,173,248,237,236,204,95,123,50,69,12,90,68,234,14,193,191,10,17,65,135,229,50,139,153,249,134,130,195,114,25,157,207,187,183,242,121,183,225,63,144,239,3,0,218,200,55,245,184,64,106,163,0,
 0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_neutral05_png = (const char*) temp_fc289c9c;
+const char* RadioButtons_neutral05_png = (const char*) temp_binary_data_30;
 
 //================== RadioButtons_selected-01.png ==================
-static const unsigned char temp_789007d8[] =
+static const unsigned char temp_binary_data_31[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,19,8,6,0,0,0,241,148,15,247,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,134,73,68,65,84,120,218,196,86,75,104,19,81,20,61,47,153,76,147,104,90,146,214,106,68,65,116,81,116,99,43,72,109,87,21,139,65,171,82,161,152,44,20,233,39,70,10,69,219,69,161,16,138,96,65,186,112,227,82,139,248,87,106,53,169,
 46,20,252,130,138,40,45,88,41,46,130,198,66,193,79,98,205,111,38,49,153,207,115,146,148,34,152,31,166,140,15,238,48,188,251,206,187,231,157,185,239,222,33,148,82,88,173,214,147,235,170,140,221,162,76,77,80,121,48,74,240,83,134,10,118,104,120,231,6,118,
@@ -9009,10 +9009,10 @@ static const unsigned char temp_789007d8[] =
 201,56,82,41,9,166,77,13,152,187,228,46,9,35,137,52,171,0,207,211,101,41,173,252,195,9,229,57,81,242,122,81,82,20,72,73,50,247,52,160,67,163,73,84,189,25,101,114,32,250,75,112,79,250,5,79,108,173,1,171,85,110,138,73,65,6,89,252,35,106,169,54,232,28,74,
 103,210,171,173,194,111,1,6,0,169,191,241,34,56,210,107,35,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_selected01_png = (const char*) temp_789007d8;
+const char* RadioButtons_selected01_png = (const char*) temp_binary_data_31;
 
 //================== RadioButtons_selected-02.png ==================
-static const unsigned char temp_789e1f59[] =
+static const unsigned char temp_binary_data_32[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,102,73,68,65,84,120,218,196,150,77,104,19,65,20,199,255,187,153,181,201,134,212,24,42,126,32,86,15,133,10,69,26,40,162,17,84,68,41,10,18,84,90,171,205,69,37,135,74,241,82,240,3,188,120,241,100,241,224,199,69,17,60,104,75,
 43,22,105,197,70,35,226,71,139,7,17,63,138,20,139,208,18,164,24,107,178,105,178,155,110,146,221,117,102,11,10,238,166,132,180,164,11,111,118,118,222,188,249,241,248,207,155,89,210,88,183,121,18,203,244,144,237,155,106,106,187,154,86,85,28,220,253,62,
@@ -9025,10 +9025,10 @@ static const unsigned char temp_789e1f59[] =
 177,168,3,67,121,209,135,31,212,156,94,31,213,57,81,82,12,227,146,130,166,67,150,141,37,57,175,101,249,119,201,115,25,215,212,92,206,26,21,191,88,76,205,213,188,142,47,169,202,223,106,140,75,98,178,113,47,38,107,203,242,39,243,71,128,1,0,163,90,231,150,
 52,232,169,252,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_selected02_png = (const char*) temp_789e1f59;
+const char* RadioButtons_selected02_png = (const char*) temp_binary_data_32;
 
 //================== RadioButtons_selected-03.png ==================
-static const unsigned char temp_78ac36da[] =
+static const unsigned char temp_binary_data_33[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,1,190,73,68,65,84,120,218,196,150,189,79,194,80,20,197,207,43,79,144,26,163,68,6,29,140,50,24,29,77,208,196,56,56,184,57,27,157,116,112,116,246,223,80,255,5,227,226,234,224,199,164,51,241,35,58,56,104,116,129,176,16,48,10,161,
 69,90,222,135,125,69,166,190,130,96,130,55,13,29,238,61,231,215,155,243,82,74,230,103,82,89,252,83,209,165,233,228,212,222,66,162,239,224,131,251,79,80,18,33,136,154,70,223,225,138,75,13,239,39,22,239,63,92,113,155,155,15,146,64,243,170,48,140,34,27,
@@ -9038,10 +9038,10 @@ static const unsigned char temp_78ac36da[] =
 133,212,250,251,240,134,191,185,236,26,30,27,107,26,174,31,92,181,157,187,187,60,209,250,43,46,229,76,162,246,213,61,220,204,102,80,127,56,237,56,55,116,123,140,90,61,232,175,184,148,113,1,219,238,30,14,187,134,199,163,195,158,223,237,138,235,103,110,
 247,176,249,95,203,207,220,105,8,60,85,250,255,175,166,184,52,111,203,227,188,205,255,229,75,230,91,128,1,0,165,175,191,223,100,163,205,167,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_selected03_png = (const char*) temp_78ac36da;
+const char* RadioButtons_selected03_png = (const char*) temp_binary_data_33;
 
 //================== RadioButtons_selected-04.png ==================
-static const unsigned char temp_78ba4e5b[] =
+static const unsigned char temp_binary_data_34[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,100,73,68,65,84,120,218,196,150,77,104,211,96,24,199,255,111,154,102,205,92,221,186,85,17,71,173,58,198,188,232,6,14,84,148,162,172,226,7,76,70,65,119,216,209,195,64,60,41,130,99,87,15,122,24,168,7,5,79,83,97,8,165,155,122,
 17,199,16,25,58,61,104,81,118,152,173,171,19,183,22,109,221,154,146,164,31,107,154,248,38,21,81,147,94,180,235,2,239,75,194,147,252,127,255,231,125,222,143,144,174,246,29,159,177,78,23,187,127,187,219,123,177,219,85,115,240,200,155,52,88,98,35,224,234,
@@ -9054,10 +9054,10 @@ static const unsigned char temp_78ba4e5b[] =
 225,201,103,241,213,66,95,231,178,74,73,133,44,107,107,178,127,71,158,62,174,24,211,185,70,205,229,156,86,243,131,197,168,121,161,168,98,54,83,251,83,77,231,146,206,157,219,70,215,235,79,230,135,0,3,0,71,200,242,251,63,187,157,122,0,0,0,0,73,69,78,68,
 174,66,96,130,0,0 };
 
-const char* RadioButtons_selected04_png = (const char*) temp_78ba4e5b;
+const char* RadioButtons_selected04_png = (const char*) temp_binary_data_34;
 
 //================== RadioButtons_selected-05.png ==================
-static const unsigned char temp_78c865dc[] =
+static const unsigned char temp_binary_data_35[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,30,0,0,0,19,8,6,0,0,0,135,174,189,124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,10,79,105,67,67,80,80,104,111,116,111,115,104,111,112,32,73,67,67,32,112,114,111,102,105,108,101,0,
 0,120,218,157,83,103,84,83,233,22,61,247,222,244,66,75,136,128,148,75,111,82,21,8,32,82,66,139,128,20,145,38,42,33,9,16,74,136,33,161,217,21,81,193,17,69,69,4,27,200,160,136,3,142,142,128,140,21,81,44,12,138,10,216,7,228,33,162,142,131,163,136,138,202,
 251,225,123,163,107,214,188,247,230,205,254,181,215,62,231,172,243,157,179,207,7,192,8,12,150,72,51,81,53,128,12,169,66,30,17,224,131,199,196,198,225,228,46,64,129,10,36,112,0,16,8,179,100,33,115,253,35,1,0,248,126,60,60,43,34,192,7,190,0,1,120,211,11,
@@ -9108,10 +9108,10 @@ static const unsigned char temp_78c865dc[] =
 67,47,42,109,196,133,131,158,216,185,173,106,221,105,147,89,82,137,21,26,39,18,154,254,235,201,213,60,226,64,151,202,198,52,99,235,6,155,222,129,127,54,50,165,90,172,177,249,59,150,208,89,45,165,141,110,69,109,250,195,137,253,157,172,168,141,30,48,99,
 15,3,166,34,209,235,207,0,161,143,20,90,35,156,236,45,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_selected05_png = (const char*) temp_78c865dc;
+const char* RadioButtons_selected05_png = (const char*) temp_binary_data_35;
 
 //================== RadioButtons_selected_over-01.png ==================
-static const unsigned char temp_a1a89ec7[] =
+static const unsigned char temp_binary_data_36[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,19,8,6,0,0,0,241,148,15,247,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,239,73,68,65,84,120,218,196,86,93,72,20,81,20,254,238,236,236,56,179,174,43,91,130,187,130,136,97,81,22,244,3,105,8,134,105,168,245,32,229,147,15,10,25,37,173,81,212,67,15,86,15,65,68,244,212,83,62,244,24,65,68,166,32,18,
 132,63,69,17,82,61,20,171,65,81,216,139,144,238,34,106,59,59,251,51,51,247,118,103,86,130,220,137,149,86,182,129,195,12,115,206,61,223,119,190,57,247,204,37,140,49,4,131,193,75,213,91,188,251,240,31,46,145,131,223,80,138,164,129,211,117,85,82,169,34,
@@ -9125,10 +9125,10 @@ static const unsigned char temp_a1a89ec7[] =
 210,200,69,104,11,12,70,130,75,111,58,47,213,51,4,0,45,145,231,72,227,242,106,99,67,8,38,77,148,214,236,194,252,232,29,104,81,10,211,2,167,127,95,102,242,166,180,21,136,199,55,103,184,171,35,195,246,76,128,201,96,234,185,135,164,97,114,5,210,38,85,167,
 34,110,212,151,24,155,244,143,219,120,49,86,15,144,64,32,112,130,63,143,52,87,40,40,47,236,113,0,95,227,156,192,218,137,168,105,171,226,238,226,127,38,185,208,39,162,95,2,12,0,137,200,31,90,212,72,119,82,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_selected_over01_png = (const char*) temp_a1a89ec7;
+const char* RadioButtons_selected_over01_png = (const char*) temp_binary_data_36;
 
 //================== RadioButtons_selected_over-02.png ==================
-static const unsigned char temp_a1b6b648[] =
+static const unsigned char temp_binary_data_37[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,216,73,68,65,84,120,218,196,149,79,72,84,65,28,199,191,51,239,237,190,221,183,184,166,22,145,84,70,137,97,90,33,107,218,22,129,18,17,29,162,67,66,209,255,78,117,137,14,29,11,138,200,110,17,116,232,84,80,116,8,73,41,188,164,
 93,182,63,104,148,34,149,186,176,22,37,122,200,63,152,171,187,179,239,173,251,254,52,111,246,80,235,110,82,107,232,240,230,49,204,252,230,247,249,205,124,103,126,67,130,91,202,31,96,153,138,188,110,165,255,116,83,213,234,37,7,183,14,142,67,46,81,101,
@@ -9142,10 +9142,10 @@ static const unsigned char temp_a1b6b648[] =
 152,175,120,22,147,161,155,152,126,23,130,33,206,65,238,121,14,87,54,121,150,74,104,139,72,214,60,247,176,246,86,140,116,182,65,45,41,130,30,157,134,153,180,97,25,88,240,254,59,92,217,48,45,48,246,31,94,138,152,141,217,169,169,116,251,47,220,57,92,161,
 57,211,236,37,127,82,133,230,201,148,133,254,25,186,228,112,135,43,143,50,251,225,40,51,177,28,229,167,0,3,0,110,188,26,228,110,165,221,163,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_selected_over02_png = (const char*) temp_a1b6b648;
+const char* RadioButtons_selected_over02_png = (const char*) temp_binary_data_37;
 
 //================== RadioButtons_selected_over-03.png ==================
-static const unsigned char temp_a1c4cdc9[] =
+static const unsigned char temp_binary_data_38[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,101,73,68,65,84,120,218,196,150,61,143,211,64,16,134,223,89,111,226,195,7,220,33,78,66,128,34,16,80,5,209,32,1,66,162,165,161,166,160,65,80,208,242,51,248,13,84,72,92,139,104,168,40,40,174,58,10,26,78,66,87,33,133,143,0,34,
 137,20,146,216,107,39,142,215,203,172,147,226,108,135,128,41,114,43,37,78,188,51,243,236,188,51,187,54,221,108,94,122,142,67,26,178,177,117,252,193,221,203,167,86,14,126,185,223,129,60,233,73,220,56,99,86,14,223,249,36,33,133,67,112,143,136,242,44,21,
@@ -9158,10 +9158,10 @@ static const unsigned char temp_a1c4cdc9[] =
 233,51,62,35,150,31,110,188,153,144,140,121,129,186,80,115,61,175,185,138,254,243,233,48,250,71,191,5,102,89,205,39,124,122,125,24,138,149,63,82,45,87,182,149,217,110,43,125,40,111,50,191,5,24,0,98,67,27,130,54,13,67,66,0,0,0,0,73,69,78,68,174,66,96,
 130,0,0 };
 
-const char* RadioButtons_selected_over03_png = (const char*) temp_a1c4cdc9;
+const char* RadioButtons_selected_over03_png = (const char*) temp_binary_data_38;
 
 //================== RadioButtons_selected_over-04.png ==================
-static const unsigned char temp_a1d2e54a[] =
+static const unsigned char temp_binary_data_39[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,19,8,6,0,0,0,104,108,214,66,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,2,211,73,68,65,84,120,218,196,150,205,75,20,97,28,199,191,207,204,179,186,179,187,90,90,184,100,25,26,43,149,122,176,64,74,33,37,148,204,50,12,234,84,135,110,65,151,110,29,252,51,58,132,208,169,46,5,33,228,91,210,139,96,16,
 145,93,180,178,14,97,104,33,42,235,186,235,174,59,179,187,243,246,60,61,179,43,184,57,219,69,86,125,96,102,96,158,121,158,207,247,247,250,12,105,109,8,61,193,62,13,90,115,184,252,206,205,198,224,158,131,7,127,132,65,15,249,40,206,85,243,61,135,79,46,
@@ -9175,10 +9175,10 @@ static const unsigned char temp_a1d2e54a[] =
 109,113,164,210,69,236,159,73,142,228,203,87,66,196,56,202,58,175,192,79,85,68,23,8,212,117,6,61,143,227,112,169,37,154,133,166,237,66,243,222,224,248,250,98,12,114,73,174,166,109,131,131,153,121,49,183,55,99,174,165,119,249,84,35,238,30,144,141,185,
 110,50,204,38,164,61,63,82,29,46,93,212,248,211,69,205,222,151,63,153,191,2,12,0,199,181,70,142,38,155,205,86,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* RadioButtons_selected_over04_png = (const char*) temp_a1d2e54a;
+const char* RadioButtons_selected_over04_png = (const char*) temp_binary_data_39;
 
 //================== RadioButtons_selected_over-05.png ==================
-static const unsigned char temp_a1e0fccb[] =
+static const unsigned char temp_binary_data_40[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,30,0,0,0,19,8,6,0,0,0,135,174,189,124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,10,79,105,67,67,80,80,104,111,116,111,115,104,111,112,32,73,67,67,32,112,114,111,102,105,108,101,0,
 0,120,218,157,83,103,84,83,233,22,61,247,222,244,66,75,136,128,148,75,111,82,21,8,32,82,66,139,128,20,145,38,42,33,9,16,74,136,33,161,217,21,81,193,17,69,69,4,27,200,160,136,3,142,142,128,140,21,81,44,12,138,10,216,7,228,33,162,142,131,163,136,138,202,
 251,225,123,163,107,214,188,247,230,205,254,181,215,62,231,172,243,157,179,207,7,192,8,12,150,72,51,81,53,128,12,169,66,30,17,224,131,199,196,198,225,228,46,64,129,10,36,112,0,16,8,179,100,33,115,253,35,1,0,248,126,60,60,43,34,192,7,190,0,1,120,211,11,
@@ -9231,10 +9231,10 @@ static const unsigned char temp_a1e0fccb[] =
 210,38,160,217,252,135,89,141,144,218,222,213,127,69,126,47,211,166,159,227,102,123,180,167,147,214,1,202,239,5,92,241,228,72,133,253,94,128,218,110,134,159,111,55,205,200,111,32,127,13,0,111,180,58,50,205,148,146,75,0,0,0,0,73,69,78,68,174,66,96,130,
 0,0 };
 
-const char* RadioButtons_selected_over05_png = (const char*) temp_a1e0fccb;
+const char* RadioButtons_selected_over05_png = (const char*) temp_binary_data_40;
 
 //================== noise_wave.png ==================
-static const unsigned char temp_2ada9d3c[] =
+static const unsigned char temp_binary_data_41[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,101,0,0,2,30,8,6,0,0,0,18,223,178,102,0,0,0,9,112,72,89,115,0,0,23,18,0,0,23,18,1,103,159,210,82,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,76,229,73,68,65,84,120,218,236,221,235,149,21,55,214,48,96,13,203,255,221,95,4,212,68,64,59,2,202,17,24,71,48,77,4,47,142,192,77,4,120,34,160,39,2,112,4,20,17,24,34,112,57,2,67,4,243,181,56,167,135,6,250,114,46,117,145,180,
 159,103,173,90,96,3,125,78,237,146,84,210,46,149,244,143,4,0,0,0,172,229,228,242,56,189,60,186,237,113,155,225,242,248,112,121,188,19,50,0,0,0,128,253,229,36,204,217,229,241,242,242,248,243,242,248,239,1,199,155,203,227,60,109,146,57,0,0,0,0,220,225,
@@ -9516,10 +9516,10 @@ static const unsigned char temp_2ada9d3c[] =
 73,212,228,227,97,186,249,117,163,15,151,199,251,203,99,220,30,131,176,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 176,175,255,47,192,0,205,180,140,11,223,168,97,120,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* noise_wave_png = (const char*) temp_2ada9d3c;
+const char* noise_wave_png = (const char*) temp_binary_data_41;
 
 //================== saw_wave.png ==================
-static const unsigned char temp_fad5260d[] =
+static const unsigned char temp_binary_data_42[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,180,0,0,2,143,8,6,0,0,0,116,54,147,247,0,0,0,9,112,72,89,115,0,0,23,18,0,0,23,18,1,103,159,210,82,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,41,190,73,68,65,84,120,218,236,221,141,149,212,102,186,174,225,103,38,129,211,206,64,206,0,71,176,69,6,56,130,45,34,216,16,1,69,4,248,68,208,58,17,152,12,90,19,1,236,8,80,6,144,129,143,100,53,174,6,131,145,212,245,163,159,
 235,90,235,93,94,158,25,51,174,183,170,87,21,55,42,125,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,151,242,
@@ -9661,10 +9661,10 @@ static const unsigned char temp_fad5260d[] =
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,231,254,191,0,3,0,11,98,146,161,132,82,43,233,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* saw_wave_png = (const char*) temp_fad5260d;
+const char* saw_wave_png = (const char*) temp_binary_data_42;
 
 //================== sine_wave.png ==================
-static const unsigned char temp_eb0332c3[] =
+static const unsigned char temp_binary_data_43[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,180,0,0,2,171,8,6,0,0,0,232,11,212,215,0,0,0,9,112,72,89,115,0,0,23,18,0,0,23,18,1,103,159,210,82,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,49,204,73,68,65,84,120,218,236,221,175,151,36,199,149,40,224,24,205,3,122,200,13,197,156,203,196,92,102,102,78,49,9,109,137,237,178,52,123,102,229,191,96,211,232,157,69,101,182,176,198,200,107,84,18,178,141,170,133,158,88,
 143,153,30,170,22,211,67,51,98,54,242,203,112,85,107,122,52,61,221,153,89,249,43,50,191,239,156,123,122,108,31,219,163,232,200,31,113,51,238,141,15,2,0,0,0,0,36,228,3,67,0,0,0,0,64,74,36,180,0,0,0,0,72,138,132,22,0,0,0,0,73,145,208,2,0,0,0,32,41,18,90,
@@ -9837,10 +9837,10 @@ static const unsigned char temp_eb0332c3[] =
 104,1,0,0,0,144,20,9,45,0,0,0,0,146,34,161,5,0,0,0,64,82,36,180,0,0,0,0,72,138,132,22,0,0,0,0,73,145,208,2,0,0,0,32,41,18,90,0,0,0,0,36,69,66,11,0,0,0,128,164,72,104,1,0,0,0,144,20,9,45,0,0,0,0,146,242,255,5,24,0,142,248,78,14,98,33,228,71,0,0,0,0,73,
 69,78,68,174,66,96,130,0,0 };
 
-const char* sine_wave_png = (const char*) temp_eb0332c3;
+const char* sine_wave_png = (const char*) temp_binary_data_43;
 
 //================== square_wave.png ==================
-static const unsigned char temp_727226f3[] =
+static const unsigned char temp_binary_data_44[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,164,0,0,2,171,8,6,0,0,0,207,165,85,63,0,0,0,9,112,72,89,115,0,0,23,18,0,0,23,18,1,103,159,210,82,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,23,205,73,68,65,84,120,218,236,221,63,146,148,199,1,198,225,214,138,64,153,55,116,230,225,4,94,157,128,209,9,88,78,160,37,115,6,156,0,113,2,164,208,17,67,228,114,36,136,28,50,202,156,105,201,148,121,148,217,25,206,164,204,
 221,254,190,45,244,7,73,32,161,151,233,238,231,169,234,98,237,64,59,221,223,4,83,191,237,238,41,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -9911,10 +9911,10 @@ static const unsigned char temp_727226f3[] =
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,14,253,79,128,1,0,153,2,27,8,33,213,49,244,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* square_wave_png = (const char*) temp_727226f3;
+const char* square_wave_png = (const char*) temp_binary_data_44;
 
 //================== triangle_wave.png ==================
-static const unsigned char temp_3825ab28[] =
+static const unsigned char temp_binary_data_45[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,172,0,0,2,113,8,6,0,0,0,111,215,42,130,0,0,0,9,112,72,89,115,0,0,23,18,0,0,23,18,1,103,159,210,82,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,32,173,73,68,65,84,120,218,236,221,251,145,85,199,122,198,225,214,113,2,100,224,9,129,12,204,201,128,16,94,101,64,8,100,160,16,80,6,132,128,28,1,114,4,216,17,72,25,224,189,197,12,12,48,151,125,89,151,175,187,159,167,170,
 171,252,199,41,219,181,46,189,250,251,157,13,180,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -10023,10 +10023,10 @@ static const unsigned char temp_3825ab28[] =
 253,85,213,43,183,1,0,0,0,128,31,189,110,95,226,209,150,161,42,46,59,0,0,0,0,207,121,117,88,239,219,122,161,234,248,107,174,184,204,0,0,0,0,156,235,248,247,73,165,125,137,87,215,254,171,130,199,72,245,166,125,249,203,222,1,88,193,47,46,1,0,0,48,161,151,
 183,235,230,176,254,235,153,255,236,127,31,214,223,135,245,231,97,253,225,210,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,239,255,5,24,0,2,125,7,137,153,101,243,194,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* triangle_wave_png = (const char*) temp_3825ab28;
+const char* triangle_wave_png = (const char*) temp_binary_data_45;
 
 //================== wifi.png ==================
-static const unsigned char temp_4168e213[] =
+static const unsigned char temp_binary_data_46[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,64,0,0,0,247,8,6,0,0,0,108,40,141,211,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,12,225,73,68,65,84,120,218,236,221,139,117,27,199,21,128,225,81,5,102,7,70,7,70,7,130,43,8,58,8,84,65,144,10,12,87,0,167,2,56,21,192,169,128,84,5,164,42,32,93,1,169,10,28,236,209,64,130,104,62,0,98,95,51,247,251,207,185,
 135,142,148,248,132,187,51,255,222,59,51,187,55,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,242,206,37,64,75,92,236,98,250,196,159,79,243,223,157,202,205,46,30,30,253,217,67,254,115,128,0,209,57,123,121,77,114,52,
@@ -10076,10 +10076,10 @@ static const unsigned char temp_4168e213[] =
 242,3,16,82,130,228,7,32,164,4,201,15,64,72,9,146,31,128,144,18,36,63,0,33,37,72,126,0,66,74,144,252,0,132,148,32,249,1,8,41,65,242,3,16,82,130,228,7,32,164,4,201,15,64,72,9,146,31,128,144,18,36,63,0,33,37,72,126,0,66,74,144,252,0,0,0,0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,45,252,95,128,1,0,166,155,18,218,219,72,225,153,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* wifi_png = (const char*) temp_4168e213;
+const char* wifi_png = (const char*) temp_binary_data_46;
 
 //================== SourceDrop.png ==================
-static const unsigned char temp_77043408[] =
+static const unsigned char temp_binary_data_47[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,154,0,0,2,209,8,6,0,0,0,163,255,186,145,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,24,15,73,68,65,84,120,218,236,157,49,118,219,58,155,64,225,252,234,199,59,120,76,55,93,244,78,154,233,66,173,192,206,10,34,55,108,99,175,64,210,10,226,180,106,44,175,32,206,10,68,151,83,228,68,89,65,152,106,202,167,233,166,
 203,224,139,32,255,50,4,82,36,69,144,50,113,239,57,140,98,218,164,36,232,234,3,64,2,31,206,212,137,144,36,201,185,126,24,234,45,214,219,95,122,139,244,38,251,190,206,231,243,105,195,207,181,52,207,211,36,35,253,58,211,6,95,163,188,190,101,133,67,178,
@@ -10169,10 +10169,10 @@ static const unsigned char temp_77043408[] =
 26,164,75,209,72,34,211,28,63,74,138,38,66,201,96,214,123,31,215,202,78,82,52,153,53,99,58,3,113,133,118,4,84,67,196,90,153,246,239,131,61,5,46,8,209,140,108,43,83,16,183,166,173,177,173,50,183,237,162,119,53,170,131,166,73,95,128,80,217,182,35,165,183,
 255,53,143,89,151,98,217,252,191,0,3,0,92,224,0,25,78,103,130,40,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* SourceDrop_png = (const char*) temp_77043408;
+const char* SourceDrop_png = (const char*) temp_binary_data_47;
 
 //================== DefaultDataSource.png ==================
-static const unsigned char temp_1f71843e[] =
+static const unsigned char temp_binary_data_48[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,14,0,0,2,14,8,6,0,0,0,208,187,133,57,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,54,204,73,68,65,84,120,218,236,221,219,113,27,71,211,198,241,33,234,187,55,51,240,58,2,193,55,46,251,74,171,8,76,69,32,40,2,137,17,144,140,64,100,4,130,34,16,20,129,86,87,118,249,198,80,4,239,58,3,58,131,15,35,244,90,16,5,146,
 56,236,244,116,207,252,127,85,44,218,239,129,0,22,187,179,207,246,156,78,2,0,247,254,248,243,175,118,227,95,167,171,159,211,141,127,255,65,254,179,109,78,31,248,239,182,185,93,253,44,31,248,239,63,221,249,247,165,252,127,190,252,127,127,251,245,151,37,
@@ -10371,10 +10371,10 @@ static const unsigned char temp_1f71843e[] =
 124,222,248,247,158,65,139,0,193,1,192,126,193,98,168,90,68,177,106,209,200,63,55,193,126,229,98,168,20,12,255,252,175,252,243,80,45,88,50,72,17,32,56,0,200,27,52,54,181,59,252,95,159,110,249,207,134,39,255,135,220,74,24,248,166,114,64,133,0,40,207,255,
 11,48,0,82,9,189,51,228,54,205,183,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* DefaultDataSource_png = (const char*) temp_1f71843e;
+const char* DefaultDataSource_png = (const char*) temp_binary_data_48;
 
 //================== FileReaderIcon.png ==================
-static const unsigned char temp_745ce456[] =
+static const unsigned char temp_binary_data_49[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,43,0,0,2,165,8,6,0,0,0,10,20,172,128,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,13,207,73,68,65,84,120,218,236,221,193,109,219,102,24,199,97,167,224,189,217,160,26,33,39,130,60,69,222,32,27,68,217,160,157,64,244,6,217,32,242,4,237,6,97,78,36,120,202,8,234,6,206,4,233,171,194,45,138,130,110,42,231,179,244,
 138,126,30,224,3,115,50,132,191,232,234,87,17,65,94,12,227,244,245,234,219,250,171,60,62,37,122,45,159,227,220,101,121,45,109,83,223,93,1,192,194,188,248,159,177,2,23,27,113,113,190,216,69,220,2,98,5,96,9,17,183,143,243,123,162,215,178,207,242,90,34,
@@ -10420,10 +10420,10 @@ static const unsigned char temp_745ce456[] =
 127,254,79,195,56,173,205,12,0,100,141,149,205,253,1,0,120,20,143,129,0,0,177,2,0,32,86,0,0,177,2,0,32,86,0,0,196,10,0,32,86,0,0,196,10,0,32,86,0,0,196,10,0,128,88,1,0,196,10,0,128,88,1,0,196,10,0,128,88,1,0,16,43,0,128,88,1,0,16,43,0,128,88,1,0,16,43,
 0,0,98,5,0,16,43,0,0,167,240,135,0,3,0,22,72,102,252,69,115,49,232,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* FileReaderIcon_png = (const char*) temp_745ce456;
+const char* FileReaderIcon_png = (const char*) temp_binary_data_49;
 
 //================== IntanIcon.png ==================
-static const unsigned char temp_18972d[] =
+static const unsigned char temp_binary_data_50[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,88,0,0,2,88,8,6,0,0,0,190,102,152,220,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,63,109,73,68,65,84,120,218,236,221,219,117,219,198,162,6,96,56,43,239,155,187,130,208,21,88,126,201,74,158,76,87,96,185,2,83,21,88,170,64,82,5,146,43,16,93,129,229,10,68,63,37,43,47,86,42,48,83,193,81,42,216,7,99,13,19,154,
 230,5,131,27,1,242,251,214,194,102,182,197,203,112,0,2,63,102,6,131,39,89,71,252,246,251,31,71,249,67,88,134,249,242,44,95,6,241,79,71,11,255,13,0,240,144,47,247,11,255,253,103,190,204,194,191,253,250,203,207,247,93,40,224,147,29,7,170,227,124,121,145,
@@ -10654,10 +10654,10 @@ static const unsigned char temp_18972d[] =
 105,213,2,0,154,55,203,151,219,124,121,95,245,202,192,206,6,172,21,97,107,148,47,175,178,199,150,45,115,105,1,0,85,133,57,172,66,144,250,152,47,211,54,67,85,39,2,214,154,192,53,140,97,235,167,236,223,22,174,97,166,181,11,0,248,215,44,46,243,255,254,43,
 134,170,217,174,2,213,178,255,23,96,0,208,173,232,3,246,227,153,225,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* IntanIcon_png = (const char*) temp_18972d;
+const char* IntanIcon_png = (const char*) temp_binary_data_50;
 
 //================== muteoff.png ==================
-static const unsigned char temp_bf129135[] =
+static const unsigned char temp_binary_data_51[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,165,0,0,0,119,8,6,0,0,0,98,221,128,254,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,7,127,73,68,65,84,120,218,236,93,237,141,219,56,16,157,13,238,255,169,131,232,42,136,58,136,174,130,115,42,136,182,3,167,130,213,85,160,77,5,74,7,218,171,64,238,64,78,5,187,169,192,123,21,236,217,128,140,91,24,182,197,33,
 135,228,144,126,15,32,2,36,182,98,146,79,111,190,248,65,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,23,119,24,2,49,52,251,246,215,190,21,251,182,221,183,239,251,246,130,97,1,98,224,64,194,105,223,222,78,218,110,223,86,24,30,64,11,33,223,183,10,195,4,132,194,106,
@@ -10688,10 +10688,10 @@ static const unsigned char temp_bf129135[] =
 182,24,66,64,147,106,154,30,135,13,0,193,84,19,102,16,80,165,154,3,134,10,8,141,134,174,87,64,96,182,129,104,196,220,157,81,72,16,210,2,119,24,2,81,172,102,34,110,136,127,239,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,153,224,63,1,6,0,199,74,112,
 188,78,34,32,245,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* muteoff_png = (const char*) temp_bf129135;
+const char* muteoff_png = (const char*) temp_binary_data_51;
 
 //================== muteon.png ==================
-static const unsigned char temp_a3695c2f[] =
+static const unsigned char temp_binary_data_52[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,165,0,0,0,119,8,6,0,0,0,98,221,128,254,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,5,175,73,68,65,84,120,218,236,157,225,113,219,54,20,128,41,95,7,144,39,40,51,65,153,9,66,79,80,101,130,72,19,84,158,32,242,4,106,38,176,55,80,58,129,212,9,228,78,32,101,2,187,19,176,192,9,185,178,172,34,63,146,32,240,32,
 126,223,29,207,254,33,203,226,227,167,247,0,16,0,179,12,0,0,0,0,0,0,0,0,0,32,46,19,66,224,135,170,170,230,230,199,175,230,152,154,227,217,28,95,38,147,201,145,200,64,12,25,167,230,216,87,255,231,197,28,51,34,4,90,132,172,83,16,41,8,37,228,204,101,195,
@@ -10716,10 +10716,10 @@ static const unsigned char temp_a3695c2f[] =
 38,65,91,214,228,14,14,168,202,154,60,228,30,130,203,121,233,105,25,123,202,54,196,20,179,57,87,115,131,144,221,96,31,27,191,114,218,182,163,21,113,215,246,185,227,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,61,252,35,192,0,171,7,136,102,133,179,227,147,0,0,0,
 0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* muteon_png = (const char*) temp_a3695c2f;
+const char* muteon_png = (const char*) temp_binary_data_52;
 
 //================== MergerA-01.png ==================
-static const unsigned char temp_7677e5e[] =
+static const unsigned char temp_binary_data_53[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,69,0,0,1,169,8,6,0,0,0,131,16,66,165,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,21,118,73,68,65,84,120,218,236,221,189,111,93,71,122,7,224,33,205,133,100,55,75,195,69,108,96,131,28,117,74,82,136,238,210,36,190,238,220,45,221,109,170,92,117,73,181,218,46,157,168,191,64,18,130,0,219,241,170,76,37,186,220,
 138,87,221,22,73,72,45,16,239,166,226,81,103,87,146,58,17,145,172,204,240,156,107,82,50,181,226,199,189,119,230,156,243,60,192,64,194,98,23,246,190,188,31,63,190,243,158,153,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -10797,10 +10797,10 @@ static const unsigned char temp_7677e5e[] =
 248,195,31,30,43,12,66,17,148,105,26,154,109,180,127,89,116,32,18,138,24,98,32,26,159,252,207,126,241,139,191,60,90,127,252,246,219,240,242,229,255,41,18,66,17,148,97,18,215,111,98,24,186,179,204,71,246,189,163,25,108,32,154,249,139,79,63,13,127,253,
 55,127,27,254,251,191,254,83,48,66,40,130,124,82,39,232,183,113,253,99,12,67,15,114,28,238,248,255,2,12,0,160,41,104,168,212,59,220,159,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* MergerA01_png = (const char*) temp_7677e5e;
+const char* MergerA01_png = (const char*) temp_binary_data_53;
 
 //================== MergerA-02.png ==================
-static const unsigned char temp_77595df[] =
+static const unsigned char temp_binary_data_54[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,69,0,0,1,169,8,6,0,0,0,131,16,66,165,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,21,221,73,68,65,84,120,218,236,221,207,143,220,229,125,192,241,199,6,20,145,3,24,113,104,14,84,76,14,68,42,145,98,71,109,165,68,106,203,112,171,0,41,246,49,39,236,219,70,171,85,234,191,0,175,170,168,205,41,187,26,141,58,55,
 102,149,246,18,21,177,72,148,156,130,191,62,1,39,198,28,210,10,34,49,78,140,212,139,221,129,74,56,17,152,246,251,236,124,7,111,28,227,95,187,51,207,243,253,62,175,151,52,26,43,34,96,127,118,215,251,222,231,121,190,223,239,145,0,29,55,24,142,94,174,223,
@@ -10880,10 +10880,10 @@ static const unsigned char temp_77595df[] =
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,0,7,243,255,2,12,0,244,180,87,201,128,90,137,162,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* MergerA02_png = (const char*) temp_77595df;
+const char* MergerA02_png = (const char*) temp_binary_data_54;
 
 //================== MergerB-01.png ==================
-static const unsigned char temp_6f48ab3d[] =
+static const unsigned char temp_binary_data_55[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,69,0,0,1,169,8,6,0,0,0,131,16,66,165,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,22,71,73,68,65,84,120,218,236,221,193,110,92,215,125,192,225,35,195,64,150,97,158,160,147,39,16,253,4,30,111,219,2,161,159,32,163,29,1,130,144,252,4,146,94,160,148,58,24,100,18,47,56,68,187,106,211,74,6,28,103,149,112,180,106,
 187,210,72,221,217,5,60,130,232,165,108,102,99,67,128,1,245,156,185,119,68,202,162,109,82,26,206,57,247,222,239,67,47,168,4,110,98,255,69,101,126,60,231,220,123,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -10964,10 +10964,10 @@ static const unsigned char temp_6f48ab3d[] =
 90,156,33,18,68,136,34,40,194,36,100,60,119,36,138,232,108,24,185,195,12,81,4,197,154,214,113,52,21,69,112,201,254,254,31,254,241,240,179,63,125,218,55,9,68,17,20,109,30,214,248,42,17,81,68,23,221,138,215,77,99,64,20,65,99,164,67,217,31,94,246,182,218,
 187,230,76,199,92,248,185,69,0,100,51,13,107,124,50,182,40,66,16,1,80,154,73,200,240,14,53,81,132,32,2,160,4,199,117,12,221,205,117,247,217,255,11,48,0,4,145,141,135,126,85,212,174,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* MergerB01_png = (const char*) temp_6f48ab3d;
+const char* MergerB01_png = (const char*) temp_binary_data_55;
 
 //================== MergerB-02.png ==================
-static const unsigned char temp_6f56c2be[] =
+static const unsigned char temp_binary_data_56[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,69,0,0,1,169,8,6,0,0,0,131,16,66,165,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,
 100,121,113,201,101,60,0,0,18,109,73,68,65,84,120,218,236,221,253,109,28,199,25,192,225,161,97,88,127,90,174,192,231,10,76,87,224,77,5,145,42,48,85,129,237,10,44,86,16,177,2,31,43,200,165,2,175,42,200,169,2,173,42,200,249,207,0,1,156,27,237,94,72,43,
 148,248,117,119,243,238,204,243,0,7,25,65,128,216,175,201,240,199,249,216,253,60,65,253,126,221,126,206,140,129,154,125,254,228,137,33,48,87,203,237,231,242,63,255,254,119,95,252,251,200,191,11,4,17,0,71,182,153,98,232,98,27,67,67,152,95,46,252,123,65,
@@ -11034,10 +11034,10 @@ static const unsigned char temp_6f56c2be[] =
 0,0,68,17,0,128,40,2,0,16,69,0,0,162,8,0,64,20,1,0,136,34,0,0,81,4,0,32,138,0,0,68,17,0,128,40,2,0,16,69,0,0,162,8,0,64,20,1,0,136,34,0,0,81,4,0,32,138,0,0,68,17,0,128,40,2,0,16,69,0,0,162,8,0,64,20,1,0,136,34,0,0,81,4,0,32,138,0,0,68,17,0,128,40,2,0,
 16,69,0,0,162,8,0,64,20,1,0,136,34,0,0,81,4,0,32,138,0,0,68,17,0,128,40,2,0,16,69,0,0,181,248,175,0,3,0,94,88,236,111,126,120,246,51,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* MergerB02_png = (const char*) temp_6f56c2be;
+const char* MergerB02_png = (const char*) temp_binary_data_56;
 
 //================== PipelineA-01.png ==================
-static const unsigned char temp_a2c576c6[] =
+static const unsigned char temp_binary_data_57[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,49,0,0,1,169,8,6,0,0,0,124,178,103,71,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,20,161,73,68,65,84,120,218,236,221,77,118,220,198,213,6,224,82,236,121,232,89,102,129,87,96,122,5,106,175,192,202,10,212,90,129,153,21,136,90,1,165,21,176,51,250,134,162,71,223,80,240,10,68,205,50,19,178,2,209,179,204,148,
 174,3,180,217,110,145,84,55,8,116,85,1,207,115,78,29,57,63,199,150,47,33,246,203,91,183,80,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,22,190,81,2,128,193,124,92,175,39,235,245,239,245,250,175,114,0,0,165,248,220,173,79,235,
@@ -11112,10 +11112,10 @@ static const unsigned char temp_a2c576c6[] =
 0,132,24,40,73,28,224,125,17,12,242,2,8,49,80,88,128,137,91,72,6,121,1,132,24,40,138,147,72,0,66,12,20,25,96,174,148,1,64,136,129,210,2,204,74,25,0,132,24,40,201,107,1,6,96,222,188,39,134,18,197,240,242,66,25,0,230,77,39,6,1,6,0,33,6,4,24,0,132,24,16,
 96,0,16,98,16,96,0,152,154,111,149,128,204,57,70,13,192,157,116,98,16,96,0,40,210,255,4,24,0,27,12,93,110,21,245,184,159,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* PipelineA01_png = (const char*) temp_a2c576c6;
+const char* PipelineA01_png = (const char*) temp_binary_data_57;
 
 //================== PipelineA-02.png ==================
-static const unsigned char temp_a2d38e47[] =
+static const unsigned char temp_binary_data_58[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,49,0,0,1,169,8,6,0,0,0,124,178,103,71,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,25,18,73,68,65,84,120,218,236,221,191,114,28,199,157,192,241,214,149,67,178,12,101,167,75,52,10,200,84,36,93,133,2,18,97,121,14,233,42,83,145,228,72,96,157,157,185,78,160,99,203,36,66,251,2,146,137,47,228,224,94,64,240,19,
 104,20,1,133,132,208,19,104,239,9,4,63,1,111,154,59,123,128,36,252,217,157,253,51,221,51,159,79,213,214,74,182,69,139,63,146,139,47,122,122,166,67,8,225,173,151,87,74,175,91,183,111,191,125,93,254,207,15,71,199,39,247,2,0,92,225,189,230,11,7,36,225,206,
@@ -11207,10 +11207,10 @@ static const unsigned char temp_a2d38e47[] =
 25,5,136,24,128,212,157,133,243,243,140,198,198,1,34,6,32,117,49,88,28,9,0,34,6,32,27,85,152,172,186,28,26,5,136,24,128,28,148,77,188,156,26,5,136,24,128,212,77,143,4,40,237,119,1,17,3,144,131,24,44,251,110,145,6,17,3,144,139,170,137,151,202,40,64,196,
 0,228,160,12,142,4,0,17,3,144,137,24,44,142,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,240,127,2,12,0,195,72,32,13,219,83,201,41,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* PipelineA02_png = (const char*) temp_a2d38e47;
+const char* PipelineA02_png = (const char*) temp_binary_data_58;
 
 //================== PipelineB-01.png ==================
-static const unsigned char temp_aa6a3a5[] =
+static const unsigned char temp_binary_data_59[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,49,0,0,1,169,8,6,0,0,0,124,178,103,71,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,23,202,73,68,65,84,120,218,236,221,191,111,164,199,125,192,225,177,99,56,141,4,159,75,167,241,186,184,107,69,157,1,130,108,196,85,107,5,208,165,58,5,72,34,30,98,215,186,75,109,231,142,165,227,66,199,198,46,245,242,47,16,
 13,196,85,18,248,149,155,93,108,99,10,112,106,189,174,148,146,130,221,43,239,104,223,21,87,247,131,183,187,220,221,153,217,247,121,128,5,37,69,145,229,239,209,224,231,102,230,125,39,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,
@@ -11297,10 +11297,10 @@ static const unsigned char temp_aa6a3a5[] =
 175,127,249,203,162,231,100,4,12,0,223,240,55,237,231,137,49,144,218,31,254,240,73,248,235,95,255,18,14,14,14,5,12,0,34,134,178,252,239,159,254,20,254,239,243,207,195,221,31,223,13,223,253,238,223,206,254,114,124,140,250,196,116,0,120,145,47,125,124,
 114,250,220,190,115,231,203,255,250,239,255,249,114,52,158,28,251,159,39,0,47,243,255,2,12,0,38,140,193,224,172,166,247,238,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* PipelineB01_png = (const char*) temp_aa6a3a5;
+const char* PipelineB01_png = (const char*) temp_binary_data_59;
 
 //================== PipelineB-02.png ==================
-static const unsigned char temp_ab4bb26[] =
+static const unsigned char temp_binary_data_60[] =
 { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,49,0,0,1,169,8,6,0,0,0,124,178,103,71,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,
 97,100,121,113,201,101,60,0,0,20,155,73,68,65,84,120,218,236,221,189,122,28,71,118,6,224,162,54,217,141,4,101,155,169,121,5,132,50,103,28,101,206,22,190,130,29,101,206,12,103,206,22,186,2,72,87,192,209,21,16,190,2,54,51,103,4,51,109,132,118,182,142,72,
 101,206,184,93,238,30,99,22,4,64,204,95,119,157,238,247,125,158,122,160,213,15,151,60,232,25,124,83,117,170,234,89,74,233,83,130,242,124,108,199,247,237,184,86,10,0,238,243,76,136,161,240,32,243,67,59,174,148,2,0,33,134,136,114,144,89,41,3,0,66,12,130,
@@ -11375,107 +11375,7 @@ static const unsigned char temp_ab4bb26[] =
 228,45,210,23,73,191,11,0,16,36,196,184,18,0,0,8,21,98,242,146,209,66,105,1,128,8,33,38,247,187,92,38,253,46,0,64,144,16,227,74,0,0,32,84,136,201,253,46,103,202,7,0,68,9,49,185,223,229,84,217,0,128,8,33,102,125,37,64,165,92,0,64,132,16,179,238,119,1,
 0,8,17,98,114,191,203,66,105,0,128,40,33,198,149,0,0,64,24,174,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,202,241,119,1,6,0,159,157,76,71,98,187,78,10,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
 
-const char* PipelineB02_png = (const char*) temp_ab4bb26;
-
-//================== FPGAOutputEditor.cpp ==================
-static const unsigned char temp_86d96cc9[] =
-"/*\r\n"
-"    ------------------------------------------------------------------\r\n"
-"\r\n"
-"    This file is part of the Open Ephys GUI\r\n"
-"    Copyright (C) 2013 Open Ephys\r\n"
-"\r\n"
-"    ------------------------------------------------------------------\r\n"
-"\r\n"
-"    This program is free software: you can redistribute it and/or modify\r\n"
-"    it under the terms of the GNU General Public License as published by\r\n"
-"    the Free Software Foundation, either version 3 of the License, or\r\n"
-"    (at your option) any later version.\r\n"
-"\r\n"
-"    This program is distributed in the hope that it will be useful,\r\n"
-"    but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n"
-"    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r\n"
-"    GNU General Public License for more details.\r\n"
-"\r\n"
-"    You should have received a copy of the GNU General Public License\r\n"
-"    along with this program.  If not, see <http://www.gnu.org/licenses/>.\r\n"
-"\r\n"
-"*/\r\n"
-"\r\n"
-"\r\n"
-"#include \"FPGAOutputEditor.h\"\r\n"
-"#include <stdio.h>\r\n"
-"\r\n"
-"\r\n"
-"FPGAOutputEditor::FPGAOutputEditor(GenericProcessor* parentNode, bool useDefaultParameterEditors=true)\r\n"
-"    : GenericEditor(parentNode, useDefaultParameterEditors)\r\n"
-"\r\n"
-"{\r\n"
-"\r\n"
-"    accumulator = 0;\r\n"
-"\r\n"
-"    desiredWidth = 180;\r\n"
-"\r\n"
-"    // Image im;\r\n"
-"    // im = ImageCache::getFromMemory (BinaryData::OpenEphysBoardLogoBlack_png,\r\n"
-"    //  \t\t\t\t\t\t\t\tBinaryData::OpenEphysBoardLogoBlack_pngSize);\r\n"
-"\r\n"
-"    // icon = new ImageIcon(im);\r\n"
-"    // addAndMakeVisible(icon);\r\n"
-"    // icon->setBounds(15,15,120,120);\r\n"
-"\r\n"
-"    // icon->setOpacity(0.3f);\r\n"
-"\r\n"
-"}\r\n"
-"\r\n"
-"FPGAOutputEditor::~FPGAOutputEditor()\r\n"
-"{\r\n"
-"    deleteAllChildren();\r\n"
-"}\r\n"
-"\r\n"
-"void FPGAOutputEditor::receivedEvent()\r\n"
-"{\r\n"
-"\r\n"
-"    //icon->setOpacity(0.8f);\r\n"
-"    //startTimer(50);\r\n"
-"\r\n"
-"}\r\n"
-"\r\n"
-"void FPGAOutputEditor::timerCallback()\r\n"
-"{\r\n"
-"\r\n"
-"    repaint();\r\n"
-"\r\n"
-"    accumulator++;\r\n"
-"\r\n"
-"    if (isFading)\r\n"
-"    {\r\n"
-"\r\n"
-"        if (accumulator > 15.0)\r\n"
-"        {\r\n"
-"            stopTimer();\r\n"
-"            isFading = false;\r\n"
-"        }\r\n"
-"\r\n"
-"    }\r\n"
-"    else\r\n"
-"    {\r\n"
-"\r\n"
-"        if (accumulator < 10.0)\r\n"
-"        {\r\n"
-"            icon->setOpacity(0.8f-(0.05*float(accumulator)));\r\n"
-"            accumulator++;\r\n"
-"        }\r\n"
-"        else\r\n"
-"        {\r\n"
-"            icon->setOpacity(0.3f);\r\n"
-"            stopTimer();\r\n"
-"            accumulator = 0;\r\n"
-"        }\r\n"
-"    }\r\n"
-"}";
-
-const char* FPGAOutputEditor_cpp = (const char*) temp_86d96cc9;
+const char* PipelineB02_png = (const char*) temp_binary_data_60;
 
 
 const char* getNamedResource (const char*, int&) throw();
@@ -11549,7 +11449,6 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
         case 0x921654eb:  numBytes = 6533; return PipelineA02_png;
         case 0xc6ee78ab:  numBytes = 6205; return PipelineB01_png;
         case 0xc6fc902c:  numBytes = 5390; return PipelineB02_png;
-        case 0x10173ef6:  numBytes = 2213; return FPGAOutputEditor_cpp;
         default: break;
     }
 
@@ -11557,4 +11456,69 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
     return 0;
 }
 
+const char* namedResourceList[] =
+{
+    "cpmonoblackserialized",
+    "cpmonoboldserialized",
+    "cpmonoextralightserialized",
+    "cpmonolightserialized",
+    "cpmonoplainserialized",
+    "BebasNeue_otf",
+    "cpmono_bold_otf",
+    "cpmono_extra_light_otf",
+    "cpmono_light_otf",
+    "cpmono_plain_otf",
+    "misobold_ttf",
+    "misolight_ttf",
+    "misoregular_ttf",
+    "misoserialized",
+    "nordic_ttf",
+    "ostrich_ttf",
+    "silkscreenserialized",
+    "silkscreen_ttf",
+    "ArduinoIcon_png",
+    "OpenEphysBoardLogoBlack_png",
+    "OpenEphysBoardLogoGray_png",
+    "RadioButtons01_png",
+    "RadioButtons02_png",
+    "RadioButtons03_png",
+    "RadioButtons04_png",
+    "RadioButtons05_png",
+    "RadioButtons_neutral01_png",
+    "RadioButtons_neutral02_png",
+    "RadioButtons_neutral03_png",
+    "RadioButtons_neutral04_png",
+    "RadioButtons_neutral05_png",
+    "RadioButtons_selected01_png",
+    "RadioButtons_selected02_png",
+    "RadioButtons_selected03_png",
+    "RadioButtons_selected04_png",
+    "RadioButtons_selected05_png",
+    "RadioButtons_selected_over01_png",
+    "RadioButtons_selected_over02_png",
+    "RadioButtons_selected_over03_png",
+    "RadioButtons_selected_over04_png",
+    "RadioButtons_selected_over05_png",
+    "noise_wave_png",
+    "saw_wave_png",
+    "sine_wave_png",
+    "square_wave_png",
+    "triangle_wave_png",
+    "wifi_png",
+    "SourceDrop_png",
+    "DefaultDataSource_png",
+    "FileReaderIcon_png",
+    "IntanIcon_png",
+    "muteoff_png",
+    "muteon_png",
+    "MergerA01_png",
+    "MergerA02_png",
+    "MergerB01_png",
+    "MergerB02_png",
+    "PipelineA01_png",
+    "PipelineA02_png",
+    "PipelineB01_png",
+    "PipelineB02_png"
+};
+
 }
diff --git a/JuceLibraryCode/BinaryData.h b/JuceLibraryCode/BinaryData.h
index b6c82ef55a1f7e065b1adbaf8a6daabcee92673a..287561eccbf5ff6f884f85a7dfe9f7fa63dc1ce7 100644
--- a/JuceLibraryCode/BinaryData.h
+++ b/JuceLibraryCode/BinaryData.h
@@ -4,6 +4,9 @@
 
 */
 
+#ifndef BINARYDATA_H_21121582_INCLUDED
+#define BINARYDATA_H_21121582_INCLUDED
+
 namespace BinaryData
 {
     extern const char*   cpmonoblackserialized;
@@ -189,10 +192,15 @@ namespace BinaryData
     extern const char*   PipelineB02_png;
     const int            PipelineB02_pngSize = 5390;
 
-    extern const char*   FPGAOutputEditor_cpp;
-    const int            FPGAOutputEditor_cppSize = 2213;
+    // Points to the start of a list of resource names.
+    extern const char* namedResourceList[];
+
+    // Number of elements in the namedResourceList array.
+    const int namedResourceListSize = 61;
 
     // If you provide the name of one of the binary resource variables above, this function will
     // return the corresponding data and its size (or a null pointer if the name isn't found).
     const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes) throw();
 }
+
+#endif
diff --git a/JuceLibraryCode/JuceHeader.h b/JuceLibraryCode/JuceHeader.h
index d485ec655040dde16c984a9d2e4653b0de7a962b..617c29dff5a689fb338598cf7b3ede9ba3fce126 100644
--- a/JuceLibraryCode/JuceHeader.h
+++ b/JuceLibraryCode/JuceHeader.h
@@ -39,8 +39,8 @@
 namespace ProjectInfo
 {
     const char* const  projectName    = "open-ephys";
-    const char* const  versionString  = "0.3.1";
-    const int          versionNumber  = 0x301;
+    const char* const  versionString  = "0.3.2";
+    const int          versionNumber  = 0x302;
 }
 
 #endif   // __APPHEADERFILE_YNSYIRR__
diff --git a/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp b/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioDataConverters.h b/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioDataConverters.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp b/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h b/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp b/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h b/JuceLibraryCode/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/effects/juce_Decibels.h b/JuceLibraryCode/modules/juce_audio_basics/effects/juce_Decibels.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/effects/juce_IIRFilter.cpp b/JuceLibraryCode/modules/juce_audio_basics/effects/juce_IIRFilter.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/effects/juce_IIRFilter.h b/JuceLibraryCode/modules/juce_audio_basics/effects/juce_IIRFilter.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp b/JuceLibraryCode/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.h b/JuceLibraryCode/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/effects/juce_Reverb.h b/JuceLibraryCode/modules/juce_audio_basics/effects/juce_Reverb.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/juce_audio_basics.cpp b/JuceLibraryCode/modules/juce_audio_basics/juce_audio_basics.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/juce_audio_basics.h b/JuceLibraryCode/modules/juce_audio_basics/juce_audio_basics.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/juce_audio_basics.mm b/JuceLibraryCode/modules/juce_audio_basics/juce_audio_basics.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/juce_module_info b/JuceLibraryCode/modules/juce_audio_basics/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp b/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiBuffer.h b/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiBuffer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiFile.cpp b/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiFile.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiFile.h b/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiFile.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp b/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiKeyboardState.h b/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiKeyboardState.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessage.cpp b/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessage.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessage.h b/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessage.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp b/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h b/JuceLibraryCode/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_AudioSource.h b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_AudioSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_BufferingAudioSource.h b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_BufferingAudioSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_MixerAudioSource.h b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_MixerAudioSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_PositionableAudioSource.h b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_PositionableAudioSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ReverbAudioSource.h b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ReverbAudioSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h b/JuceLibraryCode/modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp b/JuceLibraryCode/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h b/JuceLibraryCode/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h b/JuceLibraryCode/modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp b/JuceLibraryCode/modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h b/JuceLibraryCode/modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp b/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h b/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp b/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODevice.h b/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODevice.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp b/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h b/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h b/JuceLibraryCode/modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.cpp b/JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.h b/JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.mm b/JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/juce_module_info b/JuceLibraryCode/modules/juce_audio_devices/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiInput.h b/JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiInput.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp b/JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h b/JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp b/JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiOutput.h b/JuceLibraryCode/modules/juce_audio_devices/midi_io/juce_MidiOutput.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h b/JuceLibraryCode/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_android_Audio.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_android_Audio.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_android_Midi.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_android_Midi.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_android_OpenSL.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_android_OpenSL.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_ios_Audio.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_ios_Audio.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_ALSA.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_ALSA.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_Midi.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_linux_Midi.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm b/JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm b/JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_ASIO.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_ASIO.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_DirectSound.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_DirectSound.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_Midi.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_Midi.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp b/JuceLibraryCode/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp b/JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h b/JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp b/JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioTransportSource.h b/JuceLibraryCode/modules/juce_audio_devices/sources/juce_AudioTransportSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/Flac Licence.txt b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/Flac Licence.txt
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/all.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/all.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/alloc.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/alloc.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/assert.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/assert.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/callback.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/callback.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/compat.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/compat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/endswap.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/endswap.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/export.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/export.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/format.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/format.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/bitmath.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/bitmath.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/bitreader.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/bitreader.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/bitwriter.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/bitwriter.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/crc.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/crc.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/fixed.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/fixed.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/float.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/float.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/format.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/format.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/all.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/all.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitmath.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitmath.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitwriter.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitwriter.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/crc.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/crc.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/fixed.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/fixed.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/float.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/float.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/format.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/format.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/lpc.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/lpc.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/md5.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/md5.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/metadata.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/metadata.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder_framing.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder_framing.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/window.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/window.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/all.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/all.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_decoder.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_decoder.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_encoder.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_encoder.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/lpc_flac.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/lpc_flac.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/md5.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/md5.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/memory.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/memory.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/stream_decoder.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/stream_decoder.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder_framing.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder_framing.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/window_flac.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/libFLAC/window_flac.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/metadata.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/metadata.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/ordinals.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/ordinals.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/stream_decoder.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/stream_decoder.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/stream_encoder.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/flac/stream_encoder.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.cpp b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WavAudioFormat.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WavAudioFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/Ogg Vorbis Licence.txt b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/Ogg Vorbis Licence.txt
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/bitwise.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/bitwise.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/codec.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/codec.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/config_types.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/config_types.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/framing.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/framing.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/AUTHORS b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/AUTHORS
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/CHANGES b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/CHANGES
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/COPYING b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/COPYING
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/README b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/README
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/analysis.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/analysis.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/backends.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/backends.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/block.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/block.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_51.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_51.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_stereo.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_stereo.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/floor/floor_books.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/floor/floor_books.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/uncoupled/res_books_uncoupled.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/uncoupled/res_books_uncoupled.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codec_internal.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codec_internal.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor0.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor0.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor1.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor1.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/highlevel.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/highlevel.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/info.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/info.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup_data.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup_data.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mapping0.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mapping0.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/masking.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/masking.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/misc.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/misc.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/floor_all.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/floor_all.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_11.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_11.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_16.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_16.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_8.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_8.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_16.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_16.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44p51.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44p51.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44u.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44u.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_11.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_11.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_16.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_16.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_22.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_22.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_32.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_32.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44p51.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44p51.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_8.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_8.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/os.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/os.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/res0.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/res0.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/sharedbook.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/sharedbook.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/synthesis.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/synthesis.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.c b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/ogg.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/ogg.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/os_types.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/os_types.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/vorbisenc.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/vorbisenc.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/vorbisfile.h b/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis/vorbisfile.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormat.cpp b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormat.h b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatManager.cpp b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatManager.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatManager.h b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatManager.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReader.h b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReader.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatWriter.h b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioFormatWriter.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioSubsectionReader.h b/JuceLibraryCode/modules/juce_audio_formats/format/juce_AudioSubsectionReader.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp b/JuceLibraryCode/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h b/JuceLibraryCode/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/format/juce_MemoryMappedAudioFormatReader.h b/JuceLibraryCode/modules/juce_audio_formats/format/juce_MemoryMappedAudioFormatReader.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/juce_audio_formats.cpp b/JuceLibraryCode/modules/juce_audio_formats/juce_audio_formats.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/juce_audio_formats.h b/JuceLibraryCode/modules/juce_audio_formats/juce_audio_formats.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/juce_audio_formats.mm b/JuceLibraryCode/modules/juce_audio_formats/juce_audio_formats.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/juce_module_info b/JuceLibraryCode/modules/juce_audio_formats/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/sampler/juce_Sampler.cpp b/JuceLibraryCode/modules/juce_audio_formats/sampler/juce_Sampler.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_formats/sampler/juce_Sampler.h b/JuceLibraryCode/modules/juce_audio_formats/sampler/juce_Sampler.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp b/JuceLibraryCode/modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format/juce_AudioPluginFormat.h b/JuceLibraryCode/modules/juce_audio_processors/format/juce_AudioPluginFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp b/JuceLibraryCode/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h b/JuceLibraryCode/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VST3Common.h b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VST3Common.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VST3Headers.h b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VST3Headers.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h b/JuceLibraryCode/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/juce_audio_processors.cpp b/JuceLibraryCode/modules/juce_audio_processors/juce_audio_processors.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/juce_audio_processors.h b/JuceLibraryCode/modules/juce_audio_processors/juce_audio_processors.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/juce_audio_processors.mm b/JuceLibraryCode/modules/juce_audio_processors/juce_audio_processors.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/juce_module_info b/JuceLibraryCode/modules/juce_audio_processors/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioPlayHead.h b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioPlayHead.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioPluginInstance.h b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioPluginInstance.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessor.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorListener.h b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_AudioProcessorListener.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_PluginDescription.cpp b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_PluginDescription.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/processors/juce_PluginDescription.h b/JuceLibraryCode/modules/juce_audio_processors/processors/juce_PluginDescription.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp b/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_KnownPluginList.h b/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_KnownPluginList.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp b/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h b/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp b/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginListComponent.h b/JuceLibraryCode/modules/juce_audio_processors/scanning/juce_PluginListComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp b/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h b/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnail.cpp b/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnail.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnail.h b/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnail.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnailBase.h b/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnailBase.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp b/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h b/JuceLibraryCode/modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp b/JuceLibraryCode/modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h b/JuceLibraryCode/modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/juce_audio_utils.cpp b/JuceLibraryCode/modules/juce_audio_utils/juce_audio_utils.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/juce_audio_utils.h b/JuceLibraryCode/modules/juce_audio_utils/juce_audio_utils.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/juce_audio_utils.mm b/JuceLibraryCode/modules/juce_audio_utils/juce_audio_utils.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/juce_module_info b/JuceLibraryCode/modules/juce_audio_utils/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp b/JuceLibraryCode/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h b/JuceLibraryCode/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_AbstractFifo.cpp b/JuceLibraryCode/modules/juce_core/containers/juce_AbstractFifo.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_AbstractFifo.h b/JuceLibraryCode/modules/juce_core/containers/juce_AbstractFifo.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_Array.h b/JuceLibraryCode/modules/juce_core/containers/juce_Array.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_ArrayAllocationBase.h b/JuceLibraryCode/modules/juce_core/containers/juce_ArrayAllocationBase.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_DynamicObject.cpp b/JuceLibraryCode/modules/juce_core/containers/juce_DynamicObject.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_DynamicObject.h b/JuceLibraryCode/modules/juce_core/containers/juce_DynamicObject.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_ElementComparator.h b/JuceLibraryCode/modules/juce_core/containers/juce_ElementComparator.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_HashMap.h b/JuceLibraryCode/modules/juce_core/containers/juce_HashMap.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_LinkedListPointer.h b/JuceLibraryCode/modules/juce_core/containers/juce_LinkedListPointer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_NamedValueSet.cpp b/JuceLibraryCode/modules/juce_core/containers/juce_NamedValueSet.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_NamedValueSet.h b/JuceLibraryCode/modules/juce_core/containers/juce_NamedValueSet.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_OwnedArray.h b/JuceLibraryCode/modules/juce_core/containers/juce_OwnedArray.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_PropertySet.cpp b/JuceLibraryCode/modules/juce_core/containers/juce_PropertySet.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_PropertySet.h b/JuceLibraryCode/modules/juce_core/containers/juce_PropertySet.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_ReferenceCountedArray.h b/JuceLibraryCode/modules/juce_core/containers/juce_ReferenceCountedArray.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_ScopedValueSetter.h b/JuceLibraryCode/modules/juce_core/containers/juce_ScopedValueSetter.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_SortedSet.h b/JuceLibraryCode/modules/juce_core/containers/juce_SortedSet.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_SparseSet.h b/JuceLibraryCode/modules/juce_core/containers/juce_SparseSet.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_Variant.cpp b/JuceLibraryCode/modules/juce_core/containers/juce_Variant.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/containers/juce_Variant.h b/JuceLibraryCode/modules/juce_core/containers/juce_Variant.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_DirectoryIterator.cpp b/JuceLibraryCode/modules/juce_core/files/juce_DirectoryIterator.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_DirectoryIterator.h b/JuceLibraryCode/modules/juce_core/files/juce_DirectoryIterator.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_File.cpp b/JuceLibraryCode/modules/juce_core/files/juce_File.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_File.h b/JuceLibraryCode/modules/juce_core/files/juce_File.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_FileFilter.cpp b/JuceLibraryCode/modules/juce_core/files/juce_FileFilter.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_FileFilter.h b/JuceLibraryCode/modules/juce_core/files/juce_FileFilter.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_FileInputStream.cpp b/JuceLibraryCode/modules/juce_core/files/juce_FileInputStream.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_FileInputStream.h b/JuceLibraryCode/modules/juce_core/files/juce_FileInputStream.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_FileOutputStream.cpp b/JuceLibraryCode/modules/juce_core/files/juce_FileOutputStream.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_FileOutputStream.h b/JuceLibraryCode/modules/juce_core/files/juce_FileOutputStream.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_FileSearchPath.cpp b/JuceLibraryCode/modules/juce_core/files/juce_FileSearchPath.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_FileSearchPath.h b/JuceLibraryCode/modules/juce_core/files/juce_FileSearchPath.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_MemoryMappedFile.h b/JuceLibraryCode/modules/juce_core/files/juce_MemoryMappedFile.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_TemporaryFile.cpp b/JuceLibraryCode/modules/juce_core/files/juce_TemporaryFile.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_TemporaryFile.h b/JuceLibraryCode/modules/juce_core/files/juce_TemporaryFile.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.cpp b/JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.h b/JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/javascript/juce_JSON.cpp b/JuceLibraryCode/modules/juce_core/javascript/juce_JSON.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/javascript/juce_JSON.h b/JuceLibraryCode/modules/juce_core/javascript/juce_JSON.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.cpp b/JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.h b/JuceLibraryCode/modules/juce_core/javascript/juce_Javascript.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/json/juce_JSON.cpp b/JuceLibraryCode/modules/juce_core/json/juce_JSON.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/json/juce_JSON.h b/JuceLibraryCode/modules/juce_core/json/juce_JSON.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/juce_core.cpp b/JuceLibraryCode/modules/juce_core/juce_core.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/juce_core.h b/JuceLibraryCode/modules/juce_core/juce_core.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/juce_core.mm b/JuceLibraryCode/modules/juce_core/juce_core.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/juce_module_info b/JuceLibraryCode/modules/juce_core/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/logging/juce_FileLogger.cpp b/JuceLibraryCode/modules/juce_core/logging/juce_FileLogger.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/logging/juce_FileLogger.h b/JuceLibraryCode/modules/juce_core/logging/juce_FileLogger.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/logging/juce_Logger.cpp b/JuceLibraryCode/modules/juce_core/logging/juce_Logger.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/logging/juce_Logger.h b/JuceLibraryCode/modules/juce_core/logging/juce_Logger.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/maths/juce_BigInteger.cpp b/JuceLibraryCode/modules/juce_core/maths/juce_BigInteger.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/maths/juce_BigInteger.h b/JuceLibraryCode/modules/juce_core/maths/juce_BigInteger.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/maths/juce_Expression.cpp b/JuceLibraryCode/modules/juce_core/maths/juce_Expression.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/maths/juce_Expression.h b/JuceLibraryCode/modules/juce_core/maths/juce_Expression.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/maths/juce_MathsFunctions.h b/JuceLibraryCode/modules/juce_core/maths/juce_MathsFunctions.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/maths/juce_Random.cpp b/JuceLibraryCode/modules/juce_core/maths/juce_Random.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/maths/juce_Random.h b/JuceLibraryCode/modules/juce_core/maths/juce_Random.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/maths/juce_Range.h b/JuceLibraryCode/modules/juce_core/maths/juce_Range.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_Atomic.h b/JuceLibraryCode/modules/juce_core/memory/juce_Atomic.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_ByteOrder.h b/JuceLibraryCode/modules/juce_core/memory/juce_ByteOrder.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_ContainerDeletePolicy.h b/JuceLibraryCode/modules/juce_core/memory/juce_ContainerDeletePolicy.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_HeapBlock.h b/JuceLibraryCode/modules/juce_core/memory/juce_HeapBlock.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_LeakedObjectDetector.h b/JuceLibraryCode/modules/juce_core/memory/juce_LeakedObjectDetector.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_Memory.h b/JuceLibraryCode/modules/juce_core/memory/juce_Memory.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_MemoryBlock.cpp b/JuceLibraryCode/modules/juce_core/memory/juce_MemoryBlock.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_MemoryBlock.h b/JuceLibraryCode/modules/juce_core/memory/juce_MemoryBlock.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_OptionalScopedPointer.h b/JuceLibraryCode/modules/juce_core/memory/juce_OptionalScopedPointer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_ReferenceCountedObject.h b/JuceLibraryCode/modules/juce_core/memory/juce_ReferenceCountedObject.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_ScopedPointer.h b/JuceLibraryCode/modules/juce_core/memory/juce_ScopedPointer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_SharedResourcePointer.h b/JuceLibraryCode/modules/juce_core/memory/juce_SharedResourcePointer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_Singleton.h b/JuceLibraryCode/modules/juce_core/memory/juce_Singleton.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/memory/juce_WeakReference.h b/JuceLibraryCode/modules/juce_core/memory/juce_WeakReference.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/misc/juce_Result.cpp b/JuceLibraryCode/modules/juce_core/misc/juce_Result.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/misc/juce_Result.h b/JuceLibraryCode/modules/juce_core/misc/juce_Result.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/misc/juce_Uuid.cpp b/JuceLibraryCode/modules/juce_core/misc/juce_Uuid.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/misc/juce_Uuid.h b/JuceLibraryCode/modules/juce_core/misc/juce_Uuid.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/misc/juce_WindowsRegistry.h b/JuceLibraryCode/modules/juce_core/misc/juce_WindowsRegistry.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/java/JuceAppActivity.java b/JuceLibraryCode/modules/juce_core/native/java/JuceAppActivity.java
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_BasicNativeHeaders.h b/JuceLibraryCode/modules/juce_core/native/juce_BasicNativeHeaders.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_android_Files.cpp b/JuceLibraryCode/modules/juce_core/native/juce_android_Files.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_android_JNIHelpers.h b/JuceLibraryCode/modules/juce_core/native/juce_android_JNIHelpers.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_android_Misc.cpp b/JuceLibraryCode/modules/juce_core/native/juce_android_Misc.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_android_Network.cpp b/JuceLibraryCode/modules/juce_core/native/juce_android_Network.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_android_SystemStats.cpp b/JuceLibraryCode/modules/juce_core/native/juce_android_SystemStats.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_android_Threads.cpp b/JuceLibraryCode/modules/juce_core/native/juce_android_Threads.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_linux_CommonFile.cpp b/JuceLibraryCode/modules/juce_core/native/juce_linux_CommonFile.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_linux_Files.cpp b/JuceLibraryCode/modules/juce_core/native/juce_linux_Files.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_linux_Network.cpp b/JuceLibraryCode/modules/juce_core/native/juce_linux_Network.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_linux_SystemStats.cpp b/JuceLibraryCode/modules/juce_core/native/juce_linux_SystemStats.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_linux_Threads.cpp b/JuceLibraryCode/modules/juce_core/native/juce_linux_Threads.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_mac_Files.mm b/JuceLibraryCode/modules/juce_core/native/juce_mac_Files.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_mac_Network.mm b/JuceLibraryCode/modules/juce_core/native/juce_mac_Network.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_mac_Strings.mm b/JuceLibraryCode/modules/juce_core/native/juce_mac_Strings.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_mac_SystemStats.mm b/JuceLibraryCode/modules/juce_core/native/juce_mac_SystemStats.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_mac_Threads.mm b/JuceLibraryCode/modules/juce_core/native/juce_mac_Threads.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_osx_ObjCHelpers.h b/JuceLibraryCode/modules/juce_core/native/juce_osx_ObjCHelpers.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_posix_NamedPipe.cpp b/JuceLibraryCode/modules/juce_core/native/juce_posix_NamedPipe.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_posix_SharedCode.h b/JuceLibraryCode/modules/juce_core/native/juce_posix_SharedCode.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_win32_ComSmartPtr.h b/JuceLibraryCode/modules/juce_core/native/juce_win32_ComSmartPtr.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_win32_Files.cpp b/JuceLibraryCode/modules/juce_core/native/juce_win32_Files.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_win32_Network.cpp b/JuceLibraryCode/modules/juce_core/native/juce_win32_Network.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_win32_Registry.cpp b/JuceLibraryCode/modules/juce_core/native/juce_win32_Registry.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_win32_SystemStats.cpp b/JuceLibraryCode/modules/juce_core/native/juce_win32_SystemStats.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/native/juce_win32_Threads.cpp b/JuceLibraryCode/modules/juce_core/native/juce_win32_Threads.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/network/juce_IPAddress.cpp b/JuceLibraryCode/modules/juce_core/network/juce_IPAddress.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/network/juce_IPAddress.h b/JuceLibraryCode/modules/juce_core/network/juce_IPAddress.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/network/juce_MACAddress.cpp b/JuceLibraryCode/modules/juce_core/network/juce_MACAddress.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/network/juce_MACAddress.h b/JuceLibraryCode/modules/juce_core/network/juce_MACAddress.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/network/juce_NamedPipe.cpp b/JuceLibraryCode/modules/juce_core/network/juce_NamedPipe.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/network/juce_NamedPipe.h b/JuceLibraryCode/modules/juce_core/network/juce_NamedPipe.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/network/juce_Socket.cpp b/JuceLibraryCode/modules/juce_core/network/juce_Socket.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/network/juce_Socket.h b/JuceLibraryCode/modules/juce_core/network/juce_Socket.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/network/juce_URL.cpp b/JuceLibraryCode/modules/juce_core/network/juce_URL.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/network/juce_URL.h b/JuceLibraryCode/modules/juce_core/network/juce_URL.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.cpp b/JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.h b/JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_FileInputSource.cpp b/JuceLibraryCode/modules/juce_core/streams/juce_FileInputSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_FileInputSource.h b/JuceLibraryCode/modules/juce_core/streams/juce_FileInputSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_InputSource.h b/JuceLibraryCode/modules/juce_core/streams/juce_InputSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_InputStream.cpp b/JuceLibraryCode/modules/juce_core/streams/juce_InputStream.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_InputStream.h b/JuceLibraryCode/modules/juce_core/streams/juce_InputStream.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_MemoryInputStream.cpp b/JuceLibraryCode/modules/juce_core/streams/juce_MemoryInputStream.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_MemoryInputStream.h b/JuceLibraryCode/modules/juce_core/streams/juce_MemoryInputStream.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_MemoryOutputStream.cpp b/JuceLibraryCode/modules/juce_core/streams/juce_MemoryOutputStream.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_MemoryOutputStream.h b/JuceLibraryCode/modules/juce_core/streams/juce_MemoryOutputStream.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_OutputStream.cpp b/JuceLibraryCode/modules/juce_core/streams/juce_OutputStream.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_OutputStream.h b/JuceLibraryCode/modules/juce_core/streams/juce_OutputStream.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_SubregionStream.cpp b/JuceLibraryCode/modules/juce_core/streams/juce_SubregionStream.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/streams/juce_SubregionStream.h b/JuceLibraryCode/modules/juce_core/streams/juce_SubregionStream.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/system/juce_PlatformDefs.h b/JuceLibraryCode/modules/juce_core/system/juce_PlatformDefs.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/system/juce_StandardHeader.h b/JuceLibraryCode/modules/juce_core/system/juce_StandardHeader.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/system/juce_SystemStats.cpp b/JuceLibraryCode/modules/juce_core/system/juce_SystemStats.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/system/juce_SystemStats.h b/JuceLibraryCode/modules/juce_core/system/juce_SystemStats.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/system/juce_TargetPlatform.h b/JuceLibraryCode/modules/juce_core/system/juce_TargetPlatform.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_CharPointer_ASCII.h b/JuceLibraryCode/modules/juce_core/text/juce_CharPointer_ASCII.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF16.h b/JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF16.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF32.h b/JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF32.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF8.h b/JuceLibraryCode/modules/juce_core/text/juce_CharPointer_UTF8.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_CharacterFunctions.cpp b/JuceLibraryCode/modules/juce_core/text/juce_CharacterFunctions.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_CharacterFunctions.h b/JuceLibraryCode/modules/juce_core/text/juce_CharacterFunctions.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_Identifier.cpp b/JuceLibraryCode/modules/juce_core/text/juce_Identifier.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_Identifier.h b/JuceLibraryCode/modules/juce_core/text/juce_Identifier.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.cpp b/JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.h b/JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_NewLine.h b/JuceLibraryCode/modules/juce_core/text/juce_NewLine.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_String.cpp b/JuceLibraryCode/modules/juce_core/text/juce_String.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_String.h b/JuceLibraryCode/modules/juce_core/text/juce_String.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_StringArray.cpp b/JuceLibraryCode/modules/juce_core/text/juce_StringArray.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_StringArray.h b/JuceLibraryCode/modules/juce_core/text/juce_StringArray.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_StringPairArray.cpp b/JuceLibraryCode/modules/juce_core/text/juce_StringPairArray.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_StringPairArray.h b/JuceLibraryCode/modules/juce_core/text/juce_StringPairArray.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_StringPool.cpp b/JuceLibraryCode/modules/juce_core/text/juce_StringPool.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_StringPool.h b/JuceLibraryCode/modules/juce_core/text/juce_StringPool.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_StringRef.h b/JuceLibraryCode/modules/juce_core/text/juce_StringRef.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_TextDiff.cpp b/JuceLibraryCode/modules/juce_core/text/juce_TextDiff.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/text/juce_TextDiff.h b/JuceLibraryCode/modules/juce_core/text/juce_TextDiff.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_ChildProcess.cpp b/JuceLibraryCode/modules/juce_core/threads/juce_ChildProcess.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_ChildProcess.h b/JuceLibraryCode/modules/juce_core/threads/juce_ChildProcess.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_CriticalSection.h b/JuceLibraryCode/modules/juce_core/threads/juce_CriticalSection.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_DynamicLibrary.h b/JuceLibraryCode/modules/juce_core/threads/juce_DynamicLibrary.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_HighResolutionTimer.cpp b/JuceLibraryCode/modules/juce_core/threads/juce_HighResolutionTimer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_HighResolutionTimer.h b/JuceLibraryCode/modules/juce_core/threads/juce_HighResolutionTimer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_InterProcessLock.h b/JuceLibraryCode/modules/juce_core/threads/juce_InterProcessLock.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_Process.h b/JuceLibraryCode/modules/juce_core/threads/juce_Process.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_ReadWriteLock.cpp b/JuceLibraryCode/modules/juce_core/threads/juce_ReadWriteLock.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_ReadWriteLock.h b/JuceLibraryCode/modules/juce_core/threads/juce_ReadWriteLock.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_ScopedLock.h b/JuceLibraryCode/modules/juce_core/threads/juce_ScopedLock.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_ScopedReadLock.h b/JuceLibraryCode/modules/juce_core/threads/juce_ScopedReadLock.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_ScopedWriteLock.h b/JuceLibraryCode/modules/juce_core/threads/juce_ScopedWriteLock.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_SpinLock.h b/JuceLibraryCode/modules/juce_core/threads/juce_SpinLock.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_Thread.cpp b/JuceLibraryCode/modules/juce_core/threads/juce_Thread.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_Thread.h b/JuceLibraryCode/modules/juce_core/threads/juce_Thread.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_ThreadLocalValue.h b/JuceLibraryCode/modules/juce_core/threads/juce_ThreadLocalValue.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_ThreadPool.cpp b/JuceLibraryCode/modules/juce_core/threads/juce_ThreadPool.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_ThreadPool.h b/JuceLibraryCode/modules/juce_core/threads/juce_ThreadPool.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_TimeSliceThread.cpp b/JuceLibraryCode/modules/juce_core/threads/juce_TimeSliceThread.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_TimeSliceThread.h b/JuceLibraryCode/modules/juce_core/threads/juce_TimeSliceThread.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/threads/juce_WaitableEvent.h b/JuceLibraryCode/modules/juce_core/threads/juce_WaitableEvent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/time/juce_PerformanceCounter.cpp b/JuceLibraryCode/modules/juce_core/time/juce_PerformanceCounter.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/time/juce_PerformanceCounter.h b/JuceLibraryCode/modules/juce_core/time/juce_PerformanceCounter.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.cpp b/JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.h b/JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/time/juce_Time.cpp b/JuceLibraryCode/modules/juce_core/time/juce_Time.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/time/juce_Time.h b/JuceLibraryCode/modules/juce_core/time/juce_Time.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/unit_tests/juce_UnitTest.cpp b/JuceLibraryCode/modules/juce_core/unit_tests/juce_UnitTest.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/unit_tests/juce_UnitTest.h b/JuceLibraryCode/modules/juce_core/unit_tests/juce_UnitTest.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/xml/juce_XmlDocument.cpp b/JuceLibraryCode/modules/juce_core/xml/juce_XmlDocument.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/xml/juce_XmlDocument.h b/JuceLibraryCode/modules/juce_core/xml/juce_XmlDocument.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.cpp b/JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.h b/JuceLibraryCode/modules/juce_core/xml/juce_XmlElement.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp b/JuceLibraryCode/modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/juce_GZIPCompressorOutputStream.h b/JuceLibraryCode/modules/juce_core/zip/juce_GZIPCompressorOutputStream.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp b/JuceLibraryCode/modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/juce_GZIPDecompressorInputStream.h b/JuceLibraryCode/modules/juce_core/zip/juce_GZIPDecompressorInputStream.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/juce_ZipFile.cpp b/JuceLibraryCode/modules/juce_core/zip/juce_ZipFile.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/juce_ZipFile.h b/JuceLibraryCode/modules/juce_core/zip/juce_ZipFile.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/README b/JuceLibraryCode/modules/juce_core/zip/zlib/README
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/adler32.c b/JuceLibraryCode/modules/juce_core/zip/zlib/adler32.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/compress.c b/JuceLibraryCode/modules/juce_core/zip/zlib/compress.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/crc32.c b/JuceLibraryCode/modules/juce_core/zip/zlib/crc32.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/crc32.h b/JuceLibraryCode/modules/juce_core/zip/zlib/crc32.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/deflate.c b/JuceLibraryCode/modules/juce_core/zip/zlib/deflate.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/deflate.h b/JuceLibraryCode/modules/juce_core/zip/zlib/deflate.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/infback.c b/JuceLibraryCode/modules/juce_core/zip/zlib/infback.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/inffast.c b/JuceLibraryCode/modules/juce_core/zip/zlib/inffast.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/inffast.h b/JuceLibraryCode/modules/juce_core/zip/zlib/inffast.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/inffixed.h b/JuceLibraryCode/modules/juce_core/zip/zlib/inffixed.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/inflate.c b/JuceLibraryCode/modules/juce_core/zip/zlib/inflate.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/inflate.h b/JuceLibraryCode/modules/juce_core/zip/zlib/inflate.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/inftrees.c b/JuceLibraryCode/modules/juce_core/zip/zlib/inftrees.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/inftrees.h b/JuceLibraryCode/modules/juce_core/zip/zlib/inftrees.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/trees.c b/JuceLibraryCode/modules/juce_core/zip/zlib/trees.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/trees.h b/JuceLibraryCode/modules/juce_core/zip/zlib/trees.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/uncompr.c b/JuceLibraryCode/modules/juce_core/zip/zlib/uncompr.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/zconf.h b/JuceLibraryCode/modules/juce_core/zip/zlib/zconf.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/zconf.in.h b/JuceLibraryCode/modules/juce_core/zip/zlib/zconf.in.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/zlib.h b/JuceLibraryCode/modules/juce_core/zip/zlib/zlib.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/zutil.c b/JuceLibraryCode/modules/juce_core/zip/zlib/zutil.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_core/zip/zlib/zutil.h b/JuceLibraryCode/modules/juce_core/zip/zlib/zutil.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/encryption/juce_BlowFish.cpp b/JuceLibraryCode/modules/juce_cryptography/encryption/juce_BlowFish.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/encryption/juce_BlowFish.h b/JuceLibraryCode/modules/juce_cryptography/encryption/juce_BlowFish.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/encryption/juce_Primes.cpp b/JuceLibraryCode/modules/juce_cryptography/encryption/juce_Primes.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/encryption/juce_Primes.h b/JuceLibraryCode/modules/juce_cryptography/encryption/juce_Primes.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/encryption/juce_RSAKey.cpp b/JuceLibraryCode/modules/juce_cryptography/encryption/juce_RSAKey.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/encryption/juce_RSAKey.h b/JuceLibraryCode/modules/juce_cryptography/encryption/juce_RSAKey.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/hashing/juce_MD5.cpp b/JuceLibraryCode/modules/juce_cryptography/hashing/juce_MD5.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/hashing/juce_MD5.h b/JuceLibraryCode/modules/juce_cryptography/hashing/juce_MD5.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/hashing/juce_SHA256.cpp b/JuceLibraryCode/modules/juce_cryptography/hashing/juce_SHA256.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/hashing/juce_SHA256.h b/JuceLibraryCode/modules/juce_cryptography/hashing/juce_SHA256.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/juce_cryptography.cpp b/JuceLibraryCode/modules/juce_cryptography/juce_cryptography.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/juce_cryptography.h b/JuceLibraryCode/modules/juce_cryptography/juce_cryptography.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/juce_cryptography.mm b/JuceLibraryCode/modules/juce_cryptography/juce_cryptography.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_cryptography/juce_module_info b/JuceLibraryCode/modules/juce_cryptography/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp b/JuceLibraryCode/modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/app_properties/juce_ApplicationProperties.h b/JuceLibraryCode/modules/juce_data_structures/app_properties/juce_ApplicationProperties.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp b/JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.h b/JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/juce_data_structures.cpp b/JuceLibraryCode/modules/juce_data_structures/juce_data_structures.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/juce_data_structures.h b/JuceLibraryCode/modules/juce_data_structures/juce_data_structures.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/juce_data_structures.mm b/JuceLibraryCode/modules/juce_data_structures/juce_data_structures.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/juce_module_info b/JuceLibraryCode/modules/juce_data_structures/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoManager.cpp b/JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoManager.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoManager.h b/JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoManager.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoableAction.h b/JuceLibraryCode/modules/juce_data_structures/undomanager/juce_UndoableAction.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/values/juce_Value.cpp b/JuceLibraryCode/modules/juce_data_structures/values/juce_Value.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/values/juce_Value.h b/JuceLibraryCode/modules/juce_data_structures/values/juce_Value.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTree.cpp b/JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTree.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTree.h b/JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTree.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp b/JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionBroadcaster.h b/JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionBroadcaster.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionListener.h b/JuceLibraryCode/modules/juce_events/broadcasters/juce_ActionListener.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/broadcasters/juce_AsyncUpdater.cpp b/JuceLibraryCode/modules/juce_events/broadcasters/juce_AsyncUpdater.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/broadcasters/juce_AsyncUpdater.h b/JuceLibraryCode/modules/juce_events/broadcasters/juce_AsyncUpdater.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp b/JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeBroadcaster.h b/JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeBroadcaster.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeListener.h b/JuceLibraryCode/modules/juce_events/broadcasters/juce_ChangeListener.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/broadcasters/juce_ListenerList.h b/JuceLibraryCode/modules/juce_events/broadcasters/juce_ListenerList.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp b/JuceLibraryCode/modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/interprocess/juce_ConnectedChildProcess.h b/JuceLibraryCode/modules/juce_events/interprocess/juce_ConnectedChildProcess.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnection.cpp b/JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnection.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnection.h b/JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnection.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp b/JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnectionServer.h b/JuceLibraryCode/modules/juce_events/interprocess/juce_InterprocessConnectionServer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/juce_events.cpp b/JuceLibraryCode/modules/juce_events/juce_events.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/juce_events.h b/JuceLibraryCode/modules/juce_events/juce_events.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/juce_events.mm b/JuceLibraryCode/modules/juce_events/juce_events.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/juce_module_info b/JuceLibraryCode/modules/juce_events/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_ApplicationBase.cpp b/JuceLibraryCode/modules/juce_events/messages/juce_ApplicationBase.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_ApplicationBase.h b/JuceLibraryCode/modules/juce_events/messages/juce_ApplicationBase.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_CallbackMessage.h b/JuceLibraryCode/modules/juce_events/messages/juce_CallbackMessage.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.cpp b/JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.h b/JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_Initialisation.h b/JuceLibraryCode/modules/juce_events/messages/juce_Initialisation.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_Message.h b/JuceLibraryCode/modules/juce_events/messages/juce_Message.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_MessageListener.cpp b/JuceLibraryCode/modules/juce_events/messages/juce_MessageListener.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_MessageListener.h b/JuceLibraryCode/modules/juce_events/messages/juce_MessageListener.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.cpp b/JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.h b/JuceLibraryCode/modules/juce_events/messages/juce_MessageManager.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/messages/juce_NotificationType.h b/JuceLibraryCode/modules/juce_events/messages/juce_NotificationType.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/native/juce_ScopedXLock.h b/JuceLibraryCode/modules/juce_events/native/juce_ScopedXLock.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/native/juce_android_Messaging.cpp b/JuceLibraryCode/modules/juce_events/native/juce_android_Messaging.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/native/juce_ios_MessageManager.mm b/JuceLibraryCode/modules/juce_events/native/juce_ios_MessageManager.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/native/juce_linux_Messaging.cpp b/JuceLibraryCode/modules/juce_events/native/juce_linux_Messaging.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/native/juce_mac_MessageManager.mm b/JuceLibraryCode/modules/juce_events/native/juce_mac_MessageManager.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/native/juce_osx_MessageQueue.h b/JuceLibraryCode/modules/juce_events/native/juce_osx_MessageQueue.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/native/juce_win32_HiddenMessageWindow.h b/JuceLibraryCode/modules/juce_events/native/juce_win32_HiddenMessageWindow.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/native/juce_win32_Messaging.cpp b/JuceLibraryCode/modules/juce_events/native/juce_win32_Messaging.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/timers/juce_MultiTimer.cpp b/JuceLibraryCode/modules/juce_events/timers/juce_MultiTimer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/timers/juce_MultiTimer.h b/JuceLibraryCode/modules/juce_events/timers/juce_MultiTimer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/timers/juce_Timer.cpp b/JuceLibraryCode/modules/juce_events/timers/juce_Timer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_events/timers/juce_Timer.h b/JuceLibraryCode/modules/juce_events/timers/juce_Timer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/colour/juce_Colour.cpp b/JuceLibraryCode/modules/juce_graphics/colour/juce_Colour.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/colour/juce_Colour.h b/JuceLibraryCode/modules/juce_graphics/colour/juce_Colour.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/colour/juce_ColourGradient.cpp b/JuceLibraryCode/modules/juce_graphics/colour/juce_ColourGradient.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/colour/juce_ColourGradient.h b/JuceLibraryCode/modules/juce_graphics/colour/juce_ColourGradient.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/colour/juce_Colours.cpp b/JuceLibraryCode/modules/juce_graphics/colour/juce_Colours.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/colour/juce_Colours.h b/JuceLibraryCode/modules/juce_graphics/colour/juce_Colours.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/colour/juce_FillType.cpp b/JuceLibraryCode/modules/juce_graphics/colour/juce_FillType.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/colour/juce_FillType.h b/JuceLibraryCode/modules/juce_graphics/colour/juce_FillType.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h b/JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/contexts/juce_GraphicsContext.cpp b/JuceLibraryCode/modules/juce_graphics/contexts/juce_GraphicsContext.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/contexts/juce_GraphicsContext.h b/JuceLibraryCode/modules/juce_graphics/contexts/juce_GraphicsContext.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h b/JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp b/JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h b/JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp b/JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h b/JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/effects/juce_DropShadowEffect.cpp b/JuceLibraryCode/modules/juce_graphics/effects/juce_DropShadowEffect.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/effects/juce_DropShadowEffect.h b/JuceLibraryCode/modules/juce_graphics/effects/juce_DropShadowEffect.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.cpp b/JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.h b/JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/effects/juce_ImageEffectFilter.h b/JuceLibraryCode/modules/juce_graphics/effects/juce_ImageEffectFilter.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_AttributedString.cpp b/JuceLibraryCode/modules/juce_graphics/fonts/juce_AttributedString.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_AttributedString.h b/JuceLibraryCode/modules/juce_graphics/fonts/juce_AttributedString.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_CustomTypeface.cpp b/JuceLibraryCode/modules/juce_graphics/fonts/juce_CustomTypeface.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_CustomTypeface.h b/JuceLibraryCode/modules/juce_graphics/fonts/juce_CustomTypeface.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_Font.cpp b/JuceLibraryCode/modules/juce_graphics/fonts/juce_Font.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_Font.h b/JuceLibraryCode/modules/juce_graphics/fonts/juce_Font.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_GlyphArrangement.cpp b/JuceLibraryCode/modules/juce_graphics/fonts/juce_GlyphArrangement.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_GlyphArrangement.h b/JuceLibraryCode/modules/juce_graphics/fonts/juce_GlyphArrangement.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_TextLayout.cpp b/JuceLibraryCode/modules/juce_graphics/fonts/juce_TextLayout.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_TextLayout.h b/JuceLibraryCode/modules/juce_graphics/fonts/juce_TextLayout.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_Typeface.cpp b/JuceLibraryCode/modules/juce_graphics/fonts/juce_Typeface.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/fonts/juce_Typeface.h b/JuceLibraryCode/modules/juce_graphics/fonts/juce_Typeface.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_AffineTransform.cpp b/JuceLibraryCode/modules/juce_graphics/geometry/juce_AffineTransform.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_AffineTransform.h b/JuceLibraryCode/modules/juce_graphics/geometry/juce_AffineTransform.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_BorderSize.h b/JuceLibraryCode/modules/juce_graphics/geometry/juce_BorderSize.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_EdgeTable.cpp b/JuceLibraryCode/modules/juce_graphics/geometry/juce_EdgeTable.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_EdgeTable.h b/JuceLibraryCode/modules/juce_graphics/geometry/juce_EdgeTable.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_Line.h b/JuceLibraryCode/modules/juce_graphics/geometry/juce_Line.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_Path.cpp b/JuceLibraryCode/modules/juce_graphics/geometry/juce_Path.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_Path.h b/JuceLibraryCode/modules/juce_graphics/geometry/juce_Path.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_PathIterator.cpp b/JuceLibraryCode/modules/juce_graphics/geometry/juce_PathIterator.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_PathIterator.h b/JuceLibraryCode/modules/juce_graphics/geometry/juce_PathIterator.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_PathStrokeType.cpp b/JuceLibraryCode/modules/juce_graphics/geometry/juce_PathStrokeType.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_PathStrokeType.h b/JuceLibraryCode/modules/juce_graphics/geometry/juce_PathStrokeType.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_Point.h b/JuceLibraryCode/modules/juce_graphics/geometry/juce_Point.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_Rectangle.h b/JuceLibraryCode/modules/juce_graphics/geometry/juce_Rectangle.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_RectangleList.cpp b/JuceLibraryCode/modules/juce_graphics/geometry/juce_RectangleList.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/geometry/juce_RectangleList.h b/JuceLibraryCode/modules/juce_graphics/geometry/juce_RectangleList.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/README b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/README
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/cderror.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/cderror.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/changes to libjpeg for JUCE.txt b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/changes to libjpeg for JUCE.txt
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcapimin.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcapimin.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcapistd.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcapistd.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jccoefct.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jccoefct.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jccolor.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jccolor.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcdctmgr.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcdctmgr.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jchuff.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jchuff.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jchuff.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jchuff.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcinit.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcinit.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcmainct.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcmainct.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcmarker.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcmarker.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcmaster.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcmaster.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcomapi.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcomapi.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jconfig.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jconfig.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcparam.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcparam.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcphuff.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcphuff.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcprepct.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcprepct.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcsample.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jcsample.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jctrans.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jctrans.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdapimin.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdapimin.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdapistd.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdapistd.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdatasrc.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdatasrc.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdcoefct.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdcoefct.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdcolor.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdcolor.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdct.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdct.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jddctmgr.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jddctmgr.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdhuff.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdhuff.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdhuff.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdhuff.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdinput.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdinput.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdmainct.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdmainct.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdmarker.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdmarker.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdmaster.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdmaster.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdmerge.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdmerge.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdphuff.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdphuff.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdpostct.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdpostct.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdsample.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdsample.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdtrans.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jdtrans.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jerror.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jerror.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jerror.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jerror.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jfdctflt.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jfdctflt.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jfdctfst.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jfdctfst.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jfdctint.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jfdctint.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jidctflt.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jidctflt.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jidctfst.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jidctfst.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jidctint.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jidctint.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jidctred.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jidctred.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jinclude.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jinclude.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jmemmgr.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jmemmgr.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jmemnobs.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jmemnobs.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jmemsys.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jmemsys.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jmorecfg.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jmorecfg.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jpegint.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jpegint.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jpeglib.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jpeglib.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jquant1.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jquant1.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jquant2.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jquant2.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jutils.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jutils.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jversion.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/jversion.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/transupp.c b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/transupp.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/transupp.h b/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib/transupp.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/juce_GIFLoader.cpp b/JuceLibraryCode/modules/juce_graphics/image_formats/juce_GIFLoader.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/juce_JPEGLoader.cpp b/JuceLibraryCode/modules/juce_graphics/image_formats/juce_JPEGLoader.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/juce_PNGLoader.cpp b/JuceLibraryCode/modules/juce_graphics/image_formats/juce_PNGLoader.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/LICENSE b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/LICENSE
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/libpng_readme.txt b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/libpng_readme.txt
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/png.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/png.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/png.h b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/png.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngconf.h b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngconf.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngerror.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngerror.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngget.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngget.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pnginfo.h b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pnginfo.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngmem.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngmem.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngpread.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngpread.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngpriv.h b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngpriv.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngread.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngread.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngrio.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngrio.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngrtran.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngrtran.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngrutil.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngrutil.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngset.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngset.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngstruct.h b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngstruct.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngtrans.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngtrans.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngwio.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngwio.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngwrite.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngwrite.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngwtran.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngwtran.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngwutil.c b/JuceLibraryCode/modules/juce_graphics/image_formats/pnglib/pngwutil.c
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/images/juce_Image.cpp b/JuceLibraryCode/modules/juce_graphics/images/juce_Image.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/images/juce_Image.h b/JuceLibraryCode/modules/juce_graphics/images/juce_Image.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.cpp b/JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.h b/JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp b/JuceLibraryCode/modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/images/juce_ImageConvolutionKernel.h b/JuceLibraryCode/modules/juce_graphics/images/juce_ImageConvolutionKernel.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/images/juce_ImageFileFormat.cpp b/JuceLibraryCode/modules/juce_graphics/images/juce_ImageFileFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/images/juce_ImageFileFormat.h b/JuceLibraryCode/modules/juce_graphics/images/juce_ImageFileFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/juce_graphics.cpp b/JuceLibraryCode/modules/juce_graphics/juce_graphics.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/juce_graphics.h b/JuceLibraryCode/modules/juce_graphics/juce_graphics.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/juce_graphics.mm b/JuceLibraryCode/modules/juce_graphics/juce_graphics.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/juce_module_info b/JuceLibraryCode/modules/juce_graphics/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h b/JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_android_Fonts.cpp b/JuceLibraryCode/modules/juce_graphics/native/juce_android_Fonts.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_android_GraphicsContext.cpp b/JuceLibraryCode/modules/juce_graphics/native/juce_android_GraphicsContext.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_freetype_Fonts.cpp b/JuceLibraryCode/modules/juce_graphics/native/juce_freetype_Fonts.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_linux_Fonts.cpp b/JuceLibraryCode/modules/juce_graphics/native/juce_linux_Fonts.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h b/JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm b/JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h b/JuceLibraryCode/modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_mac_Fonts.mm b/JuceLibraryCode/modules/juce_graphics/native/juce_mac_Fonts.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp b/JuceLibraryCode/modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp b/JuceLibraryCode/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp b/JuceLibraryCode/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/native/juce_win32_Fonts.cpp b/JuceLibraryCode/modules/juce_graphics/native/juce_win32_Fonts.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/placement/juce_Justification.cpp b/JuceLibraryCode/modules/juce_graphics/placement/juce_Justification.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/placement/juce_Justification.h b/JuceLibraryCode/modules/juce_graphics/placement/juce_Justification.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/placement/juce_RectanglePlacement.cpp b/JuceLibraryCode/modules/juce_graphics/placement/juce_RectanglePlacement.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_graphics/placement/juce_RectanglePlacement.h b/JuceLibraryCode/modules/juce_graphics/placement/juce_RectanglePlacement.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/application/juce_Application.cpp b/JuceLibraryCode/modules/juce_gui_basics/application/juce_Application.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/application/juce_Application.h b/JuceLibraryCode/modules/juce_gui_basics/application/juce_Application.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/application/juce_Initialisation.h b/JuceLibraryCode/modules/juce_gui_basics/application/juce_Initialisation.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.cpp b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.h b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.cpp b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_DrawableButton.cpp b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_DrawableButton.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_DrawableButton.h b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_DrawableButton.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_HyperlinkButton.h b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_HyperlinkButton.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.cpp b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.h b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ShapeButton.cpp b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ShapeButton.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ShapeButton.h b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ShapeButton.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_TextButton.cpp b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_TextButton.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_TextButton.h b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_TextButton.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToggleButton.cpp b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToggleButton.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToggleButton.h b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToggleButton.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.h b/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandID.h b/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandID.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp b/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h b/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp b/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h b/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp b/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h b/JuceLibraryCode/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp b/JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h b/JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/components/juce_CachedComponentImage.h b/JuceLibraryCode/modules/juce_gui_basics/components/juce_CachedComponentImage.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/components/juce_Component.cpp b/JuceLibraryCode/modules/juce_gui_basics/components/juce_Component.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/components/juce_Component.h b/JuceLibraryCode/modules/juce_gui_basics/components/juce_Component.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.cpp b/JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.h b/JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/components/juce_Desktop.cpp b/JuceLibraryCode/modules/juce_gui_basics/components/juce_Desktop.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/components/juce_Desktop.h b/JuceLibraryCode/modules/juce_gui_basics/components/juce_Desktop.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/components/juce_ModalComponentManager.cpp b/JuceLibraryCode/modules/juce_gui_basics/components/juce_ModalComponentManager.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/components/juce_ModalComponentManager.h b/JuceLibraryCode/modules/juce_gui_basics/components/juce_ModalComponentManager.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_Drawable.cpp b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_Drawable.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_Drawable.h b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_Drawable.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.h b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableImage.cpp b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableImage.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableImage.h b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableImage.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawablePath.cpp b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawablePath.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawablePath.h b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawablePath.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableRectangle.h b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableRectangle.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableShape.cpp b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableShape.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableShape.h b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableShape.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableText.cpp b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableText.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableText.h b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableText.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_SVGParser.cpp b/JuceLibraryCode/modules/juce_gui_basics/drawables/juce_SVGParser.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooser.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooser.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileFilter.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileFilter.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileListComponent.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileListComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h b/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.cpp b/JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.h b/JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.mm b/JuceLibraryCode/modules/juce_gui_basics/juce_gui_basics.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/juce_module_info b/JuceLibraryCode/modules/juce_gui_basics/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_CaretComponent.h b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_CaretComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyListener.cpp b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyListener.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyListener.h b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyListener.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyPress.cpp b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyPress.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyPress.h b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyPress.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_ModifierKeys.h b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_ModifierKeys.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_SystemClipboard.h b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_SystemClipboard.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextInputTarget.h b/JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextInputTarget.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPosition.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPosition.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentAnimator.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBuilder.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBuilder.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_Viewport.cpp b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_Viewport.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/layout/juce_Viewport.h b/JuceLibraryCode/modules/juce_gui_basics/layout/juce_Viewport.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp b/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h b/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp b/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h b/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp b/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h b/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp b/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h b/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarComponent.h b/JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarModel.cpp b/JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarModel.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarModel.h b/JuceLibraryCode/modules/juce_gui_basics/menus/juce_MenuBarModel.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h b/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.h b/JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/misc/juce_DropShadower.cpp b/JuceLibraryCode/modules/juce_gui_basics/misc/juce_DropShadower.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/misc/juce_DropShadower.h b/JuceLibraryCode/modules/juce_gui_basics/misc/juce_DropShadower.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_ComponentDragger.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_ComponentDragger.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_LassoComponent.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_LassoComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.cpp b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseEvent.cpp b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseEvent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseEvent.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseEvent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInputSource.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseInputSource.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseListener.cpp b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseListener.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseListener.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseListener.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_SelectedItemSet.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_SelectedItemSet.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_TooltipClient.h b/JuceLibraryCode/modules/juce_gui_basics/mouse/juce_TooltipClient.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_MultiTouchMapper.h b/JuceLibraryCode/modules/juce_gui_basics/native/juce_MultiTouchMapper.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_android_FileChooser.cpp b/JuceLibraryCode/modules/juce_gui_basics/native/juce_android_FileChooser.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_android_Windowing.cpp b/JuceLibraryCode/modules/juce_gui_basics/native/juce_android_Windowing.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm b/JuceLibraryCode/modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_ios_Windowing.mm b/JuceLibraryCode/modules/juce_gui_basics/native/juce_ios_Windowing.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Clipboard.cpp b/JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Clipboard.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp b/JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Windowing.cpp b/JuceLibraryCode/modules/juce_gui_basics/native/juce_linux_Windowing.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_FileChooser.mm b/JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_FileChooser.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_MainMenu.mm b/JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_MainMenu.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_MouseCursor.mm b/JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_MouseCursor.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_Windowing.mm b/JuceLibraryCode/modules/juce_gui_basics/native/juce_mac_Windowing.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp b/JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp b/JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_Windowing.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_MarkerList.cpp b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_MarkerList.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_MarkerList.h b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_MarkerList.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePoint.cpp b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePoint.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePoint.h b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePoint.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePointPath.h b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativePointPath.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeRectangle.h b/JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeRectangle.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.h b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyPanel.cpp b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyPanel.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyPanel.h b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyPanel.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h b/JuceLibraryCode/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ListBox.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ProgressBar.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ProgressBar.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ProgressBar.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ProgressBar.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableListBox.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableListBox.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableListBox.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableListBox.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.cpp b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.h b/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.cpp b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.cpp b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.h b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.h b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DialogWindow.cpp b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DialogWindow.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DialogWindow.h b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DialogWindow.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.cpp b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.h b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_NativeMessageBox.h b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_NativeMessageBox.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.h b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.h b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_basics/windows/juce_TopLevelWindow.h b/JuceLibraryCode/modules/juce_gui_basics/windows/juce_TopLevelWindow.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeDocument.h b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeDocument.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.cpp b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h b/JuceLibraryCode/modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp b/JuceLibraryCode/modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/documents/juce_FileBasedDocument.h b/JuceLibraryCode/modules/juce_gui_extra/documents/juce_FileBasedDocument.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h b/JuceLibraryCode/modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/embedding/juce_NSViewComponent.h b/JuceLibraryCode/modules/juce_gui_extra/embedding/juce_NSViewComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/embedding/juce_UIViewComponent.h b/JuceLibraryCode/modules/juce_gui_extra/embedding/juce_UIViewComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.cpp b/JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.h b/JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.mm b/JuceLibraryCode/modules/juce_gui_extra/juce_gui_extra.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/juce_module_info b/JuceLibraryCode/modules/juce_gui_extra/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp b/JuceLibraryCode/modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h b/JuceLibraryCode/modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_AppleRemote.h b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_AppleRemote.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.cpp b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.h b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_LiveConstantEditor.h b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_LiveConstantEditor.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_PreferencesPanel.h b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_PreferencesPanel.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_SplashScreen.cpp b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_SplashScreen.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_SplashScreen.h b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_SplashScreen.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h b/JuceLibraryCode/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp b/JuceLibraryCode/modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm b/JuceLibraryCode/modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp b/JuceLibraryCode/modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp b/JuceLibraryCode/modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_AppleRemote.mm b/JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_AppleRemote.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h b/JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm b/JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp b/JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm b/JuceLibraryCode/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp b/JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp b/JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp b/JuceLibraryCode/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/juce_module_info b/JuceLibraryCode/modules/juce_opengl/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/juce_opengl.cpp b/JuceLibraryCode/modules/juce_opengl/juce_opengl.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/juce_opengl.h b/JuceLibraryCode/modules/juce_opengl/juce_opengl.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/juce_opengl.mm b/JuceLibraryCode/modules/juce_opengl/juce_opengl.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/native/juce_MissingGLDefinitions.h b/JuceLibraryCode/modules/juce_opengl/native/juce_MissingGLDefinitions.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGLExtensions.h b/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGLExtensions.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_android.h b/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_android.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_ios.h b/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_ios.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_linux.h b/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_linux.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_osx.h b/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_osx.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_win32.h b/JuceLibraryCode/modules/juce_opengl/native/juce_OpenGL_win32.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_Draggable3DOrientation.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_Draggable3DOrientation.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_Matrix3D.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_Matrix3D.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLContext.cpp b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLContext.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLContext.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLContext.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLHelpers.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLHelpers.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLImage.cpp b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLImage.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLImage.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLImage.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLRenderer.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLRenderer.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLTexture.cpp b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLTexture.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLTexture.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_OpenGLTexture.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_Quaternion.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_Quaternion.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_opengl/opengl/juce_Vector3D.h b/JuceLibraryCode/modules/juce_opengl/opengl/juce_Vector3D.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/capture/juce_CameraDevice.h b/JuceLibraryCode/modules/juce_video/capture/juce_CameraDevice.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/juce_module_info b/JuceLibraryCode/modules/juce_video/juce_module_info
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/juce_video.cpp b/JuceLibraryCode/modules/juce_video/juce_video.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/juce_video.h b/JuceLibraryCode/modules/juce_video/juce_video.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/juce_video.mm b/JuceLibraryCode/modules/juce_video/juce_video.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/native/juce_android_CameraDevice.cpp b/JuceLibraryCode/modules/juce_video/native/juce_android_CameraDevice.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/native/juce_mac_CameraDevice.mm b/JuceLibraryCode/modules/juce_video/native/juce_mac_CameraDevice.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/native/juce_mac_QuickTimeMovieComponent.mm b/JuceLibraryCode/modules/juce_video/native/juce_mac_QuickTimeMovieComponent.mm
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/native/juce_win32_CameraDevice.cpp b/JuceLibraryCode/modules/juce_video/native/juce_win32_CameraDevice.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/native/juce_win32_DirectShowComponent.cpp b/JuceLibraryCode/modules/juce_video/native/juce_win32_DirectShowComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/native/juce_win32_QuickTimeMovieComponent.cpp b/JuceLibraryCode/modules/juce_video/native/juce_win32_QuickTimeMovieComponent.cpp
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/playback/juce_DirectShowComponent.h b/JuceLibraryCode/modules/juce_video/playback/juce_DirectShowComponent.h
old mode 100644
new mode 100755
diff --git a/JuceLibraryCode/modules/juce_video/playback/juce_QuickTimeMovieComponent.h b/JuceLibraryCode/modules/juce_video/playback/juce_QuickTimeMovieComponent.h
old mode 100644
new mode 100755
diff --git a/Licenses/HDF5.txt b/Licenses/HDF5.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e4537f2d10c3c9e7558d304254c7be8f62d21504
--- /dev/null
+++ b/Licenses/HDF5.txt
@@ -0,0 +1,89 @@
+Copyright Notice and License Terms for 
+HDF5 (Hierarchical Data Format 5) Software Library and Utilities
+-----------------------------------------------------------------------------
+
+HDF5 (Hierarchical Data Format 5) Software Library and Utilities
+Copyright 2006-2014 by The HDF Group.
+
+NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities
+Copyright 1998-2006 by the Board of Trustees of the University of Illinois.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without 
+modification, are permitted for any purpose (including commercial purposes) 
+provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, 
+   this list of conditions, and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, 
+   this list of conditions, and the following disclaimer in the documentation 
+   and/or materials provided with the distribution.
+
+3. In addition, redistributions of modified forms of the source or binary 
+   code must carry prominent notices stating that the original code was 
+   changed and the date of the change.
+
+4. All publications or advertising materials mentioning features or use of 
+   this software are asked, but not required, to acknowledge that it was 
+   developed by The HDF Group and by the National Center for Supercomputing 
+   Applications at the University of Illinois at Urbana-Champaign and 
+   credit the contributors.
+
+5. Neither the name of The HDF Group, the name of the University, nor the 
+   name of any Contributor may be used to endorse or promote products derived 
+   from this software without specific prior written permission from 
+   The HDF Group, the University, or the Contributor, respectively.
+
+DISCLAIMER: 
+THIS SOFTWARE IS PROVIDED BY THE HDF GROUP AND THE CONTRIBUTORS 
+"AS IS" WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED.  In no 
+event shall The HDF Group or the Contributors be liable for any damages 
+suffered by the users arising out of the use of this software, even if 
+advised of the possibility of such damage. 
+
+-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
+
+Contributors:   National Center for Supercomputing Applications (NCSA) at 
+the University of Illinois, Fortner Software, Unidata Program Center (netCDF), 
+The Independent JPEG Group (JPEG), Jean-loup Gailly and Mark Adler (gzip), 
+and Digital Equipment Corporation (DEC).
+
+-----------------------------------------------------------------------------
+
+Portions of HDF5 were developed with support from the Lawrence Berkeley 
+National Laboratory (LBNL) and the United States Department of Energy 
+under Prime Contract No. DE-AC02-05CH11231.
+
+-----------------------------------------------------------------------------
+
+Portions of HDF5 were developed with support from the University of 
+California, Lawrence Livermore National Laboratory (UC LLNL).  
+The following statement applies to those portions of the product and must 
+be retained in any redistribution of source code, binaries, documentation, 
+and/or accompanying materials:
+
+   This work was partially produced at the University of California, 
+   Lawrence Livermore National Laboratory (UC LLNL) under contract 
+   no. W-7405-ENG-48 (Contract 48) between the U.S. Department of Energy 
+   (DOE) and The Regents of the University of California (University) 
+   for the operation of UC LLNL.
+
+   DISCLAIMER: 
+   This work was prepared as an account of work sponsored by an agency of 
+   the United States Government. Neither the United States Government nor 
+   the University of California nor any of their employees, makes any 
+   warranty, express or implied, or assumes any liability or responsibility 
+   for the accuracy, completeness, or usefulness of any information, 
+   apparatus, product, or process disclosed, or represents that its use 
+   would not infringe privately- owned rights. Reference herein to any 
+   specific commercial products, process, or service by trade name, 
+   trademark, manufacturer, or otherwise, does not necessarily constitute 
+   or imply its endorsement, recommendation, or favoring by the United 
+   States Government or the University of California. The views and 
+   opinions of authors expressed herein do not necessarily state or reflect 
+   those of the United States Government or the University of California, 
+   and shall not be used for advertising or product endorsement purposes.
+-----------------------------------------------------------------------------
\ No newline at end of file
diff --git a/license.txt b/Licenses/Open-Ephys-GPL-3.txt
similarity index 100%
rename from license.txt
rename to Licenses/Open-Ephys-GPL-3.txt
diff --git a/Licenses/SZIP.txt b/Licenses/SZIP.txt
new file mode 100644
index 0000000000000000000000000000000000000000..faa09517649d256b4dd29364b6c9a9fe52b5cc4e
--- /dev/null
+++ b/Licenses/SZIP.txt
@@ -0,0 +1,39 @@
+The SZIP Science Data Lossless Compression Program is Copyright (C) 2001 Science
+& Technology Corporation @ UNM.  All rights released.  Copyright (C) 2003 Lowell
+H. Miles and Jack A. Venbrux.  Licensed to ICs, LLC, for distribution by the
+University of Illinois' National Center for Supercomputing Applications as a
+part of the HDF data storage and retrieval file format and software library
+products package.  All rights reserved.  Do not modify or use for other
+purposes.
+
+SZIP implements an extended Rice adaptive lossless compression algorithm
+for sample data.  The primary algorithm was developed by R. F. Rice at
+Jet Propulsion Laboratory.  
+
+SZIP embodies certain inventions patented by the National Aeronautics &
+Space Administration.  United States Patent Nos. 5,448,642, 5,687,255,
+and 5,822,457 have been licensed to ICs, LLC, for distribution with the
+HDF data storage and retrieval file format and software library products.
+All rights reserved.
+
+Revocable, royalty-free, nonexclusive sublicense to use SZIP decompression
+software routines and underlying patents is hereby granted by ICs, LLC, to 
+all users of and in conjunction with HDF data storage and retrieval file 
+format and software library products.
+
+Revocable, royalty-free, nonexclusive sublicense to use SZIP compression
+software routines and underlying patents for non-commercial, scientific use
+only is hereby granted by ICs, LLC, to users of and in conjunction with HDF 
+data storage and retrieval file format and software library products.
+
+For commercial use license to SZIP compression software routines and underlying 
+patents please contact ICs, LLC, at: 
+
+        Joseph J. Feeley, Ph.D., P.E.
+        Chief Executive Officer
+        ICs, LLC
+        PO Box 2236
+        McCall, ID 83638
+
+        Phone: (208) 315-0029
+        Email: Joe.Feeley@frontiernet.net
\ No newline at end of file
diff --git a/README.rst b/README.rst
index 49d893fd9fcec2dffa8dd1e526f9caac3cc570ca..8996eee90593b553b27d65be2e1cb7d70390bff9 100644
--- a/README.rst
+++ b/README.rst
@@ -10,8 +10,8 @@ This repository contains all of the files you'll need to compile and run the GUI
 
 We recommend reading through the wiki_ before attempting to make any changes.
 
-If you want to add files, you'll have to do that through the "Introjucer," using the "open-ephys.jucer" file. The Introjucer makefiles are located in the JuceLibraryCode/Introjucer/Builds folder, or as part of the Juce library package on SourceForge_.
+If you want to add files, you'll have to do that through the "Introjucer," using the "open-ephys.jucer" file. The Introjucer makefiles are located in the JuceLibraryCode/Introjucer/Builds folder, or as part of the Juce source_.
 
-.. _SourceForge: http://sourceforge.net/projects/juce/files/juce/
+.. _source: https://github.com/julianstorer/juce
 .. _JUCE: http://www.rawmaterialsoftware.com/juce.php
 .. _wiki: http://open-ephys.atlassian.net
diff --git a/Resources/DLLs/InstallEcubeApi_0_11.exe b/Resources/DLLs/InstallEcubeApi_0_11.exe
new file mode 100644
index 0000000000000000000000000000000000000000..e27b63318da3f5a9298686ac4bdae24787667659
Binary files /dev/null and b/Resources/DLLs/InstallEcubeApi_0_11.exe differ
diff --git a/Resources/DLLs/Win64/hdf5.dll b/Resources/DLLs/Win64/hdf5.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9b76ced3c77baaa30f7013ef3bf52c32bc7ae8b8
Binary files /dev/null and b/Resources/DLLs/Win64/hdf5.dll differ
diff --git a/Resources/DLLs/Win64/hdf5_cpp.dll b/Resources/DLLs/Win64/hdf5_cpp.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c9e2fd4a6262c1503aee1c19a547e375bc6d65e4
Binary files /dev/null and b/Resources/DLLs/Win64/hdf5_cpp.dll differ
diff --git a/Resources/DLLs/Win64/szip.dll b/Resources/DLLs/Win64/szip.dll
new file mode 100644
index 0000000000000000000000000000000000000000..995df5e7a8a64e3a1d5b07b6d51e37f05b026bb9
Binary files /dev/null and b/Resources/DLLs/Win64/szip.dll differ
diff --git a/Resources/DLLs/Win64/zlib.dll b/Resources/DLLs/Win64/zlib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d4818cb38aed99f7b08e5b7ce1e04d4b69ac8921
Binary files /dev/null and b/Resources/DLLs/Win64/zlib.dll differ
diff --git a/Resources/DLLs/hdf5.dll b/Resources/DLLs/hdf5.dll
new file mode 100644
index 0000000000000000000000000000000000000000..1b366605be935866db48fe92e8b1d804108d0d8b
Binary files /dev/null and b/Resources/DLLs/hdf5.dll differ
diff --git a/Resources/DLLs/hdf5_cpp.dll b/Resources/DLLs/hdf5_cpp.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b92846f10c9b5a0215105582fcc3dc61c0d2905c
Binary files /dev/null and b/Resources/DLLs/hdf5_cpp.dll differ
diff --git a/Resources/DLLs/libokFrontPanel_centOS_x86_64.so b/Resources/DLLs/libokFrontPanel_centOS_x86_64.so
new file mode 100755
index 0000000000000000000000000000000000000000..f8c6386c193b5822adc9a585a0445c1e5efa2c95
Binary files /dev/null and b/Resources/DLLs/libokFrontPanel_centOS_x86_64.so differ
diff --git a/Resources/DLLs/szip.dll b/Resources/DLLs/szip.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ba836b4e734761dbba81321dd9a8405b6c28984d
Binary files /dev/null and b/Resources/DLLs/szip.dll differ
diff --git a/Resources/DLLs/zlib.dll b/Resources/DLLs/zlib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..68efaa4ba4bdc7564d5f824030d1d1e3fc9bb8e3
Binary files /dev/null and b/Resources/DLLs/zlib.dll differ
diff --git a/Resources/windows-libs/HDF5/include/H5ACpkg.h b/Resources/windows-libs/HDF5/include/H5ACpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..3060a70dc8079f20806cde7071f0c194170489ae
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5ACpkg.h
@@ -0,0 +1,392 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: John Mainzer -- 4/19/06
+ *
+ * Purpose:     This file contains declarations which are normally visible
+ *              only within the H5AC package (just H5AC.c at present).
+ *
+ *		Source files outside the H5AC package should include
+ *		H5ACprivate.h instead.
+ *
+ *		The one exception to this rule is testpar/t_cache.c.  The
+ *		test code is easier to write if it can look at H5AC_aux_t.
+ *		Indeed, this is the main reason why this file was created.
+ *
+ */
+
+#ifndef H5AC_PACKAGE
+#error "Do not include this file outside the H5AC package!"
+#endif
+
+#ifndef _H5ACpkg_H
+#define _H5ACpkg_H
+
+/* Get package's private header */
+#include "H5ACprivate.h"	/* Metadata cache			*/
+
+
+/* Get needed headers */
+#include "H5Cprivate.h"         /* Cache                                */
+#include "H5SLprivate.h"        /* Skip lists */
+
+
+#define H5AC_DEBUG_DIRTY_BYTES_CREATION	0
+
+#ifdef H5_HAVE_PARALLEL
+
+/* the following #defined are used to specify the operation required
+ * at a sync point.
+ */
+
+#define H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN		0
+#define H5AC_SYNC_POINT_OP__FLUSH_CACHE			1
+
+#endif /* H5_HAVE_PARALLEL */
+
+/*-------------------------------------------------------------------------
+ *  It is a bit difficult to set ranges of allowable values on the
+ *  dirty_bytes_threshold field of H5AC_aux_t.  The following are
+ *  probably broader than they should be.
+ *-------------------------------------------------------------------------
+ */
+
+#define H5AC__MIN_DIRTY_BYTES_THRESHOLD		(int32_t) \
+						(H5C__MIN_MAX_CACHE_SIZE / 2)
+#define H5AC__DEFAULT_DIRTY_BYTES_THRESHOLD	(256 * 1024)
+#define H5AC__MAX_DIRTY_BYTES_THRESHOLD   	(int32_t) \
+						(H5C__MAX_MAX_CACHE_SIZE / 4)
+
+#define H5AC__DEFAULT_METADATA_WRITE_STRATEGY	\
+				H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED
+
+/****************************************************************************
+ *
+ * structure H5AC_aux_t
+ *
+ * While H5AC has become a wrapper for the cache implemented in H5C.c, there
+ * are some features of the metadata cache that are specific to it, and which
+ * therefore do not belong in the more generic H5C cache code.
+ *
+ * In particular, there is the matter of synchronizing writes from the
+ * metadata cache to disk in the PHDF5 case.
+ *
+ * Prior to this update, the presumption was that all metadata caches would
+ * write the same data at the same time since all operations modifying
+ * metadata must be performed collectively.  Given this assumption, it was
+ * safe to allow only the writes from process 0 to actually make it to disk,
+ * while metadata writes from all other processes were discarded.
+ *
+ * Unfortunately, this presumption is in error as operations that read
+ * metadata need not be collective, but can change the location of dirty
+ * entries in the metadata cache LRU lists.  This can result in the same
+ * metadata write operation triggering writes from the metadata caches on
+ * some processes, but not all (causing a hang), or in different sets of
+ * entries being written from different caches (potentially resulting in
+ * metadata corruption in the file).
+ *
+ * To deal with this issue, I decided to apply a paradigm shift to the way
+ * metadata is written to disk.
+ *
+ * With this set of changes, only the metadata cache on process 0 is able
+ * to write metadata to disk, although metadata caches on all other
+ * processes can read metadata from disk as before.
+ *
+ * To keep all the other caches from getting plugged up with dirty metadata,
+ * process 0 periodically broadcasts a list of entries that it has flushed
+ * since that last notice, and which are currently clean.  The other caches
+ * mark these entries as clean as well, which allows them to evict the
+ * entries as needed.
+ *
+ * One obvious problem in this approach is synchronizing the broadcasts
+ * and receptions, as different caches may see different amounts of
+ * activity.
+ *
+ * The current solution is for the caches to track the number of bytes
+ * of newly generated dirty metadata, and to broadcast and receive
+ * whenever this value exceeds some user specified threshold.
+ *
+ * Maintaining this count is easy for all processes not on process 0 --
+ * all that is necessary is to add the size of the entry to the total
+ * whenever there is an insertion, a move of a previously clean entry,
+ * or whever a previously clean entry is marked dirty in an unprotect.
+ *
+ * On process 0, we have to be careful not to count dirty bytes twice.
+ * If an entry is marked dirty, flushed, and marked dirty again, all
+ * within a single reporting period, it only th first marking should
+ * be added to the dirty bytes generated tally, as that is all that
+ * the other processes will see.
+ *
+ * At present, this structure exists to maintain the fields needed to
+ * implement the above scheme, and thus is only used in the parallel
+ * case.  However, other uses may arise in the future.
+ *
+ * Instance of this structure are associated with metadata caches via
+ * the aux_ptr field of H5C_t (see H5Cpkg.h).  The H5AC code is
+ * responsible for allocating, maintaining, and discarding instances
+ * of H5AC_aux_t.
+ *
+ * The remainder of this header comments documents the individual fields
+ * of the structure.
+ *
+ *                                              JRM - 6/27/05
+ *
+ * magic:       Unsigned 32 bit integer always set to
+ *		H5AC__H5AC_AUX_T_MAGIC.  This field is used to validate
+ *		pointers to instances of H5AC_aux_t.
+ *
+ * mpi_comm:	MPI communicator associated with the file for which the
+ *		cache has been created.
+ *
+ * mpi_rank:	MPI rank of this process within mpi_comm.
+ *
+ * mpi_size:	Number of processes in mpi_comm.
+ *
+ * write_permitted:  Boolean flag used to control whether the cache
+ *		is permitted to write to file.
+ *
+ * dirty_bytes_threshold: Integer field containing the dirty bytes
+ *		generation threashold.  Whenever dirty byte creation
+ *		exceeds this value, the metadata cache on process 0
+ *		broadcasts a list of the entries it has flushed since
+ *		the last broadcast (or since the beginning of execution)
+ *		and which are currently clean (if they are still in the
+ *		cache)
+ *
+ *		Similarly, metadata caches on processes other than process
+ *		0 will attempt to receive a list of clean entries whenever
+ *		the threshold is exceeded.
+ *
+ * dirty_bytes:  Integer field containing the number of bytes of dirty
+ *		metadata generated since the beginning of the computation,
+ *		or (more typically) since the last clean entries list
+ *		broadcast.  This field is reset to zero after each such
+ *		broadcast.
+ *
+ * metadata_write_strategy: Integer code indicating how we will be 
+ *		writing the metadata.  In the first incarnation of 
+ *		this code, all writes were done from process 0.  This
+ *		field exists to facilitate experiments with other 
+ *		strategies.
+ *
+ * dirty_bytes_propagations: This field only exists when the
+ *		H5AC_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
+ *
+ *		It is used to track the number of times the cleaned list
+ *		has been propagated from process 0 to the other
+ *		processes.
+ *
+ * unprotect_dirty_bytes:  This field only exists when the
+ *              H5AC_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
+ *
+ *		It is used to track the number of dirty bytes created
+ *		via unprotect operations since the last time the cleaned
+ *		list was propagated.
+ *
+ * unprotect_dirty_bytes_updates: This field only exists when the
+ *              H5AC_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
+ *
+ *		It is used to track the number of times dirty bytes have
+ *		been created via unprotect operations since the last time
+ *		the cleaned list was propagated.
+ *
+ * insert_dirty_bytes:  This field only exists when the
+ *              H5AC_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
+ *
+ *		It is used to track the number of dirty bytes created
+ *		via insert operations since the last time the cleaned
+ *		list was propagated.
+ *
+ * insert_dirty_bytes_updates:  This field only exists when the
+ *              H5AC_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
+ *
+ *		It is used to track the number of times dirty bytes have
+ *		been created via insert operations since the last time
+ *		the cleaned list was propagated.
+ *
+ * move_dirty_bytes:  This field only exists when the
+ *              H5AC_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
+ *
+ *		It is used to track the number of dirty bytes created
+ *		via move operations since the last time the cleaned
+ *		list was propagated.
+ *
+ * move_dirty_bytes_updates:  This field only exists when the
+ *              H5AC_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
+ *
+ *		It is used to track the number of times dirty bytes have
+ *		been created via move operations since the last time
+ *		the cleaned list was propagated.
+ *
+ * Things have changed a bit since the following four fields were defined.
+ * If metadata_write_strategy is H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY,
+ * all comments hold as before -- with the caviate that pending further 
+ * coding, the process 0 metadata cache is forbidden to flush entries outside
+ * of a sync point.
+ *
+ * However, for different metadata write strategies, these fields are used
+ * only to maintain the correct dirty byte count on process zero -- and in
+ * most if not all cases, this is redundant, as process zero will be barred
+ * from flushing entries outside of a sync point.
+ *
+ *						JRM -- 3/16/10
+ *
+ * d_slist_ptr:  Pointer to an instance of H5SL_t used to maintain a list
+ *		of entries that have been dirtied since the last time they
+ *		were listed in a clean entries broadcast.  This list is
+ *		only maintained by the metadata cache on process 0 -- it
+ *		it used to maintain a view of the dirty entries as seen
+ *		by the other caches, so as to keep the dirty bytes count
+ *		in synchronization with them.
+ *
+ *		Thus on process 0, the dirty_bytes count is incremented
+ *		only if either
+ *
+ *		1) an entry is inserted in the metadata cache, or
+ *
+ *		2) a previously clean entry is moved, and it does not
+ *		   already appear in the dirty entry list, or
+ *
+ *		3) a previously clean entry is unprotected with the
+ *		   dirtied flag set and the entry does not already appear
+ *		   in the dirty entry list.
+ *
+ *		Entries are added to the dirty entry list whever they cause
+ *		the dirty bytes count to be increased.  They are removed
+ *		when they appear in a clean entries broadcast.  Note that
+ *		moves must be reflected in the dirty entry list.
+ *
+ *		To reitterate, this field is only used on process 0 -- it
+ *		should be NULL on all other processes.
+ *
+ * d_slist_len: Integer field containing the number of entries in the
+ *		dirty entry list.  This field should always contain the
+ *		value 0 on all processes other than process 0.  It exists
+ *		primarily for sanity checking.
+ *
+ * c_slist_ptr: Pointer to an instance of H5SL_t used to maintain a list
+ *		of entries that were dirty, have been flushed
+ *		to disk since the last clean entries broadcast, and are
+ *		still clean.  Since only process 0 can write to disk, this
+ *		list only exists on process 0.
+ *
+ *		In essence, this slist is used to assemble the contents of
+ *		the next clean entries broadcast.  The list emptied after
+ *		each broadcast.
+ *
+ * c_slist_len: Integer field containing the number of entries in the clean
+ *		entries list (*c_slist_ptr).  This field should always
+ *		contain the value 0 on all processes other than process 0.
+ *		It exists primarily for sanity checking.
+ *
+ * The following two fields are used only when metadata_write_strategy
+ * is H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED.
+ *
+ * candidate_slist_ptr: Pointer to an instance of H5SL_t used by process 0
+ *		to construct a list of entries to be flushed at this sync
+ *		point.  This list is then broadcast to the other processes,
+ *		which then either flush or mark clean all entries on it.
+ *
+ * candidate_slist_len: Integer field containing the number of entries on the
+ *		candidate list.  It exists primarily for sanity checking.
+ *
+ * write_done:  In the parallel test bed, it is necessary to ensure that
+ *              all writes to the server process from cache 0 complete
+ *              before it enters the barrier call with the other caches.
+ *
+ *              The write_done callback allows t_cache to do this without
+ *              requiring an ACK on each write.  Since these ACKs greatly
+ *              increase the run time on some platforms, this is a
+ *              significant optimization.
+ *
+ *              This field must be set to NULL when the callback is not
+ *              needed.
+ *
+ *		Note: This field has been extended for use by all processes
+ *		      with the addition of support for the distributed 
+ *		      metadata write strategy.        
+ *                                                     JRM -- 5/9/10
+ *
+ * sync_point_done:  In the parallel test bed, it is necessary to verify
+ *		that the expected writes, and only the expected writes,
+ *		have taken place at the end of each sync point.
+ *
+ *		The sync_point_done callback allows t_cache to perform 
+ *		this verification.  The field is set to NULL when the 
+ *		callback is not needed.
+ *
+ ****************************************************************************/
+
+#ifdef H5_HAVE_PARALLEL
+
+#define H5AC__H5AC_AUX_T_MAGIC        (unsigned)0x00D0A01
+
+typedef struct H5AC_aux_t
+{
+    uint32_t	magic;
+
+    MPI_Comm	mpi_comm;
+
+    int		mpi_rank;
+
+    int		mpi_size;
+
+    hbool_t	write_permitted;
+
+    int32_t	dirty_bytes_threshold;
+
+    int32_t	dirty_bytes;
+
+    int32_t	metadata_write_strategy;
+
+#if H5AC_DEBUG_DIRTY_BYTES_CREATION
+
+    int32_t	dirty_bytes_propagations;
+
+    int32_t     unprotect_dirty_bytes;
+    int32_t     unprotect_dirty_bytes_updates;
+
+    int32_t     insert_dirty_bytes;
+    int32_t     insert_dirty_bytes_updates;
+
+    int32_t     move_dirty_bytes;
+    int32_t     move_dirty_bytes_updates;
+
+#endif /* H5AC_DEBUG_DIRTY_BYTES_CREATION */
+
+    H5SL_t *	d_slist_ptr;
+
+    int32_t	d_slist_len;
+
+    H5SL_t *	c_slist_ptr;
+
+    int32_t	c_slist_len;
+
+    H5SL_t *	candidate_slist_ptr;
+
+    int32_t	candidate_slist_len;
+
+    void	(* write_done)(void);
+
+    void	(* sync_point_done)(int num_writes, 
+                                    haddr_t * written_entries_tbl);
+
+} H5AC_aux_t; /* struct H5AC_aux_t */
+
+#endif /* H5_HAVE_PARALLEL */
+
+#endif /* _H5ACpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5ACpublic.h b/Resources/windows-libs/HDF5/include/H5ACpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..639179ce3b2bcc253739764d7f5f1b4b648c9024
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5ACpublic.h
@@ -0,0 +1,508 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5ACpublic.h
+ *                      Jul 10 1997
+ *                      Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose:             Public include file for cache functions.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5ACpublic_H
+#define _H5ACpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Cpublic.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/****************************************************************************
+ *
+ * structure H5AC_cache_config_t
+ *
+ * H5AC_cache_config_t is a public structure intended for use in public APIs.
+ * At least in its initial incarnation, it is basicaly a copy of struct
+ * H5C_auto_size_ctl_t, minus the report_fcn field, and plus the
+ * dirty_bytes_threshold field.
+ *
+ * The report_fcn field is omitted, as including it would require us to
+ * make H5C_t structure public.
+ *
+ * The dirty_bytes_threshold field does not appear in H5C_auto_size_ctl_t,
+ * as synchronization between caches on different processes is handled at
+ * the H5AC level, not at the level of H5C.  Note however that there is
+ * considerable interaction between this value and the other fields in this
+ * structure.
+ *
+ * Similarly, the open_trace_file, close_trace_file, and trace_file_name
+ * fields do not appear in H5C_auto_size_ctl_t, as most trace file
+ * issues are handled at the H5AC level.  The one exception is storage of
+ * the pointer to the trace file, which is handled by H5C.
+ *
+ * The structure is in H5ACpublic.h as we may wish to allow different
+ * configuration options for metadata and raw data caches.
+ *
+ * The fields of the structure are discussed individually below:
+ *
+ * version: Integer field containing the version number of this version
+ *      of the H5AC_cache_config_t structure.  Any instance of
+ *      H5AC_cache_config_t passed to the cache must have a known
+ *      version number, or an error will be flagged.
+ *
+ * rpt_fcn_enabled: Boolean field used to enable and disable the default
+ *	reporting function.  This function is invoked every time the
+ *	automatic cache resize code is run, and reports on its activities.
+ *
+ *	This is a debugging function, and should normally be turned off.
+ *
+ * open_trace_file: Boolean field indicating whether the trace_file_name
+ * 	field should be used to open a trace file for the cache.
+ *
+ * 	The trace file is a debuging feature that allow the capture of
+ * 	top level metadata cache requests for purposes of debugging and/or
+ * 	optimization.  This field should normally be set to FALSE, as
+ * 	trace file collection imposes considerable overhead.
+ *
+ * 	This field should only be set to TRUE when the trace_file_name
+ * 	contains the full path of the desired trace file, and either
+ * 	there is no open trace file on the cache, or the close_trace_file
+ * 	field is also TRUE.
+ *
+ * close_trace_file: Boolean field indicating whether the current trace
+ * 	file (if any) should be closed.
+ *
+ * 	See the above comments on the open_trace_file field.  This field
+ * 	should be set to FALSE unless there is an open trace file on the
+ * 	cache that you wish to close.
+ *
+ * trace_file_name: Full path of the trace file to be opened if the
+ * 	open_trace_file field is TRUE.
+ *
+ * 	In the parallel case, an ascii representation of the mpi rank of
+ * 	the process will be appended to the file name to yield a unique
+ * 	trace file name for each process.
+ *
+ * 	The length of the path must not exceed H5AC__MAX_TRACE_FILE_NAME_LEN
+ * 	characters.
+ *
+ * evictions_enabled:  Boolean field used to either report the current
+ * 	evictions enabled status of the cache, or to set the cache's
+ *	evictions enabled status.
+ *
+ * 	In general, the metadata cache should always be allowed to
+ * 	evict entries.  However, in some cases it is advantageous to
+ * 	disable evictions briefly, and thereby postpone metadata
+ * 	writes.  However, this must be done with care, as the cache
+ * 	can grow quickly.  If you do this, re-enable evictions as
+ * 	soon as possible and monitor cache size.
+ *
+ * 	At present, evictions can only be disabled if automatic
+ * 	cache resizing is also disabled (that is, ( incr_mode ==
+ *	H5C_incr__off ) && ( decr_mode == H5C_decr__off )).  There
+ *	is no logical reason why this should be so, but it simplifies
+ *	implementation and testing, and I can't think of any reason
+ *	why it would be desireable.  If you can think of one, I'll
+ *	revisit the issue.
+ *
+ * set_initial_size: Boolean flag indicating whether the size of the
+ *      initial size of the cache is to be set to the value given in
+ *      the initial_size field.  If set_initial_size is FALSE, the
+ *      initial_size field is ignored.
+ *
+ * initial_size: If enabled, this field contain the size the cache is
+ *      to be set to upon receipt of this structure.  Needless to say,
+ *      initial_size must lie in the closed interval [min_size, max_size].
+ *
+ * min_clean_fraction: double in the range 0 to 1 indicating the fraction
+ *      of the cache that is to be kept clean.  This field is only used
+ *      in parallel mode.  Typical values are 0.1 to 0.5.
+ *
+ * max_size: Maximum size to which the cache can be adjusted.  The
+ *      supplied value must fall in the closed interval
+ *      [MIN_MAX_CACHE_SIZE, MAX_MAX_CACHE_SIZE].  Also, max_size must
+ *      be greater than or equal to min_size.
+ *
+ * min_size: Minimum size to which the cache can be adjusted.  The
+ *      supplied value must fall in the closed interval
+ *      [H5C__MIN_MAX_CACHE_SIZE, H5C__MAX_MAX_CACHE_SIZE].  Also, min_size
+ *      must be less than or equal to max_size.
+ *
+ * epoch_length: Number of accesses on the cache over which to collect
+ *      hit rate stats before running the automatic cache resize code,
+ *      if it is enabled.
+ *
+ *      At the end of an epoch, we discard prior hit rate data and start
+ *      collecting afresh.  The epoch_length must lie in the closed
+ *      interval [H5C__MIN_AR_EPOCH_LENGTH, H5C__MAX_AR_EPOCH_LENGTH].
+ *
+ *
+ * Cache size increase control fields:
+ *
+ * incr_mode: Instance of the H5C_cache_incr_mode enumerated type whose
+ *      value indicates how we determine whether the cache size should be
+ *      increased.  At present there are two possible values:
+ *
+ *      H5C_incr__off:  Don't attempt to increase the size of the cache
+ *              automatically.
+ *
+ *              When this increment mode is selected, the remaining fields
+ *              in the cache size increase section ar ignored.
+ *
+ *      H5C_incr__threshold: Attempt to increase the size of the cache
+ *              whenever the average hit rate over the last epoch drops
+ *              below the value supplied in the lower_hr_threshold
+ *              field.
+ *
+ *              Note that this attempt will fail if the cache is already
+ *              at its maximum size, or if the cache is not already using
+ *              all available space.
+ *
+ *      Note that you must set decr_mode to H5C_incr__off if you
+ *      disable metadata cache entry evictions.
+ *
+ * lower_hr_threshold: Lower hit rate threshold.  If the increment mode
+ *      (incr_mode) is H5C_incr__threshold and the hit rate drops below the
+ *      value supplied in this field in an epoch, increment the cache size by
+ *      size_increment.  Note that cache size may not be incremented above
+ *      max_size, and that the increment may be further restricted by the
+ *      max_increment field if it is enabled.
+ *
+ *      When enabled, this field must contain a value in the range [0.0, 1.0].
+ *      Depending on the incr_mode selected, it may also have to be less than
+ *      upper_hr_threshold.
+ *
+ * increment:  Double containing the multiplier used to derive the new
+ *      cache size from the old if a cache size increment is triggered.
+ *      The increment must be greater than 1.0, and should not exceed 2.0.
+ *
+ *      The new cache size is obtained my multiplying the current max cache
+ *      size by the increment, and then clamping to max_size and to stay
+ *      within the max_increment as necessary.
+ *
+ * apply_max_increment:  Boolean flag indicating whether the max_increment
+ *      field should be used to limit the maximum cache size increment.
+ *
+ * max_increment: If enabled by the apply_max_increment field described
+ *      above, this field contains the maximum number of bytes by which the
+ *      cache size can be increased in a single re-size.
+ *
+ * flash_incr_mode:  Instance of the H5C_cache_flash_incr_mode enumerated
+ *      type whose value indicates whether and by which algorithm we should
+ *      make flash increases in the size of the cache to accomodate insertion
+ *      of large entries and large increases in the size of a single entry.
+ *
+ *      The addition of the flash increment mode was occasioned by performance
+ *      problems that appear when a local heap is increased to a size in excess
+ *      of the current cache size.  While the existing re-size code dealt with
+ *      this eventually, performance was very bad for the remainder of the
+ *      epoch.
+ *
+ *      At present, there are two possible values for the flash_incr_mode:
+ *
+ *      H5C_flash_incr__off:  Don't perform flash increases in the size of
+ *              the cache.
+ *
+ *      H5C_flash_incr__add_space:  Let x be either the size of a newly
+ *              newly inserted entry, or the number of bytes by which the
+ *              size of an existing entry has been increased.
+ *
+ *              If
+ *                      x > flash_threshold * current max cache size,
+ *
+ *              increase the current maximum cache size by x * flash_multiple
+ *              less any free space in the cache, and star a new epoch.  For
+ *              now at least, pay no attention to the maximum increment.
+ *
+ *      In both of the above cases, the flash increment pays no attention to
+ *      the maximum increment (at least in this first incarnation), but DOES
+ *      stay within max_size.
+ *
+ *      With a little thought, it should be obvious that the above flash
+ *      cache size increase algorithm is not sufficient for all circumstances
+ *      -- for example, suppose the user round robins through
+ *      (1/flash_threshold) +1 groups, adding one data set to each on each
+ *      pass.  Then all will increase in size at about the same time, requiring
+ *      the max cache size to at least double to maintain acceptable
+ *      performance, however the above flash increment algorithm will not be
+ *      triggered.
+ *
+ *      Hopefully, the add space algorithms detailed above will be sufficient
+ *      for the performance problems encountered to date.  However, we should
+ *      expect to revisit the issue.
+ *
+ * flash_multiple: Double containing the multiple described above in the
+ *      H5C_flash_incr__add_space section of the discussion of the
+ *      flash_incr_mode section.  This field is ignored unless flash_incr_mode
+ *      is H5C_flash_incr__add_space.
+ *
+ * flash_threshold: Double containing the factor by which current max cache
+ *      size is multiplied to obtain the size threshold for the add_space flash
+ *      increment algorithm.  The field is ignored unless flash_incr_mode is
+ *      H5C_flash_incr__add_space.
+ *
+ *
+ * Cache size decrease control fields:
+ *
+ * decr_mode: Instance of the H5C_cache_decr_mode enumerated type whose
+ *      value indicates how we determine whether the cache size should be
+ *      decreased.  At present there are four possibilities.
+ *
+ *      H5C_decr__off:  Don't attempt to decrease the size of the cache
+ *              automatically.
+ *
+ *              When this increment mode is selected, the remaining fields
+ *              in the cache size decrease section are ignored.
+ *
+ *      H5C_decr__threshold: Attempt to decrease the size of the cache
+ *              whenever the average hit rate over the last epoch rises
+ *              above the value supplied in the upper_hr_threshold
+ *              field.
+ *
+ *      H5C_decr__age_out:  At the end of each epoch, search the cache for
+ *              entries that have not been accessed for at least the number
+ *              of epochs specified in the epochs_before_eviction field, and
+ *              evict these entries.  Conceptually, the maximum cache size
+ *              is then decreased to match the new actual cache size.  However,
+ *              this reduction may be modified by the min_size, the
+ *              max_decrement, and/or the empty_reserve.
+ *
+ *      H5C_decr__age_out_with_threshold:  Same as age_out, but we only
+ *              attempt to reduce the cache size when the hit rate observed
+ *              over the last epoch exceeds the value provided in the
+ *              upper_hr_threshold field.
+ *
+ *      Note that you must set decr_mode to H5C_decr__off if you
+ *      disable metadata cache entry evictions.
+ *
+ * upper_hr_threshold: Upper hit rate threshold.  The use of this field
+ *      varies according to the current decr_mode:
+ *
+ *      H5C_decr__off or H5C_decr__age_out:  The value of this field is
+ *              ignored.
+ *
+ *      H5C_decr__threshold:  If the hit rate exceeds this threshold in any
+ *              epoch, attempt to decrement the cache size by size_decrement.
+ *
+ *              Note that cache size may not be decremented below min_size.
+ *
+ *              Note also that if the upper_threshold is 1.0, the cache size
+ *              will never be reduced.
+ *
+ *      H5C_decr__age_out_with_threshold:  If the hit rate exceeds this
+ *              threshold in any epoch, attempt to reduce the cache size
+ *              by evicting entries that have not been accessed for more
+ *              than the specified number of epochs.
+ *
+ * decrement: This field is only used when the decr_mode is
+ *      H5C_decr__threshold.
+ *
+ *      The field is a double containing the multiplier used to derive the
+ *      new cache size from the old if a cache size decrement is triggered.
+ *      The decrement must be in the range 0.0 (in which case the cache will
+ *      try to contract to its minimum size) to 1.0 (in which case the
+ *      cache will never shrink).
+ *
+ * apply_max_decrement:  Boolean flag used to determine whether decrements
+ *      in cache size are to be limited by the max_decrement field.
+ *
+ * max_decrement: Maximum number of bytes by which the cache size can be
+ *      decreased in a single re-size.  Note that decrements may also be
+ *      restricted by the min_size of the cache, and (in age out modes) by
+ *      the empty_reserve field.
+ *
+ * epochs_before_eviction:  Integer field used in H5C_decr__age_out and
+ *      H5C_decr__age_out_with_threshold decrement modes.
+ *
+ *      This field contains the number of epochs an entry must remain
+ *      unaccessed before it is evicted in an attempt to reduce the
+ *      cache size.  If applicable, this field must lie in the range
+ *      [1, H5C__MAX_EPOCH_MARKERS].
+ *
+ * apply_empty_reserve:  Boolean field controlling whether the empty_reserve
+ *      field is to be used in computing the new cache size when the
+ *      decr_mode is H5C_decr__age_out or H5C_decr__age_out_with_threshold.
+ *
+ * empty_reserve:  To avoid a constant racheting down of cache size by small
+ *      amounts in the H5C_decr__age_out and H5C_decr__age_out_with_threshold
+ *      modes, this field allows one to require that any cache size
+ *      reductions leave the specified fraction of unused space in the cache.
+ *
+ *      The value of this field must be in the range [0.0, 1.0].  I would
+ *      expect typical values to be in the range of 0.01 to 0.1.
+ *
+ *
+ * Parallel Configuration Fields:
+ *
+ * In PHDF5, all operations that modify metadata must be executed collectively.
+ *
+ * We used to think that this was enough to ensure consistency across the
+ * metadata caches, but since we allow processes to read metadata individually,
+ * the order of dirty entries in the LRU list can vary across processes,
+ * which can result in inconsistencies between the caches.
+ *
+ * PHDF5 uses several strategies to prevent such inconsistencies in metadata,
+ * all of which use the fact that the same stream of dirty metadata is seen
+ * by all processes for purposes of synchronization.  This is done by 
+ * having each process count the number of bytes of dirty metadata generated,
+ * and then running a "sync point" whenever this count exceeds a user 
+ * specified threshold (see dirty_bytes_threshold below).
+ *
+ * The current metadata write strategy is indicated by the 
+ * metadata_write_strategy field.  The possible values of this field, along
+ * with the associated metadata write strategies are discussed below.
+ *
+ * dirty_bytes_threshold:  Threshold of dirty byte creation used to
+ * 	synchronize updates between caches. (See above for outline and
+ *	motivation.)
+ *
+ *	This value MUST be consistant across all processes accessing the
+ *	file.  This field is ignored unless HDF5 has been compiled for
+ *	parallel.
+ *
+ * metadata_write_strategy: Integer field containing a code indicating the
+ *	desired metadata write strategy.  The valid values of this field
+ *	are enumerated and discussed below:
+ *
+ *
+ *	H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY:
+ *
+ *	When metadata_write_strategy is set to this value, only process 
+ *	zero is allowed to write dirty metadata to disk.  All other 
+ *	processes must retain dirty metadata until they are informed at
+ *	a sync point that the dirty metadata in question has been written
+ *	to disk.
+ *
+ *	When the sync point is reached (or when there is a user generated
+ *	flush), process zero flushes sufficient entries to bring it into
+ *	complience with its min clean size (or flushes all dirty entries in
+ *	the case of a user generated flush), broad casts the list of 
+ *	entries just cleaned to all the other processes, and then exits
+ *	the sync point.
+ *
+ *	Upon receipt of the broadcast, the other processes mark the indicated
+ *	entries as clean, and leave the sync point as well.
+ *
+ *
+ *	H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED:
+ *
+ *	In the distributed metadata write strategy, process zero still makes
+ *	the decisions as to what entries should be flushed, but the actual 
+ *	flushes are distributed across the processes in the computation to 
+ *	the extent possible.
+ *
+ *	In this strategy, when a sync point is triggered (either by dirty
+ *	metadata creation or manual flush), all processes enter a barrier.
+ *
+ *	On the other side of the barrier, process 0 constructs an ordered
+ *	list of the entries to be flushed, and then broadcasts this list
+ *	to the caches in all the processes.
+ *
+ *	All processes then scan the list of entries to be flushed, flushing
+ *	some, and marking the rest as clean.  The algorithm for this purpose
+ *	ensures that each entry in the list is flushed exactly once, and 
+ *	all are marked clean in each cache.
+ *
+ *	Note that in the case of a flush of the cache, no message passing
+ *	is necessary, as all processes have the same list of dirty entries, 
+ *	and all of these entries must be flushed.  Thus in this case it is 
+ *	sufficient for each process to sort its list of dirty entries after 
+ *	leaving the initial barrier, and use this list as if it had been 
+ *	received from process zero.
+ *
+ *	To avoid possible messages from the past/future, all caches must
+ *	wait until all caches are done before leaving the sync point.
+ *      
+ ****************************************************************************/
+
+#define H5AC__CURR_CACHE_CONFIG_VERSION 	1
+#define H5AC__MAX_TRACE_FILE_NAME_LEN		1024
+
+#define H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY    0
+#define H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED       1
+
+typedef struct H5AC_cache_config_t
+{
+    /* general configuration fields: */
+    int                      version;
+
+    hbool_t		     rpt_fcn_enabled;
+
+    hbool_t		     open_trace_file;
+    hbool_t                  close_trace_file;
+    char                     trace_file_name[H5AC__MAX_TRACE_FILE_NAME_LEN + 1];
+
+    hbool_t                  evictions_enabled;
+
+    hbool_t                  set_initial_size;
+    size_t                   initial_size;
+
+    double                   min_clean_fraction;
+
+    size_t                   max_size;
+    size_t                   min_size;
+
+    long int                 epoch_length;
+
+
+    /* size increase control fields: */
+    enum H5C_cache_incr_mode incr_mode;
+
+    double                   lower_hr_threshold;
+
+    double                   increment;
+
+    hbool_t                  apply_max_increment;
+    size_t                   max_increment;
+
+    enum H5C_cache_flash_incr_mode      flash_incr_mode;
+    double                              flash_multiple;
+    double                              flash_threshold;
+
+
+    /* size decrease control fields: */
+    enum H5C_cache_decr_mode decr_mode;
+
+    double                   upper_hr_threshold;
+
+    double                   decrement;
+
+    hbool_t                  apply_max_decrement;
+    size_t                   max_decrement;
+
+    int                      epochs_before_eviction;
+
+    hbool_t                  apply_empty_reserve;
+    double                   empty_reserve;
+
+
+    /* parallel configuration fields: */
+    int                      dirty_bytes_threshold;
+    int                      metadata_write_strategy;
+
+} H5AC_cache_config_t;
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5AbstractDs.h b/Resources/windows-libs/HDF5/include/H5AbstractDs.h
new file mode 100644
index 0000000000000000000000000000000000000000..6904d768df53d37d55a159dae6aef4645dda61e9
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5AbstractDs.h
@@ -0,0 +1,93 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __AbstractDs_H
+#define __AbstractDs_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class ArrayType;
+class CompType;
+class EnumType;
+class FloatType;
+class IntType;
+class StrType;
+class VarLenType;
+
+/*! \class AbstractDs
+    \brief AbstractDs is an abstract base class, inherited by Attribute
+     and DataSet.
+
+    It provides a collection of services that are common to both Attribute
+    and DataSet.  AbstractDs inherits from H5Object.
+*/
+class H5_DLLCPP AbstractDs {
+   public:
+	// Gets a copy the datatype of that this abstract dataset uses.
+	// Note that this datatype is a generic one and can only be accessed
+	// via generic member functions, i.e., member functions belong
+	// to DataType.  To get specific datatype, i.e. EnumType, FloatType,
+	// etc..., use the specific functions, that follow, instead.
+	DataType getDataType() const;
+
+	// Gets a copy of the specific datatype of this abstract dataset.
+	ArrayType getArrayType() const;
+	CompType getCompType() const;
+	EnumType getEnumType() const;
+	IntType getIntType() const;
+	FloatType getFloatType() const;
+	StrType getStrType() const;
+	VarLenType getVarLenType() const;
+
+	///\brief Gets the size in memory of this abstract dataset.
+	virtual size_t getInMemDataSize() const = 0;
+
+	///\brief Gets the dataspace of this abstract dataset - pure virtual.
+	virtual DataSpace getSpace() const = 0;
+
+	// Gets the class of the datatype that is used by this abstract
+	// dataset.
+	H5T_class_t getTypeClass() const;
+
+	///\brief Returns the amount of storage size required - pure virtual.
+	virtual hsize_t getStorageSize() const = 0;
+
+	// Returns this class name - pure virtual.
+	virtual H5std_string fromClass() const = 0;
+
+	// Copy constructor
+	AbstractDs( const AbstractDs& original );
+
+	// Destructor
+	virtual ~AbstractDs();
+
+   protected:
+	// Default constructor
+	AbstractDs();
+
+	// Constructor that takes an attribute id or a dataset id.
+	AbstractDs( const hid_t ds_id );
+
+   private:
+	// This member function is implemented by DataSet and Attribute - pure virtual.
+	virtual hid_t p_get_type() const = 0;
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __AbstractDs_H
diff --git a/Resources/windows-libs/HDF5/include/H5Alltypes.h b/Resources/windows-libs/HDF5/include/H5Alltypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..b1d792d9bd3fa080045ffbd5a78ad868ddb062dc
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Alltypes.h
@@ -0,0 +1,29 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// This header file simply serves as a container to hold the
+// header files of all datatypes.  It simplifies the header
+// file including in the code.
+
+#include "H5DataType.h"
+#include "H5AtomType.h"
+#include "H5EnumType.h"
+#include "H5IntType.h"
+#include "H5FloatType.h"
+#include "H5StrType.h"
+#include "H5CompType.h"
+#include "H5ArrayType.h"
+#include "H5VarLenType.h"
diff --git a/Resources/windows-libs/HDF5/include/H5Apkg.h b/Resources/windows-libs/HDF5/include/H5Apkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..fa26a9a3d4efff3884b3e3fe72fdf81edf481f99
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Apkg.h
@@ -0,0 +1,272 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol
+ *              Monday, Apr 20
+ *
+ * Purpose:     This file contains declarations which are visible only within
+ *              the H5A package.  Source files outside the H5A package should
+ *              include H5Aprivate.h instead.
+ */
+#ifndef H5A_PACKAGE
+#error "Do not include this file outside the H5A package!"
+#endif
+
+#ifndef _H5Apkg_H
+#define _H5Apkg_H
+
+/*
+ * Define this to enable debugging.
+ */
+#ifdef NDEBUG
+#  undef H5A_DEBUG
+#endif
+
+/* Get package's private header */
+#include "H5Aprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5B2private.h"	/* v2 B-trees				*/
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5HFprivate.h"	/* Fractal heaps			*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Sprivate.h"		/* Dataspace				*/
+#include "H5Tprivate.h"		/* Datatype functions			*/
+
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* This is the initial version, which does not have support for shared datatypes */
+#define H5O_ATTR_VERSION_1	1
+
+/* This version allows support for shared datatypes & dataspaces by adding a
+ *      'flag' byte indicating when those components are shared.  This version
+ *      also dropped the alignment on all the components.
+ */
+#define H5O_ATTR_VERSION_2	2
+
+/* Add support for different character encodings of attribute names */
+#define H5O_ATTR_VERSION_3      3
+
+/* The latest version of the format.  Look through the 'encode', 'decode'
+ *      and 'size' message callbacks for places to change when updating this.
+ */
+#define H5O_ATTR_VERSION_LATEST H5O_ATTR_VERSION_3
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+/* Define the shared attribute structure */
+typedef struct H5A_shared_t {
+    uint8_t     version;    /* Version to encode attribute with */
+
+    char        *name;      /* Attribute's name */
+    H5T_cset_t  encoding;   /* Character encoding of attribute name */
+
+    H5T_t       *dt;        /* Attribute's datatype */
+    size_t      dt_size;    /* Size of datatype on disk */
+
+    H5S_t       *ds;        /* Attribute's dataspace */
+    size_t      ds_size;    /* Size of dataspace on disk */
+
+    void        *data;      /* Attribute data (on a temporary basis) */
+    size_t      data_size;  /* Size of data on disk */
+    H5O_msg_crt_idx_t crt_idx;  /* Attribute's creation index in the object header */
+    unsigned	nrefs;		/* Ref count for times this object is refered	*/
+} H5A_shared_t;
+
+/* Define the main attribute structure */
+struct H5A_t {
+    H5O_shared_t sh_loc;     /* Shared message info (must be first) */
+    H5O_loc_t    oloc;       /* Object location for object attribute is on */
+    hbool_t      obj_opened; /* Object header entry opened? */
+    H5G_name_t   path;       /* Group hierarchy path */
+    H5A_shared_t *shared;    /* Shared attribute information */
+};
+
+/* Typedefs for "dense" attribute storage */
+/* (fractal heap & v2 B-tree info) */
+
+/* Typedef for native 'name' field index records in the v2 B-tree */
+/* (Keep 'id' field first so generic record handling in callbacks works) */
+typedef struct H5A_dense_bt2_name_rec_t {
+    H5O_fheap_id_t id;                  /* Heap ID for attribute */
+    uint8_t flags;                      /* Object header message flags for attribute */
+    H5O_msg_crt_idx_t corder;           /* 'creation order' field value */
+    uint32_t hash;                      /* Hash of 'name' field value */
+} H5A_dense_bt2_name_rec_t;
+
+/* Typedef for native 'creation order' field index records in the v2 B-tree */
+/* (Keep 'id' field first so generic record handling in callbacks works) */
+typedef struct H5A_dense_bt2_corder_rec_t {
+    H5O_fheap_id_t id;                  /* Heap ID for attribute */
+    uint8_t flags;                      /* Object header message flags for attribute */
+    H5O_msg_crt_idx_t corder;           /* 'creation order' field value */
+} H5A_dense_bt2_corder_rec_t;
+
+/* Define the 'found' callback function pointer for matching an attribute record in a v2 B-tree */
+typedef herr_t (*H5A_bt2_found_t)(const H5A_t *attr, hbool_t *took_ownership, void *op_data);
+
+/*
+ * Common data exchange structure for dense attribute storage.  This structure
+ * is passed through the v2 B-tree layer to the methods for the objects
+ * to which the v2 B-tree points.
+ */
+typedef struct H5A_bt2_ud_common_t {
+    /* downward */
+    H5F_t       *f;                     /* Pointer to file that fractal heap is in */
+    hid_t       dxpl_id;                /* DXPL for operation                */
+    H5HF_t      *fheap;                 /* Fractal heap handle               */
+    H5HF_t      *shared_fheap;          /* Fractal heap handle for shared messages */
+    const char  *name;                  /* Name of attribute to compare      */
+    uint32_t    name_hash;              /* Hash of name of attribute to compare */
+    uint8_t     flags;                  /* Flags for attribute storage location */
+    H5O_msg_crt_idx_t corder;           /* Creation order value of attribute to compare */
+    H5A_bt2_found_t found_op;           /* Callback when correct attribute is found */
+    void        *found_op_data;         /* Callback data when correct attribute is found */
+} H5A_bt2_ud_common_t;
+
+/*
+ * Data exchange structure for dense attribute storage.  This structure is
+ * passed through the v2 B-tree layer when inserting attributes.
+ */
+typedef struct H5A_bt2_ud_ins_t {
+    /* downward */
+    H5A_bt2_ud_common_t common;         /* Common info for B-tree user data (must be first) */
+    H5O_fheap_id_t id;                  /* Heap ID of attribute to insert    */
+} H5A_bt2_ud_ins_t;
+
+/* Data structure to hold table of attributes for an object */
+typedef struct {
+    size_t      nattrs;         /* # of attributes in table */
+    H5A_t       **attrs;        /* Pointer to array of attribute pointers */
+} H5A_attr_table_t;
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/* Declare extern the free list for H5A_t's */
+H5FL_EXTERN(H5A_t);
+
+/* Declare the external free lists for H5A_shared_t's */
+H5FL_EXTERN(H5A_shared_t);
+
+/* Declare extern a free list to manage blocks of type conversion data */
+H5FL_BLK_EXTERN(attr_buf);
+
+/* The v2 B-tree class for indexing 'name' field on attributes */
+H5_DLLVAR const H5B2_class_t H5A_BT2_NAME[1];
+
+/* The v2 B-tree class for indexing 'creation order' field on attributes */
+H5_DLLVAR const H5B2_class_t H5A_BT2_CORDER[1];
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+/* Function prototypes for H5A package scope */
+H5_DLL herr_t H5A_init(void);
+H5_DLL herr_t H5A__term_deprec_interface(void);
+H5_DLL hid_t H5A_create(const H5G_loc_t *loc, const char *name,
+    const H5T_t *type, const H5S_t *space, hid_t acpl_id, hid_t dxpl_id);
+H5_DLL H5A_t * H5A_open_by_name(const H5G_loc_t *loc, const char *obj_name,
+    const char *attr_name, hid_t lapl_id, hid_t dxpl_id);
+H5_DLL H5A_t *H5A_open_by_idx(const H5G_loc_t *loc, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id, hid_t dxpl_id);
+H5_DLL ssize_t H5A_get_name(H5A_t *attr, size_t buf_size, char *buf);
+H5_DLL H5A_t *H5A_copy(H5A_t *new_attr, const H5A_t *old_attr);
+H5_DLL herr_t H5A_get_info(const H5A_t *attr, H5A_info_t *ainfo);
+H5_DLL herr_t H5A_free(H5A_t *attr);
+H5_DLL herr_t H5A_close(H5A_t *attr);
+H5_DLL htri_t H5A_get_ainfo(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5O_ainfo_t *ainfo);
+H5_DLL herr_t H5A_set_version(const H5F_t *f, H5A_t *attr);
+
+/* Attribute "dense" storage routines */
+H5_DLL herr_t H5A_dense_create(H5F_t *f, hid_t dxpl_id, H5O_ainfo_t *ainfo);
+H5_DLL H5A_t *H5A_dense_open(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
+    const char *name);
+H5_DLL herr_t H5A_dense_insert(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
+    H5A_t *attr);
+H5_DLL herr_t H5A_dense_write(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
+    H5A_t *attr);
+H5_DLL herr_t H5A_dense_rename(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
+    const char *old_name, const char *new_name);
+H5_DLL herr_t H5A_dense_iterate(H5F_t *f, hid_t dxpl_id, hid_t loc_id,
+    const H5O_ainfo_t *ainfo, H5_index_t idx_type, H5_iter_order_t order,
+    hsize_t skip, hsize_t *last_attr, const H5A_attr_iter_op_t *attr_op,
+    void *op_data);
+H5_DLL herr_t H5A_dense_remove(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
+    const char *name);
+H5_DLL herr_t H5A_dense_remove_by_idx(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n);
+H5_DLL htri_t H5A_dense_exists(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
+    const char *name);
+H5_DLL herr_t H5A_dense_delete(H5F_t *f, hid_t dxpl_id, H5O_ainfo_t *ainfo);
+
+
+/* Attribute table operations */
+H5_DLL herr_t H5A_compact_build_table(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    H5_index_t idx_type, H5_iter_order_t order, H5A_attr_table_t *atable);
+H5_DLL herr_t H5A_dense_build_table(H5F_t *f, hid_t dxpl_id,
+    const H5O_ainfo_t *ainfo, H5_index_t idx_type, H5_iter_order_t order,
+    H5A_attr_table_t *atable);
+H5_DLL herr_t H5A_attr_iterate_table(const H5A_attr_table_t *atable,
+    hsize_t skip, hsize_t *last_attr, hid_t loc_id,
+    const H5A_attr_iter_op_t *attr_op, void *op_data);
+H5_DLL herr_t H5A_attr_release_table(H5A_attr_table_t *atable);
+
+/* Attribute operations */
+H5_DLL herr_t H5O_attr_create(const H5O_loc_t *loc, hid_t dxpl_id, H5A_t *attr);
+H5_DLL H5A_t *H5O_attr_open_by_name(const H5O_loc_t *loc, const char *name,
+    hid_t dxpl_id);
+H5_DLL H5A_t *H5O_attr_open_by_idx(const H5O_loc_t *loc, H5_index_t idx_type,
+    H5_iter_order_t order, hsize_t n, hid_t dxpl_id);
+H5_DLL herr_t H5O_attr_update_shared(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+        H5A_t *attr, H5O_shared_t *sh_mesg);
+H5_DLL herr_t H5O_attr_write(const H5O_loc_t *loc, hid_t dxpl_id,
+    H5A_t *attr);
+H5_DLL herr_t H5O_attr_rename(const H5O_loc_t *loc, hid_t dxpl_id,
+    const char *old_name, const char *new_name);
+H5_DLL herr_t H5O_attr_remove(const H5O_loc_t *loc, const char *name,
+    hid_t dxpl_id);
+H5_DLL herr_t H5O_attr_remove_by_idx(const H5O_loc_t *loc, H5_index_t idx_type,
+    H5_iter_order_t order, hsize_t n, hid_t dxpl_id);
+H5_DLL htri_t H5O_attr_exists(const H5O_loc_t *loc, const char *name, hid_t dxpl_id);
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+H5_DLL int H5O_attr_count(const H5O_loc_t *loc, hid_t dxpl_id);
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+H5_DLL H5A_t *H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_size,
+    H5O_copy_t *cpy_info, hid_t dxpl_id);
+H5_DLL herr_t H5A_attr_post_copy_file(const H5O_loc_t *src_oloc, const H5A_t *mesg_src,
+    H5O_loc_t *dst_oloc, const H5A_t *mesg_dst, hid_t dxpl_id, H5O_copy_t *cpy_info);
+H5_DLL herr_t H5A_dense_post_copy_file_all(const H5O_loc_t *src_oloc, const H5O_ainfo_t * ainfo_src,
+    H5O_loc_t *dst_oloc, H5O_ainfo_t *ainfo_dst, hid_t dxpl_id, H5O_copy_t *cpy_info);
+
+
+/* Testing functions */
+#ifdef H5A_TESTING
+H5_DLL htri_t H5A_is_shared_test(hid_t aid);
+H5_DLL herr_t H5A_get_shared_rc_test(hid_t attr_id, hsize_t *ref_count);
+#endif /* H5A_TESTING */
+
+#endif /* _H5Apkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Apublic.h b/Resources/windows-libs/HDF5/include/H5Apublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..99ca90e114a779e464ad138f57e5b045baf30a13
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Apublic.h
@@ -0,0 +1,120 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5A module.
+ */
+#ifndef _H5Apublic_H
+#define _H5Apublic_H
+
+/* Public headers needed by this file */
+#include "H5Ipublic.h"		/* IDs			  		*/
+#include "H5Opublic.h"		/* Object Headers			*/
+#include "H5Tpublic.h"		/* Datatypes				*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Information struct for attribute (for H5Aget_info/H5Aget_info_by_idx) */
+typedef struct {
+    hbool_t             corder_valid;   /* Indicate if creation order is valid */
+    H5O_msg_crt_idx_t   corder;         /* Creation order                 */
+    H5T_cset_t          cset;           /* Character set of attribute name */
+    hsize_t             data_size;      /* Size of raw data		  */
+} H5A_info_t;
+
+/* Typedef for H5Aiterate2() callbacks */
+typedef herr_t (*H5A_operator2_t)(hid_t location_id/*in*/,
+    const char *attr_name/*in*/, const H5A_info_t *ainfo/*in*/, void *op_data/*in,out*/);
+
+/* Public function prototypes */
+H5_DLL hid_t   H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id,
+    hid_t space_id, hid_t acpl_id, hid_t aapl_id);
+H5_DLL hid_t   H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
+    hid_t type_id, hid_t space_id, hid_t acpl_id, hid_t aapl_id, hid_t lapl_id);
+H5_DLL hid_t   H5Aopen(hid_t obj_id, const char *attr_name, hid_t aapl_id);
+H5_DLL hid_t   H5Aopen_by_name(hid_t loc_id, const char *obj_name,
+    const char *attr_name, hid_t aapl_id, hid_t lapl_id);
+H5_DLL hid_t   H5Aopen_by_idx(hid_t loc_id, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t aapl_id,
+    hid_t lapl_id);
+H5_DLL herr_t  H5Awrite(hid_t attr_id, hid_t type_id, const void *buf);
+H5_DLL herr_t  H5Aread(hid_t attr_id, hid_t type_id, void *buf);
+H5_DLL herr_t  H5Aclose(hid_t attr_id);
+H5_DLL hid_t   H5Aget_space(hid_t attr_id);
+H5_DLL hid_t   H5Aget_type(hid_t attr_id);
+H5_DLL hid_t   H5Aget_create_plist(hid_t attr_id);
+H5_DLL ssize_t H5Aget_name(hid_t attr_id, size_t buf_size, char *buf);
+H5_DLL ssize_t H5Aget_name_by_idx(hid_t loc_id, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    char *name /*out*/, size_t size, hid_t lapl_id);
+H5_DLL hsize_t H5Aget_storage_size(hid_t attr_id);
+H5_DLL herr_t  H5Aget_info(hid_t attr_id, H5A_info_t *ainfo /*out*/);
+H5_DLL herr_t  H5Aget_info_by_name(hid_t loc_id, const char *obj_name,
+    const char *attr_name, H5A_info_t *ainfo /*out*/, hid_t lapl_id);
+H5_DLL herr_t  H5Aget_info_by_idx(hid_t loc_id, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    H5A_info_t *ainfo /*out*/, hid_t lapl_id);
+H5_DLL herr_t  H5Arename(hid_t loc_id, const char *old_name, const char *new_name);
+H5_DLL herr_t  H5Arename_by_name(hid_t loc_id, const char *obj_name,
+    const char *old_attr_name, const char *new_attr_name, hid_t lapl_id);
+H5_DLL herr_t  H5Aiterate2(hid_t loc_id, H5_index_t idx_type,
+    H5_iter_order_t order, hsize_t *idx, H5A_operator2_t op, void *op_data);
+H5_DLL herr_t  H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
+    H5_iter_order_t order, hsize_t *idx, H5A_operator2_t op, void *op_data,
+    hid_t lapd_id);
+H5_DLL herr_t  H5Adelete(hid_t loc_id, const char *name);
+H5_DLL herr_t  H5Adelete_by_name(hid_t loc_id, const char *obj_name,
+    const char *attr_name, hid_t lapl_id);
+H5_DLL herr_t  H5Adelete_by_idx(hid_t loc_id, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id);
+H5_DLL htri_t H5Aexists(hid_t obj_id, const char *attr_name);
+H5_DLL htri_t H5Aexists_by_name(hid_t obj_id, const char *obj_name,
+    const char *attr_name, hid_t lapl_id);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+
+/* Typedefs */
+
+/* Typedef for H5Aiterate1() callbacks */
+typedef herr_t (*H5A_operator1_t)(hid_t location_id/*in*/,
+    const char *attr_name/*in*/, void *operator_data/*in,out*/);
+
+
+/* Function prototypes */
+H5_DLL hid_t   H5Acreate1(hid_t loc_id, const char *name, hid_t type_id,
+    hid_t space_id, hid_t acpl_id);
+H5_DLL hid_t   H5Aopen_name(hid_t loc_id, const char *name);
+H5_DLL hid_t   H5Aopen_idx(hid_t loc_id, unsigned idx);
+H5_DLL int     H5Aget_num_attrs(hid_t loc_id);
+H5_DLL herr_t  H5Aiterate1(hid_t loc_id, unsigned *attr_num, H5A_operator1_t op,
+    void *op_data);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _H5Apublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5ArrayType.h b/Resources/windows-libs/HDF5/include/H5ArrayType.h
new file mode 100644
index 0000000000000000000000000000000000000000..511126ee4a49a0cd696bc8f06a801f7b5b3329c9
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5ArrayType.h
@@ -0,0 +1,63 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5ArrayType_H
+#define __H5ArrayType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class ArrayType
+    \brief Class ArrayType inherits from DataType and provides wrappers for
+     the HDF5's Array Datatypes.
+*/
+class H5_DLLCPP ArrayType : public DataType {
+   public:
+	// Constructor that creates a new array data type based on the
+	// specified base type.
+	ArrayType(const DataType& base_type, int ndims, const hsize_t* dims);
+
+	// Returns the number of dimensions of this array datatype.
+	int getArrayNDims();
+
+	// Returns the sizes of dimensions of this array datatype.
+	int getArrayDims(hsize_t* dims);
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("ArrayType"); }
+
+	// Copy constructor: makes copy of the original object.
+	ArrayType( const ArrayType& original );
+
+	// Constructor that takes an existing id
+	ArrayType( const hid_t existing_id );
+
+	// Noop destructor
+	virtual ~ArrayType();
+
+   protected:
+	// Default constructor
+	ArrayType();
+
+   private:
+	int rank;		// Rank of the array
+	hsize_t* dimensions;	// Sizes of the array dimensions
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5ArrayType_H
diff --git a/Resources/windows-libs/HDF5/include/H5AtomType.h b/Resources/windows-libs/HDF5/include/H5AtomType.h
new file mode 100644
index 0000000000000000000000000000000000000000..792312ac8edcb5b55b0711cde25a92b3b5cfc701
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5AtomType.h
@@ -0,0 +1,85 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5AtomType_H
+#define __H5AtomType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class AtomType
+    \brief AtomType is a base class, inherited by IntType, FloatType,
+     StrType, and PredType.
+
+    AtomType provides operations on HDF5 atomic datatypes.  It also inherits
+    from DataType.
+*/
+class H5_DLLCPP AtomType : public DataType {
+   public:
+	// Returns the byte order of an atomic datatype.
+	H5T_order_t getOrder() const;
+	H5T_order_t getOrder( H5std_string& order_string ) const;
+
+	// Sets the byte ordering of an atomic datatype.
+	void setOrder( H5T_order_t order ) const;
+
+	// Retrieves the bit offset of the first significant bit.
+	// 12/05/00 - changed return type to int from size_t - C API
+	int getOffset() const;
+
+	// Sets the bit offset of the first significant bit.
+	void setOffset( size_t offset ) const;
+
+	// Retrieves the padding type of the least and most-significant bit padding.
+	void getPad( H5T_pad_t& lsb, H5T_pad_t& msb ) const;
+
+	// Sets the least and most-significant bits padding types
+	void setPad( H5T_pad_t lsb, H5T_pad_t msb ) const;
+
+	// Returns the precision of an atomic datatype.
+	size_t getPrecision() const;
+
+	// Sets the precision of an atomic datatype.
+	void setPrecision( size_t precision ) const;
+
+	// Sets the total size for an atomic datatype.
+	void setSize( size_t size ) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("AtomType"); }
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Copy constructor - makes copy of the original object
+	AtomType( const AtomType& original );
+
+	// Noop destructor
+	virtual ~AtomType();
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Default constructor
+	AtomType();
+
+	// Constructor that takes an existing id
+	AtomType( const hid_t existing_id );
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5AtomType_H
diff --git a/Resources/windows-libs/HDF5/include/H5Attribute.h b/Resources/windows-libs/HDF5/include/H5Attribute.h
new file mode 100644
index 0000000000000000000000000000000000000000..33c4db319646fe54fb8be61c1e3f1252dc4506f8
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Attribute.h
@@ -0,0 +1,114 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5Attribute_H
+#define __H5Attribute_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class Attribute
+    \brief Class Attribute operates on HDF5 attributes.
+
+    An attribute has many characteristics similar to a dataset, thus both
+    Attribute and DataSet are derivatives of AbstractDs.  Attribute also
+    inherits from IdComponent because an attribute is an HDF5 component that
+    is identified by an identifier.
+*/
+class H5_DLLCPP Attribute : public AbstractDs, public IdComponent {
+   public:
+	// Closes this attribute.
+	virtual void close();
+
+	// Gets the name of the file, in which this attribute belongs.
+	H5std_string getFileName() const;
+
+	// Gets the name of this attribute.
+	ssize_t getName(char* attr_name, size_t buf_size = 0) const;
+	H5std_string getName(size_t len) const;
+	H5std_string getName() const;
+	ssize_t getName(H5std_string& attr_name, size_t len = 0) const;
+	// The overloaded function below is replaced by the one above and it
+	// is kept for backward compatibility purpose.
+	ssize_t getName( size_t buf_size, H5std_string& attr_name ) const;
+
+	// Gets a copy of the dataspace for this attribute.
+	virtual DataSpace getSpace() const;
+
+	// Returns the amount of storage size required for this attribute.
+	virtual hsize_t getStorageSize() const;
+
+	// Returns the in memory size of this attribute's data.
+	virtual size_t getInMemDataSize() const;
+
+	// Reads data from this attribute.
+	void read( const DataType& mem_type, void *buf ) const;
+	void read( const DataType& mem_type, H5std_string& strg ) const;
+
+	// Writes data to this attribute.
+	void write(const DataType& mem_type, const void *buf ) const;
+	void write(const DataType& mem_type, const H5std_string& strg ) const;
+
+	// Flushes all buffers associated with the file specified by this
+	// attribute to disk.
+	void flush( H5F_scope_t scope ) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("Attribute"); }
+
+	// Creates a copy of an existing attribute using the attribute id
+	Attribute( const hid_t attr_id );
+
+	// Copy constructor: makes a copy of an existing Attribute object.
+	Attribute( const Attribute& original );
+
+	// Default constructor
+	Attribute();
+
+	// Gets the attribute id.
+	virtual hid_t getId() const;
+
+	// Destructor: properly terminates access to this attribute.
+	virtual ~Attribute();
+
+   protected:
+	// Sets the attribute id.
+	virtual void p_setId(const hid_t new_id);
+
+   private:
+	hid_t id;	// HDF5 attribute id
+
+	// This function contains the common code that is used by
+	// getTypeClass and various API functions getXxxType
+	// defined in AbstractDs for generic datatype and specific
+	// sub-types
+	virtual hid_t p_get_type() const;
+
+	// Reads variable or fixed len strings from this attribute.
+	void p_read_variable_len(const DataType& mem_type, H5std_string& strg) const;
+	void p_read_fixed_len(const DataType& mem_type, H5std_string& strg) const;
+
+	// do not inherit H5Object::iterateAttrs
+	int iterateAttrs() { return 0; }
+
+	// do not inherit H5Object::renameAttr
+	void renameAttr() {}
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5Attribute_H
diff --git a/Resources/windows-libs/HDF5/include/H5B2pkg.h b/Resources/windows-libs/HDF5/include/H5B2pkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..b820853b4c557afd52c29b5fc4d72e4208c97675
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5B2pkg.h
@@ -0,0 +1,366 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *		Monday, January 31, 2005
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5B2 package.  Source files outside the H5B2 package should
+ *		include H5B2private.h instead.
+ */
+#ifndef H5B2_PACKAGE
+#error "Do not include this file outside the H5B2 package!"
+#endif
+
+#ifndef _H5B2pkg_H
+#define _H5B2pkg_H
+
+/* Get package's private header */
+#include "H5B2private.h"
+
+/* Other private headers needed by this file */
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* Size of storage for number of records per node (on disk) */
+#define H5B2_SIZEOF_RECORDS_PER_NODE    (unsigned)2
+
+/* Size of a "tree pointer" (on disk) */
+/* (essentially, the largest internal pointer allowed) */
+#define H5B2_TREE_POINTER_SIZE(h)       (                                     \
+    (h)->sizeof_addr +                                                        \
+    H5B2_SIZEOF_RECORDS_PER_NODE +                                            \
+    (h)->sizeof_size                                                          \
+    )
+
+/* Size of a internal node pointer (on disk) */
+#define H5B2_INT_POINTER_SIZE(h, d) (                                         \
+    (unsigned)(h)->sizeof_addr  /* Address of child node */                   \
+    + (h)->max_nrec_size        /* # of records in child node */              \
+    + (h)->node_info[(d) - 1].cum_max_nrec_size /* Total # of records in child & below */ \
+    )
+
+/* Size of checksum information (on disk) */
+#define H5B2_SIZEOF_CHKSUM      4
+
+/* Format overhead for all v2 B-tree metadata in the file */
+#define H5B2_METADATA_PREFIX_SIZE (                                           \
+    (unsigned)H5_SIZEOF_MAGIC   /* Signature */                               \
+    + (unsigned)1 /* Version */                                               \
+    + (unsigned)1 /* Tree type */                                             \
+    + (unsigned)H5B2_SIZEOF_CHKSUM /* Metadata checksum */                    \
+    )
+
+/* Size of the v2 B-tree header on disk */
+#define H5B2_HEADER_SIZE(h)   (                                             \
+    /* General metadata fields */                                             \
+    H5B2_METADATA_PREFIX_SIZE                                                 \
+                                                                              \
+    /* Header specific fields */                                              \
+    + (unsigned)4 /* Node size, in bytes */                                   \
+    + (unsigned)2 /* Record size, in bytes */                                 \
+    + (unsigned)2 /* Depth of tree */                                         \
+    + (unsigned)1 /* Split % of full (as integer, ie. "98" means 98%) */      \
+    + (unsigned)1 /* Merge % of full (as integer, ie. "98" means 98%) */      \
+    + H5B2_TREE_POINTER_SIZE(h)  /* Node pointer to root node in tree */      \
+    )
+
+/* Size of the v2 B-tree internal node prefix */
+#define H5B2_INT_PREFIX_SIZE (                                                \
+    /* General metadata fields */                                             \
+    H5B2_METADATA_PREFIX_SIZE                                                 \
+                                                                              \
+    /* Header specific fields */                                              \
+    /* <none> */                                                              \
+    )
+
+/* Size of the v2 B-tree leaf node prefix */
+#define H5B2_LEAF_PREFIX_SIZE (                                               \
+    /* General metadata fields */                                             \
+    H5B2_METADATA_PREFIX_SIZE                                                 \
+                                                                              \
+    /* Header specific fields */                                              \
+    /* <none> */                                                              \
+    )
+
+/* Macro to retrieve pointer to i'th native record for native record buffer */
+#define H5B2_NAT_NREC(b, hdr, idx)  ((b) + (hdr)->nat_off[(idx)])
+
+/* Macro to retrieve pointer to i'th native record for internal node */
+#define H5B2_INT_NREC(i, hdr, idx)  H5B2_NAT_NREC((i)->int_native, (hdr), (idx))
+
+/* Macro to retrieve pointer to i'th native record for leaf node */
+#define H5B2_LEAF_NREC(l, hdr, idx)  H5B2_NAT_NREC((l)->leaf_native, (hdr), (idx))
+
+/* Number of records that fit into internal node */
+/* (accounts for extra node pointer by counting it in with the prefix bytes) */
+#define H5B2_NUM_INT_REC(h, d) \
+    (((h)->node_size - (H5B2_INT_PREFIX_SIZE + H5B2_INT_POINTER_SIZE(h, d))) / ((h)->rrec_size + H5B2_INT_POINTER_SIZE(h, d)))
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/* A "node pointer" to another B-tree node */
+typedef struct {
+    haddr_t     addr;           /* Address of other node */
+    uint16_t    node_nrec;      /* Number of records used in node pointed to */
+    hsize_t     all_nrec;       /* Number of records in node pointed to and all it's children */
+} H5B2_node_ptr_t;
+
+/* Information about a node at a given depth */
+typedef struct {
+    unsigned    max_nrec;       /* Max. number of records in node */
+    unsigned    split_nrec;     /* Number of records to split node at */
+    unsigned    merge_nrec;     /* Number of records to merge node at */
+    hsize_t     cum_max_nrec;   /* Cumulative max. # of records below this node's depth */
+    uint8_t     cum_max_nrec_size; /* Size to store cumulative max. # of records for this node (in bytes) */
+    H5FL_fac_head_t *nat_rec_fac;   /* Factory for native record blocks */
+    H5FL_fac_head_t *node_ptr_fac;  /* Factory for node pointer blocks */
+} H5B2_node_info_t;
+
+/* The B-tree header information */
+typedef struct H5B2_hdr_t {
+    /* Information for H5AC cache functions, _must_ be first field in structure */
+    H5AC_info_t cache_info;
+
+    /* Internal B-tree information (stored) */
+    H5B2_node_ptr_t root;       /* Node pointer to root node in B-tree        */
+
+    /* Information set by user (stored) */
+    uint8_t     split_percent;  /* Percent full at which to split the node, when inserting */
+    uint8_t     merge_percent;  /* Percent full at which to merge the node, when deleting */
+    uint32_t    node_size;      /* Size of B-tree nodes, in bytes             */
+    uint32_t    rrec_size;      /* Size of "raw" (on disk) record, in bytes   */
+
+    /* Dynamic information (stored) */
+    uint16_t	depth;		/* B-tree's overall depth                     */
+
+    /* Derived information from user's information (not stored) */
+    uint8_t     max_nrec_size;  /* Size to store max. # of records in any node (in bytes) */
+
+    /* Shared internal data structures (not stored) */
+    H5F_t       *f;             /* Pointer to the file that the B-tree is in */
+    haddr_t     addr;           /* Address of B-tree header in the file */
+    size_t      hdr_size;       /* Size of the B-tree header on disk */
+    size_t      rc;             /* Reference count of nodes using this header */
+    size_t      file_rc;        /* Reference count of files using this header */
+    hbool_t     pending_delete; /* B-tree is pending deletion */
+    uint8_t     sizeof_size;    /* Size of file sizes */
+    uint8_t     sizeof_addr;    /* Size of file addresses */
+    H5B2_remove_t remove_op;    /* Callback operator for deleting B-tree */
+    void        *remove_op_data;/* B-tree deletion callback's context */
+    uint8_t	*page;	        /* Common disk page for I/O */
+    size_t      *nat_off;       /* Array of offsets of native records */
+    H5B2_node_info_t *node_info; /* Table of node info structs for current depth of B-tree */
+
+    /* Client information (not stored) */
+    const H5B2_class_t *cls;	/* Class of B-tree client */
+    void        *cb_ctx;        /* Client callback context */
+} H5B2_hdr_t;
+
+/* B-tree leaf node information */
+typedef struct H5B2_leaf_t {
+    /* Information for H5AC cache functions, _must_ be first field in structure */
+    H5AC_info_t cache_info;
+
+    /* Internal B-tree information */
+    H5B2_hdr_t	*hdr;		/* Pointer to the [pinned] v2 B-tree header   */
+    uint8_t     *leaf_native;   /* Pointer to native records                  */
+    uint16_t    nrec;           /* Number of records in node                  */
+} H5B2_leaf_t;
+
+/* B-tree internal node information */
+typedef struct H5B2_internal_t {
+    /* Information for H5AC cache functions, _must_ be first field in structure */
+    H5AC_info_t cache_info;
+
+    /* Internal B-tree information */
+    H5B2_hdr_t	*hdr;		/* Pointer to the [pinned] v2 B-tree header   */
+    uint8_t     *int_native;    /* Pointer to native records                  */
+    H5B2_node_ptr_t *node_ptrs; /* Pointer to node pointers                   */
+    uint16_t    nrec;           /* Number of records in node                  */
+    uint16_t    depth;          /* Depth of this node in the B-tree           */
+} H5B2_internal_t;
+
+/* v2 B-tree */
+struct H5B2_t {
+    H5B2_hdr_t  *hdr;           /* Pointer to internal v2 B-tree header info */
+    H5F_t      *f;              /* Pointer to file for v2 B-tree */
+};
+
+/* Callback info for loading a free space header into the cache */
+typedef struct H5B2_hdr_cache_ud_t {
+    H5F_t *f;                   /* File that v2 b-tree header is within */
+    void *ctx_udata;            /* User-data for protecting */
+} H5B2_hdr_cache_ud_t;
+
+/* Callback info for loading a free space internal node into the cache */
+typedef struct H5B2_internal_cache_ud_t {
+    H5F_t *f;                   /* File that v2 b-tree header is within */
+    H5B2_hdr_t *hdr;            /* v2 B-tree header */
+    unsigned nrec;              /* Number of records in node to load */
+    unsigned depth;             /* Depth of node to load */
+} H5B2_internal_cache_ud_t;
+
+/* Callback info for loading a free space leaf node into the cache */
+typedef struct H5B2_leaf_cache_ud_t {
+    H5F_t *f;                   /* File that v2 b-tree header is within */
+    H5B2_hdr_t *hdr;            /* v2 B-tree header */
+    unsigned nrec;              /* Number of records in node to load */
+} H5B2_leaf_cache_ud_t;
+
+#ifdef H5B2_TESTING
+/* Node information for testing */
+typedef struct {
+    unsigned depth;             /* Depth of node */
+    unsigned nrec;              /* Number of records in node */
+} H5B2_node_info_test_t;
+#endif /* H5B2_TESTING */
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/* H5B2 header inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_BT2_HDR[1];
+
+/* H5B2 internal node inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_BT2_INT[1];
+
+/* H5B2 leaf node inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_BT2_LEAF[1];
+
+/* Declare a free list to manage the H5B2_internal_t struct */
+H5FL_EXTERN(H5B2_internal_t);
+
+/* Declare a free list to manage the H5B2_leaf_t struct */
+H5FL_EXTERN(H5B2_leaf_t);
+
+/* Internal v2 B-tree testing class */
+#ifdef H5B2_TESTING
+H5_DLLVAR const H5B2_class_t H5B2_TEST[1];
+#endif /* H5B2_TESTING */
+
+/* Array of v2 B-tree client ID -> client class mappings */
+extern const H5B2_class_t *const H5B2_client_class_g[H5B2_NUM_BTREE_ID];
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+/* Routines for managing B-tree header info */
+H5_DLL H5B2_hdr_t *H5B2_hdr_alloc(H5F_t *f);
+H5_DLL haddr_t H5B2_hdr_create(H5F_t *f, hid_t dxpl_id,
+    const H5B2_create_t *cparam, void *ctx_udata);
+H5_DLL herr_t H5B2_hdr_init(H5B2_hdr_t *hdr, const H5B2_create_t *cparam,
+    void *ctx_udata, uint16_t depth);
+H5_DLL herr_t H5B2_hdr_incr(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2_hdr_decr(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2_hdr_fuse_incr(H5B2_hdr_t *hdr);
+H5_DLL size_t H5B2_hdr_fuse_decr(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2_hdr_dirty(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2_hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id);
+
+/* Routines for operating on leaf nodes */
+H5B2_leaf_t *H5B2_protect_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr,
+    unsigned nrec, H5AC_protect_t rw);
+
+/* Routines for operating on internal nodes */
+H5_DLL H5B2_internal_t *H5B2_protect_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    haddr_t addr, unsigned nrec, unsigned depth, H5AC_protect_t rw);
+
+/* Routines for allocating nodes */
+H5_DLL herr_t H5B2_split_root(H5B2_hdr_t *hdr, hid_t dxpl_id);
+H5_DLL herr_t H5B2_create_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    H5B2_node_ptr_t *node_ptr);
+
+/* Routines for releasing structures */
+H5_DLL herr_t H5B2_hdr_free(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2_leaf_free(H5B2_leaf_t *l);
+H5_DLL herr_t H5B2_internal_free(H5B2_internal_t *i);
+
+/* Routines for inserting records */
+H5_DLL herr_t H5B2_insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    unsigned depth, unsigned *parent_cache_info_flags_ptr,
+    H5B2_node_ptr_t *curr_node_ptr, void *udata);
+H5_DLL herr_t H5B2_insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    H5B2_node_ptr_t *curr_node_ptr, void *udata);
+
+/* Routines for iterating over nodes/records */
+H5_DLL herr_t H5B2_iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+    const H5B2_node_ptr_t *curr_node, H5B2_operator_t op, void *op_data);
+H5_DLL herr_t H5B2_node_size(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    unsigned depth, const H5B2_node_ptr_t *curr_node, hsize_t *op_data);
+
+/* Routines for locating records */
+H5_DLL int H5B2_locate_record(const H5B2_class_t *type, unsigned nrec,
+    size_t *rec_off, const uint8_t *native, const void *udata, unsigned *idx);
+H5_DLL herr_t H5B2_neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    unsigned depth, H5B2_node_ptr_t *curr_node_ptr, void *neighbor_loc,
+    H5B2_compare_t comp, void *udata, H5B2_found_t op, void *op_data);
+H5_DLL herr_t H5B2_neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    H5B2_node_ptr_t *curr_node_ptr, void *neighbor_loc,
+    H5B2_compare_t comp, void *udata, H5B2_found_t op, void *op_data);
+
+/* Routines for removing records */
+H5_DLL herr_t H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    hbool_t *depth_decreased, void *swap_loc, unsigned depth, H5AC_info_t *parent_cache_info,
+    hbool_t * parent_cache_info_dirtied_ptr, H5B2_node_ptr_t *curr_node_ptr, void *udata,
+    H5B2_remove_t op, void *op_data);
+H5_DLL herr_t H5B2_remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    H5B2_node_ptr_t *curr_node_ptr, void *udata, H5B2_remove_t op,
+    void *op_data);
+H5_DLL herr_t H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    hbool_t *depth_decreased, void *swap_loc, unsigned depth, H5AC_info_t *parent_cache_info,
+    hbool_t * parent_cache_info_dirtied_ptr, H5B2_node_ptr_t *curr_node_ptr, hsize_t idx,
+    H5B2_remove_t op, void *op_data);
+H5_DLL herr_t H5B2_remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    H5B2_node_ptr_t *curr_node_ptr, unsigned idx, H5B2_remove_t op,
+    void *op_data);
+
+/* Routines for deleting nodes */
+H5_DLL herr_t H5B2_delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+    const H5B2_node_ptr_t *curr_node, H5B2_remove_t op, void *op_data);
+
+/* Debugging routines for dumping file structures */
+H5_DLL herr_t H5B2_hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+    FILE *stream, int indent, int fwidth, const H5B2_class_t *type, haddr_t obj_addr);
+H5_DLL herr_t H5B2_int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+    FILE *stream, int indent, int fwidth, const H5B2_class_t *type,
+    haddr_t hdr_addr, unsigned nrec, unsigned depth, haddr_t obj_addr);
+H5_DLL herr_t H5B2_leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+    FILE *stream, int indent, int fwidth, const H5B2_class_t *type,
+    haddr_t hdr_addr, unsigned nrec, haddr_t obj_addr);
+
+/* Testing routines */
+#ifdef H5B2_TESTING
+H5_DLL herr_t H5B2_get_root_addr_test(H5B2_t *bt2, haddr_t *root_addr);
+H5_DLL int H5B2_get_node_depth_test(H5B2_t *bt2, hid_t dxpl_id, void *udata);
+H5_DLL herr_t H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id,
+    void *udata, H5B2_node_info_test_t *ninfo);
+#endif /* H5B2_TESTING */
+
+#endif /* _H5B2pkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5B2public.h b/Resources/windows-libs/HDF5/include/H5B2public.h
new file mode 100644
index 0000000000000000000000000000000000000000..43ec5d781b1ffa09d1381ec04b00b9f6c8f9c224
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5B2public.h
@@ -0,0 +1,54 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5B2public.h
+ *                      Jan 31 2005
+ *                      Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *
+ * Purpose:             Public declarations for the v2 B-tree package.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef _H5B2public_H
+#define _H5B2public_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/**********************************/
+/* Public API Function Prototypes */
+/**********************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _H5B2public_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Bpkg.h b/Resources/windows-libs/HDF5/include/H5Bpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..46e2b28fc1d3108fbaaad9aa2fb60d5d584376f7
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Bpkg.h
@@ -0,0 +1,98 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *		Thursday, May 15, 2003
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5B package.  Source files outside the H5B package should
+ *		include H5Bprivate.h instead.
+ */
+#ifndef H5B_PACKAGE
+#error "Do not include this file outside the H5B package!"
+#endif
+
+#ifndef _H5Bpkg_H
+#define _H5Bpkg_H
+
+/* Get package's private header */
+#include "H5Bprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5FLprivate.h"        /* Free Lists                           */
+
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* Get the native key at a given index */
+#define H5B_NKEY(b, shared, idx)  ((b)->native + (shared)->nkey[(idx)])
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/* The B-tree node as stored in memory...  */
+typedef struct H5B_t {
+    H5AC_info_t        cache_info;     /* Information for H5AC cache functions */
+                                        /* _must_ be first field in structure */
+    H5RC_t		*rc_shared;	/*ref-counted shared info	     */
+    unsigned		level;		/*node level			     */
+    unsigned		nchildren;	/*number of child pointers	     */
+    haddr_t		left;		/*address of left sibling	     */
+    haddr_t		right;		/*address of right sibling	     */
+    uint8_t		*native;	/*array of keys in native format     */
+    haddr_t		*child;		/*2k child pointers		     */
+} H5B_t;
+
+/* Callback info for loading a B-tree node into the cache */
+typedef struct H5B_cache_ud_t {
+    H5F_t *f;                           /* File that B-tree node is within   */
+    const struct H5B_class_t *type;     /* Type of tree			     */
+    H5RC_t *rc_shared;                  /* Ref-counted shared info	     */
+} H5B_cache_ud_t;
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/* H5B header inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_BT[1];
+
+/* Declare a free list to manage the haddr_t sequence information */
+H5FL_SEQ_EXTERN(haddr_t);
+
+/* Declare a PQ free list to manage the native block information */
+H5FL_BLK_EXTERN(native_block);
+
+/* Declare a free list to manage the H5B_t struct */
+H5FL_EXTERN(H5B_t);
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+H5_DLL herr_t H5B_node_dest(H5B_t *bt);
+#ifdef H5B_DEBUG
+herr_t H5B_assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
+			 void *udata);
+#endif
+
+#endif /*_H5Bpkg_H*/
+
diff --git a/Resources/windows-libs/HDF5/include/H5Bpublic.h b/Resources/windows-libs/HDF5/include/H5Bpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..0016996075a42cc3e5ba720816e09ca2247e20f5
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Bpublic.h
@@ -0,0 +1,41 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Bproto.h
+ *                      Jul 10 1997
+ *                      Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5B package.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Bpublic_H
+#define _H5Bpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5Classes.h b/Resources/windows-libs/HDF5/include/H5Classes.h
new file mode 100644
index 0000000000000000000000000000000000000000..de7cf4a739dd19739eab6dea98f58d80f5b29f01
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Classes.h
@@ -0,0 +1,52 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5Classes_H
+#define __H5Classes_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+	class Exception;
+	class IdComponent;
+	class H5Location;
+	class H5Object;
+	class PropList;
+	class FileCreatPropList;
+	class FileAccPropList;
+	class DSetCreatPropList;
+	class DSetMemXferPropList;
+	class DTypePropList;
+	class DataType;
+	class DataSpace;
+	class AtomType;
+	class PredType;
+	class EnumType;
+	class IntType;
+	class FloatType;
+	class StrType;
+	class CompType;
+	//class RefType;
+	class AbstractDs;
+	class DataSet;
+	class Group;
+	class H5File;
+	class Attribute;
+	class H5Library;
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5Classes_H
diff --git a/Resources/windows-libs/HDF5/include/H5CommonFG.h b/Resources/windows-libs/HDF5/include/H5CommonFG.h
new file mode 100644
index 0000000000000000000000000000000000000000..f11548a56fb769b69bd1db687b60b873fb433d0c
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5CommonFG.h
@@ -0,0 +1,171 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __CommonFG_H
+#define __CommonFG_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+// Class forwarding
+class Group;
+class H5File;
+class ArrayType;
+class VarLenType;
+
+/*! \class CommonFG
+    \brief \a CommonFG is an abstract base class of H5File and H5Group.
+
+    It provides common operations of H5File and H5Group.
+*/
+class H5_DLLCPP CommonFG {
+   public:
+	// Creates a new group at this location which can be a file
+	// or another group.
+	Group createGroup(const char* name, size_t size_hint = 0) const;
+	Group createGroup(const H5std_string& name, size_t size_hint = 0) const;
+
+	// Opens an existing group in a location which can be a file
+	// or another group.
+	Group openGroup(const char* name) const;
+	Group openGroup(const H5std_string& name) const;
+
+	// Creates a new dataset at this location.
+	DataSet createDataSet(const char* name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT) const;
+	DataSet createDataSet(const H5std_string& name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT) const;
+
+	// Opens an existing dataset at this location.
+	DataSet openDataSet(const char* name) const;
+	DataSet openDataSet(const H5std_string& name) const;
+
+	// Returns the value of a symbolic link.
+	H5std_string getLinkval(const char* link_name, size_t size=0) const;
+	H5std_string getLinkval(const H5std_string& link_name, size_t size=0) const;
+
+	// Returns the number of objects in this group.
+	hsize_t getNumObjs() const;
+
+	// Retrieves the name of an object in this group, given the
+	// object's index.
+	H5std_string getObjnameByIdx(hsize_t idx) const;
+	ssize_t getObjnameByIdx(hsize_t idx, char* name, size_t size) const;
+	ssize_t getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size) const;
+
+	// Retrieves the type of an object in this file or group, given the
+	// object's name
+	H5O_type_t childObjType(const H5std_string& objname) const;
+	H5O_type_t childObjType(const char* objname) const;
+	H5O_type_t childObjType(hsize_t index, H5_index_t index_type=H5_INDEX_NAME, H5_iter_order_t order=H5_ITER_INC, const char* objname=".") const;
+
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+	// Returns the type of an object in this group, given the
+	// object's index.
+	H5G_obj_t getObjTypeByIdx(hsize_t idx) const;
+	H5G_obj_t getObjTypeByIdx(hsize_t idx, char* type_name) const;
+	H5G_obj_t getObjTypeByIdx(hsize_t idx, H5std_string& type_name) const;
+
+	// Returns information about an HDF5 object, given by its name,
+	// at this location.
+	void getObjinfo(const char* name, hbool_t follow_link, H5G_stat_t& statbuf) const;
+	void getObjinfo(const H5std_string& name, hbool_t follow_link, H5G_stat_t& statbuf) const;
+	void getObjinfo(const char* name, H5G_stat_t& statbuf) const;
+	void getObjinfo(const H5std_string& name, H5G_stat_t& statbuf) const;
+
+	// Iterates over the elements of this group - not implemented in
+	// C++ style yet.
+	int iterateElems(const char* name, int *idx, H5G_iterate_t op, void *op_data);
+	int iterateElems(const H5std_string& name, int *idx, H5G_iterate_t op, void *op_data);
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+	// Creates a link of the specified type from new_name to current_name;
+	// both names are interpreted relative to the specified location id.
+	void link(H5L_type_t link_type, const char* curr_name, const char* new_name) const;
+	void link(H5L_type_t link_type, const H5std_string& curr_name, const H5std_string& new_name) const;
+
+	// Removes the specified name at this location.
+	void unlink(const char* name) const;
+	void unlink(const H5std_string& name) const;
+
+	// Mounts the file 'child' onto this location.
+	void mount(const char* name, const H5File& child, const PropList& plist) const;
+	void mount(const char* name, H5File& child, PropList& plist) const; // backward compatibility
+	void mount(const H5std_string& name, const H5File& child, const PropList& plist) const;
+	void mount(const H5std_string& name, H5File& child, PropList& plist) const; // backward compatibility
+
+	// Unmounts the file named 'name' from this parent location.
+	void unmount(const char* name) const;
+	void unmount(const H5std_string& name) const;
+
+	// Renames an object at this location.
+	void move(const char* src, const char* dst) const;
+	void move(const H5std_string& src, const H5std_string& dst) const;
+
+	// Opens a generic named datatype in this location.
+	DataType openDataType(const char* name) const;
+	DataType openDataType(const H5std_string& name) const;
+
+	// Opens a named array datatype in this location.
+	ArrayType openArrayType(const char* name) const;
+	ArrayType openArrayType(const H5std_string& name) const;
+
+	// Opens a named compound datatype in this location.
+	CompType openCompType(const char* name) const;
+	CompType openCompType(const H5std_string& name) const;
+
+	// Opens a named enumeration datatype in this location.
+	EnumType openEnumType(const char* name) const;
+	EnumType openEnumType(const H5std_string& name) const;
+
+	// Opens a named integer datatype in this location.
+	IntType openIntType(const char* name) const;
+	IntType openIntType(const H5std_string& name) const;
+
+	// Opens a named floating-point datatype in this location.
+	FloatType openFloatType(const char* name) const;
+	FloatType openFloatType(const H5std_string& name) const;
+
+	// Opens a named string datatype in this location.
+	StrType openStrType(const char* name) const;
+	StrType openStrType(const H5std_string& name) const;
+
+	// Opens a named variable length datatype in this location.
+	VarLenType openVarLenType(const char* name) const;
+	VarLenType openVarLenType(const H5std_string& name) const;
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	/// For subclasses, H5File and Group, to return the correct
+	/// object id, i.e. file or group id.
+	virtual hid_t getLocId() const = 0;
+
+
+	/// For subclasses, H5File and Group, to throw appropriate exception.
+	virtual void throwException(const H5std_string& func_name, const H5std_string& msg) const = 0;
+
+	// Default constructor.
+	CommonFG();
+
+	// Noop destructor.
+	virtual ~CommonFG();
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+}; // end of CommonFG declaration
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __CommonFG_H
+
diff --git a/Resources/windows-libs/HDF5/include/H5CompType.h b/Resources/windows-libs/HDF5/include/H5CompType.h
new file mode 100644
index 0000000000000000000000000000000000000000..bd6d76c96e612593b24122d50338dfb75dce200a
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5CompType.h
@@ -0,0 +1,118 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5CompType_H
+#define __H5CompType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class CompType
+    \brief CompType is a derivative of a DataType and operates on HDF5
+    compound datatypes.
+*/
+class H5_DLLCPP CompType : public DataType {
+   public:
+	// Default constructor
+	CompType();
+
+	// Creates a compound datatype using an existing id
+	CompType( const hid_t existing_id );
+
+	// Creates a new compound datatype, given the type's size
+	CompType( size_t size ); // H5Tcreate
+
+	// Gets the compound datatype of the specified dataset
+	CompType( const DataSet& dataset );  // H5Dget_type
+
+	// Copy constructor - makes a copy of original object
+	CompType( const CompType& original );
+
+	// Returns the type class of the specified member of this compound
+	// datatype.  It provides to the user a way of knowing what type
+	// to create another datatype of the same class
+	H5T_class_t getMemberClass( unsigned member_num ) const;
+
+	// Returns the index of a member in this compound data type.
+	int getMemberIndex(const char* name) const;
+	int getMemberIndex(const H5std_string& name) const;
+
+	// Returns the offset of a member of this compound datatype.
+	size_t getMemberOffset( unsigned memb_no ) const;
+
+	// Returns the name of a member of this compound datatype.
+	H5std_string getMemberName( unsigned member_num ) const;
+
+	// Returns the generic datatype of the specified member in
+	// this compound datatype.
+	DataType getMemberDataType( unsigned member_num ) const;
+
+	// Returns the array datatype of the specified member in
+	// this compound datatype.
+	ArrayType getMemberArrayType( unsigned member_num ) const;
+
+	// Returns the compound datatype of the specified member in
+	// this compound datatype.
+	CompType getMemberCompType( unsigned member_num ) const;
+
+	// Returns the enumeration datatype of the specified member in
+	// this compound datatype.
+	EnumType getMemberEnumType( unsigned member_num ) const;
+
+	// Returns the integer datatype of the specified member in
+	// this compound datatype.
+	IntType getMemberIntType( unsigned member_num ) const;
+
+	// Returns the floating-point datatype of the specified member in
+	// this compound datatype.
+	FloatType getMemberFloatType( unsigned member_num ) const;
+
+	// Returns the string datatype of the specified member in
+	// this compound datatype.
+	StrType getMemberStrType( unsigned member_num ) const;
+
+	// Returns the variable length datatype of the specified member in
+	// this compound datatype.
+	VarLenType getMemberVarLenType( unsigned member_num ) const;
+
+	// Returns the number of members in this compound datatype.
+	int getNmembers() const;
+
+	// Adds a new member to this compound datatype.
+	void insertMember( const H5std_string& name, size_t offset, const DataType& new_member ) const;
+
+	// Recursively removes padding from within this compound datatype.
+	void pack() const;
+
+	// Sets the total size for this compound datatype.
+	void setSize(size_t size) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("CompType"); }
+
+	// Noop destructor.
+	virtual ~CompType();
+
+   private:
+	// Contains common code that is used by the member functions
+	// getMemberXxxType
+	hid_t p_get_member_type(unsigned member_num) const;
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5CompType_H
diff --git a/Resources/windows-libs/HDF5/include/H5Cpkg.h b/Resources/windows-libs/HDF5/include/H5Cpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..af39dfb9a22aaf3c1f2ed6242ff608622d5f2d94
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Cpkg.h
@@ -0,0 +1,3566 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: John Mainzer -- 10/12/04
+ *
+ * Purpose:     This file contains declarations which are normally visible
+ *              only within the H5C package.
+ *
+ *		Source files outside the H5C package should include
+ *		H5Cprivate.h instead.
+ *
+ *		The one exception to this rule is test/cache.c.  The test
+ *		code is easier to write if it can look at the cache's
+ *		internal data structures.  Indeed, this is the main
+ *		reason why this file was created.
+ */
+
+#ifndef H5C_PACKAGE
+#error "Do not include this file outside the H5C package!"
+#endif
+
+#ifndef _H5Cpkg_H
+#define _H5Cpkg_H
+
+
+/* Get package's private header */
+#include "H5Cprivate.h"
+
+
+/* Get needed headers */
+#include "H5SLprivate.h"        /* Skip lists */
+
+/* With the introduction of the fractal heap, it is now possible for
+ * entries to be dirtied, resized, and/or moved in the flush callbacks.
+ * As a result, on flushes, it may be necessary to make multiple passes
+ * through the slist before it is empty.  The H5C__MAX_PASSES_ON_FLUSH
+ * #define is used to set an upper limit on the number of passes.
+ * The current value was obtained via personal communication with
+ * Quincey.  I have applied a fudge factor of 2.
+ *
+ *						-- JRM
+ */
+
+#define H5C__MAX_PASSES_ON_FLUSH	4
+
+
+
+/****************************************************************************
+ *
+ * structure H5C_t
+ *
+ * Catchall structure for all variables specific to an instance of the cache.
+ *
+ * While the individual fields of the structure are discussed below, the
+ * following overview may be helpful.
+ *
+ * Entries in the cache are stored in an instance of H5TB_TREE, indexed on
+ * the entry's disk address.  While the H5TB_TREE is less efficient than
+ * hash table, it keeps the entries in address sorted order.  As flushes
+ * in parallel mode are more efficient if they are issued in increasing
+ * address order, this is a significant benefit.  Also the H5TB_TREE code
+ * was readily available, which reduced development time.
+ *
+ * While the cache was designed with multiple replacement policies in mind,
+ * at present only a modified form of LRU is supported.
+ *
+ *                                              JRM - 4/26/04
+ *
+ * Profiling has indicated that searches in the instance of H5TB_TREE are
+ * too expensive.  To deal with this issue, I have augmented the cache
+ * with a hash table in which all entries will be stored.  Given the
+ * advantages of flushing entries in increasing address order, the TBBT
+ * is retained, but only dirty entries are stored in it.  At least for
+ * now, we will leave entries in the TBBT after they are flushed.
+ *
+ * Note that index_size and index_len now refer to the total size of
+ * and number of entries in the hash table.
+ *
+ *						JRM - 7/19/04
+ *
+ * The TBBT has since been replaced with a skip list.  This change
+ * greatly predates this note.
+ *
+ *						JRM - 9/26/05
+ *
+ * magic:	Unsigned 32 bit integer always set to H5C__H5C_T_MAGIC. 
+ * 		This field is used to validate pointers to instances of
+ * 		H5C_t.
+ *
+ * flush_in_progress: Boolean flag indicating whether a flush is in
+ * 		progress.
+ *
+ * trace_file_ptr:  File pointer pointing to the trace file, which is used
+ *              to record cache operations for use in simulations and design
+ *              studies.  This field will usually be NULL, indicating that
+ *              no trace file should be recorded.
+ *
+ *              Since much of the code supporting the parallel metadata
+ *              cache is in H5AC, we don't write the trace file from
+ *              H5C.  Instead, H5AC reads the trace_file_ptr as needed.
+ *
+ *              When we get to using H5C in other places, we may add
+ *              code to write trace file data at the H5C level as well.
+ *
+ * aux_ptr:	Pointer to void used to allow wrapper code to associate
+ *		its data with an instance of H5C_t.  The H5C cache code
+ *		sets this field to NULL, and otherwise leaves it alone.
+ *
+ * max_type_id:	Integer field containing the maximum type id number assigned
+ *		to a type of entry in the cache.  All type ids from 0 to
+ *		max_type_id inclusive must be defined.  The names of the
+ *		types are stored in the type_name_table discussed below, and
+ *		indexed by the ids.
+ *
+ * type_name_table_ptr: Pointer to an array of pointer to char of length
+ *              max_type_id + 1.  The strings pointed to by the entries
+ *              in the array are the names of the entry types associated
+ *              with the indexing type IDs.
+ *
+ * max_cache_size:  Nominal maximum number of bytes that may be stored in the
+ *              cache.  This value should be viewed as a soft limit, as the
+ *              cache can exceed this value under the following circumstances:
+ *
+ *              a) All entries in the cache are protected, and the cache is
+ *                 asked to insert a new entry.  In this case the new entry
+ *                 will be created.  If this causes the cache to exceed
+ *                 max_cache_size, it will do so.  The cache will attempt
+ *                 to reduce its size as entries are unprotected.
+ *
+ *              b) When running in parallel mode, the cache may not be
+ *		   permitted to flush a dirty entry in response to a read.
+ *		   If there are no clean entries available to evict, the
+ *		   cache will exceed its maximum size.  Again the cache
+ *                 will attempt to reduce its size to the max_cache_size
+ *                 limit on the next cache write.
+ *
+ *		c) When an entry increases in size, the cache may exceed
+ *		   the max_cache_size limit until the next time the cache
+ *		   attempts to load or insert an entry.
+ *
+ * min_clean_size: Nominal minimum number of clean bytes in the cache.
+ *              The cache attempts to maintain this number of bytes of
+ *              clean data so as to avoid case b) above.  Again, this is
+ *              a soft limit.
+ *
+ *
+ * In addition to the call back functions required for each entry, the
+ * cache requires the following call back functions for this instance of
+ * the cache as a whole:
+ *
+ * check_write_permitted:  In certain applications, the cache may not
+ *		be allowed to write to disk at certain time.  If specified,
+ *		the check_write_permitted function is used to determine if
+ *		a write is permissible at any given point in time.
+ *
+ *		If no such function is specified (i.e. this field is NULL),
+ *		the cache uses the following write_permitted field to
+ *		determine whether writes are permitted.
+ *
+ * write_permitted: If check_write_permitted is NULL, this boolean flag
+ *		indicates whether writes are permitted.
+ *
+ * log_flush:	If provided, this function is called whenever a dirty
+ *		entry is flushed to disk.
+ *
+ *
+ * In cases where memory is plentiful, and performance is an issue, it
+ * is useful to disable all cache evictions, and thereby postpone metadata
+ * writes.  The following field is used to implement this.
+ *
+ * evictions_enabled:  Boolean flag that is initialized to TRUE.  When
+ * 		this flag is set to FALSE, the metadata cache will not
+ * 		attempt to evict entries to make space for newly protected
+ * 		entries, and instead the will grow without limit.
+ * 		
+ * 		Needless to say, this feature must be used with care.
+ *
+ *
+ * The cache requires an index to facilitate searching for entries.  The
+ * following fields support that index.
+ *
+ * index_len:   Number of entries currently in the hash table used to index
+ *		the cache.
+ *
+ * index_size:  Number of bytes of cache entries currently stored in the
+ *              hash table used to index the cache.
+ *
+ *              This value should not be mistaken for footprint of the
+ *              cache in memory.  The average cache entry is small, and
+ *              the cache has a considerable overhead.  Multiplying the
+ *              index_size by two should yield a conservative estimate
+ *              of the cache's memory footprint.
+ *
+ * clean_index_size: Number of bytes of clean entries currently stored in
+ * 		the hash table.  Note that the index_size field (above)
+ *		is also the sum of the sizes of all entries in the cache.
+ *		Thus we should have the invarient that clean_index_size +
+ *		dirty_index_size == index_size.
+ *
+ *		WARNING:
+ *
+ *		1) The clean_index_size field is not maintained by the
+ *		   index macros, as the hash table doesn't care whether
+ *		   the entry is clean or dirty.  Instead the field is
+ *		   maintained in the H5C__UPDATE_RP macros.
+ *
+ *		2) The value of the clean_index_size must not be mistaken
+ *		   for the current clean size of the cache.  Rather, the
+ *		   clean size of the cache is the current value of
+ *		   clean_index_size plus the amount of empty space (if any)
+ *                 in the cache.
+ *
+ * dirty_index_size: Number of bytes of dirty entries currently stored in
+ * 		the hash table.  Note that the index_size field (above)
+ *		is also the sum of the sizes of all entries in the cache.
+ *		Thus we should have the invarient that clean_index_size +
+ *		dirty_index_size == index_size.
+ *
+ *		WARNING:
+ *
+ *		1) The dirty_index_size field is not maintained by the
+ *		   index macros, as the hash table doesn't care whether
+ *		   the entry is clean or dirty.  Instead the field is
+ *		   maintained in the H5C__UPDATE_RP macros.
+ *
+ * index:	Array of pointer to H5C_cache_entry_t of size
+ *		H5C__HASH_TABLE_LEN.  At present, this value is a power
+ *		of two, not the usual prime number.
+ *
+ *		I hope that the variable size of cache elements, the large
+ *		hash table size, and the way in which HDF5 allocates space
+ *		will combine to avoid problems with periodicity.  If so, we
+ *		can use a trivial hash function (a bit-and and a 3 bit left
+ *		shift) with some small savings.
+ *
+ *		If not, it will become evident in the statistics. Changing
+ *		to the usual prime number length hash table will require
+ *		changing the H5C__HASH_FCN macro and the deletion of the
+ *		H5C__HASH_MASK #define.  No other changes should be required.
+ *
+ *
+ * When we flush the cache, we need to write entries out in increasing
+ * address order.  An instance of a skip list is used to store dirty entries in
+ * sorted order.  Whether it is cheaper to sort the dirty entries as needed,
+ * or to maintain the list is an open question.  At a guess, it depends
+ * on how frequently the cache is flushed.  We will see how it goes.
+ *
+ * For now at least, I will not remove dirty entries from the list as they
+ * are flushed. (this has been changed -- dirty entries are now removed from
+ * the skip list as they are flushed.  JRM - 10/25/05)
+ *
+ * slist_len:   Number of entries currently in the skip list
+ *              used to maintain a sorted list of dirty entries in the
+ *              cache.
+ *
+ * slist_size:  Number of bytes of cache entries currently stored in the
+ *              skip list used to maintain a sorted list of
+ *              dirty entries in the cache.
+ *
+ * slist_ptr:   pointer to the instance of H5SL_t used maintain a sorted
+ *              list of dirty entries in the cache.  This sorted list has
+ *              two uses:
+ *
+ *              a) It allows us to flush dirty entries in increasing address
+ *                 order, which results in significant savings.
+ *
+ *              b) It facilitates checking for adjacent dirty entries when
+ *                 attempting to evict entries from the cache.  While we
+ *                 don't use this at present, I hope that this will allow
+ *                 some optimizations when I get to it.
+ *
+ * With the addition of the fractal heap, the cache must now deal with
+ * the case in which entries may be dirtied, moved, or have their sizes
+ * changed during a flush.  To allow sanity checks in this situation, the
+ * following two fields have been added.  They are only compiled in when
+ * H5C_DO_SANITY_CHECKS is TRUE.
+ *
+ * slist_len_increase: Number of entries that have been added to the
+ * 		slist since the last time this field was set to zero.
+ *
+ * slist_size_increase: Total size of all entries that have been added
+ * 		to the slist since the last time this field was set to
+ * 		zero.
+ *
+ *
+ * When a cache entry is protected, it must be removed from the LRU
+ * list(s) as it cannot be either flushed or evicted until it is unprotected.
+ * The following fields are used to implement the protected list (pl).
+ *
+ * pl_len:      Number of entries currently residing on the protected list.
+ *
+ * pl_size:     Number of bytes of cache entries currently residing on the
+ *              protected list.
+ *
+ * pl_head_ptr: Pointer to the head of the doubly linked list of protected
+ *              entries.  Note that cache entries on this list are linked
+ *              by their next and prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * pl_tail_ptr: Pointer to the tail of the doubly linked list of protected
+ *              entries.  Note that cache entries on this list are linked
+ *              by their next and prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ *
+ * For very frequently used entries, the protect/unprotect overhead can
+ * become burdensome.  To avoid this overhead, I have modified the cache
+ * to allow entries to be "pinned".  A pinned entry is similar to a
+ * protected entry, in the sense that it cannot be evicted, and that
+ * the entry can be modified at any time.
+ *
+ * Pinning an entry has the following implications:
+ *
+ *	1) A pinned entry cannot be evicted.  Thus unprotected
+ *         pinned entries reside in the pinned entry list, instead
+ *         of the LRU list(s) (or other lists maintained by the current
+ *         replacement policy code).
+ *
+ *      2) A pinned entry can be accessed or modified at any time.
+ *         Therefore, the cache must check with the entry owner
+ *         before flushing it.  If permission is denied, the
+ *         cache just skips the entry in the flush.
+ *
+ *      3) A pinned entry can be marked as dirty (and possibly
+ *         change size) while it is unprotected.
+ *
+ *      4) The flush-destroy code must allow pinned entries to
+ *         be unpinned (and possibly unprotected) during the
+ *         flush.
+ *
+ * Since pinned entries cannot be evicted, they must be kept on a pinned
+ * entry list, instead of being entrusted to the replacement policy code.
+ *
+ * Maintaining the pinned entry list requires the following fields:
+ *
+ * pel_len:	Number of entries currently residing on the pinned
+ * 		entry list.
+ *
+ * pel_size:	Number of bytes of cache entries currently residing on
+ * 		the pinned entry list.
+ *
+ * pel_head_ptr: Pointer to the head of the doubly linked list of pinned
+ * 		but not protected entries.  Note that cache entries on
+ * 		this list are linked by their next and prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * pel_tail_ptr: Pointer to the tail of the doubly linked list of pinned
+ * 		but not protected entries.  Note that cache entries on
+ * 		this list are linked by their next and prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ *
+ * The cache must have a replacement policy, and the fields supporting this
+ * policy must be accessible from this structure.
+ *
+ * While there has been interest in several replacement policies for
+ * this cache, the initial development schedule is tight.  Thus I have
+ * elected to support only a modified LRU policy for the first cut.
+ *
+ * To further simplify matters, I have simply included the fields needed
+ * by the modified LRU in this structure.  When and if we add support for
+ * other policies, it will probably be easiest to just add the necessary
+ * fields to this structure as well -- we only create one instance of this
+ * structure per file, so the overhead is not excessive.
+ *
+ *
+ * Fields supporting the modified LRU policy:
+ *
+ * See most any OS text for a discussion of the LRU replacement policy.
+ *
+ * When operating in parallel mode, we must ensure that a read does not
+ * cause a write.  If it does, the process will hang, as the write will
+ * be collective and the other processes will not know to participate.
+ *
+ * To deal with this issue, I have modified the usual LRU policy by adding
+ * clean and dirty LRU lists to the usual LRU list.
+ *
+ * The clean LRU list is simply the regular LRU list with all dirty cache
+ * entries removed.
+ *
+ * Similarly, the dirty LRU list is the regular LRU list with all the clean
+ * cache entries removed.
+ *
+ * When reading in parallel mode, we evict from the clean LRU list only.
+ * This implies that we must try to ensure that the clean LRU list is
+ * reasonably well stocked at all times.
+ *
+ * We attempt to do this by trying to flush enough entries on each write
+ * to keep the cLRU_list_size >= min_clean_size.
+ *
+ * Even if we start with a completely clean cache, a sequence of protects
+ * without unprotects can empty the clean LRU list.  In this case, the
+ * cache must grow temporarily.  At the next write, we will attempt to
+ * evict enough entries to reduce index_size to less than max_cache_size.
+ * While this will usually be possible, all bets are off if enough entries
+ * are protected.
+ *
+ * Discussions of the individual fields used by the modified LRU replacement
+ * policy follow:
+ *
+ * LRU_list_len:  Number of cache entries currently on the LRU list.
+ *
+ *              Observe that LRU_list_len + pl_len must always equal
+ *              index_len.
+ *
+ * LRU_list_size:  Number of bytes of cache entries currently residing on the
+ *              LRU list.
+ *
+ *              Observe that LRU_list_size + pl_size must always equal
+ *              index_size.
+ *
+ * LRU_head_ptr:  Pointer to the head of the doubly linked LRU list.  Cache
+ *              entries on this list are linked by their next and prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * LRU_tail_ptr:  Pointer to the tail of the doubly linked LRU list.  Cache
+ *              entries on this list are linked by their next and prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * cLRU_list_len: Number of cache entries currently on the clean LRU list.
+ *
+ *              Observe that cLRU_list_len + dLRU_list_len must always
+ *              equal LRU_list_len.
+ *
+ * cLRU_list_size:  Number of bytes of cache entries currently residing on
+ *              the clean LRU list.
+ *
+ *              Observe that cLRU_list_size + dLRU_list_size must always
+ *              equal LRU_list_size.
+ *
+ * cLRU_head_ptr:  Pointer to the head of the doubly linked clean LRU list.
+ *              Cache entries on this list are linked by their aux_next and
+ *              aux_prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * cLRU_tail_ptr:  Pointer to the tail of the doubly linked clean LRU list.
+ *              Cache entries on this list are linked by their aux_next and
+ *              aux_prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * dLRU_list_len: Number of cache entries currently on the dirty LRU list.
+ *
+ *              Observe that cLRU_list_len + dLRU_list_len must always
+ *              equal LRU_list_len.
+ *
+ * dLRU_list_size:  Number of cache entries currently on the dirty LRU list.
+ *
+ *              Observe that cLRU_list_len + dLRU_list_len must always
+ *              equal LRU_list_len.
+ *
+ * dLRU_head_ptr:  Pointer to the head of the doubly linked dirty LRU list.
+ *              Cache entries on this list are linked by their aux_next and
+ *              aux_prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * dLRU_tail_ptr:  Pointer to the tail of the doubly linked dirty LRU list.
+ *              Cache entries on this list are linked by their aux_next and
+ *              aux_prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ *
+ * Automatic cache size adjustment:
+ *
+ * While the default cache size is adequate for most cases, we can run into
+ * cases where the default is too small.  Ideally, we will let the user
+ * adjust the cache size as required.  However, this is not possible in all
+ * cases.  Thus I have added automatic cache size adjustment code.
+ *
+ * The configuration for the automatic cache size adjustment is stored in
+ * the structure described below:
+ *
+ * size_increase_possible:  Depending on the configuration data given
+ *		in the resize_ctl field, it may or may not be possible
+ *		to increase the size of the cache.  Rather than test for
+ *		all the ways this can happen, we simply set this flag when
+ *		we receive a new configuration.
+ *
+ * flash_size_increase_possible: Depending on the configuration data given
+ *              in the resize_ctl field, it may or may not be possible
+ *              for a flash size increase to occur.  We set this flag
+ *              whenever we receive a new configuration so as to avoid
+ *              repeated calculations.
+ *
+ * flash_size_increase_threshold: If a flash cache size increase is possible,
+ *              this field is used to store the minimum size of a new entry
+ *              or size increase needed to trigger a flash cache size
+ *              increase.  Note that this field must be updated whenever
+ *              the size of the cache is changed.
+ *
+ * size_decrease_possible:  Depending on the configuration data given
+ *              in the resize_ctl field, it may or may not be possible
+ *              to decrease the size of the cache.  Rather than test for
+ *              all the ways this can happen, we simply set this flag when
+ *              we receive a new configuration.
+ *
+ * cache_full:	Boolean flag used to keep track of whether the cache is
+ *		full, so we can refrain from increasing the size of a
+ *		cache which hasn't used up the space alotted to it.
+ *
+ *		The field is initialized to FALSE, and then set to TRUE
+ *		whenever we attempt to make space in the cache.
+ *
+ * resize_enabled:  This is another convenience flag which is set whenever
+ *		a new set of values for resize_ctl are provided.  Very
+ *		simply,
+ *
+ *		    resize_enabled = size_increase_possible ||
+ *                                   size_decrease_possible;
+ *
+ * size_decreased:  Boolean flag set to TRUE whenever the maximun cache
+ *		size is decreased.  The flag triggers a call to
+ *		H5C_make_space_in_cache() on the next call to H5C_protect().
+ *
+ * resize_ctl:	Instance of H5C_auto_size_ctl_t containing configuration
+ * 		data for automatic cache resizing.
+ *
+ * epoch_markers_active:  Integer field containing the number of epoch
+ *		markers currently in use in the LRU list.  This value
+ *		must be in the range [0, H5C__MAX_EPOCH_MARKERS - 1].
+ *
+ * epoch_marker_active:  Array of boolean of length H5C__MAX_EPOCH_MARKERS.
+ *		This array is used to track which epoch markers are currently
+ *		in use.
+ *
+ * epoch_marker_ringbuf:  Array of int of length H5C__MAX_EPOCH_MARKERS + 1.
+ *
+ *		To manage the epoch marker cache entries, it is necessary
+ *		to track their order in the LRU list.  This is done with
+ *		epoch_marker_ringbuf.  When markers are inserted at the
+ *		head of the LRU list, the index of the marker in the
+ *		epoch_markers array is inserted at the tail of the ring
+ *		buffer.  When it becomes the epoch_marker_active'th marker
+ *		in the LRU list, it will have worked its way to the head
+ *		of the ring buffer as well.  This allows us to remove it
+ *		without scanning the LRU list if such is required.
+ *
+ * epoch_marker_ringbuf_first: Integer field containing the index of the
+ *		first entry in the ring buffer.
+ *
+ * epoch_marker_ringbuf_last: Integer field containing the index of the
+ *		last entry in the ring buffer.
+ *
+ * epoch_marker_ringbuf_size: Integer field containing the number of entries
+ *		in the ring buffer.
+ *
+ * epoch_markers:  Array of instances of H5C_cache_entry_t of length
+ *		H5C__MAX_EPOCH_MARKERS.  The entries are used as markers
+ *		in the LRU list to identify cache entries that haven't
+ *		been accessed for some (small) specified number of
+ *		epochs.  These entries (if any) can then be evicted and
+ *		the cache size reduced -- ideally without evicting any
+ *		of the current working set.  Needless to say, the epoch
+ *		length and the number of epochs before an unused entry
+ *		must be chosen so that all, or almost all, the working
+ *		set will be accessed before the limit.
+ *
+ *		Epoch markers only appear in the LRU list, never in
+ *		the index or slist.  While they are of type
+ *		H5C__EPOCH_MARKER_TYPE, and have associated class
+ *		functions, these functions should never be called.
+ *
+ *		The addr fields of these instances of H5C_cache_entry_t
+ *		are set to the index of the instance in the epoch_markers
+ *		array, the size is set to 0, and the type field points
+ *		to the constant structure epoch_marker_class defined
+ *		in H5C.c.  The next and prev fields are used as usual
+ *		to link the entry into the LRU list.
+ *
+ *		All other fields are unused.
+ *
+ *
+ * Cache hit rate collection fields:
+ *
+ * We supply the current cache hit rate on request, so we must keep a
+ * simple cache hit rate computation regardless of whether statistics
+ * collection is enabled.  The following fields support this capability.
+ *
+ * cache_hits: Number of cache hits since the last time the cache hit
+ *	rate statistics were reset.  Note that when automatic cache
+ *	re-sizing is enabled, this field will be reset every automatic
+ *	resize epoch.
+ *
+ * cache_accesses: Number of times the cache has been accessed while
+ *	since the last since the last time the cache hit rate statistics
+ *	were reset.  Note that when automatic cache re-sizing is enabled,
+ *	this field will be reset every automatic resize epoch.
+ *
+ *
+ * Statistics collection fields:
+ *
+ * When enabled, these fields are used to collect statistics as described
+ * below.  The first set are collected only when H5C_COLLECT_CACHE_STATS
+ * is true.
+ *
+ * hits:        Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the number of times an entry with type id
+ *		equal to the array index has been in cache when requested in
+ *		the current epoch.
+ *
+ * misses:      Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the number of times an entry with type id
+ *		equal to the array index has not been in cache when
+ *		requested in the current epoch.
+ *
+ * write_protects:  Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The
+ * 		cells are used to record the number of times an entry with
+ * 		type id equal to the array index has been write protected
+ * 		in the current epoch.
+ *
+ * 		Observe that (hits + misses) = (write_protects + read_protects).
+ *
+ * read_protects: Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The
+ * 		cells are used to record the number of times an entry with
+ * 		type id equal to the array index has been read protected in
+ * 		the current epoch.
+ *
+ *              Observe that (hits + misses) = (write_protects + read_protects).
+ *
+ * max_read_protects:  Array of int32 of length H5C__MAX_NUM_TYPE_IDS + 1.
+ * 		The cells are used to maximum number of simultaneous read
+ * 		protects on any entry with type id equal to the array index
+ * 		in the current epoch.
+ *
+ * insertions:  Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the number of times an entry with type
+ *		id equal to the array index has been inserted into the
+ *		cache in the current epoch.
+ *
+ * pinned_insertions:  Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1. 
+ * 		The cells are used to record the number of times an entry
+ * 		with type id equal to the array index has been inserted
+ * 		pinned into the cache in the current epoch.
+ *
+ * clears:      Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the number of times an entry with type
+ *		id equal to the array index has been cleared in the current
+ *		epoch.
+ *
+ * flushes:     Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the number of times an entry with type id
+ *		equal to the array index has been written to disk in the
+ *              current epoch.
+ *
+ * evictions:   Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the number of times an entry with type id
+ *		equal to the array index has been evicted from the cache in
+ *		the current epoch.
+ *
+ * moves:     Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the number of times an entry with type
+ *		id equal to the array index has been moved in the current
+ *		epoch.
+ *
+ * entry_flush_moves: Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1. 
+ * 		The cells are used to record the number of times an entry
+ * 		with type id equal to the array index has been moved
+ * 		during its flush callback in the current epoch.
+ *
+ * cache_flush_moves: Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1. 
+ * 		The cells are used to record the number of times an entry
+ * 		with type id equal to the array index has been moved
+ * 		during a cache flush in the current epoch.
+ *
+ * pins:        Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the number of times an entry with type
+ *		id equal to the array index has been pinned in the current
+ *		epoch.
+ *
+ * unpins:      Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the number of times an entry with type
+ *		id equal to the array index has been unpinned in the current
+ *		epoch.
+ *
+ * dirty_pins:	Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the number of times an entry with type
+ *		id equal to the array index has been marked dirty while pinned
+ *		in the current epoch.
+ *
+ * pinned_flushes:  Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The
+ * 		cells are used to record the number of times an  entry
+ * 		with type id equal to the array index has been flushed while
+ * 		pinned in the current epoch.
+ *
+ * pinned_cleared:  Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.  The
+ * 		cells are used to record the number of times an  entry
+ * 		with type id equal to the array index has been cleared while
+ * 		pinned in the current epoch.
+ *
+ * size_increases:  Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.
+ *		The cells are used to record the number of times an entry
+ *		with type id equal to the array index has increased in
+ *		size in the current epoch.
+ *
+ * size_decreases:  Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1.
+ *		The cells are used to record the number of times an entry
+ *		with type id equal to the array index has decreased in
+ *		size in the current epoch.
+ *
+ * entry_flush_size_changes:  Array of int64 of length
+ * 		H5C__MAX_NUM_TYPE_IDS + 1.  The cells are used to record
+ * 		the number of times an entry with type id equal to the
+ * 		array index has changed size while in its flush callback.
+ *
+ * cache_flush_size_changes:  Array of int64 of length
+ * 		H5C__MAX_NUM_TYPE_IDS + 1.  The cells are used to record
+ * 		the number of times an entry with type id equal to the
+ * 		array index has changed size during a cache flush
+ *
+ * total_ht_insertions: Number of times entries have been inserted into the
+ *		hash table in the current epoch.
+ *
+ * total_ht_deletions: Number of times entries have been deleted from the
+ *              hash table in the current epoch.
+ *
+ * successful_ht_searches: int64 containing the total number of successful
+ *		searches of the hash table in the current epoch.
+ *
+ * total_successful_ht_search_depth: int64 containing the total number of
+ *		entries other than the targets examined in successful
+ *		searches of the hash table in the current epoch.
+ *
+ * failed_ht_searches: int64 containing the total number of unsuccessful
+ *              searches of the hash table in the current epoch.
+ *
+ * total_failed_ht_search_depth: int64 containing the total number of
+ *              entries examined in unsuccessful searches of the hash
+ *		table in the current epoch.
+ *
+ * max_index_len:  Largest value attained by the index_len field in the
+ *              current epoch.
+ *
+ * max_index_size:  Largest value attained by the index_size field in the
+ *              current epoch.
+ *
+ * max_clean_index_size: Largest value attained by the clean_index_size field
+ * 		in the current epoch.
+ *
+ * max_dirty_index_size: Largest value attained by the dirty_index_size field
+ * 		in the current epoch.
+ *
+ * max_slist_len:  Largest value attained by the slist_len field in the
+ *              current epoch.
+ *
+ * max_slist_size:  Largest value attained by the slist_size field in the
+ *              current epoch.
+ *
+ * max_pl_len:  Largest value attained by the pl_len field in the
+ *              current epoch.
+ *
+ * max_pl_size: Largest value attained by the pl_size field in the
+ *              current epoch.
+ *
+ * max_pel_len: Largest value attained by the pel_len field in the
+ *              current epoch.
+ *
+ * max_pel_size: Largest value attained by the pel_size field in the
+ *              current epoch.
+ *
+ * calls_to_msic: Total number of calls to H5C_make_space_in_cache
+ *
+ * total_entries_skipped_in_msic: Number of clean entries skipped while
+ *              enforcing the min_clean_fraction in H5C_make_space_in_cache().
+ *
+ * total_entries_scanned_in_msic: Number of clean entries skipped while
+ *              enforcing the min_clean_fraction in H5C_make_space_in_cache().
+ *
+ * max_entries_skipped_in_msic: Maximum number of clean entries skipped
+ *              in any one call to H5C_make_space_in_cache().
+ *
+ * max_entries_scanned_in_msic: Maximum number of entries scanned over
+ *              in any one call to H5C_make_space_in_cache().
+ *
+ * entries_scanned_to_make_space: Number of entries scanned only when looking
+ *              for entries to evict in order to make space in cache.
+
+ * The remaining stats are collected only when both H5C_COLLECT_CACHE_STATS
+ * and H5C_COLLECT_CACHE_ENTRY_STATS are true.
+ *
+ * max_accesses: Array of int32 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the maximum number of times any single
+ *		entry with type id equal to the array index has been
+ *		accessed in the current epoch.
+ *
+ * min_accesses: Array of int32 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the minimum number of times any single
+ *		entry with type id equal to the array index has been
+ *		accessed in the current epoch.
+ *
+ * max_clears:  Array of int32 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the maximum number of times any single
+ *		entry with type id equal to the array index has been cleared
+ *		in the current epoch.
+ *
+ * max_flushes: Array of int32 of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *		are used to record the maximum number of times any single
+ *		entry with type id equal to the array index has been
+ *		flushed in the current epoch.
+ *
+ * max_size:	Array of size_t of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *              are used to record the maximum size of any single entry
+ *		with type id equal to the array index that has resided in
+ *		the cache in the current epoch.
+ *
+ * max_pins:	Array of size_t of length H5C__MAX_NUM_TYPE_IDS + 1.  The cells
+ *              are used to record the maximum number of times that any single
+ *              entry with type id equal to the array index that has been
+ *              marked as pinned in the cache in the current epoch.
+ *
+ *
+ * Fields supporting testing:
+ *
+ * prefix	Array of char used to prefix debugging output.  The
+ *		field is intended to allow marking of output of with
+ *		the processes mpi rank.
+ *
+ ****************************************************************************/
+
+#define H5C__HASH_TABLE_LEN     (64 * 1024) /* must be a power of 2 */
+
+#define H5C__H5C_T_MAGIC	0x005CAC0E
+#define H5C__MAX_NUM_TYPE_IDS	19
+#define H5C__PREFIX_LEN		32
+
+struct H5C_t
+{
+    uint32_t			magic;
+
+    hbool_t			flush_in_progress;
+
+    FILE *			trace_file_ptr;
+
+    void *			aux_ptr;
+
+    int32_t			max_type_id;
+    const char *                (* type_name_table_ptr);
+
+    size_t                      max_cache_size;
+    size_t                      min_clean_size;
+
+    H5C_write_permitted_func_t	check_write_permitted;
+    hbool_t			write_permitted;
+
+    H5C_log_flush_func_t	log_flush;
+
+    hbool_t			evictions_enabled;
+
+    int32_t                     index_len;
+    size_t                      index_size;
+    size_t 			clean_index_size;
+    size_t			dirty_index_size;
+    H5C_cache_entry_t *		(index[H5C__HASH_TABLE_LEN]);
+
+
+    int32_t                     slist_len;
+    size_t                      slist_size;
+    H5SL_t *                    slist_ptr;
+#if H5C_DO_SANITY_CHECKS
+    int64_t			slist_len_increase;
+    int64_t			slist_size_increase;
+#endif /* H5C_DO_SANITY_CHECKS */
+
+    int32_t                     pl_len;
+    size_t                      pl_size;
+    H5C_cache_entry_t *	        pl_head_ptr;
+    H5C_cache_entry_t *  	pl_tail_ptr;
+
+    int32_t                     pel_len;
+    size_t                      pel_size;
+    H5C_cache_entry_t *	        pel_head_ptr;
+    H5C_cache_entry_t *  	pel_tail_ptr;
+
+    int32_t                     LRU_list_len;
+    size_t                      LRU_list_size;
+    H5C_cache_entry_t *		LRU_head_ptr;
+    H5C_cache_entry_t *		LRU_tail_ptr;
+
+    int32_t                     cLRU_list_len;
+    size_t                      cLRU_list_size;
+    H5C_cache_entry_t *		cLRU_head_ptr;
+    H5C_cache_entry_t *		cLRU_tail_ptr;
+
+    int32_t                     dLRU_list_len;
+    size_t                      dLRU_list_size;
+    H5C_cache_entry_t *		dLRU_head_ptr;
+    H5C_cache_entry_t *	        dLRU_tail_ptr;
+
+    hbool_t			size_increase_possible;
+    hbool_t			flash_size_increase_possible;
+    size_t			flash_size_increase_threshold;
+    hbool_t			size_decrease_possible;
+    hbool_t			resize_enabled;
+    hbool_t			cache_full;
+    hbool_t			size_decreased;
+    H5C_auto_size_ctl_t		resize_ctl;
+
+    int32_t			epoch_markers_active;
+    hbool_t			epoch_marker_active[H5C__MAX_EPOCH_MARKERS];
+    int32_t			epoch_marker_ringbuf[H5C__MAX_EPOCH_MARKERS+1];
+    int32_t			epoch_marker_ringbuf_first;
+    int32_t			epoch_marker_ringbuf_last;
+    int32_t			epoch_marker_ringbuf_size;
+    H5C_cache_entry_t		epoch_markers[H5C__MAX_EPOCH_MARKERS];
+
+    int64_t			cache_hits;
+    int64_t			cache_accesses;
+
+#if H5C_COLLECT_CACHE_STATS
+
+    /* stats fields */
+    int64_t                     hits[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     misses[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     write_protects[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     read_protects[H5C__MAX_NUM_TYPE_IDS + 1];
+    int32_t                     max_read_protects[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     insertions[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     pinned_insertions[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     clears[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     flushes[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     evictions[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     moves[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     entry_flush_moves[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     cache_flush_moves[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     pins[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     unpins[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     dirty_pins[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     pinned_flushes[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     pinned_clears[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     size_increases[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     size_decreases[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     entry_flush_size_changes[H5C__MAX_NUM_TYPE_IDS + 1];
+    int64_t                     cache_flush_size_changes[H5C__MAX_NUM_TYPE_IDS + 1];
+
+    int64_t			total_ht_insertions;
+    int64_t			total_ht_deletions;
+    int64_t			successful_ht_searches;
+    int64_t			total_successful_ht_search_depth;
+    int64_t			failed_ht_searches;
+    int64_t			total_failed_ht_search_depth;
+
+    int32_t                     max_index_len;
+    size_t                      max_index_size;
+    size_t                      max_clean_index_size;
+    size_t                      max_dirty_index_size;
+
+    int32_t                     max_slist_len;
+    size_t                      max_slist_size;
+
+    int32_t                     max_pl_len;
+    size_t                      max_pl_size;
+
+    int32_t                     max_pel_len;
+    size_t                      max_pel_size;
+
+    int64_t                     calls_to_msic;
+    int64_t                     total_entries_skipped_in_msic;
+    int64_t                     total_entries_scanned_in_msic;
+    int32_t                     max_entries_skipped_in_msic;
+    int32_t                     max_entries_scanned_in_msic;
+    int64_t                     entries_scanned_to_make_space;
+
+#if H5C_COLLECT_CACHE_ENTRY_STATS
+
+    int32_t                     max_accesses[H5C__MAX_NUM_TYPE_IDS + 1];
+    int32_t                     min_accesses[H5C__MAX_NUM_TYPE_IDS + 1];
+    int32_t                     max_clears[H5C__MAX_NUM_TYPE_IDS + 1];
+    int32_t                     max_flushes[H5C__MAX_NUM_TYPE_IDS + 1];
+    size_t                      max_size[H5C__MAX_NUM_TYPE_IDS + 1];
+    int32_t                     max_pins[H5C__MAX_NUM_TYPE_IDS + 1];
+
+#endif /* H5C_COLLECT_CACHE_ENTRY_STATS */
+
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+    char			prefix[H5C__PREFIX_LEN];
+};
+
+
+/****************************************************************************/
+/***************************** Macro Definitions ****************************/
+/****************************************************************************/
+
+/****************************************************************************
+ *
+ * We maintain doubly linked lists of instances of H5C_cache_entry_t for a
+ * variety of reasons -- protected list, LRU list, and the clean and dirty
+ * LRU lists at present.  The following macros support linking and unlinking
+ * of instances of H5C_cache_entry_t by both their regular and auxilary next
+ * and previous pointers.
+ *
+ * The size and length fields are also maintained.
+ *
+ * Note that the relevant pair of prev and next pointers are presumed to be
+ * NULL on entry in the insertion macros.
+ *
+ * Finally, observe that the sanity checking macros evaluate to the empty
+ * string when H5C_DO_SANITY_CHECKS is FALSE.  They also contain calls
+ * to the HGOTO_ERROR macro, which may not be appropriate in all cases.
+ * If so, we will need versions of the insertion and deletion macros which
+ * do not reference the sanity checking macros.
+ *							JRM - 5/5/04
+ *
+ * Changes:
+ *
+ *  - Removed the line:
+ *
+ *        ( ( (Size) == (entry_ptr)->size ) && ( (len) != 1 ) ) ||
+ *
+ *    from the H5C__DLL_PRE_REMOVE_SC macro.  With the addition of the
+ *    epoch markers used in the age out based cache size reduction algorithm,
+ *    this invarient need not hold, as the epoch markers are of size 0.
+ *
+ *    One could argue that I should have given the epoch markers a positive
+ *    size, but this would break the index_size = LRU_list_size + pl_size
+ *    + pel_size invarient.
+ *
+ *    Alternatively, I could pass the current decr_mode in to the macro,
+ *    and just skip the check whenever epoch markers may be in use.
+ *
+ *    However, any size errors should be caught when the cache is flushed
+ *    and destroyed.  Until we are tracking such an error, this should be
+ *    good enough.
+ *                                                     JRM - 12/9/04
+ *
+ *
+ *  - In the H5C__DLL_PRE_INSERT_SC macro, replaced the lines:
+ *
+ *    ( ( (len) == 1 ) &&
+ *      ( ( (head_ptr) != (tail_ptr) ) || ( (Size) <= 0 ) ||
+ *        ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )
+ *      )
+ *    ) ||
+ *
+ *    with:
+ *
+ *    ( ( (len) == 1 ) &&
+ *      ( ( (head_ptr) != (tail_ptr) ) ||
+ *        ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )
+ *      )
+ *    ) ||
+ *
+ *    Epoch markers have size 0, so we can now have a non-empty list with
+ *    zero size.  Hence the "( (Size) <= 0 )" clause cause false failures
+ *    in the sanity check.  Since "Size" is typically a size_t, it can't
+ *    take on negative values, and thus the revised clause "( (Size) < 0 )"
+ *    caused compiler warnings.
+ *                                                     JRM - 12/22/04
+ *
+ *  - In the H5C__DLL_SC macro, replaced the lines:
+ *
+ *    ( ( (len) == 1 ) &&
+ *      ( ( (head_ptr) != (tail_ptr) ) || ( (cache_ptr)->size <= 0 ) ||
+ *        ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )
+ *      )
+ *    ) ||
+ *
+ *    with
+ *
+ *    ( ( (len) == 1 ) &&
+ *      ( ( (head_ptr) != (tail_ptr) ) ||
+ *        ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )
+ *      )
+ *    ) ||
+ *
+ *    Epoch markers have size 0, so we can now have a non-empty list with
+ *    zero size.  Hence the "( (Size) <= 0 )" clause cause false failures
+ *    in the sanity check.  Since "Size" is typically a size_t, it can't
+ *    take on negative values, and thus the revised clause "( (Size) < 0 )"
+ *    caused compiler warnings.
+ *                                                     JRM - 1/10/05
+ *
+ *  - Added the H5C__DLL_UPDATE_FOR_SIZE_CHANGE macro and the associated
+ *    sanity checking macros.  These macro are used to update the size of
+ *    a DLL when one of its entries changes size.
+ *
+ *							JRM - 9/8/05
+ *
+ ****************************************************************************/
+
+#if H5C_DO_SANITY_CHECKS
+
+#define H5C__DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv) \
+if ( ( (head_ptr) == NULL ) ||                                               \
+     ( (tail_ptr) == NULL ) ||                                               \
+     ( (entry_ptr) == NULL ) ||                                              \
+     ( (len) <= 0 ) ||                                                       \
+     ( (Size) < (entry_ptr)->size ) ||                                       \
+     ( ( (entry_ptr)->prev == NULL ) && ( (head_ptr) != (entry_ptr) ) ) ||   \
+     ( ( (entry_ptr)->next == NULL ) && ( (tail_ptr) != (entry_ptr) ) ) ||   \
+     ( ( (len) == 1 ) &&                                                     \
+       ( ! ( ( (head_ptr) == (entry_ptr) ) &&                                \
+             ( (tail_ptr) == (entry_ptr) ) &&                                \
+             ( (entry_ptr)->next == NULL ) &&                                \
+             ( (entry_ptr)->prev == NULL ) &&                                \
+             ( (Size) == (entry_ptr)->size )                                 \
+           )                                                                 \
+       )                                                                     \
+     )                                                                       \
+   ) {                                                                       \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "DLL pre remove SC failed")     \
+}
+
+#define H5C__DLL_SC(head_ptr, tail_ptr, len, Size, fv)                   \
+if ( ( ( ( (head_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) &&           \
+       ( (head_ptr) != (tail_ptr) )                                      \
+     ) ||                                                                \
+     ( (len) < 0 ) ||                                                    \
+     ( (Size) < 0 ) ||                                                   \
+     ( ( (len) == 1 ) &&                                                 \
+       ( ( (head_ptr) != (tail_ptr) ) ||                                 \
+         ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )        \
+       )                                                                 \
+     ) ||                                                                \
+     ( ( (len) >= 1 ) &&                                                 \
+       ( ( (head_ptr) == NULL ) || ( (head_ptr)->prev != NULL ) ||       \
+         ( (tail_ptr) == NULL ) || ( (tail_ptr)->next != NULL )          \
+       )                                                                 \
+     )                                                                   \
+   ) {                                                                   \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "DLL sanity check failed")  \
+}
+
+#define H5C__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv) \
+if ( ( (entry_ptr) == NULL ) ||                                              \
+     ( (entry_ptr)->next != NULL ) ||                                        \
+     ( (entry_ptr)->prev != NULL ) ||                                        \
+     ( ( ( (head_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) &&               \
+       ( (head_ptr) != (tail_ptr) )                                          \
+     ) ||                                                                    \
+     ( (len) < 0 ) ||                                                        \
+     ( ( (len) == 1 ) &&                                                     \
+       ( ( (head_ptr) != (tail_ptr) ) ||                                     \
+         ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )            \
+       )                                                                     \
+     ) ||                                                                    \
+     ( ( (len) >= 1 ) &&                                                     \
+       ( ( (head_ptr) == NULL ) || ( (head_ptr)->prev != NULL ) ||           \
+         ( (tail_ptr) == NULL ) || ( (tail_ptr)->next != NULL )              \
+       )                                                                     \
+     )                                                                       \
+   ) {                                                                       \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "DLL pre insert SC failed")     \
+}
+
+#define H5C__DLL_PRE_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size)    \
+if ( ( (dll_len) <= 0 ) ||                                                    \
+     ( (dll_size) <= 0 ) ||                                                   \
+     ( (old_size) <= 0 ) ||                                                   \
+     ( (old_size) > (dll_size) ) ||                                           \
+     ( (new_size) <= 0 ) ||                                                   \
+     ( ( (dll_len) == 1 ) && ( (old_size) != (dll_size) ) ) ) {               \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "DLL pre size update SC failed") \
+}
+
+#define H5C__DLL_POST_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size)    \
+if ( ( (new_size) > (dll_size) ) ||                                            \
+     ( ( (dll_len) == 1 ) && ( (new_size) != (dll_size) ) ) ) {                \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "DLL post size update SC failed") \
+}
+
+#else /* H5C_DO_SANITY_CHECKS */
+
+#define H5C__DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv)
+#define H5C__DLL_SC(head_ptr, tail_ptr, len, Size, fv)
+#define H5C__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv)
+#define H5C__DLL_PRE_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size)
+#define H5C__DLL_POST_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size)
+
+#endif /* H5C_DO_SANITY_CHECKS */
+
+
+#define H5C__DLL_APPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val) \
+        H5C__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size,    \
+                               fail_val)                                    \
+        if ( (head_ptr) == NULL )                                           \
+        {                                                                   \
+           (head_ptr) = (entry_ptr);                                        \
+           (tail_ptr) = (entry_ptr);                                        \
+        }                                                                   \
+        else                                                                \
+        {                                                                   \
+           (tail_ptr)->next = (entry_ptr);                                  \
+           (entry_ptr)->prev = (tail_ptr);                                  \
+           (tail_ptr) = (entry_ptr);                                        \
+        }                                                                   \
+        (len)++;                                                            \
+        (Size) += (entry_ptr)->size;
+
+#define H5C__DLL_PREPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val) \
+        H5C__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size,     \
+                               fail_val)                                     \
+        if ( (head_ptr) == NULL )                                            \
+        {                                                                    \
+           (head_ptr) = (entry_ptr);                                         \
+           (tail_ptr) = (entry_ptr);                                         \
+        }                                                                    \
+        else                                                                 \
+        {                                                                    \
+           (head_ptr)->prev = (entry_ptr);                                   \
+           (entry_ptr)->next = (head_ptr);                                   \
+           (head_ptr) = (entry_ptr);                                         \
+        }                                                                    \
+        (len)++;                                                             \
+        (Size) += entry_ptr->size;
+
+#define H5C__DLL_REMOVE(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val) \
+        H5C__DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size,    \
+                               fail_val)                                    \
+        {                                                                   \
+           if ( (head_ptr) == (entry_ptr) )                                 \
+           {                                                                \
+              (head_ptr) = (entry_ptr)->next;                               \
+              if ( (head_ptr) != NULL )                                     \
+              {                                                             \
+                 (head_ptr)->prev = NULL;                                   \
+              }                                                             \
+           }                                                                \
+           else                                                             \
+           {                                                                \
+              (entry_ptr)->prev->next = (entry_ptr)->next;                  \
+           }                                                                \
+           if ( (tail_ptr) == (entry_ptr) )                                 \
+           {                                                                \
+              (tail_ptr) = (entry_ptr)->prev;                               \
+              if ( (tail_ptr) != NULL )                                     \
+              {                                                             \
+                 (tail_ptr)->next = NULL;                                   \
+              }                                                             \
+           }                                                                \
+           else                                                             \
+           {                                                                \
+              (entry_ptr)->next->prev = (entry_ptr)->prev;                  \
+           }                                                                \
+           entry_ptr->next = NULL;                                          \
+           entry_ptr->prev = NULL;                                          \
+           (len)--;                                                         \
+           (Size) -= entry_ptr->size;                                       \
+        }
+
+#define H5C__DLL_UPDATE_FOR_SIZE_CHANGE(dll_len, dll_size, old_size, new_size) \
+        H5C__DLL_PRE_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size)     \
+	(dll_size) -= (old_size);                                              \
+	(dll_size) += (new_size);                                              \
+        H5C__DLL_POST_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size)
+
+#if H5C_DO_SANITY_CHECKS
+
+#define H5C__AUX_DLL_PRE_REMOVE_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv) \
+if ( ( (hd_ptr) == NULL ) ||                                                   \
+     ( (tail_ptr) == NULL ) ||                                                 \
+     ( (entry_ptr) == NULL ) ||                                                \
+     ( (len) <= 0 ) ||                                                         \
+     ( (Size) < (entry_ptr)->size ) ||                                         \
+     ( ( (Size) == (entry_ptr)->size ) && ( ! ( (len) == 1 ) ) ) ||            \
+     ( ( (entry_ptr)->aux_prev == NULL ) && ( (hd_ptr) != (entry_ptr) ) ) ||   \
+     ( ( (entry_ptr)->aux_next == NULL ) && ( (tail_ptr) != (entry_ptr) ) ) || \
+     ( ( (len) == 1 ) &&                                                       \
+       ( ! ( ( (hd_ptr) == (entry_ptr) ) && ( (tail_ptr) == (entry_ptr) ) &&   \
+             ( (entry_ptr)->aux_next == NULL ) &&                              \
+             ( (entry_ptr)->aux_prev == NULL ) &&                              \
+             ( (Size) == (entry_ptr)->size )                                   \
+           )                                                                   \
+       )                                                                       \
+     )                                                                         \
+   ) {                                                                         \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "aux DLL pre remove SC failed")   \
+}
+
+#define H5C__AUX_DLL_SC(head_ptr, tail_ptr, len, Size, fv)                  \
+if ( ( ( ( (head_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) &&              \
+       ( (head_ptr) != (tail_ptr) )                                         \
+     ) ||                                                                   \
+     ( (len) < 0 ) ||                                                       \
+     ( (Size) < 0 ) ||                                                      \
+     ( ( (len) == 1 ) &&                                                    \
+       ( ( (head_ptr) != (tail_ptr) ) || ( (Size) <= 0 ) ||                 \
+         ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )           \
+       )                                                                    \
+     ) ||                                                                   \
+     ( ( (len) >= 1 ) &&                                                    \
+       ( ( (head_ptr) == NULL ) || ( (head_ptr)->aux_prev != NULL ) ||      \
+         ( (tail_ptr) == NULL ) || ( (tail_ptr)->aux_next != NULL )         \
+       )                                                                    \
+     )                                                                      \
+   ) {                                                                      \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "AUX DLL sanity check failed") \
+}
+
+#define H5C__AUX_DLL_PRE_INSERT_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv) \
+if ( ( (entry_ptr) == NULL ) ||                                                \
+     ( (entry_ptr)->aux_next != NULL ) ||                                      \
+     ( (entry_ptr)->aux_prev != NULL ) ||                                      \
+     ( ( ( (hd_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) &&                   \
+       ( (hd_ptr) != (tail_ptr) )                                              \
+     ) ||                                                                      \
+     ( (len) < 0 ) ||                                                          \
+     ( ( (len) == 1 ) &&                                                       \
+       ( ( (hd_ptr) != (tail_ptr) ) || ( (Size) <= 0 ) ||                      \
+         ( (hd_ptr) == NULL ) || ( (hd_ptr)->size != (Size) )                  \
+       )                                                                       \
+     ) ||                                                                      \
+     ( ( (len) >= 1 ) &&                                                       \
+       ( ( (hd_ptr) == NULL ) || ( (hd_ptr)->aux_prev != NULL ) ||             \
+         ( (tail_ptr) == NULL ) || ( (tail_ptr)->aux_next != NULL )            \
+       )                                                                       \
+     )                                                                         \
+   ) {                                                                         \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "AUX DLL pre insert SC failed")   \
+}
+
+#else /* H5C_DO_SANITY_CHECKS */
+
+#define H5C__AUX_DLL_PRE_REMOVE_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv)
+#define H5C__AUX_DLL_SC(head_ptr, tail_ptr, len, Size, fv)
+#define H5C__AUX_DLL_PRE_INSERT_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv)
+
+#endif /* H5C_DO_SANITY_CHECKS */
+
+
+#define H5C__AUX_DLL_APPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val)\
+        H5C__AUX_DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size,   \
+                                   fail_val)                                   \
+        if ( (head_ptr) == NULL )                                              \
+        {                                                                      \
+           (head_ptr) = (entry_ptr);                                           \
+           (tail_ptr) = (entry_ptr);                                           \
+        }                                                                      \
+        else                                                                   \
+        {                                                                      \
+           (tail_ptr)->aux_next = (entry_ptr);                                 \
+           (entry_ptr)->aux_prev = (tail_ptr);                                 \
+           (tail_ptr) = (entry_ptr);                                           \
+        }                                                                      \
+        (len)++;                                                               \
+        (Size) += entry_ptr->size;
+
+#define H5C__AUX_DLL_PREPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fv)   \
+        H5C__AUX_DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, \
+                                   fv)                                       \
+        if ( (head_ptr) == NULL )                                            \
+        {                                                                    \
+           (head_ptr) = (entry_ptr);                                         \
+           (tail_ptr) = (entry_ptr);                                         \
+        }                                                                    \
+        else                                                                 \
+        {                                                                    \
+           (head_ptr)->aux_prev = (entry_ptr);                               \
+           (entry_ptr)->aux_next = (head_ptr);                               \
+           (head_ptr) = (entry_ptr);                                         \
+        }                                                                    \
+        (len)++;                                                             \
+        (Size) += entry_ptr->size;
+
+#define H5C__AUX_DLL_REMOVE(entry_ptr, head_ptr, tail_ptr, len, Size, fv)    \
+        H5C__AUX_DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size, \
+                                   fv)                                       \
+        {                                                                    \
+           if ( (head_ptr) == (entry_ptr) )                                  \
+           {                                                                 \
+              (head_ptr) = (entry_ptr)->aux_next;                            \
+              if ( (head_ptr) != NULL )                                      \
+              {                                                              \
+                 (head_ptr)->aux_prev = NULL;                                \
+              }                                                              \
+           }                                                                 \
+           else                                                              \
+           {                                                                 \
+              (entry_ptr)->aux_prev->aux_next = (entry_ptr)->aux_next;       \
+           }                                                                 \
+           if ( (tail_ptr) == (entry_ptr) )                                  \
+           {                                                                 \
+              (tail_ptr) = (entry_ptr)->aux_prev;                            \
+              if ( (tail_ptr) != NULL )                                      \
+              {                                                              \
+                 (tail_ptr)->aux_next = NULL;                                \
+              }                                                              \
+           }                                                                 \
+           else                                                              \
+           {                                                                 \
+              (entry_ptr)->aux_next->aux_prev = (entry_ptr)->aux_prev;       \
+           }                                                                 \
+           entry_ptr->aux_next = NULL;                                       \
+           entry_ptr->aux_prev = NULL;                                       \
+           (len)--;                                                          \
+           (Size) -= entry_ptr->size;                                        \
+        }
+
+
+/***********************************************************************
+ *
+ * Stats collection macros
+ *
+ * The following macros must handle stats collection when this collection
+ * is enabled, and evaluate to the empty string when it is not.
+ *
+ * The sole exception to this rule is
+ * H5C__UPDATE_CACHE_HIT_RATE_STATS(), which is always active as
+ * the cache hit rate stats are always collected and available.
+ *
+ * Changes:
+ *
+ * 	JRM -- 3/21/06
+ * 	Added / updated macros for pinned entry related stats.
+ *
+ * 	JRM -- 8/9/06
+ * 	More pinned entry stats related updates.
+ *
+ * 	JRM -- 3/31/07
+ * 	Updated H5C__UPDATE_STATS_FOR_PROTECT() to keep stats on
+ * 	read and write protects.
+ *
+ *      MAM -- 1/15/09
+ *      Created H5C__UPDATE_MAX_INDEX_SIZE_STATS to contain
+ *      common code within macros that update the maximum
+ *      index, clean_index, and dirty_index statistics fields.
+ *
+ ***********************************************************************/
+
+#define H5C__UPDATE_CACHE_HIT_RATE_STATS(cache_ptr, hit) \
+        (cache_ptr->cache_accesses)++;                   \
+        if ( hit ) {                                     \
+            (cache_ptr->cache_hits)++;                   \
+        }                                                \
+
+#if H5C_COLLECT_CACHE_STATS
+
+#define H5C__UPDATE_MAX_INDEX_SIZE_STATS(cache_ptr)                        \
+        if ( (cache_ptr)->index_size > (cache_ptr)->max_index_size )       \
+            (cache_ptr)->max_index_size = (cache_ptr)->index_size;         \
+        if ( (cache_ptr)->clean_index_size >                               \
+                (cache_ptr)->max_clean_index_size )                        \
+            (cache_ptr)->max_clean_index_size =                            \
+                (cache_ptr)->clean_index_size;                             \
+        if ( (cache_ptr)->dirty_index_size >                               \
+                (cache_ptr)->max_dirty_index_size )                        \
+            (cache_ptr)->max_dirty_index_size =                            \
+                (cache_ptr)->dirty_index_size;
+
+#define H5C__UPDATE_STATS_FOR_DIRTY_PIN(cache_ptr, entry_ptr) \
+	(((cache_ptr)->dirty_pins)[(entry_ptr)->type->id])++;
+
+#define H5C__UPDATE_STATS_FOR_UNPROTECT(cache_ptr)                   \
+        if ( (cache_ptr)->slist_len > (cache_ptr)->max_slist_len )   \
+	    (cache_ptr)->max_slist_len = (cache_ptr)->slist_len;     \
+        if ( (cache_ptr)->slist_size > (cache_ptr)->max_slist_size ) \
+	    (cache_ptr)->max_slist_size = (cache_ptr)->slist_size;   \
+	if ( (cache_ptr)->pel_len > (cache_ptr)->max_pel_len )       \
+	    (cache_ptr)->max_pel_len = (cache_ptr)->pel_len;         \
+	if ( (cache_ptr)->pel_size > (cache_ptr)->max_pel_size )     \
+	    (cache_ptr)->max_pel_size = (cache_ptr)->pel_size;
+
+#define H5C__UPDATE_STATS_FOR_MOVE(cache_ptr, entry_ptr)               \
+	if ( cache_ptr->flush_in_progress ) {                            \
+            ((cache_ptr)->cache_flush_moves[(entry_ptr)->type->id])++; \
+	}                                                                \
+        if ( entry_ptr->flush_in_progress ) {                            \
+            ((cache_ptr)->entry_flush_moves[(entry_ptr)->type->id])++; \
+	}                                                                \
+	(((cache_ptr)->moves)[(entry_ptr)->type->id])++;
+
+#define H5C__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE(cache_ptr, entry_ptr, new_size)\
+	if ( cache_ptr->flush_in_progress ) {                                  \
+            ((cache_ptr)->cache_flush_size_changes[(entry_ptr)->type->id])++;  \
+	}                                                                      \
+        if ( entry_ptr->flush_in_progress ) {                                  \
+            ((cache_ptr)->entry_flush_size_changes[(entry_ptr)->type->id])++;  \
+	}                                                                      \
+	if ( (entry_ptr)->size < (new_size) ) {                                \
+	    ((cache_ptr)->size_increases[(entry_ptr)->type->id])++;            \
+            H5C__UPDATE_MAX_INDEX_SIZE_STATS(cache_ptr)                        \
+            if ( (cache_ptr)->slist_size > (cache_ptr)->max_slist_size )       \
+                (cache_ptr)->max_slist_size = (cache_ptr)->slist_size;         \
+            if ( (cache_ptr)->pl_size > (cache_ptr)->max_pl_size )             \
+                (cache_ptr)->max_pl_size = (cache_ptr)->pl_size;               \
+	} else if ( (entry_ptr)->size > (new_size) ) {                         \
+	    ((cache_ptr)->size_decreases[(entry_ptr)->type->id])++;            \
+	}
+
+#define H5C__UPDATE_STATS_FOR_HT_INSERTION(cache_ptr) \
+	(cache_ptr)->total_ht_insertions++;
+
+#define H5C__UPDATE_STATS_FOR_HT_DELETION(cache_ptr) \
+	(cache_ptr)->total_ht_deletions++;
+
+#define H5C__UPDATE_STATS_FOR_HT_SEARCH(cache_ptr, success, depth)  \
+	if ( success ) {                                            \
+	    (cache_ptr)->successful_ht_searches++;                  \
+	    (cache_ptr)->total_successful_ht_search_depth += depth; \
+	} else {                                                    \
+	    (cache_ptr)->failed_ht_searches++;                      \
+	    (cache_ptr)->total_failed_ht_search_depth += depth;     \
+	}
+
+#define H5C__UPDATE_STATS_FOR_UNPIN(cache_ptr, entry_ptr) \
+	((cache_ptr)->unpins)[(entry_ptr)->type->id]++;
+
+#if H5C_COLLECT_CACHE_ENTRY_STATS
+
+#define H5C__RESET_CACHE_ENTRY_STATS(entry_ptr) \
+        (entry_ptr)->accesses = 0;              \
+        (entry_ptr)->clears   = 0;              \
+        (entry_ptr)->flushes  = 0;              \
+	(entry_ptr)->pins     = 0;
+
+#define H5C__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr)            \
+	(((cache_ptr)->clears)[(entry_ptr)->type->id])++;            \
+        if ( (entry_ptr)->is_pinned ) {                              \
+	    (((cache_ptr)->pinned_clears)[(entry_ptr)->type->id])++; \
+	}                                                            \
+        ((entry_ptr)->clears)++;
+
+#define H5C__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr)             \
+	(((cache_ptr)->flushes)[(entry_ptr)->type->id])++;            \
+        if ( (entry_ptr)->is_pinned ) {                               \
+	    (((cache_ptr)->pinned_flushes)[(entry_ptr)->type->id])++; \
+	}                                                             \
+        ((entry_ptr)->flushes)++;
+
+#define H5C__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr)        \
+	(((cache_ptr)->evictions)[(entry_ptr)->type->id])++;        \
+        if ( (entry_ptr)->accesses >                                \
+             ((cache_ptr)->max_accesses)[(entry_ptr)->type->id] ) { \
+            ((cache_ptr)->max_accesses)[(entry_ptr)->type->id]      \
+                = (entry_ptr)->accesses;                            \
+        }                                                           \
+        if ( (entry_ptr)->accesses <                                \
+             ((cache_ptr)->min_accesses)[(entry_ptr)->type->id] ) { \
+            ((cache_ptr)->min_accesses)[(entry_ptr)->type->id]      \
+                = (entry_ptr)->accesses;                            \
+        }                                                           \
+        if ( (entry_ptr)->clears >                                  \
+             ((cache_ptr)->max_clears)[(entry_ptr)->type->id] ) {   \
+            ((cache_ptr)->max_clears)[(entry_ptr)->type->id]        \
+                 = (entry_ptr)->clears;                             \
+        }                                                           \
+        if ( (entry_ptr)->flushes >                                 \
+             ((cache_ptr)->max_flushes)[(entry_ptr)->type->id] ) {  \
+            ((cache_ptr)->max_flushes)[(entry_ptr)->type->id]       \
+                 = (entry_ptr)->flushes;                            \
+        }                                                           \
+        if ( (entry_ptr)->size >                                    \
+             ((cache_ptr)->max_size)[(entry_ptr)->type->id] ) {     \
+            ((cache_ptr)->max_size)[(entry_ptr)->type->id]          \
+                 = (entry_ptr)->size;                               \
+        }                                                           \
+        if ( (entry_ptr)->pins >                                    \
+             ((cache_ptr)->max_pins)[(entry_ptr)->type->id] ) {     \
+            ((cache_ptr)->max_pins)[(entry_ptr)->type->id]          \
+                 = (entry_ptr)->pins;                               \
+        }
+
+#define H5C__UPDATE_STATS_FOR_INSERTION(cache_ptr, entry_ptr)            \
+	(((cache_ptr)->insertions)[(entry_ptr)->type->id])++;            \
+	if ( (entry_ptr)->is_pinned ) {                                  \
+	    (((cache_ptr)->pinned_insertions)[(entry_ptr)->type->id])++; \
+	    ((cache_ptr)->pins)[(entry_ptr)->type->id]++;                \
+            (entry_ptr)->pins++;                                         \
+	    if ( (cache_ptr)->pel_len > (cache_ptr)->max_pel_len )       \
+	        (cache_ptr)->max_pel_len = (cache_ptr)->pel_len;         \
+	    if ( (cache_ptr)->pel_size > (cache_ptr)->max_pel_size )     \
+	        (cache_ptr)->max_pel_size = (cache_ptr)->pel_size;       \
+	}                                                                \
+        if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len )       \
+	    (cache_ptr)->max_index_len = (cache_ptr)->index_len;         \
+        H5C__UPDATE_MAX_INDEX_SIZE_STATS(cache_ptr)                      \
+        if ( (cache_ptr)->slist_len > (cache_ptr)->max_slist_len )       \
+	    (cache_ptr)->max_slist_len = (cache_ptr)->slist_len;         \
+        if ( (cache_ptr)->slist_size > (cache_ptr)->max_slist_size )     \
+	    (cache_ptr)->max_slist_size = (cache_ptr)->slist_size;       \
+        if ( (entry_ptr)->size >                                         \
+             ((cache_ptr)->max_size)[(entry_ptr)->type->id] ) {          \
+            ((cache_ptr)->max_size)[(entry_ptr)->type->id]               \
+                 = (entry_ptr)->size;                                    \
+        }
+
+#define H5C__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit)             \
+	if ( hit )                                                           \
+            ((cache_ptr)->hits)[(entry_ptr)->type->id]++;                    \
+	else                                                                 \
+            ((cache_ptr)->misses)[(entry_ptr)->type->id]++;                  \
+        if ( ! ((entry_ptr)->is_read_only) ) {                               \
+	    ((cache_ptr)->write_protects)[(entry_ptr)->type->id]++;          \
+	} else {                                                             \
+	    ((cache_ptr)->read_protects)[(entry_ptr)->type->id]++;           \
+	    if ( ((entry_ptr)->ro_ref_count) >                               \
+		 ((cache_ptr)->max_read_protects)[(entry_ptr)->type->id] ) { \
+	        ((cache_ptr)->max_read_protects)[(entry_ptr)->type->id] =    \
+			((entry_ptr)->ro_ref_count);                         \
+	    }                                                                \
+	}                                                                    \
+        if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len )           \
+            (cache_ptr)->max_index_len = (cache_ptr)->index_len;             \
+        H5C__UPDATE_MAX_INDEX_SIZE_STATS(cache_ptr)                          \
+        if ( (cache_ptr)->pl_len > (cache_ptr)->max_pl_len )                 \
+            (cache_ptr)->max_pl_len = (cache_ptr)->pl_len;                   \
+        if ( (cache_ptr)->pl_size > (cache_ptr)->max_pl_size )               \
+            (cache_ptr)->max_pl_size = (cache_ptr)->pl_size;                 \
+        if ( (entry_ptr)->size >                                             \
+             ((cache_ptr)->max_size)[(entry_ptr)->type->id] ) {              \
+            ((cache_ptr)->max_size)[(entry_ptr)->type->id]                   \
+                 = (entry_ptr)->size;                                        \
+        }                                                                    \
+        ((entry_ptr)->accesses)++;
+
+#define H5C__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr)          \
+	((cache_ptr)->pins)[(entry_ptr)->type->id]++;            \
+        (entry_ptr)->pins++;                                     \
+	if ( (cache_ptr)->pel_len > (cache_ptr)->max_pel_len )   \
+	    (cache_ptr)->max_pel_len = (cache_ptr)->pel_len;     \
+	if ( (cache_ptr)->pel_size > (cache_ptr)->max_pel_size ) \
+	    (cache_ptr)->max_pel_size = (cache_ptr)->pel_size;
+
+#else /* H5C_COLLECT_CACHE_ENTRY_STATS */
+
+#define H5C__RESET_CACHE_ENTRY_STATS(entry_ptr)
+
+#define H5C__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr)             \
+        if ( (entry_ptr)->is_pinned ) {                               \
+	    (((cache_ptr)->pinned_clears)[(entry_ptr)->type->id])++;  \
+	}                                                             \
+	(((cache_ptr)->clears)[(entry_ptr)->type->id])++;
+
+#define H5C__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr)             \
+	(((cache_ptr)->flushes)[(entry_ptr)->type->id])++;            \
+        if ( (entry_ptr)->is_pinned ) {                               \
+	    (((cache_ptr)->pinned_flushes)[(entry_ptr)->type->id])++; \
+	}
+
+#define H5C__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr) \
+	(((cache_ptr)->evictions)[(entry_ptr)->type->id])++;
+
+#define H5C__UPDATE_STATS_FOR_INSERTION(cache_ptr, entry_ptr)            \
+	(((cache_ptr)->insertions)[(entry_ptr)->type->id])++;            \
+	if ( (entry_ptr)->is_pinned ) {                                  \
+	    (((cache_ptr)->pinned_insertions)[(entry_ptr)->type->id])++; \
+	    ((cache_ptr)->pins)[(entry_ptr)->type->id]++;                \
+	    if ( (cache_ptr)->pel_len > (cache_ptr)->max_pel_len )       \
+	        (cache_ptr)->max_pel_len = (cache_ptr)->pel_len;         \
+	    if ( (cache_ptr)->pel_size > (cache_ptr)->max_pel_size )     \
+	        (cache_ptr)->max_pel_size = (cache_ptr)->pel_size;       \
+	}                                                                \
+        if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len )       \
+	    (cache_ptr)->max_index_len = (cache_ptr)->index_len;         \
+        H5C__UPDATE_MAX_INDEX_SIZE_STATS(cache_ptr)                      \
+        if ( (cache_ptr)->slist_len > (cache_ptr)->max_slist_len )       \
+	    (cache_ptr)->max_slist_len = (cache_ptr)->slist_len;         \
+        if ( (cache_ptr)->slist_size > (cache_ptr)->max_slist_size )     \
+	    (cache_ptr)->max_slist_size = (cache_ptr)->slist_size;
+
+#define H5C__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit)             \
+	if ( hit )                                                           \
+            ((cache_ptr)->hits)[(entry_ptr)->type->id]++;                    \
+	else                                                                 \
+            ((cache_ptr)->misses)[(entry_ptr)->type->id]++;                  \
+        if ( ! ((entry_ptr)->is_read_only) ) {                               \
+	    ((cache_ptr)->write_protects)[(entry_ptr)->type->id]++;          \
+	} else {                                                             \
+	    ((cache_ptr)->read_protects)[(entry_ptr)->type->id]++;           \
+	    if ( ((entry_ptr)->ro_ref_count) >                               \
+		 ((cache_ptr)->max_read_protects)[(entry_ptr)->type->id] ) { \
+	        ((cache_ptr)->max_read_protects)[(entry_ptr)->type->id] =    \
+			((entry_ptr)->ro_ref_count);                         \
+	    }                                                                \
+	}                                                                    \
+        if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len )           \
+            (cache_ptr)->max_index_len = (cache_ptr)->index_len;             \
+        H5C__UPDATE_MAX_INDEX_SIZE_STATS(cache_ptr)                          \
+        if ( (cache_ptr)->pl_len > (cache_ptr)->max_pl_len )                 \
+            (cache_ptr)->max_pl_len = (cache_ptr)->pl_len;                   \
+        if ( (cache_ptr)->pl_size > (cache_ptr)->max_pl_size )               \
+            (cache_ptr)->max_pl_size = (cache_ptr)->pl_size;
+
+#define H5C__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr)          \
+	((cache_ptr)->pins)[(entry_ptr)->type->id]++;            \
+	if ( (cache_ptr)->pel_len > (cache_ptr)->max_pel_len )   \
+	    (cache_ptr)->max_pel_len = (cache_ptr)->pel_len;     \
+	if ( (cache_ptr)->pel_size > (cache_ptr)->max_pel_size ) \
+	    (cache_ptr)->max_pel_size = (cache_ptr)->pel_size;
+
+#endif /* H5C_COLLECT_CACHE_ENTRY_STATS */
+
+#else /* H5C_COLLECT_CACHE_STATS */
+
+#define H5C__RESET_CACHE_ENTRY_STATS(entry_ptr)
+#define H5C__UPDATE_STATS_FOR_DIRTY_PIN(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_UNPROTECT(cache_ptr)
+#define H5C__UPDATE_STATS_FOR_MOVE(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE(cache_ptr, entry_ptr, new_size)
+#define H5C__UPDATE_STATS_FOR_HT_INSERTION(cache_ptr)
+#define H5C__UPDATE_STATS_FOR_HT_DELETION(cache_ptr)
+#define H5C__UPDATE_STATS_FOR_HT_SEARCH(cache_ptr, success, depth)
+#define H5C__UPDATE_STATS_FOR_INSERTION(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit)
+#define H5C__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_UNPIN(cache_ptr, entry_ptr)
+
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+
+/***********************************************************************
+ *
+ * Hash table access and manipulation macros:
+ *
+ * The following macros handle searches, insertions, and deletion in
+ * the hash table.
+ *
+ * When modifying these macros, remember to modify the similar macros
+ * in tst/cache.c
+ *
+ * Changes:
+ *
+ *   - Updated existing index macros and sanity check macros to maintain
+ *     the clean_index_size and dirty_index_size fields of H5C_t.  Also
+ *     added macros to allow us to track entry cleans and dirties.
+ *
+ *     						JRM -- 11/5/08
+ *
+ ***********************************************************************/
+
+/* H5C__HASH_TABLE_LEN is defined in H5Cpkg.h.  It mut be a power of two. */
+
+#define H5C__HASH_MASK		((size_t)(H5C__HASH_TABLE_LEN - 1) << 3)
+
+#define H5C__HASH_FCN(x)	(int)(((x) & H5C__HASH_MASK) >> 3)
+
+#if H5C_DO_SANITY_CHECKS
+
+#define H5C__PRE_HT_INSERT_SC(cache_ptr, entry_ptr, fail_val) \
+if ( ( (cache_ptr) == NULL ) ||                               \
+     ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||            \
+     ( (entry_ptr) == NULL ) ||                               \
+     ( ! H5F_addr_defined((entry_ptr)->addr) ) ||             \
+     ( (entry_ptr)->ht_next != NULL ) ||                      \
+     ( (entry_ptr)->ht_prev != NULL ) ||                      \
+     ( (entry_ptr)->size <= 0 ) ||                            \
+     ( (k = H5C__HASH_FCN((entry_ptr)->addr)) < 0 ) ||        \
+     ( k >= H5C__HASH_TABLE_LEN ) ||                          \
+     ( (cache_ptr)->index_size !=                             \
+       ((cache_ptr)->clean_index_size +                       \
+	(cache_ptr)->dirty_index_size) ) ) {                  \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val,              \
+               "Pre HT insert SC failed")                     \
+}
+
+#define H5C__PRE_HT_REMOVE_SC(cache_ptr, entry_ptr)                     \
+if ( ( (cache_ptr) == NULL ) ||                                         \
+     ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||                      \
+     ( (cache_ptr)->index_len < 1 ) ||                                  \
+     ( (entry_ptr) == NULL ) ||                                         \
+     ( (cache_ptr)->index_size < (entry_ptr)->size ) ||                 \
+     ( ! H5F_addr_defined((entry_ptr)->addr) ) ||                       \
+     ( (entry_ptr)->size <= 0 ) ||                                      \
+     ( H5C__HASH_FCN((entry_ptr)->addr) < 0 ) ||                        \
+     ( H5C__HASH_FCN((entry_ptr)->addr) >= H5C__HASH_TABLE_LEN ) ||     \
+     ( ((cache_ptr)->index)[(H5C__HASH_FCN((entry_ptr)->addr))]         \
+       == NULL ) ||                                                     \
+     ( ( ((cache_ptr)->index)[(H5C__HASH_FCN((entry_ptr)->addr))]       \
+       != (entry_ptr) ) &&                                              \
+       ( (entry_ptr)->ht_prev == NULL ) ) ||                            \
+     ( ( ((cache_ptr)->index)[(H5C__HASH_FCN((entry_ptr)->addr))] ==    \
+         (entry_ptr) ) &&                                               \
+       ( (entry_ptr)->ht_prev != NULL ) ) ||                            \
+     ( (cache_ptr)->index_size !=                                       \
+       ((cache_ptr)->clean_index_size +                                 \
+	(cache_ptr)->dirty_index_size) ) ) {                            \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Pre HT remove SC failed") \
+}
+
+/* (Keep in sync w/H5C_TEST__PRE_HT_SEARCH_SC macro in test/cache_common.h -QAK) */
+#define H5C__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val)                    \
+if ( ( (cache_ptr) == NULL ) ||                                             \
+     ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||                          \
+     ( (cache_ptr)->index_size !=                                           \
+       ((cache_ptr)->clean_index_size + (cache_ptr)->dirty_index_size) ) || \
+     ( ! H5F_addr_defined(Addr) ) ||                                        \
+     ( H5C__HASH_FCN(Addr) < 0 ) ||                                         \
+     ( H5C__HASH_FCN(Addr) >= H5C__HASH_TABLE_LEN ) ) {                     \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val, "Pre HT search SC failed") \
+}
+
+/* (Keep in sync w/H5C_TEST__POST_SUC_HT_SEARCH_SC macro in test/cache_common.h -QAK) */
+#define H5C__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val) \
+if ( ( (cache_ptr) == NULL ) ||                                             \
+     ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||                          \
+     ( (cache_ptr)->index_len < 1 ) ||                                      \
+     ( (entry_ptr) == NULL ) ||                                             \
+     ( (cache_ptr)->index_size < (entry_ptr)->size ) ||                     \
+     ( (cache_ptr)->index_size !=                                           \
+       ((cache_ptr)->clean_index_size + (cache_ptr)->dirty_index_size) ) || \
+     ( H5F_addr_ne((entry_ptr)->addr, (Addr)) ) ||                          \
+     ( (entry_ptr)->size <= 0 ) ||                                          \
+     ( ((cache_ptr)->index)[k] == NULL ) ||                                 \
+     ( ( ((cache_ptr)->index)[k] != (entry_ptr) ) &&                        \
+       ( (entry_ptr)->ht_prev == NULL ) ) ||                                \
+     ( ( ((cache_ptr)->index)[k] == (entry_ptr) ) &&                        \
+       ( (entry_ptr)->ht_prev != NULL ) ) ||                                \
+     ( ( (entry_ptr)->ht_prev != NULL ) &&                                  \
+       ( (entry_ptr)->ht_prev->ht_next != (entry_ptr) ) ) ||                \
+     ( ( (entry_ptr)->ht_next != NULL ) &&                                  \
+       ( (entry_ptr)->ht_next->ht_prev != (entry_ptr) ) ) ) {               \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val,                            \
+                "Post successful HT search SC failed")                      \
+}
+
+/* (Keep in sync w/H5C_TEST__POST_HT_SHIFT_TO_FRONT macro in test/cache_common.h -QAK) */
+#define H5C__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val) \
+if ( ( (cache_ptr) == NULL ) ||                                        \
+     ( ((cache_ptr)->index)[k] != (entry_ptr) ) ||                     \
+     ( (entry_ptr)->ht_prev != NULL ) ) {                              \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val,                       \
+                "Post HT shift to front SC failed")                    \
+}
+
+#define H5C__PRE_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size, \
+		                         entry_ptr, was_clean)          \
+if ( ( (cache_ptr) == NULL ) ||                                         \
+     ( (cache_ptr)->index_len <= 0 ) ||                                 \
+     ( (cache_ptr)->index_size <= 0 ) ||                                \
+     ( (new_size) <= 0 ) ||                                             \
+     ( (old_size) > (cache_ptr)->index_size ) ||                        \
+     ( (new_size) <= 0 ) ||                                             \
+     ( ( (cache_ptr)->index_len == 1 ) &&                               \
+       ( (cache_ptr)->index_size != (old_size) ) ) ||                   \
+     ( (cache_ptr)->index_size !=                                       \
+       ((cache_ptr)->clean_index_size +                                 \
+        (cache_ptr)->dirty_index_size) ) ||                             \
+     ( (entry_ptr == NULL) ) ||                                         \
+     ( ( !( was_clean ) ||                                              \
+	    ( (cache_ptr)->clean_index_size < (old_size) ) ) &&         \
+	  ( ( (was_clean) ) ||                                          \
+	    ( (cache_ptr)->dirty_index_size < (old_size) ) ) ) ||       \
+     ( (entry_ptr) == NULL ) ) {                                        \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,                            \
+                "Pre HT entry size change SC failed")                   \
+}
+
+#define H5C__POST_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size,  \
+		                          entry_ptr)                      \
+if ( ( (cache_ptr) == NULL ) ||                                           \
+     ( (cache_ptr)->index_len <= 0 ) ||                                   \
+     ( (cache_ptr)->index_size <= 0 ) ||                                  \
+     ( (new_size) > (cache_ptr)->index_size ) ||                          \
+     ( (cache_ptr)->index_size !=                                         \
+	  ((cache_ptr)->clean_index_size +                                \
+           (cache_ptr)->dirty_index_size) ) ||                            \
+     ( ( !((entry_ptr)->is_dirty ) ||                                     \
+	    ( (cache_ptr)->dirty_index_size < (new_size) ) ) &&           \
+	  ( ( ((entry_ptr)->is_dirty)  ) ||                               \
+	    ( (cache_ptr)->clean_index_size < (new_size) ) ) ) ||         \
+     ( ( (cache_ptr)->index_len == 1 ) &&                                 \
+       ( (cache_ptr)->index_size != (new_size) ) ) ) {                    \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,                              \
+                "Post HT entry size change SC failed")                    \
+}
+
+#define H5C__PRE_HT_UPDATE_FOR_ENTRY_CLEAN_SC(cache_ptr, entry_ptr)           \
+if (                                                                          \
+    ( (cache_ptr) == NULL ) ||                                                \
+    ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||                             \
+    ( (cache_ptr)->index_len <= 0 ) ||                                        \
+    ( (entry_ptr) == NULL ) ||                                                \
+    ( (entry_ptr)->is_dirty != FALSE ) ||                                     \
+    ( (cache_ptr)->index_size < (entry_ptr)->size ) ||                        \
+    ( (cache_ptr)->dirty_index_size < (entry_ptr)->size ) ||                  \
+    ( (cache_ptr)->index_size !=                                              \
+       ((cache_ptr)->clean_index_size + (cache_ptr)->dirty_index_size) ) ) {  \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,                                  \
+                "Pre HT update for entry clean SC failed")                    \
+}
+
+#define H5C__PRE_HT_UPDATE_FOR_ENTRY_DIRTY_SC(cache_ptr, entry_ptr)           \
+if (                                                                          \
+    ( (cache_ptr) == NULL ) ||                                                \
+    ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||                             \
+    ( (cache_ptr)->index_len <= 0 ) ||                                        \
+    ( (entry_ptr) == NULL ) ||                                                \
+    ( (entry_ptr)->is_dirty != TRUE ) ||                                      \
+    ( (cache_ptr)->index_size < (entry_ptr)->size ) ||                        \
+    ( (cache_ptr)->clean_index_size < (entry_ptr)->size ) ||                  \
+    ( (cache_ptr)->index_size !=                                              \
+       ((cache_ptr)->clean_index_size + (cache_ptr)->dirty_index_size) ) ) {  \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,                                  \
+                "Pre HT update for entry dirty SC failed")                    \
+}
+
+#define H5C__POST_HT_UPDATE_FOR_ENTRY_CLEAN_SC(cache_ptr, entry_ptr)        \
+if ( (cache_ptr)->index_size !=                                             \
+       ((cache_ptr)->clean_index_size + (cache_ptr)->dirty_index_size) ) {  \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,                                \
+                "Post HT update for entry clean SC failed")                 \
+}
+
+#define H5C__POST_HT_UPDATE_FOR_ENTRY_DIRTY_SC(cache_ptr, entry_ptr)        \
+if ( (cache_ptr)->index_size !=                                             \
+       ((cache_ptr)->clean_index_size + (cache_ptr)->dirty_index_size) ) {  \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,                                \
+                "Post HT update for entry dirty SC failed")                 \
+}
+
+#else /* H5C_DO_SANITY_CHECKS */
+
+#define H5C__PRE_HT_INSERT_SC(cache_ptr, entry_ptr, fail_val)
+#define H5C__PRE_HT_REMOVE_SC(cache_ptr, entry_ptr)
+#define H5C__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val)
+#define H5C__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val)
+#define H5C__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val)
+#define H5C__PRE_HT_UPDATE_FOR_ENTRY_CLEAN_SC(cache_ptr, entry_ptr)
+#define H5C__PRE_HT_UPDATE_FOR_ENTRY_DIRTY_SC(cache_ptr, entry_ptr)
+#define H5C__PRE_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size, \
+		                         entry_ptr, was_clean)
+#define H5C__POST_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size, \
+		                          entry_ptr)
+#define H5C__POST_HT_UPDATE_FOR_ENTRY_CLEAN_SC(cache_ptr, entry_ptr)
+#define H5C__POST_HT_UPDATE_FOR_ENTRY_DIRTY_SC(cache_ptr, entry_ptr)
+
+#endif /* H5C_DO_SANITY_CHECKS */
+
+
+#define H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, fail_val) \
+{                                                            \
+    int k;                                                   \
+    H5C__PRE_HT_INSERT_SC(cache_ptr, entry_ptr, fail_val)    \
+    k = H5C__HASH_FCN((entry_ptr)->addr);                    \
+    if ( ((cache_ptr)->index)[k] == NULL )                   \
+    {                                                        \
+        ((cache_ptr)->index)[k] = (entry_ptr);               \
+    }                                                        \
+    else                                                     \
+    {                                                        \
+        (entry_ptr)->ht_next = ((cache_ptr)->index)[k];      \
+        (entry_ptr)->ht_next->ht_prev = (entry_ptr);         \
+        ((cache_ptr)->index)[k] = (entry_ptr);               \
+    }                                                        \
+    (cache_ptr)->index_len++;                                \
+    (cache_ptr)->index_size += (entry_ptr)->size;            \
+    if ( (entry_ptr)->is_dirty ) {                           \
+        (cache_ptr)->dirty_index_size += (entry_ptr)->size;  \
+    } else {                                                 \
+	(cache_ptr)->clean_index_size += (entry_ptr)->size;  \
+    }                                                        \
+    H5C__UPDATE_STATS_FOR_HT_INSERTION(cache_ptr)            \
+}
+
+#define H5C__DELETE_FROM_INDEX(cache_ptr, entry_ptr)          \
+{                                                             \
+    int k;                                                    \
+    H5C__PRE_HT_REMOVE_SC(cache_ptr, entry_ptr)               \
+    k = H5C__HASH_FCN((entry_ptr)->addr);                     \
+    if ( (entry_ptr)->ht_next )                               \
+    {                                                         \
+        (entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev; \
+    }                                                         \
+    if ( (entry_ptr)->ht_prev )                               \
+    {                                                         \
+        (entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next; \
+    }                                                         \
+    if ( ((cache_ptr)->index)[k] == (entry_ptr) )             \
+    {                                                         \
+        ((cache_ptr)->index)[k] = (entry_ptr)->ht_next;       \
+    }                                                         \
+    (entry_ptr)->ht_next = NULL;                              \
+    (entry_ptr)->ht_prev = NULL;                              \
+    (cache_ptr)->index_len--;                                 \
+    (cache_ptr)->index_size -= (entry_ptr)->size;             \
+    if ( (entry_ptr)->is_dirty ) {                            \
+        (cache_ptr)->dirty_index_size -= (entry_ptr)->size;   \
+    } else {                                                  \
+	(cache_ptr)->clean_index_size -= (entry_ptr)->size;   \
+    }                                                         \
+    H5C__UPDATE_STATS_FOR_HT_DELETION(cache_ptr)              \
+}
+
+#define H5C__SEARCH_INDEX(cache_ptr, Addr, entry_ptr, fail_val)             \
+{                                                                           \
+    int k;                                                                  \
+    int depth = 0;                                                          \
+    H5C__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val)                        \
+    k = H5C__HASH_FCN(Addr);                                                \
+    entry_ptr = ((cache_ptr)->index)[k];                                    \
+    while ( ( entry_ptr ) && ( H5F_addr_ne(Addr, (entry_ptr)->addr) ) )     \
+    {                                                                       \
+        (entry_ptr) = (entry_ptr)->ht_next;                                 \
+        (depth)++;                                                          \
+    }                                                                       \
+    if ( entry_ptr )                                                        \
+    {                                                                       \
+        H5C__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val) \
+        if ( entry_ptr != ((cache_ptr)->index)[k] )                         \
+        {                                                                   \
+            if ( (entry_ptr)->ht_next )                                     \
+            {                                                               \
+                (entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev;       \
+            }                                                               \
+            HDassert( (entry_ptr)->ht_prev != NULL );                       \
+            (entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next;           \
+            ((cache_ptr)->index)[k]->ht_prev = (entry_ptr);                 \
+            (entry_ptr)->ht_next = ((cache_ptr)->index)[k];                 \
+            (entry_ptr)->ht_prev = NULL;                                    \
+            ((cache_ptr)->index)[k] = (entry_ptr);                          \
+            H5C__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val)  \
+        }                                                                   \
+    }                                                                       \
+    H5C__UPDATE_STATS_FOR_HT_SEARCH(cache_ptr, (entry_ptr != NULL), depth)  \
+}
+
+#define H5C__SEARCH_INDEX_NO_STATS(cache_ptr, Addr, entry_ptr, fail_val)    \
+{                                                                           \
+    int k;                                                                  \
+    int depth = 0;                                                          \
+    H5C__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val)                        \
+    k = H5C__HASH_FCN(Addr);                                                \
+    entry_ptr = ((cache_ptr)->index)[k];                                    \
+    while ( ( entry_ptr ) && ( H5F_addr_ne(Addr, (entry_ptr)->addr) ) )     \
+    {                                                                       \
+        (entry_ptr) = (entry_ptr)->ht_next;                                 \
+        (depth)++;                                                          \
+    }                                                                       \
+    if ( entry_ptr )                                                        \
+    {                                                                       \
+        H5C__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val) \
+        if ( entry_ptr != ((cache_ptr)->index)[k] )                         \
+        {                                                                   \
+            if ( (entry_ptr)->ht_next )                                     \
+            {                                                               \
+                (entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev;       \
+            }                                                               \
+            HDassert( (entry_ptr)->ht_prev != NULL );                       \
+            (entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next;           \
+            ((cache_ptr)->index)[k]->ht_prev = (entry_ptr);                 \
+            (entry_ptr)->ht_next = ((cache_ptr)->index)[k];                 \
+            (entry_ptr)->ht_prev = NULL;                                    \
+            ((cache_ptr)->index)[k] = (entry_ptr);                          \
+            H5C__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val)  \
+        }                                                                   \
+    }                                                                       \
+}
+
+#define H5C__UPDATE_INDEX_FOR_ENTRY_CLEAN(cache_ptr, entry_ptr)   \
+{                                                                 \
+    H5C__PRE_HT_UPDATE_FOR_ENTRY_CLEAN_SC(cache_ptr, entry_ptr);  \
+    (cache_ptr)->dirty_index_size -= (entry_ptr)->size;           \
+    (cache_ptr)->clean_index_size += (entry_ptr)->size;           \
+    H5C__POST_HT_UPDATE_FOR_ENTRY_CLEAN_SC(cache_ptr, entry_ptr); \
+}
+
+#define H5C__UPDATE_INDEX_FOR_ENTRY_DIRTY(cache_ptr, entry_ptr)   \
+{                                                                 \
+    H5C__PRE_HT_UPDATE_FOR_ENTRY_DIRTY_SC(cache_ptr, entry_ptr);  \
+    (cache_ptr)->clean_index_size -= (entry_ptr)->size;           \
+    (cache_ptr)->dirty_index_size += (entry_ptr)->size;           \
+    H5C__POST_HT_UPDATE_FOR_ENTRY_DIRTY_SC(cache_ptr, entry_ptr); \
+}
+
+#define H5C__UPDATE_INDEX_FOR_SIZE_CHANGE(cache_ptr, old_size, new_size, \
+		                          entry_ptr, was_clean)          \
+{                                                                        \
+    H5C__PRE_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size,      \
+		                     entry_ptr, was_clean)               \
+    (cache_ptr)->index_size -= (old_size);                               \
+    (cache_ptr)->index_size += (new_size);                               \
+    if ( was_clean ) {                                                   \
+        (cache_ptr)->clean_index_size -= (old_size);                     \
+    } else {                                                             \
+	(cache_ptr)->dirty_index_size -= (old_size);                     \
+    }                                                                    \
+    if ( (entry_ptr)->is_dirty ) {                                       \
+        (cache_ptr)->dirty_index_size += (new_size);                     \
+    } else {                                                             \
+	(cache_ptr)->clean_index_size += (new_size);                     \
+    }                                                                    \
+    H5C__POST_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size,     \
+                                      entry_ptr)                         \
+}
+
+
+/**************************************************************************
+ *
+ * Skip list insertion and deletion macros:
+ *
+ * These used to be functions, but I converted them to macros to avoid some
+ * function call overhead.
+ *
+ **************************************************************************/
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__INSERT_ENTRY_IN_SLIST
+ *
+ * Purpose:     Insert the specified instance of H5C_cache_entry_t into
+ *		the skip list in the specified instance of H5C_t.  Update
+ *		the associated length and size fields.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/10/04
+ *
+ * Modifications:
+ *
+ *		JRM -- 7/21/04
+ *		Updated function to set the in_tree flag when inserting
+ *		an entry into the tree.  Also modified the function to
+ *		update the tree size and len fields instead of the similar
+ *		index fields.
+ *
+ *		All of this is part of the modifications to support the
+ *		hash table.
+ *
+ *		JRM -- 7/27/04
+ *		Converted the function H5C_insert_entry_in_tree() into
+ *		the macro H5C__INSERT_ENTRY_IN_TREE in the hopes of
+ *		wringing a little more speed out of the cache.
+ *
+ *		Note that we don't bother to check if the entry is already
+ *		in the tree -- if it is, H5SL_insert() will fail.
+ *
+ *		QAK -- 11/27/04
+ *		Switched over to using skip list routines.
+ *
+ *		JRM -- 6/27/06
+ *		Added fail_val parameter.
+ *
+ *		JRM -- 8/25/06
+ *		Added the H5C_DO_SANITY_CHECKS version of the macro.
+ *
+ *		This version maintains the slist_len_increase and
+ *		slist_size_increase fields that are used in sanity
+ *		checks in the flush routines.
+ *
+ *		All this is needed as the fractal heap needs to be
+ *		able to dirty, resize and/or move entries during the
+ *		flush.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_DO_SANITY_CHECKS
+
+#define H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, fail_val)             \
+{                                                                              \
+    HDassert( (cache_ptr) );                                                   \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                        \
+    HDassert( (entry_ptr) );                                                   \
+    HDassert( (entry_ptr)->size > 0 );                                         \
+    HDassert( H5F_addr_defined((entry_ptr)->addr) );                           \
+    HDassert( !((entry_ptr)->in_slist) );                                      \
+                                                                               \
+    if ( H5SL_insert((cache_ptr)->slist_ptr, entry_ptr, &(entry_ptr)->addr)    \
+                                                                         < 0 ) \
+        HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, (fail_val),                       \
+                    "Can't insert entry in skip list")                         \
+                                                                               \
+    (entry_ptr)->in_slist = TRUE;                                              \
+    (cache_ptr)->slist_len++;                                                  \
+    (cache_ptr)->slist_size += (entry_ptr)->size;                              \
+    (cache_ptr)->slist_len_increase++;                                         \
+    (cache_ptr)->slist_size_increase += (entry_ptr)->size;                     \
+                                                                               \
+    HDassert( (cache_ptr)->slist_len > 0 );                                    \
+    HDassert( (cache_ptr)->slist_size > 0 );                                   \
+                                                                               \
+} /* H5C__INSERT_ENTRY_IN_SLIST */
+
+#else /* H5C_DO_SANITY_CHECKS */
+
+#define H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, fail_val)             \
+{                                                                              \
+    HDassert( (cache_ptr) );                                                   \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                        \
+    HDassert( (entry_ptr) );                                                   \
+    HDassert( (entry_ptr)->size > 0 );                                         \
+    HDassert( H5F_addr_defined((entry_ptr)->addr) );                           \
+    HDassert( !((entry_ptr)->in_slist) );                                      \
+                                                                               \
+    if ( H5SL_insert((cache_ptr)->slist_ptr, entry_ptr, &(entry_ptr)->addr)    \
+                                                                         < 0 ) \
+        HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, (fail_val),                       \
+                    "Can't insert entry in skip list")                         \
+                                                                               \
+    (entry_ptr)->in_slist = TRUE;                                              \
+    (cache_ptr)->slist_len++;                                                  \
+    (cache_ptr)->slist_size += (entry_ptr)->size;                              \
+                                                                               \
+    HDassert( (cache_ptr)->slist_len > 0 );                                    \
+    HDassert( (cache_ptr)->slist_size > 0 );                                   \
+                                                                               \
+} /* H5C__INSERT_ENTRY_IN_SLIST */
+
+#endif /* H5C_DO_SANITY_CHECKS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5C__REMOVE_ENTRY_FROM_SLIST
+ *
+ * Purpose:     Remove the specified instance of H5C_cache_entry_t from the
+ *		index skip list in the specified instance of H5C_t.  Update
+ *		the associated length and size fields.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/10/04
+ *
+ * Modifications:
+ *
+ *		JRM -- 7/21/04
+ *		Updated function for the addition of the hash table.
+ *
+ *		JRM - 7/27/04
+ *		Converted from the function H5C_remove_entry_from_tree()
+ *		to the macro H5C__REMOVE_ENTRY_FROM_TREE in the hopes of
+ *		wringing a little more performance out of the cache.
+ *
+ *		QAK -- 11/27/04
+ *		Switched over to using skip list routines.
+ *
+ *		JRM -- 3/28/07
+ *		Updated sanity checks for the new is_read_only and
+ *		ro_ref_count fields in H5C_cache_entry_t.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr)          \
+{                                                                   \
+    HDassert( (cache_ptr) );                                        \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );             \
+    HDassert( (entry_ptr) );                                        \
+    HDassert( !((entry_ptr)->is_protected) );                       \
+    HDassert( !((entry_ptr)->is_read_only) );                       \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                   \
+    HDassert( (entry_ptr)->size > 0 );                              \
+    HDassert( (entry_ptr)->in_slist );                              \
+    HDassert( (cache_ptr)->slist_ptr );                             \
+                                                                    \
+    if ( H5SL_remove((cache_ptr)->slist_ptr, &(entry_ptr)->addr)    \
+         != (entry_ptr) )                                           \
+                                                                    \
+        HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL,                  \
+                    "Can't delete entry from skip list.")           \
+                                                                    \
+    HDassert( (cache_ptr)->slist_len > 0 );                         \
+    (cache_ptr)->slist_len--;                                       \
+    HDassert( (cache_ptr)->slist_size >= (entry_ptr)->size );       \
+    (cache_ptr)->slist_size -= (entry_ptr)->size;                   \
+    (entry_ptr)->in_slist = FALSE;                                  \
+} /* H5C__REMOVE_ENTRY_FROM_SLIST */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5C__UPDATE_SLIST_FOR_SIZE_CHANGE
+ *
+ * Purpose:     Update cache_ptr->slist_size for a change in the size of
+ *		and entry in the slist.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 9/07/05
+ *
+ * Modifications:
+ *
+ *		JRM -- 8/27/06
+ *		Added the H5C_DO_SANITY_CHECKS version of the macro.
+ *
+ *		This version maintains the slist_size_increase field
+ *		that are used in sanity checks in the flush routines.
+ *
+ *		All this is needed as the fractal heap needs to be
+ *		able to dirty, resize and/or move entries during the
+ *		flush.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_DO_SANITY_CHECKS
+
+#define H5C__UPDATE_SLIST_FOR_SIZE_CHANGE(cache_ptr, old_size, new_size) \
+{                                                                        \
+    HDassert( (cache_ptr) );                                             \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                  \
+    HDassert( (old_size) > 0 );                                          \
+    HDassert( (new_size) > 0 );                                          \
+    HDassert( (old_size) <= (cache_ptr)->slist_size );                   \
+    HDassert( (cache_ptr)->slist_len > 0 );                              \
+    HDassert( ((cache_ptr)->slist_len > 1) ||                            \
+              ( (cache_ptr)->slist_size == (old_size) ) );               \
+                                                                         \
+    (cache_ptr)->slist_size -= (old_size);                               \
+    (cache_ptr)->slist_size += (new_size);                               \
+                                                                         \
+    (cache_ptr)->slist_size_increase -= (int64_t)(old_size);             \
+    (cache_ptr)->slist_size_increase += (int64_t)(new_size);             \
+                                                                         \
+    HDassert( (new_size) <= (cache_ptr)->slist_size );                   \
+    HDassert( ( (cache_ptr)->slist_len > 1 ) ||                          \
+              ( (cache_ptr)->slist_size == (new_size) ) );               \
+} /* H5C__REMOVE_ENTRY_FROM_SLIST */
+
+#else /* H5C_DO_SANITY_CHECKS */
+
+#define H5C__UPDATE_SLIST_FOR_SIZE_CHANGE(cache_ptr, old_size, new_size) \
+{                                                                        \
+    HDassert( (cache_ptr) );                                             \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                  \
+    HDassert( (old_size) > 0 );                                          \
+    HDassert( (new_size) > 0 );                                          \
+    HDassert( (old_size) <= (cache_ptr)->slist_size );                   \
+    HDassert( (cache_ptr)->slist_len > 0 );                              \
+    HDassert( ((cache_ptr)->slist_len > 1) ||                            \
+              ( (cache_ptr)->slist_size == (old_size) ) );               \
+                                                                         \
+    (cache_ptr)->slist_size -= (old_size);                               \
+    (cache_ptr)->slist_size += (new_size);                               \
+                                                                         \
+    HDassert( (new_size) <= (cache_ptr)->slist_size );                   \
+    HDassert( ( (cache_ptr)->slist_len > 1 ) ||                          \
+              ( (cache_ptr)->slist_size == (new_size) ) );               \
+} /* H5C__REMOVE_ENTRY_FROM_SLIST */
+
+#endif /* H5C_DO_SANITY_CHECKS */
+
+
+/**************************************************************************
+ *
+ * Replacement policy update macros:
+ *
+ * These used to be functions, but I converted them to macros to avoid some
+ * function call overhead.
+ *
+ **************************************************************************/
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__FAKE_RP_FOR_MOST_RECENT_ACCESS
+ *
+ * Purpose:     For efficiency, we sometimes change the order of flushes --
+ *		but doing so can confuse the replacement policy.  This
+ *		macro exists to allow us to specify an entry as the
+ *		most recently touched so we can repair any such
+ *		confusion.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the macro
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 10/13/05
+ *
+ * Modifications:
+ *
+ *		JRM -- 3/20/06
+ *		Modified macro to ignore pinned entries.  Pinned entries
+ *		do not appear in the data structures maintained by the
+ *		replacement policy code, and thus this macro has nothing
+ *		to do if called for such an entry.
+ *
+ *		JRM -- 3/28/07
+ *		Added sanity checks using the new is_read_only and
+ *		ro_ref_count fields of struct H5C_cache_entry_t.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__FAKE_RP_FOR_MOST_RECENT_ACCESS(cache_ptr, entry_ptr, fail_val) \
+{                                                                           \
+    HDassert( (cache_ptr) );                                                \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                     \
+    HDassert( (entry_ptr) );                                                \
+    HDassert( !((entry_ptr)->is_protected) );                               \
+    HDassert( !((entry_ptr)->is_read_only) );                               \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                           \
+    HDassert( (entry_ptr)->size > 0 );                                      \
+                                                                            \
+    if ( ! ((entry_ptr)->is_pinned) ) {                                     \
+                                                                            \
+        /* modified LRU specific code */                                    \
+                                                                            \
+        /* remove the entry from the LRU list, and re-insert it at the head.\
+	 */                                                                 \
+                                                                            \
+        H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,             \
+                        (cache_ptr)->LRU_tail_ptr,                          \
+			(cache_ptr)->LRU_list_len,                          \
+                        (cache_ptr)->LRU_list_size, (fail_val))             \
+                                                                            \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,            \
+                         (cache_ptr)->LRU_tail_ptr,                         \
+			 (cache_ptr)->LRU_list_len,                         \
+                         (cache_ptr)->LRU_list_size, (fail_val))            \
+                                                                            \
+        /* Use the dirty flag to infer whether the entry is on the clean or \
+         * dirty LRU list, and remove it.  Then insert it at the head of    \
+         * the same LRU list.                                               \
+         *                                                                  \
+         * At least initially, all entries should be clean.  That may       \
+         * change, so we may as well deal with both cases now.              \
+         */                                                                 \
+                                                                            \
+        if ( (entry_ptr)->is_dirty ) {                                      \
+            H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr,    \
+                                (cache_ptr)->dLRU_tail_ptr,                 \
+                                (cache_ptr)->dLRU_list_len,                 \
+                                (cache_ptr)->dLRU_list_size, (fail_val))    \
+                                                                            \
+            H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr,   \
+                                 (cache_ptr)->dLRU_tail_ptr,                \
+                                 (cache_ptr)->dLRU_list_len,                \
+                                 (cache_ptr)->dLRU_list_size, (fail_val))   \
+        } else {                                                            \
+            H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr,    \
+                                (cache_ptr)->cLRU_tail_ptr,                 \
+                                (cache_ptr)->cLRU_list_len,                 \
+                                (cache_ptr)->cLRU_list_size, (fail_val))    \
+                                                                            \
+            H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr,   \
+                                 (cache_ptr)->cLRU_tail_ptr,                \
+                                 (cache_ptr)->cLRU_list_len,                \
+                                 (cache_ptr)->cLRU_list_size, (fail_val))   \
+        }                                                                   \
+                                                                            \
+        /* End modified LRU specific code. */                               \
+    }                                                                       \
+} /* H5C__FAKE_RP_FOR_MOST_RECENT_ACCESS */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__FAKE_RP_FOR_MOST_RECENT_ACCESS(cache_ptr, entry_ptr, fail_val) \
+{                                                                           \
+    HDassert( (cache_ptr) );                                                \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                     \
+    HDassert( (entry_ptr) );                                                \
+    HDassert( !((entry_ptr)->is_protected) );                               \
+    HDassert( !((entry_ptr)->is_read_only) );                               \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                           \
+    HDassert( (entry_ptr)->size > 0 );                                      \
+                                                                            \
+    if ( ! ((entry_ptr)->is_pinned) ) {                                     \
+                                                                            \
+        /* modified LRU specific code */                                    \
+                                                                            \
+        /* remove the entry from the LRU list, and re-insert it at the head \
+	 */                                                                 \
+                                                                            \
+        H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,             \
+                        (cache_ptr)->LRU_tail_ptr,                          \
+			(cache_ptr)->LRU_list_len,                          \
+                        (cache_ptr)->LRU_list_size, (fail_val))             \
+                                                                            \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,            \
+                         (cache_ptr)->LRU_tail_ptr,                         \
+			 (cache_ptr)->LRU_list_len,                         \
+                         (cache_ptr)->LRU_list_size, (fail_val))            \
+                                                                            \
+        /* End modified LRU specific code. */                               \
+    }                                                                       \
+} /* H5C__FAKE_RP_FOR_MOST_RECENT_ACCESS */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_EVICTION
+ *
+ * Purpose:     Update the replacement policy data structures for an
+ *		eviction of the specified cache entry.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      Non-negative on success/Negative on failure.
+ *
+ * Programmer:  John Mainzer, 5/10/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_eviction() to the
+ *		macro H5C__UPDATE_RP_FOR_EVICTION in an effort to squeeze
+ *		a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		the pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two version, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *		JRM - 3/20/06
+ *		Pinned entries can't be evicted, so this entry should never
+ *		be called on a pinned entry.  Added assert to verify this.
+ *
+ *		JRM -- 3/28/07
+ *		Added sanity checks for the new is_read_only and
+ *		ro_ref_count fields of struct H5C_cache_entry_t.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_EVICTION(cache_ptr, entry_ptr, fail_val)          \
+{                                                                            \
+    HDassert( (cache_ptr) );                                                 \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                      \
+    HDassert( (entry_ptr) );                                                 \
+    HDassert( !((entry_ptr)->is_protected) );                                \
+    HDassert( !((entry_ptr)->is_read_only) );                                \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                            \
+    HDassert( !((entry_ptr)->is_pinned) );                                   \
+    HDassert( (entry_ptr)->size > 0 );                                       \
+                                                                             \
+    /* modified LRU specific code */                                         \
+                                                                             \
+    /* remove the entry from the LRU list. */                                \
+                                                                             \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,                  \
+                    (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,    \
+                    (cache_ptr)->LRU_list_size, (fail_val))                  \
+                                                                             \
+    /* If the entry is clean when it is evicted, it should be on the         \
+     * clean LRU list, if it was dirty, it should be on the dirty LRU list.  \
+     * Remove it from the appropriate list according to the value of the     \
+     * dirty flag.                                                           \
+     */                                                                      \
+                                                                             \
+    if ( (entry_ptr)->is_dirty ) {                                           \
+                                                                             \
+        H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr,         \
+                            (cache_ptr)->dLRU_tail_ptr,                      \
+                            (cache_ptr)->dLRU_list_len,                      \
+                            (cache_ptr)->dLRU_list_size, (fail_val))         \
+    } else {                                                                 \
+        H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr,         \
+                            (cache_ptr)->cLRU_tail_ptr,                      \
+                            (cache_ptr)->cLRU_list_len,                      \
+                            (cache_ptr)->cLRU_list_size, (fail_val))         \
+    }                                                                        \
+                                                                             \
+} /* H5C__UPDATE_RP_FOR_EVICTION */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_EVICTION(cache_ptr, entry_ptr, fail_val)          \
+{                                                                            \
+    HDassert( (cache_ptr) );                                                 \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                      \
+    HDassert( (entry_ptr) );                                                 \
+    HDassert( !((entry_ptr)->is_protected) );                                \
+    HDassert( !((entry_ptr)->is_read_only) );                                \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                            \
+    HDassert( !((entry_ptr)->is_pinned) );                                   \
+    HDassert( (entry_ptr)->size > 0 );                                       \
+                                                                             \
+    /* modified LRU specific code */                                         \
+                                                                             \
+    /* remove the entry from the LRU list. */                                \
+                                                                             \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,                  \
+                    (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,    \
+                    (cache_ptr)->LRU_list_size, (fail_val))                  \
+                                                                             \
+} /* H5C__UPDATE_RP_FOR_EVICTION */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_FLUSH
+ *
+ * Purpose:     Update the replacement policy data structures for a flush
+ *		of the specified cache entry.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/6/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_flush() to the
+ *		macro H5C__UPDATE_RP_FOR_FLUSH in an effort to squeeze
+ *		a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two versions, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *		JRM - 3/20/06
+ *		While pinned entries can be flushed, they don't reside in
+ *		the replacement policy data structures when unprotected.
+ *		Thus I modified this macro to do nothing if the entry is
+ *		pinned.
+ *
+ *		JRM - 3/28/07
+ *		Added sanity checks based on the new is_read_only and
+ *		ro_ref_count fields of struct H5C_cache_entry_t.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_FLUSH(cache_ptr, entry_ptr, fail_val)            \
+{                                                                           \
+    HDassert( (cache_ptr) );                                                \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                     \
+    HDassert( (entry_ptr) );                                                \
+    HDassert( !((entry_ptr)->is_protected) );                               \
+    HDassert( !((entry_ptr)->is_read_only) );                               \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                           \
+    HDassert( (entry_ptr)->size > 0 );                                      \
+                                                                            \
+    if ( ! ((entry_ptr)->is_pinned) ) {                                     \
+                                                                            \
+        /* modified LRU specific code */                                    \
+                                                                            \
+        /* remove the entry from the LRU list, and re-insert it at the      \
+	 * head.                                                            \
+	 */                                                                 \
+                                                                            \
+        H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,             \
+                        (cache_ptr)->LRU_tail_ptr,                          \
+			(cache_ptr)->LRU_list_len,                          \
+                        (cache_ptr)->LRU_list_size, (fail_val))             \
+                                                                            \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,            \
+                         (cache_ptr)->LRU_tail_ptr,                         \
+			 (cache_ptr)->LRU_list_len,                         \
+                         (cache_ptr)->LRU_list_size, (fail_val))            \
+                                                                            \
+        /* since the entry is being flushed or cleared, one would think     \
+	 * that it must be dirty -- but that need not be the case.  Use the \
+	 * dirty flag to infer whether the entry is on the clean or dirty   \
+	 * LRU list, and remove it.  Then insert it at the head of the      \
+	 * clean LRU list.                                                  \
+         *                                                                  \
+         * The function presumes that a dirty entry will be either cleared  \
+	 * or flushed shortly, so it is OK if we put a dirty entry on the   \
+	 * clean LRU list.                                                  \
+         */                                                                 \
+                                                                            \
+        if ( (entry_ptr)->is_dirty ) {                                      \
+            H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr,    \
+                                (cache_ptr)->dLRU_tail_ptr,                 \
+                                (cache_ptr)->dLRU_list_len,                 \
+                                (cache_ptr)->dLRU_list_size, (fail_val))    \
+        } else {                                                            \
+            H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr,    \
+                                (cache_ptr)->cLRU_tail_ptr,                 \
+                                (cache_ptr)->cLRU_list_len,                 \
+                                (cache_ptr)->cLRU_list_size, (fail_val))    \
+        }                                                                   \
+                                                                            \
+        H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr,       \
+                             (cache_ptr)->cLRU_tail_ptr,                    \
+                             (cache_ptr)->cLRU_list_len,                    \
+                             (cache_ptr)->cLRU_list_size, (fail_val))       \
+                                                                            \
+        /* End modified LRU specific code. */                               \
+    }                                                                       \
+} /* H5C__UPDATE_RP_FOR_FLUSH */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_FLUSH(cache_ptr, entry_ptr, fail_val)            \
+{                                                                           \
+    HDassert( (cache_ptr) );                                                \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                     \
+    HDassert( (entry_ptr) );                                                \
+    HDassert( !((entry_ptr)->is_protected) );                               \
+    HDassert( !((entry_ptr)->is_read_only) );                               \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                           \
+    HDassert( (entry_ptr)->size > 0 );                                      \
+                                                                            \
+    if ( ! ((entry_ptr)->is_pinned) ) {                                     \
+                                                                            \
+        /* modified LRU specific code */                                    \
+                                                                            \
+        /* remove the entry from the LRU list, and re-insert it at the      \
+	 * head.                                                            \
+	 */                                                                 \
+                                                                            \
+        H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,             \
+                        (cache_ptr)->LRU_tail_ptr,                          \
+			(cache_ptr)->LRU_list_len,                          \
+                        (cache_ptr)->LRU_list_size, (fail_val))             \
+                                                                            \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,            \
+                         (cache_ptr)->LRU_tail_ptr,                         \
+			 (cache_ptr)->LRU_list_len,                         \
+                         (cache_ptr)->LRU_list_size, (fail_val))            \
+                                                                            \
+        /* End modified LRU specific code. */                               \
+    }                                                                       \
+} /* H5C__UPDATE_RP_FOR_FLUSH */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_INSERTION
+ *
+ * Purpose:     Update the replacement policy data structures for an
+ *		insertion of the specified cache entry.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/17/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_insertion() to the
+ *		macro H5C__UPDATE_RP_FOR_INSERTION in an effort to squeeze
+ *		a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two version, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *		JRM - 3/10/06
+ *		This macro should never be called on a pinned entry.
+ *		Inserted an assert to verify this.
+ *
+ *		JRM - 8/9/06
+ *		Not any more.  We must now allow insertion of pinned
+ *		entries.  Updated macro to support this.
+ *
+ *		JRM - 3/28/07
+ *		Added sanity checks using the new is_read_only and
+ *		ro_ref_count fields of struct H5C_cache_entry_t.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, fail_val)       \
+{                                                                          \
+    HDassert( (cache_ptr) );                                               \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                    \
+    HDassert( (entry_ptr) );                                               \
+    HDassert( !((entry_ptr)->is_protected) );                              \
+    HDassert( !((entry_ptr)->is_read_only) );                              \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                          \
+    HDassert( (entry_ptr)->size > 0 );                                     \
+                                                                           \
+    if ( (entry_ptr)->is_pinned ) {                                        \
+                                                                           \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->pel_head_ptr,           \
+                         (cache_ptr)->pel_tail_ptr,                        \
+                         (cache_ptr)->pel_len,                             \
+                         (cache_ptr)->pel_size, (fail_val))                \
+                                                                           \
+    } else {                                                               \
+                                                                           \
+        /* modified LRU specific code */                                   \
+                                                                           \
+        /* insert the entry at the head of the LRU list. */                \
+                                                                           \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,           \
+                         (cache_ptr)->LRU_tail_ptr,                        \
+			 (cache_ptr)->LRU_list_len,                        \
+                         (cache_ptr)->LRU_list_size, (fail_val))           \
+                                                                           \
+        /* insert the entry at the head of the clean or dirty LRU list as  \
+         * appropriate.                                                    \
+         */                                                                \
+                                                                           \
+        if ( entry_ptr->is_dirty ) {                                       \
+            H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr,  \
+                                 (cache_ptr)->dLRU_tail_ptr,               \
+                                 (cache_ptr)->dLRU_list_len,               \
+                                 (cache_ptr)->dLRU_list_size, (fail_val))  \
+        } else {                                                           \
+            H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr,  \
+                                 (cache_ptr)->cLRU_tail_ptr,               \
+                                 (cache_ptr)->cLRU_list_len,               \
+                                 (cache_ptr)->cLRU_list_size, (fail_val))  \
+        }                                                                  \
+                                                                           \
+        /* End modified LRU specific code. */                              \
+    }                                                                      \
+}
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, fail_val)       \
+{                                                                          \
+    HDassert( (cache_ptr) );                                               \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                    \
+    HDassert( (entry_ptr) );                                               \
+    HDassert( !((entry_ptr)->is_protected) );                              \
+    HDassert( !((entry_ptr)->is_read_only) );                              \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                          \
+    HDassert( (entry_ptr)->size > 0 );                                     \
+                                                                           \
+    if ( (entry_ptr)->is_pinned ) {                                        \
+                                                                           \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->pel_head_ptr,           \
+                         (cache_ptr)->pel_tail_ptr,                        \
+                         (cache_ptr)->pel_len,                             \
+                         (cache_ptr)->pel_size, (fail_val))                \
+	                                                                   \
+    } else {                                                               \
+                                                                           \
+        /* modified LRU specific code */                                   \
+                                                                           \
+        /* insert the entry at the head of the LRU list. */                \
+                                                                           \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,           \
+                         (cache_ptr)->LRU_tail_ptr,                        \
+			 (cache_ptr)->LRU_list_len,                        \
+                         (cache_ptr)->LRU_list_size, (fail_val))           \
+                                                                           \
+        /* End modified LRU specific code. */                              \
+    }                                                                      \
+}
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_PROTECT
+ *
+ * Purpose:     Update the replacement policy data structures for a
+ *		protect of the specified cache entry.
+ *
+ *		To do this, unlink the specified entry from any data
+ *		structures used by the replacement policy, and add the
+ *		entry to the protected list.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/17/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_protect() to the
+ *		macro H5C__UPDATE_RP_FOR_PROTECT in an effort to squeeze
+ *		a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two version, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *		JRM - 3/17/06
+ *		Modified macro to attempt to remove pinned entriese from
+ *		the pinned entry list instead of from the data structures
+ *		maintained by the replacement policy.
+ *
+ *		JRM - 3/28/07
+ *		Added sanity checks based on the new is_read_only and
+ *		ro_ref_count fields of struct H5C_cache_entry_t.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_PROTECT(cache_ptr, entry_ptr, fail_val)        \
+{                                                                         \
+    HDassert( (cache_ptr) );                                              \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                   \
+    HDassert( (entry_ptr) );                                              \
+    HDassert( !((entry_ptr)->is_protected) );                             \
+    HDassert( !((entry_ptr)->is_read_only) );                             \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                         \
+    HDassert( (entry_ptr)->size > 0 );                                    \
+									  \
+    if ( (entry_ptr)->is_pinned ) {                                       \
+                                                                          \
+        H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->pel_head_ptr,           \
+                        (cache_ptr)->pel_tail_ptr, 			  \
+			(cache_ptr)->pel_len,                             \
+                        (cache_ptr)->pel_size, (fail_val))                \
+        HDassert( (cache_ptr)->pel_len >= 0 );                            \
+                                                                          \
+    } else {                                                              \
+                                                                          \
+        /* modified LRU specific code */                                  \
+                                                                          \
+        /* remove the entry from the LRU list. */                         \
+                                                                          \
+        H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,           \
+                        (cache_ptr)->LRU_tail_ptr,                        \
+			(cache_ptr)->LRU_list_len,                        \
+                        (cache_ptr)->LRU_list_size, (fail_val))           \
+                                                                          \
+        /* Similarly, remove the entry from the clean or dirty LRU list   \
+         * as appropriate.                                                \
+         */                                                               \
+                                                                          \
+        if ( (entry_ptr)->is_dirty ) {                                    \
+                                                                          \
+            H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr,  \
+                                (cache_ptr)->dLRU_tail_ptr,               \
+                                (cache_ptr)->dLRU_list_len,               \
+                                (cache_ptr)->dLRU_list_size, (fail_val))  \
+                                                                          \
+        } else {                                                          \
+                                                                          \
+            H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr,  \
+                                (cache_ptr)->cLRU_tail_ptr,               \
+                                (cache_ptr)->cLRU_list_len,               \
+                                (cache_ptr)->cLRU_list_size, (fail_val))  \
+        }                                                                 \
+                                                                          \
+        /* End modified LRU specific code. */                             \
+    }                                                                     \
+                                                                          \
+    /* Regardless of the replacement policy, or whether the entry is      \
+     * pinned, now add the entry to the protected list.                   \
+     */                                                                   \
+                                                                          \
+    H5C__DLL_APPEND((entry_ptr), (cache_ptr)->pl_head_ptr,                \
+                    (cache_ptr)->pl_tail_ptr,                             \
+                    (cache_ptr)->pl_len,                                  \
+                    (cache_ptr)->pl_size, (fail_val))                     \
+} /* H5C__UPDATE_RP_FOR_PROTECT */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_PROTECT(cache_ptr, entry_ptr, fail_val)        \
+{                                                                         \
+    HDassert( (cache_ptr) );                                              \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                   \
+    HDassert( (entry_ptr) );                                              \
+    HDassert( !((entry_ptr)->is_protected) );                             \
+    HDassert( !((entry_ptr)->is_read_only) );                             \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                         \
+    HDassert( (entry_ptr)->size > 0 );                                    \
+									  \
+    if ( (entry_ptr)->is_pinned ) {                                       \
+                                                                          \
+        H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->pel_head_ptr,           \
+                        (cache_ptr)->pel_tail_ptr, 			  \
+			(cache_ptr)->pel_len,                             \
+                        (cache_ptr)->pel_size, (fail_val))                \
+        HDassert( (cache_ptr)->pel_len >= 0 );                            \
+                                                                          \
+    } else {                                                              \
+                                                                          \
+        /* modified LRU specific code */                                  \
+                                                                          \
+        /* remove the entry from the LRU list. */                         \
+                                                                          \
+        H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,           \
+                        (cache_ptr)->LRU_tail_ptr,                        \
+			(cache_ptr)->LRU_list_len,                        \
+                        (cache_ptr)->LRU_list_size, (fail_val))           \
+                                                                          \
+        /* End modified LRU specific code. */                             \
+    }                                                                     \
+                                                                          \
+    /* Regardless of the replacement policy, or whether the entry is      \
+     * pinned, now add the entry to the protected list.                   \
+     */                                                                   \
+                                                                          \
+    H5C__DLL_APPEND((entry_ptr), (cache_ptr)->pl_head_ptr,                \
+                    (cache_ptr)->pl_tail_ptr,                             \
+                    (cache_ptr)->pl_len,                                  \
+                    (cache_ptr)->pl_size, (fail_val))                     \
+} /* H5C__UPDATE_RP_FOR_PROTECT */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_MOVE
+ *
+ * Purpose:     Update the replacement policy data structures for a
+ *		move of the specified cache entry.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/17/04
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_MOVE(cache_ptr, entry_ptr, was_dirty, fail_val) \
+{                                                                            \
+    HDassert( (cache_ptr) );                                                 \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                      \
+    HDassert( (entry_ptr) );                                                 \
+    HDassert( !((entry_ptr)->is_protected) );                                \
+    HDassert( !((entry_ptr)->is_read_only) );                                \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                            \
+    HDassert( (entry_ptr)->size > 0 );                                       \
+                                                                             \
+    if ( ! ( (entry_ptr)->is_pinned ) ) {                                    \
+	                                                                     \
+        /* modified LRU specific code */                                     \
+                                                                             \
+        /* remove the entry from the LRU list, and re-insert it at the head. \
+	 */                                                                  \
+                                                                             \
+            H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,          \
+                             (cache_ptr)->LRU_tail_ptr,                      \
+			     (cache_ptr)->LRU_list_len,                      \
+                             (cache_ptr)->LRU_list_size, (fail_val))         \
+                                                                             \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,             \
+                         (cache_ptr)->LRU_tail_ptr,                          \
+			 (cache_ptr)->LRU_list_len,                          \
+                         (cache_ptr)->LRU_list_size, (fail_val))             \
+                                                                             \
+            /* remove the entry from either the clean or dirty LUR list as   \
+             * indicated by the was_dirty parameter                          \
+             */                                                              \
+            if ( was_dirty ) {                                               \
+                                                                             \
+                H5C__AUX_DLL_REMOVE((entry_ptr),                             \
+				     (cache_ptr)->dLRU_head_ptr,             \
+                                     (cache_ptr)->dLRU_tail_ptr,             \
+                                     (cache_ptr)->dLRU_list_len,             \
+                                     (cache_ptr)->dLRU_list_size,            \
+				     (fail_val))                             \
+                                                                             \
+            } else {                                                         \
+                                                                             \
+                H5C__AUX_DLL_REMOVE((entry_ptr),                             \
+				     (cache_ptr)->cLRU_head_ptr,             \
+                                     (cache_ptr)->cLRU_tail_ptr,             \
+                                     (cache_ptr)->cLRU_list_len,             \
+                                     (cache_ptr)->cLRU_list_size,            \
+				     (fail_val))                             \
+            }                                                                \
+                                                                             \
+            /* insert the entry at the head of either the clean or dirty     \
+	     * LRU list as appropriate.                                      \
+             */                                                              \
+                                                                             \
+            if ( (entry_ptr)->is_dirty ) {                                   \
+                                                                             \
+                H5C__AUX_DLL_PREPEND((entry_ptr),                            \
+				      (cache_ptr)->dLRU_head_ptr,            \
+                                      (cache_ptr)->dLRU_tail_ptr,            \
+                                      (cache_ptr)->dLRU_list_len,            \
+                                      (cache_ptr)->dLRU_list_size,           \
+				      (fail_val))                            \
+                                                                             \
+            } else {                                                         \
+                                                                             \
+                H5C__AUX_DLL_PREPEND((entry_ptr),                            \
+				      (cache_ptr)->cLRU_head_ptr,            \
+                                      (cache_ptr)->cLRU_tail_ptr,            \
+                                      (cache_ptr)->cLRU_list_len,            \
+                                      (cache_ptr)->cLRU_list_size,           \
+				      (fail_val))                            \
+            }                                                                \
+                                                                             \
+            /* End modified LRU specific code. */                            \
+        }                                                                    \
+} /* H5C__UPDATE_RP_FOR_MOVE */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_MOVE(cache_ptr, entry_ptr, was_dirty, fail_val) \
+{                                                                            \
+    HDassert( (cache_ptr) );                                                 \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                      \
+    HDassert( (entry_ptr) );                                                 \
+    HDassert( !((entry_ptr)->is_protected) );                                \
+    HDassert( !((entry_ptr)->is_read_only) );                                \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                            \
+    HDassert( (entry_ptr)->size > 0 );                                       \
+                                                                             \
+    if ( ! ( (entry_ptr)->is_pinned ) ) {                                    \
+	                                                                     \
+        /* modified LRU specific code */                                     \
+                                                                             \
+        /* remove the entry from the LRU list, and re-insert it at the head. \
+	 */                                                                  \
+                                                                             \
+            H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,          \
+                             (cache_ptr)->LRU_tail_ptr,                      \
+			     (cache_ptr)->LRU_list_len,                      \
+                             (cache_ptr)->LRU_list_size, (fail_val))         \
+                                                                             \
+            H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,         \
+                              (cache_ptr)->LRU_tail_ptr,                     \
+			      (cache_ptr)->LRU_list_len,                     \
+                              (cache_ptr)->LRU_list_size, (fail_val))        \
+                                                                             \
+            /* End modified LRU specific code. */                            \
+        }                                                                    \
+} /* H5C__UPDATE_RP_FOR_MOVE */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_SIZE_CHANGE
+ *
+ * Purpose:     Update the replacement policy data structures for a
+ *		size change of the specified cache entry.
+ *
+ *		To do this, determine if the entry is pinned.  If it is,
+ *		update the size of the pinned entry list.
+ *
+ *		If it isn't pinned, the entry must handled by the
+ *		replacement policy.  Update the appropriate replacement
+ *		policy data structures.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 8/23/06
+ *
+ * Modifications:
+ *
+ * 		JRM -- 3/28/07
+ *		Added sanity checks based on the new is_read_only and
+ *		ro_ref_count fields of struct H5C_cache_entry_t.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_SIZE_CHANGE(cache_ptr, entry_ptr, new_size)    \
+{                                                                         \
+    HDassert( (cache_ptr) );                                              \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                   \
+    HDassert( (entry_ptr) );                                              \
+    HDassert( !((entry_ptr)->is_protected) );                             \
+    HDassert( !((entry_ptr)->is_read_only) );                             \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                         \
+    HDassert( (entry_ptr)->size > 0 );                                    \
+    HDassert( new_size > 0 );                                             \
+				  					  \
+    if ( (entry_ptr)->is_pinned ) {                                       \
+                                                                          \
+	H5C__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->pel_len,             \
+			                (cache_ptr)->pel_size,            \
+			                (entry_ptr)->size,                \
+					(new_size));                      \
+	                                                                  \
+    } else {                                                              \
+                                                                          \
+        /* modified LRU specific code */                                  \
+                                                                          \
+	/* Update the size of the LRU list */                             \
+                                                                          \
+	H5C__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->LRU_list_len,        \
+			                (cache_ptr)->LRU_list_size,       \
+			                (entry_ptr)->size,                \
+					(new_size));                      \
+                                                                          \
+        /* Similarly, update the size of the clean or dirty LRU list as   \
+	 * appropriate.  At present, the entry must be clean, but that    \
+	 * could change.                                                  \
+         */                                                               \
+                                                                          \
+        if ( (entry_ptr)->is_dirty ) {                                    \
+                                                                          \
+	    H5C__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->dLRU_list_len,   \
+			                    (cache_ptr)->dLRU_list_size,  \
+			                    (entry_ptr)->size,            \
+					    (new_size));                  \
+                                                                          \
+        } else {                                                          \
+                                                                          \
+	    H5C__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->cLRU_list_len,   \
+			                    (cache_ptr)->cLRU_list_size,  \
+			                    (entry_ptr)->size,            \
+					    (new_size));                  \
+        }                                                                 \
+                                                                          \
+        /* End modified LRU specific code. */                             \
+    }                                                                     \
+                                                                          \
+} /* H5C__UPDATE_RP_FOR_SIZE_CHANGE */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_SIZE_CHANGE(cache_ptr, entry_ptr, new_size)    \
+{                                                                         \
+    HDassert( (cache_ptr) );                                              \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                   \
+    HDassert( (entry_ptr) );                                              \
+    HDassert( !((entry_ptr)->is_protected) );                             \
+    HDassert( !((entry_ptr)->is_read_only) );                             \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                         \
+    HDassert( (entry_ptr)->size > 0 );                                    \
+    HDassert( new_size > 0 );                                             \
+				  					  \
+    if ( (entry_ptr)->is_pinned ) {                                       \
+                                                                          \
+	H5C__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->pel_len,             \
+			                (cache_ptr)->pel_size,            \
+			                (entry_ptr)->size,                \
+					(new_size));                      \
+                                                                          \
+    } else {                                                              \
+                                                                          \
+        /* modified LRU specific code */                                  \
+                                                                          \
+	/* Update the size of the LRU list */                             \
+                                                                          \
+	H5C__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->LRU_list_len,        \
+			                (cache_ptr)->LRU_list_size,       \
+			                (entry_ptr)->size,                \
+					(new_size));                      \
+                                                                          \
+        /* End modified LRU specific code. */                             \
+    }                                                                     \
+                                                                          \
+} /* H5C__UPDATE_RP_FOR_SIZE_CHANGE */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_UNPIN
+ *
+ * Purpose:     Update the replacement policy data structures for an
+ *		unpin of the specified cache entry.
+ *
+ *		To do this, unlink the specified entry from the protected
+ *		entry list, and re-insert it in the data structures used
+ *		by the current replacement policy.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the macro
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 3/22/06
+ *
+ * Modifications:
+ *
+ *		JRM -- 3/28/07
+ *		Added sanity checks based on the new is_read_only and
+ *		ro_ref_count fields of struct H5C_cache_entry_t.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_UNPIN(cache_ptr, entry_ptr, fail_val)       \
+{                                                                      \
+    HDassert( (cache_ptr) );                                           \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                \
+    HDassert( (entry_ptr) );                                           \
+    HDassert( !((entry_ptr)->is_protected) );                          \
+    HDassert( !((entry_ptr)->is_read_only) );                          \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                      \
+    HDassert( (entry_ptr)->is_pinned);                                 \
+    HDassert( (entry_ptr)->size > 0 );                                 \
+                                                                       \
+    /* Regardless of the replacement policy, remove the entry from the \
+     * pinned entry list.                                              \
+     */                                                                \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->pel_head_ptr,            \
+                    (cache_ptr)->pel_tail_ptr, (cache_ptr)->pel_len,   \
+                    (cache_ptr)->pel_size, (fail_val))                 \
+    HDassert( (cache_ptr)->pel_len >= 0 );                             \
+                                                                       \
+        /* modified LRU specific code */                               \
+                                                                       \
+        /* insert the entry at the head of the LRU list. */            \
+                                                                       \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,       \
+                         (cache_ptr)->LRU_tail_ptr,                    \
+                         (cache_ptr)->LRU_list_len,                    \
+                         (cache_ptr)->LRU_list_size, (fail_val))       \
+                                                                       \
+        /* Similarly, insert the entry at the head of either the clean \
+         * or dirty LRU list as appropriate.                           \
+         */                                                            \
+                                                                       \
+        if ( (entry_ptr)->is_dirty ) {                                 \
+                                                                       \
+            H5C__AUX_DLL_PREPEND((entry_ptr),                          \
+			          (cache_ptr)->dLRU_head_ptr,          \
+                                  (cache_ptr)->dLRU_tail_ptr,          \
+                                  (cache_ptr)->dLRU_list_len,          \
+                                  (cache_ptr)->dLRU_list_size,         \
+			          (fail_val))                          \
+                                                                       \
+        } else {                                                       \
+                                                                       \
+            H5C__AUX_DLL_PREPEND((entry_ptr),                          \
+			          (cache_ptr)->cLRU_head_ptr,          \
+                                  (cache_ptr)->cLRU_tail_ptr,          \
+                                  (cache_ptr)->cLRU_list_len,          \
+                                  (cache_ptr)->cLRU_list_size,         \
+			          (fail_val))                          \
+         }                                                             \
+                                                                       \
+        /* End modified LRU specific code. */                          \
+                                                                       \
+} /* H5C__UPDATE_RP_FOR_UNPIN */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_UNPIN(cache_ptr, entry_ptr, fail_val)       \
+{                                                                      \
+    HDassert( (cache_ptr) );                                           \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                \
+    HDassert( (entry_ptr) );                                           \
+    HDassert( !((entry_ptr)->is_protected) );                          \
+    HDassert( !((entry_ptr)->is_read_only) );                          \
+    HDassert( ((entry_ptr)->ro_ref_count) == 0 );                      \
+    HDassert( (entry_ptr)->is_pinned);                                 \
+    HDassert( (entry_ptr)->size > 0 );                                 \
+                                                                       \
+    /* Regardless of the replacement policy, remove the entry from the \
+     * pinned entry list.                                              \
+     */                                                                \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->pel_head_ptr,            \
+                    (cache_ptr)->pel_tail_ptr, (cache_ptr)->pel_len,   \
+                    (cache_ptr)->pel_size, (fail_val))                 \
+    HDassert( (cache_ptr)->pel_len >= 0 );                             \
+                                                                       \
+        /* modified LRU specific code */                               \
+                                                                       \
+        /* insert the entry at the head of the LRU list. */            \
+                                                                       \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,       \
+                         (cache_ptr)->LRU_tail_ptr,                    \
+                         (cache_ptr)->LRU_list_len,                    \
+                         (cache_ptr)->LRU_list_size, (fail_val))       \
+                                                                       \
+        /* End modified LRU specific code. */                          \
+                                                                       \
+} /* H5C__UPDATE_RP_FOR_UNPIN */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_UNPROTECT
+ *
+ * Purpose:     Update the replacement policy data structures for an
+ *		unprotect of the specified cache entry.
+ *
+ *		To do this, unlink the specified entry from the protected
+ *		list, and re-insert it in the data structures used by the
+ *		current replacement policy.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/19/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_unprotect() to
+ *		the macro H5C__UPDATE_RP_FOR_UNPROTECT in an effort to
+ *		squeeze a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two version, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *		JRM - 3/17/06
+ *		Modified macro to put pinned entries on the pinned entry
+ *		list instead of inserting them in the data structures
+ *		maintained by the replacement policy.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_UNPROTECT(cache_ptr, entry_ptr, fail_val)       \
+{                                                                          \
+    HDassert( (cache_ptr) );                                               \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                    \
+    HDassert( (entry_ptr) );                                               \
+    HDassert( (entry_ptr)->is_protected);                                  \
+    HDassert( (entry_ptr)->size > 0 );                                     \
+                                                                           \
+    /* Regardless of the replacement policy, remove the entry from the     \
+     * protected list.                                                     \
+     */                                                                    \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->pl_head_ptr,                 \
+                    (cache_ptr)->pl_tail_ptr, (cache_ptr)->pl_len,         \
+                    (cache_ptr)->pl_size, (fail_val))                      \
+                                                                           \
+    if ( (entry_ptr)->is_pinned ) {                                        \
+                                                                           \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->pel_head_ptr,           \
+                         (cache_ptr)->pel_tail_ptr,                        \
+                         (cache_ptr)->pel_len,                             \
+                         (cache_ptr)->pel_size, (fail_val))                \
+                                                                           \
+    } else {                                                               \
+                                                                           \
+        /* modified LRU specific code */                                   \
+                                                                           \
+        /* insert the entry at the head of the LRU list. */                \
+                                                                           \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,           \
+                         (cache_ptr)->LRU_tail_ptr,                        \
+                         (cache_ptr)->LRU_list_len,                        \
+                         (cache_ptr)->LRU_list_size, (fail_val))           \
+                                                                           \
+        /* Similarly, insert the entry at the head of either the clean or  \
+         * dirty LRU list as appropriate.                                  \
+         */                                                                \
+                                                                           \
+        if ( (entry_ptr)->is_dirty ) {                                     \
+                                                                           \
+            H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr,  \
+                                 (cache_ptr)->dLRU_tail_ptr,               \
+                                 (cache_ptr)->dLRU_list_len,               \
+                                 (cache_ptr)->dLRU_list_size, (fail_val))  \
+                                                                           \
+        } else {                                                           \
+                                                                           \
+            H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr,  \
+                                 (cache_ptr)->cLRU_tail_ptr,               \
+                                 (cache_ptr)->cLRU_list_len,               \
+                                 (cache_ptr)->cLRU_list_size, (fail_val))  \
+        }                                                                  \
+                                                                           \
+        /* End modified LRU specific code. */                              \
+    }                                                                      \
+                                                                           \
+} /* H5C__UPDATE_RP_FOR_UNPROTECT */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_UNPROTECT(cache_ptr, entry_ptr, fail_val)       \
+{                                                                          \
+    HDassert( (cache_ptr) );                                               \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                    \
+    HDassert( (entry_ptr) );                                               \
+    HDassert( (entry_ptr)->is_protected);                                  \
+    HDassert( (entry_ptr)->size > 0 );                                     \
+                                                                           \
+    /* Regardless of the replacement policy, remove the entry from the     \
+     * protected list.                                                     \
+     */                                                                    \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->pl_head_ptr,                 \
+                    (cache_ptr)->pl_tail_ptr, (cache_ptr)->pl_len,         \
+                    (cache_ptr)->pl_size, (fail_val))                      \
+                                                                           \
+    if ( (entry_ptr)->is_pinned ) {                                        \
+                                                                           \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->pel_head_ptr,           \
+                         (cache_ptr)->pel_tail_ptr,                        \
+                         (cache_ptr)->pel_len,                             \
+                         (cache_ptr)->pel_size, (fail_val))                \
+                                                                           \
+    } else {                                                               \
+                                                                           \
+        /* modified LRU specific code */                                   \
+                                                                           \
+        /* insert the entry at the head of the LRU list. */                \
+                                                                           \
+        H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,           \
+                         (cache_ptr)->LRU_tail_ptr,                        \
+                         (cache_ptr)->LRU_list_len,                        \
+                         (cache_ptr)->LRU_list_size, (fail_val))           \
+                                                                           \
+        /* End modified LRU specific code. */                              \
+    }                                                                      \
+} /* H5C__UPDATE_RP_FOR_UNPROTECT */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+#endif /* _H5Cpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Cpp.h b/Resources/windows-libs/HDF5/include/H5Cpp.h
new file mode 100644
index 0000000000000000000000000000000000000000..044108b51452346cb6d5c8fd6c283672e1a06d80
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Cpp.h
@@ -0,0 +1,59 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5Cpp_H
+#define __H5Cpp_H
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5DataSpace.h"
+#include "H5PropList.h"
+#include "H5Location.h"
+#include "H5Object.h"
+#include "H5AbstractDs.h"
+#include "H5Attribute.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5DxferProp.h"
+#include "H5FaccProp.h"
+#include "H5FcreatProp.h"
+#include "H5AtomType.h"
+#include "H5PredType.h"
+#include "H5EnumType.h"
+#include "H5IntType.h"
+#include "H5FloatType.h"
+#include "H5StrType.h"
+#include "H5CompType.h"
+#include "H5ArrayType.h"
+#include "H5VarLenType.h"
+#include "H5DataSet.h"
+#include "H5Group.h"
+#include "H5File.h"
+#include "H5Library.h"
+
+/* Some C++ compilers do not have offsetof macro; define to bypass the problem
+   - BMR- -EIP- 2007/08/01
+*/
+#ifndef H5_CXX_HAVE_OFFSETOF
+#ifdef HOFFSET
+   #undef HOFFSET
+#endif
+#define HOFFSET(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+#endif
+
+#endif // __H5Cpp_H
diff --git a/Resources/windows-libs/HDF5/include/H5CppDoc.h b/Resources/windows-libs/HDF5/include/H5CppDoc.h
new file mode 100644
index 0000000000000000000000000000000000000000..8ab253106ca1192c46ec07ff054fd04b21e98d60
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5CppDoc.h
@@ -0,0 +1,91 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5CppDoc_H
+#define __H5CppDoc_H
+
+//-------------------------------------------------------------------------
+// The following section will be used to generate the 'Mainpage'
+// and the 'Examples' for the RM.
+// ------------------------------------------------------------------------
+
+/*! \mainpage notitle
+ *
+ * \section intro_sec Introduction
+ *
+ * The C++ API provides C++ wrappers for the HDF5 C library.
+ * It is assumed that the user has knowledge of the HDF5 file format
+ * and its components.  If you are not familiar with HDF5 file format,
+ * and would like to find out more, please refer to the HDF5 documentation
+ * at http://www.hdfgroup.org/HDF5/doc/index.html
+ *
+ * Because the HDF5 library maps very well to
+ * the object oriented design approach, classes in the C++ API can
+ * closely represent the interfaces of the HDF5 APIs, as followed:
+ *
+ * \verbatim
+ 	HDF5 C APIs                       C++ Classes
+ 	-----------                       -----------
+ 	Attribute Interface (H5A)         Attribute
+ 	Datasets Interface (H5D)          DataSet
+ 	Error Interface (H5E)             Exception
+ 	File Interface (H5F)              H5File
+ 	Group Interface (H5G)             Group
+ 	Identifier Interface (H5I)        IdComponent
+ 	Property List Interface (H5P)     PropList and subclasses
+ 	Dataspace Interface (H5S)         DataSpace
+ 	Datatype Interface (H5T)          DataType and subclasses
+  \endverbatim
+ * \section install_sec Installation
+ *
+ * Please refer to the file release_docs/INSTALL_Windows.txt
+ * under the top directory for information about installing, building,
+ * and testing the C++ API.
+ *
+ *
+ */
+
+///	This example shows how to create datasets.
+///\par
+///\example     create.cpp
+
+///\par
+///	This example shows how to write datasets.
+///\example     writedata.cpp
+
+///\par
+///	This example shows how to read datasets.
+///\example     readdata.cpp
+
+///\par
+///	This example shows how to create a compound datatype,
+///	write an array which has the compound datatype to the file,
+///	and read back fields' subsets.
+///\example     compound.cpp
+
+///\par
+///	This example shows how to work with extendible datasets.
+///\example     extend_ds.cpp
+
+///\par
+///	This example shows how to read data from a chunked dataset.
+///\example     chunks.cpp
+
+///\par
+///	This example shows how to work with groups.
+///\example     h5group.cpp
+
+#endif // __H5CppDoc_H
diff --git a/Resources/windows-libs/HDF5/include/H5Cpublic.h b/Resources/windows-libs/HDF5/include/H5Cpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..39ebbe3760a183d8fdbb3f9d260fe8af851cf64a
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Cpublic.h
@@ -0,0 +1,61 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:	H5Cpublic.h
+ *              June 4, 2005
+ *              John Mainzer
+ *
+ * Purpose:     Public include file for cache functions.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Cpublic_H
+#define _H5Cpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum H5C_cache_incr_mode
+{
+    H5C_incr__off,
+    H5C_incr__threshold
+};
+
+enum H5C_cache_flash_incr_mode
+{
+     H5C_flash_incr__off,
+     H5C_flash_incr__add_space
+};
+
+enum H5C_cache_decr_mode
+{
+    H5C_decr__off,
+    H5C_decr__threshold,
+    H5C_decr__age_out,
+    H5C_decr__age_out_with_threshold
+};
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5DOpublic.h b/Resources/windows-libs/HDF5/include/H5DOpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..774709eb87ab1bcbc001f92d5f61a5d797d9b781
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5DOpublic.h
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5DOpublic_H
+#define _H5DOpublic_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*-------------------------------------------------------------------------
+ *
+ * Direct chunk write function
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t H5DOwrite_chunk(hid_t dset_id, 
+			hid_t dxpl_id, 
+			uint32_t filters, 
+			const hsize_t *offset, 
+         		size_t data_size, 
+			const void *buf);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/Resources/windows-libs/HDF5/include/H5DSpublic.h b/Resources/windows-libs/HDF5/include/H5DSpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..85923f8cc2b17a06bafdbc1534a08c96c56c2493
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5DSpublic.h
@@ -0,0 +1,79 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5DSpublic_H
+#define _H5DSpublic_H
+
+
+
+#define DIMENSION_SCALE_CLASS "DIMENSION_SCALE"
+#define DIMENSION_LIST        "DIMENSION_LIST"
+#define REFERENCE_LIST        "REFERENCE_LIST"
+#define DIMENSION_LABELS      "DIMENSION_LABELS"
+
+
+typedef herr_t  (*H5DS_iterate_t)(hid_t dset, unsigned dim, hid_t scale, void *visitor_data);
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_HLDLL herr_t  H5DSattach_scale( hid_t did,
+                        hid_t dsid,
+                        unsigned int idx);
+
+H5_HLDLL herr_t  H5DSdetach_scale( hid_t did,
+                        hid_t dsid,
+                        unsigned int idx);
+
+H5_HLDLL herr_t  H5DSset_scale( hid_t dsid,
+                     const char *dimname);
+
+H5_HLDLL int H5DSget_num_scales( hid_t did,
+                       unsigned int dim);
+
+H5_HLDLL herr_t  H5DSset_label( hid_t did,
+                     unsigned int idx,
+                     const char *label);
+
+H5_HLDLL ssize_t H5DSget_label( hid_t did,
+                      unsigned int idx,
+                      char *label,
+                      size_t size);
+
+H5_HLDLL ssize_t H5DSget_scale_name( hid_t did,
+                           char *name,
+                           size_t size);
+
+H5_HLDLL htri_t H5DSis_scale( hid_t did);
+
+H5_HLDLL herr_t  H5DSiterate_scales( hid_t did,
+                          unsigned int dim,
+                          int *idx,
+                          H5DS_iterate_t visitor,
+                          void *visitor_data);
+
+H5_HLDLL htri_t H5DSis_attached( hid_t did,
+                       hid_t dsid,
+                       unsigned int idx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5DataSet.h b/Resources/windows-libs/HDF5/include/H5DataSet.h
new file mode 100644
index 0000000000000000000000000000000000000000..e264751ecf64d7f2ba81244e658ff5d3987ab058
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5DataSet.h
@@ -0,0 +1,132 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5DataSet_H
+#define __H5DataSet_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class DataSet
+    \brief Class DataSet operates on HDF5 datasets.
+
+    An datasets has many characteristics similar to an attribute, thus both
+    Attribute and DataSet are derivatives of AbstractDs.  DataSet also
+    inherits from H5Object because a dataset is an HDF5 object.
+*/
+class H5_DLLCPP DataSet : public H5Object, public AbstractDs {
+   public:
+	// Close this dataset.
+	virtual void close();
+
+	// Extends the dataset with unlimited dimension.
+	void extend( const hsize_t* size ) const;
+
+	// Fills a selection in memory with a value
+	void fillMemBuf(const void *fill, const DataType& fill_type, void *buf, const DataType& buf_type, const DataSpace& space) const;
+	void fillMemBuf(const void *fill, DataType& fill_type, void *buf, DataType& buf_type, DataSpace& space); // kept for backward compatibility
+
+	// Fills a selection in memory with zero
+	void fillMemBuf(void *buf, const DataType& buf_type, const DataSpace& space) const;
+	void fillMemBuf(void *buf, DataType& buf_type, DataSpace& space); // kept for backward compatibility
+
+	// Gets the creation property list of this dataset.
+	DSetCreatPropList getCreatePlist() const;
+
+	// Returns the address of this dataset in the file.
+	haddr_t getOffset() const;
+
+	// Gets the dataspace of this dataset.
+	virtual DataSpace getSpace() const;
+
+	// Determines whether space has been allocated for a dataset.
+	void getSpaceStatus(H5D_space_status_t& status) const;
+
+	// Returns the amount of storage size required for this dataset.
+	virtual hsize_t getStorageSize() const;
+
+	// Returns the in memory size of this attribute's data.
+	virtual size_t getInMemDataSize() const;
+
+	// Returns the number of bytes required to store VL data.
+	hsize_t getVlenBufSize(const DataType& type, const DataSpace& space ) const;
+	hsize_t getVlenBufSize(DataType& type, DataSpace& space) const; // kept for backward compatibility
+
+	// Reclaims VL datatype memory buffers.
+	static void vlenReclaim(const DataType& type, const DataSpace& space, const DSetMemXferPropList& xfer_plist, void* buf );
+	static void vlenReclaim(void *buf, const DataType& type, const DataSpace& space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT);
+
+	// Reads the data of this dataset and stores it in the provided buffer.
+	// The memory and file dataspaces and the transferring property list
+	// can be defaults.
+	void read( void* buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
+        void read( H5std_string& buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
+
+	// Writes the buffered data to this dataset.
+	// The memory and file dataspaces and the transferring property list
+	// can be defaults.
+	void write( const void* buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
+        void write( const H5std_string& buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
+
+	// Iterates the selected elements in the specified dataspace - not implemented in C++ style yet
+        int iterateElems( void* buf, const DataType& type, const DataSpace& space, H5D_operator_t op, void* op_data = NULL );
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("DataSet"); }
+
+	// Creates a dataset by way of dereference.
+	DataSet(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
+	DataSet(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
+
+	// Default constructor.
+	DataSet();
+
+	// Copy constructor.
+	DataSet( const DataSet& original );
+
+	// Creates a copy of an existing DataSet using its id.
+	DataSet(const hid_t existing_id);
+
+        // Gets the dataset id.
+        virtual hid_t getId() const;
+
+	// Destructor: properly terminates access to this dataset.
+	virtual ~DataSet();
+
+   private:
+	hid_t id;       // HDF5 dataset id
+
+        // This function contains the common code that is used by
+        // getTypeClass and various API functions getXxxType
+        // defined in AbstractDs for generic datatype and specific
+        // sub-types
+	virtual hid_t p_get_type() const;
+
+	// Reads variable or fixed len strings from this dataset.
+	void p_read_fixed_len(const hid_t mem_type_id, const hid_t mem_space_id, const hid_t file_space_id, const hid_t xfer_plist_id, H5std_string& strg) const;
+	void p_read_variable_len(const hid_t mem_type_id, const hid_t mem_space_id, const hid_t file_space_id, const hid_t xfer_plist_id, H5std_string& strg) const;
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+        // Sets the dataset id.
+        virtual void p_setId(const hid_t new_id);
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5DataSet_H
diff --git a/Resources/windows-libs/HDF5/include/H5DataSpace.h b/Resources/windows-libs/HDF5/include/H5DataSpace.h
new file mode 100644
index 0000000000000000000000000000000000000000..75d4ff899b5c73df62b86f83e070860874b2526a
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5DataSpace.h
@@ -0,0 +1,137 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5DataSpace_H
+#define __H5DataSpace_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//! Class DataSpace operates on HDF5 dataspaces.
+class H5_DLLCPP DataSpace : public IdComponent {
+   public:
+	// Default DataSpace objects
+	static const DataSpace ALL;
+
+	// Creates a dataspace object given the space type
+	DataSpace(H5S_class_t type = H5S_SCALAR);
+
+	// Creates a simple dataspace
+	DataSpace(int rank, const hsize_t * dims, const hsize_t * maxdims = NULL);
+
+	// Assignment operator
+	DataSpace& operator=( const DataSpace& rhs );
+
+	// Closes this dataspace.
+	virtual void close();
+
+	// Makes copy of an existing dataspace.
+	void copy(const DataSpace& like_space);
+
+	// Copies the extent of this dataspace.
+	void extentCopy(const DataSpace& dest_space) const;
+	// Kept for backward compatibility only.
+	void extentCopy(DataSpace& dest_space) const;
+
+	// Gets the bounding box containing the current selection.
+	void getSelectBounds( hsize_t* start, hsize_t* end ) const;
+
+	// Gets the number of element points in the current selection.
+	hssize_t getSelectElemNpoints() const;
+
+	// Retrieves the list of element points currently selected.
+	void getSelectElemPointlist( hsize_t startpoint, hsize_t numpoints, hsize_t *buf ) const;
+
+	// Gets the list of hyperslab blocks currently selected.
+	void getSelectHyperBlocklist( hsize_t startblock, hsize_t numblocks, hsize_t *buf ) const;
+
+	// Get number of hyperslab blocks.
+	hssize_t getSelectHyperNblocks() const;
+
+	// Gets the number of elements in this dataspace selection.
+	hssize_t getSelectNpoints() const;
+
+	// Retrieves dataspace dimension size and maximum size.
+	int getSimpleExtentDims( hsize_t *dims, hsize_t *maxdims = NULL ) const;
+
+	// Gets the dimensionality of this dataspace.
+	int getSimpleExtentNdims() const;
+
+	// Gets the number of elements in this dataspace.
+	// 12/05/00 - changed return type to hssize_t from hsize_t - C API
+	hssize_t getSimpleExtentNpoints() const;
+
+	// Gets the current class of this dataspace.
+	H5S_class_t getSimpleExtentType() const;
+
+	// Determines if this dataspace is a simple one.
+	bool isSimple() const;
+
+	// Sets the offset of this simple dataspace.
+	void offsetSimple( const hssize_t* offset ) const;
+
+	// Selects the entire dataspace.
+	void selectAll() const;
+
+	// Selects array elements to be included in the selection for
+	// this dataspace.
+	void selectElements( H5S_seloper_t op, const size_t num_elements, const hsize_t *coord) const;
+
+	// Selects a hyperslab region to add to the current selected region.
+	void selectHyperslab( H5S_seloper_t op, const hsize_t *count, const hsize_t *start, const hsize_t *stride = NULL, const hsize_t *block = NULL ) const;
+
+	// Resets the selection region to include no elements.
+	void selectNone() const;
+
+	// Verifies that the selection is within the extent of the dataspace.
+	bool selectValid() const;
+
+	// Removes the extent from this dataspace.
+	void setExtentNone() const;
+
+	// Sets or resets the size of this dataspace.
+	void setExtentSimple( int rank, const hsize_t *current_size, const hsize_t *maximum_size = NULL ) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("DataSpace"); }
+
+	// Creates a DataSpace object using an existing dataspace id.
+	DataSpace(const hid_t space_id);
+
+	// Copy constructor: makes a copy of the original DataSpace object.
+	DataSpace(const DataSpace& original);
+
+	// Gets the dataspace id.
+	virtual hid_t getId() const;
+
+	// Destructor: properly terminates access to this dataspace.
+	virtual ~DataSpace();
+
+   private:
+	hid_t id;       // HDF5 dataspace id
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Sets the dataspace id.
+	virtual void p_setId(const hid_t new_id);
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5DataSpace_H
diff --git a/Resources/windows-libs/HDF5/include/H5DataType.h b/Resources/windows-libs/HDF5/include/H5DataType.h
new file mode 100644
index 0000000000000000000000000000000000000000..dca0c871ebee32a9c189aa7399bc2ad7bbf16833
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5DataType.h
@@ -0,0 +1,144 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class DataType inherits from H5Object and has several subclasses for
+// specific HDF5 data types.
+
+#ifndef __H5DataType_H
+#define __H5DataType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class DataType
+    \brief Class DataType provides generic operations on HDF5 datatypes.
+
+    DataType inherits from H5Object because a named datatype is an HDF5
+    object and is a base class of ArrayType, AtomType, CompType, EnumType,
+    and VarLenType.
+*/
+class H5_DLLCPP DataType : public H5Object {
+   public:
+	// Creates a datatype given its class and size
+	DataType( const H5T_class_t type_class, size_t size );
+
+	// Copy constructor: makes a copy of the original object
+	DataType( const DataType& original );
+
+	// Creates a datatype by way of dereference.
+	DataType(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
+	DataType(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
+
+	// Closes this datatype.
+	virtual void close();
+
+	// Copies an existing datatype to this datatype object.
+	void copy(const DataType& like_type);
+
+	// Copies the datatype of dset to this datatype object.
+	void copy(const DataSet& dset);
+
+	// Returns the datatype class identifier.
+	H5T_class_t getClass() const;
+
+	// Commits a transient datatype to a file; this datatype becomes
+	// a named datatype which can be accessed from the location.
+	void commit(const H5Location& loc, const char* name);
+	void commit(const H5Location& loc, const H5std_string& name);
+	// These two overloaded functions are kept for backward compatibility
+	// only; they missed the const.
+	void commit(H5Location& loc, const char* name);
+	void commit(H5Location& loc, const H5std_string& name);
+
+	// Determines whether this datatype is a named datatype or
+	// a transient datatype.
+	bool committed() const;
+
+        // Finds a conversion function that can handle the conversion
+        // this datatype to the given datatype, dest.
+	H5T_conv_t find( const DataType& dest, H5T_cdata_t **pcdata ) const;
+
+	// Converts data from between specified datatypes.
+	void convert( const DataType& dest, size_t nelmts, void *buf, void *background, const PropList& plist=PropList::DEFAULT) const;
+
+	// Assignment operator
+	DataType& operator=( const DataType& rhs );
+
+	// Determines whether two datatypes are the same.
+	bool operator==(const DataType& compared_type ) const;
+
+	// Locks a datatype.
+	void lock() const;
+
+	// Returns the size of a datatype.
+	size_t getSize() const;
+
+	// Returns the base datatype from which a datatype is derived.
+	// Note: not quite right for specific types yet???
+	DataType getSuper() const;
+
+	// Registers a conversion function.
+	void registerFunc(H5T_pers_t pers, const char* name, const DataType& dest, H5T_conv_t func ) const;
+	void registerFunc(H5T_pers_t pers, const H5std_string& name, const DataType& dest, H5T_conv_t func ) const;
+
+	// Removes a conversion function from all conversion paths.
+	void unregister( H5T_pers_t pers, const char* name, const DataType& dest, H5T_conv_t func ) const;
+	void unregister( H5T_pers_t pers, const H5std_string& name, const DataType& dest, H5T_conv_t func ) const;
+
+	// Tags an opaque datatype.
+	void setTag( const char* tag ) const;
+	void setTag( const H5std_string& tag ) const;
+
+	// Gets the tag associated with an opaque datatype.
+	H5std_string getTag() const;
+
+	// Checks whether this datatype contains (or is) a certain type class.
+	bool detectClass(H5T_class_t cls) const;
+
+	// Checks whether this datatype is a variable-length string.
+	bool isVariableStr() const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("DataType"); }
+
+	// Creates a copy of an existing DataType using its id
+	DataType( const hid_t type_id );
+
+	// Default constructor
+	DataType();
+
+	// Gets the datatype id.
+	virtual hid_t getId() const;
+
+	// Destructor: properly terminates access to this datatype.
+	virtual ~DataType();
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	hid_t id;	// HDF5 datatype id
+
+	// Sets the datatype id.
+	virtual void p_setId(const hid_t new_id);
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+   private:
+	void p_commit(hid_t loc_id, const char* name);
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5DataType_H
diff --git a/Resources/windows-libs/HDF5/include/H5DcreatProp.h b/Resources/windows-libs/HDF5/include/H5DcreatProp.h
new file mode 100644
index 0000000000000000000000000000000000000000..c643ace5cfc1d3ccd12cf3ca73eda591241fc09e
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5DcreatProp.h
@@ -0,0 +1,133 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class DSetCreatPropList represents the HDF5 dataset creation property list
+// and inherits from PropList.
+
+#ifndef __H5DSCreatPropList_H
+#define __H5DSCreatPropList_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class DSetCreatPropList
+    \brief Class DSetCreatPropList represents the dataset creation property
+    list.
+*/
+class H5_DLLCPP DSetCreatPropList : public PropList {
+   public:
+	// Default dataset creation property list.
+	static const DSetCreatPropList DEFAULT;
+
+	// Creates a dataset creation property list.
+	DSetCreatPropList();
+
+	// Queries whether all the filters set in this property list are
+	// available currently.
+	bool allFiltersAvail();
+
+	// Get space allocation time for this property.
+	H5D_alloc_time_t getAllocTime();
+
+	// Set space allocation time for dataset during creation.
+	void setAllocTime(H5D_alloc_time_t alloc_time);
+
+	// Retrieves the size of the chunks used to store a chunked layout dataset.
+	int getChunk( int max_ndims, hsize_t* dim ) const;
+
+	// Sets the size of the chunks used to store a chunked layout dataset.
+	void setChunk( int ndims, const hsize_t* dim ) const;
+
+	// Returns information about an external file.
+	void getExternal( unsigned idx, size_t name_size, char* name, off_t& offset, hsize_t& size ) const;
+
+	// Returns the number of external files for a dataset.
+	int getExternalCount() const;
+
+	// Gets fill value writing time.
+	H5D_fill_time_t getFillTime();
+
+	// Sets fill value writing time for dataset.
+	void setFillTime(H5D_fill_time_t fill_time);
+
+	// Retrieves a dataset fill value.
+	void getFillValue( const DataType& fvalue_type, void* value ) const;
+
+	// Sets a dataset fill value.
+	void setFillValue( const DataType& fvalue_type, const void* value ) const;
+
+	// Returns information about a filter in a pipeline.
+	H5Z_filter_t getFilter(int filter_number, unsigned int& flags, size_t& cd_nelmts, unsigned int* cd_values, size_t namelen, char name[], unsigned int &filter_config) const;
+
+	// Returns information about a filter in a pipeline given the filter id.
+	void getFilterById(H5Z_filter_t filter_id, unsigned int &flags, size_t &cd_nelmts, unsigned int* cd_values, size_t namelen, char name[], unsigned int &filter_config) const;
+
+	// Gets the layout of the raw data storage of the data that uses this
+	// property list.
+	H5D_layout_t getLayout() const;
+
+	// Sets the type of storage used to store the raw data for the
+	// dataset that uses this property list.
+	void setLayout(H5D_layout_t layout) const;
+
+	// Returns the number of filters in the pipeline.
+	int getNfilters() const;
+
+	// Checks if fill value has been defined for this property.
+	H5D_fill_value_t isFillValueDefined();
+
+	// Modifies the specified filter.
+	void modifyFilter( H5Z_filter_t filter_id, unsigned int flags, size_t cd_nelmts, const unsigned int cd_values[] ) const;
+
+	// Remove one or all filters from the filter pipeline.
+	void removeFilter( H5Z_filter_t filter_id) const;
+
+	// Sets compression method and compression level.
+	void setDeflate( int level ) const;
+
+	// Adds an external file to the list of external files.
+	void setExternal( const char* name, off_t offset, hsize_t size ) const;
+
+	// Adds a filter to the filter pipeline.
+	void setFilter( H5Z_filter_t filter, unsigned int flags = 0, size_t cd_nelmts = 0, const unsigned int cd_values[] = NULL) const;
+
+	// Sets Fletcher32 checksum of EDC for this property list.
+	void setFletcher32() const;
+
+	// Sets method of the shuffle filter.
+	void setShuffle() const;
+
+	// Sets SZIP compression method.
+	void setSzip(unsigned int options_mask, unsigned int pixels_per_block) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("DSetCreatPropList"); }
+
+	// Copy constructor: creates a copy of a DSetCreatPropList object.
+	DSetCreatPropList(const DSetCreatPropList& orig);
+
+	// Creates a copy of an existing dataset creation property list
+	// using the property list id.
+	DSetCreatPropList(const hid_t plist_id);
+
+	// Noop destructor.
+	virtual ~DSetCreatPropList();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5DSCreatPropList_H
diff --git a/Resources/windows-libs/HDF5/include/H5Dpkg.h b/Resources/windows-libs/HDF5/include/H5Dpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..5a785a3ba282872dc42b228cb08e80a1480c906c
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Dpkg.h
@@ -0,0 +1,718 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *		Monday, April 14, 2003
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5D package.  Source files outside the H5D package should
+ *		include H5Dprivate.h instead.
+ */
+#ifndef H5D_PACKAGE
+#error "Do not include this file outside the H5D package!"
+#endif
+
+#ifndef _H5Dpkg_H
+#define _H5Dpkg_H
+
+/* Get package's private header */
+#include "H5Dprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Gprivate.h"		/* Groups 			  	*/
+#include "H5SLprivate.h"	/* Skip lists				*/
+#include "H5Tprivate.h"		/* Datatypes         			*/
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* Set the minimum object header size to create objects with */
+#define H5D_MINHDR_SIZE 256
+
+/* [Simple] Macro to construct a H5D_io_info_t from it's components */
+#define H5D_BUILD_IO_INFO_WRT(io_info, ds, dxpl_c, dxpl_i, str, buf)    \
+    (io_info)->dset = ds;                                               \
+    (io_info)->dxpl_cache = dxpl_c;                                     \
+    (io_info)->dxpl_id = dxpl_i;                                        \
+    (io_info)->store = str;                                             \
+    (io_info)->op_type = H5D_IO_OP_WRITE;                               \
+    (io_info)->u.wbuf = buf
+#define H5D_BUILD_IO_INFO_RD(io_info, ds, dxpl_c, dxpl_i, str, buf)     \
+    (io_info)->dset = ds;                                               \
+    (io_info)->dxpl_cache = dxpl_c;                                     \
+    (io_info)->dxpl_id = dxpl_i;                                        \
+    (io_info)->store = str;                                             \
+    (io_info)->op_type = H5D_IO_OP_READ;                                \
+    (io_info)->u.rbuf = buf
+
+#define H5D_CHUNK_HASH(D, ADDR) H5F_addr_hash(ADDR, (D)->cache.chunk.nslots)
+
+/* Flags for marking aspects of a dataset dirty */
+#define H5D_MARK_SPACE  0x01
+#define H5D_MARK_LAYOUT  0x02
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/* Typedef for datatype information for raw data I/O operation */
+typedef struct H5D_type_info_t {
+    /* Initial values */
+    const H5T_t *mem_type;              /* Pointer to memory datatype */
+    const H5T_t *dset_type;             /* Pointer to dataset datatype */
+    H5T_path_t *tpath;                  /* Datatype conversion path */
+    hid_t src_type_id;                  /* Source datatype ID */
+    hid_t dst_type_id;                  /* Destination datatype ID */
+
+    /* Computed/derived values */
+    size_t src_type_size;		/* Size of source type	*/
+    size_t dst_type_size;	        /* Size of destination type*/
+    size_t max_type_size;	        /* Size of largest source/destination type */
+    hbool_t is_conv_noop;               /* Whether the type conversion is a NOOP */
+    hbool_t is_xform_noop;              /* Whether the data transform is a NOOP */
+    const H5T_subset_info_t *cmpd_subset;   /* Info related to the compound subset conversion functions */
+    H5T_bkg_t need_bkg;		        /* Type of background buf needed */
+    size_t request_nelmts;		/* Requested strip mine	*/
+    uint8_t *tconv_buf;	                /* Datatype conv buffer	*/
+    hbool_t tconv_buf_allocated;        /* Whether the type conversion buffer was allocated */
+    uint8_t *bkg_buf;	                /* Background buffer	*/
+    hbool_t bkg_buf_allocated;          /* Whether the background buffer was allocated */
+} H5D_type_info_t;
+
+/* Forward declaration of structs used below */
+struct H5D_io_info_t;
+struct H5D_chunk_map_t;
+
+/* Function pointers for I/O on particular types of dataset layouts */
+typedef herr_t (*H5D_layout_construct_func_t)(H5F_t *f, H5D_t *dset);
+typedef herr_t (*H5D_layout_init_func_t)(H5F_t *f, hid_t dxpl_id, const H5D_t *dset,
+    hid_t dapl_id);
+typedef hbool_t (*H5D_layout_is_space_alloc_func_t)(const H5O_storage_t *storage);
+typedef herr_t (*H5D_layout_io_init_func_t)(const struct H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
+    struct H5D_chunk_map_t *cm);
+typedef herr_t (*H5D_layout_read_func_t)(struct H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
+    const H5S_t *mem_space, struct H5D_chunk_map_t *fm);
+typedef herr_t (*H5D_layout_write_func_t)(struct H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
+    const H5S_t *mem_space, struct H5D_chunk_map_t *fm);
+typedef ssize_t (*H5D_layout_readvv_func_t)(const struct H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
+typedef ssize_t (*H5D_layout_writevv_func_t)(const struct H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
+typedef herr_t (*H5D_layout_flush_func_t)(H5D_t *dataset, hid_t dxpl_id);
+typedef herr_t (*H5D_layout_io_term_func_t)(const struct H5D_chunk_map_t *cm);
+
+/* Typedef for grouping layout I/O routines */
+typedef struct H5D_layout_ops_t {
+    H5D_layout_construct_func_t construct;      /* Layout constructor for new datasets */
+    H5D_layout_init_func_t init;        /* Layout initializer for dataset */
+    H5D_layout_is_space_alloc_func_t is_space_alloc;    /* Query routine to determine if storage is allocated */
+    H5D_layout_io_init_func_t io_init;  /* I/O initialization routine */
+    H5D_layout_read_func_t ser_read;    /* High-level I/O routine for reading data in serial */
+    H5D_layout_write_func_t ser_write;  /* High-level I/O routine for writing data in serial */
+#ifdef H5_HAVE_PARALLEL
+    H5D_layout_read_func_t par_read;    /* High-level I/O routine for reading data in parallel */
+    H5D_layout_write_func_t par_write;  /* High-level I/O routine for writing data in parallel */
+#endif /* H5_HAVE_PARALLEL */
+    H5D_layout_readvv_func_t readvv;    /* Low-level I/O routine for reading data */
+    H5D_layout_writevv_func_t writevv;  /* Low-level I/O routine for writing data */
+    H5D_layout_flush_func_t flush;      /* Low-level I/O routine for flushing raw data */
+    H5D_layout_io_term_func_t io_term;  /* I/O shutdown routine */
+} H5D_layout_ops_t;
+
+/* Function pointers for either multiple or single block I/O access */
+typedef herr_t (*H5D_io_single_read_func_t)(const struct H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
+typedef herr_t (*H5D_io_single_write_func_t)(const struct H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
+
+/* Typedef for raw data I/O framework info */
+typedef struct H5D_io_ops_t {
+    H5D_layout_read_func_t multi_read;          /* High-level I/O routine for reading data */
+    H5D_layout_write_func_t multi_write;        /* High-level I/O routine for writing data */
+    H5D_io_single_read_func_t single_read;      /* I/O routine for reading single block */
+    H5D_io_single_write_func_t single_write;    /* I/O routine for writing single block */
+} H5D_io_ops_t;
+
+/* Typedefs for dataset storage information */
+typedef struct {
+    haddr_t dset_addr;      /* Address of dataset in file */
+    hsize_t dset_size;      /* Total size of dataset in file */
+} H5D_contig_storage_t;
+
+typedef struct {
+    hsize_t index;          /* "Index" of chunk in dataset (must be first for TBBT routines) */
+    hsize_t *offset;        /* Chunk's coordinates in elements */
+} H5D_chunk_storage_t;
+
+typedef struct {
+    void *buf;              /* Buffer for compact dataset */
+    hbool_t *dirty;         /* Pointer to dirty flag to mark */
+} H5D_compact_storage_t;
+
+typedef union H5D_storage_t {
+    H5D_contig_storage_t contig; /* Contiguous information for dataset */
+    H5D_chunk_storage_t chunk;  /* Chunk information for dataset */
+    H5D_compact_storage_t compact; /* Compact information for dataset */
+    H5O_efl_t   efl;            /* External file list information for dataset */
+} H5D_storage_t;
+
+/* Typedef for raw data I/O operation info */
+typedef enum H5D_io_op_type_t {
+    H5D_IO_OP_READ,         /* Read operation */
+    H5D_IO_OP_WRITE         /* Write operation */
+} H5D_io_op_type_t;
+
+typedef struct H5D_io_info_t {
+    const H5D_t *dset;          /* Pointer to dataset being operated on */
+#ifndef H5_HAVE_PARALLEL
+    const
+#endif /* H5_HAVE_PARALLEL */
+        H5D_dxpl_cache_t *dxpl_cache; /* Pointer to cached DXPL info */
+    hid_t dxpl_id;              /* Original DXPL ID */
+#ifdef H5_HAVE_PARALLEL
+    MPI_Comm comm;              /* MPI communicator for file */
+    hbool_t using_mpi_vfd;      /* Whether the file is using an MPI-based VFD */
+    struct {
+        H5FD_mpio_xfer_t xfer_mode; /* Parallel transfer for this request (H5D_XFER_IO_XFER_MODE_NAME) */
+        H5FD_mpio_collective_opt_t coll_opt_mode; /* Parallel transfer with independent IO or collective IO with this mode */
+        H5D_io_ops_t io_ops;    /* I/O operation function pointers */
+    } orig;
+#endif /* H5_HAVE_PARALLEL */
+    H5D_storage_t *store;       /* Dataset storage info */
+    H5D_layout_ops_t layout_ops;    /* Dataset layout I/O operation function pointers */
+    H5D_io_ops_t io_ops;        /* I/O operation function pointers */
+    H5D_io_op_type_t op_type;
+    union {
+        void *rbuf;             /* Pointer to buffer for read */
+        const void *wbuf;       /* Pointer to buffer to write */
+    } u;
+} H5D_io_info_t;
+
+
+/******************/
+/* Chunk typedefs */
+/******************/
+
+/* Typedef for chunked dataset index operation info */
+typedef struct H5D_chk_idx_info_t {
+    H5F_t *f;                   /* File pointer for operation */
+    hid_t dxpl_id;              /* DXPL ID for operation */
+    const H5O_pline_t *pline;   /* I/O pipeline info */
+    H5O_layout_chunk_t *layout;           /* Chunk layout description */
+    H5O_storage_chunk_t *storage;         /* Chunk storage description */
+} H5D_chk_idx_info_t;
+
+/*
+ * "Generic" chunk record.  Each chunk is keyed by the minimum logical
+ * N-dimensional coordinates and the datatype size of the chunk.
+ * The fastest-varying dimension is assumed to reference individual bytes of
+ * the array, so a 100-element 1-D array of 4-byte integers would really be a
+ * 2-D array with the slow varying dimension of size 100 and the fast varying
+ * dimension of size 4 (the storage dimensionality has very little to do with
+ * the real dimensionality).
+ *
+ * The chunk's file address, filter mask and size on disk are not key values.
+ */
+typedef struct H5D_chunk_rec_t {
+    uint32_t	nbytes;				/* Size of stored data	*/
+    hsize_t	offset[H5O_LAYOUT_NDIMS];	/* Logical offset to start */
+    unsigned	filter_mask;			/* Excluded filters	*/
+    haddr_t     chunk_addr;                     /* Address of chunk in file */
+} H5D_chunk_rec_t;
+
+/*
+ * Common data exchange structure for indexed storage nodes.  This structure is
+ * passed through the indexing layer to the methods for the objects
+ * to which the index points.
+ */
+typedef struct H5D_chunk_common_ud_t {
+    /* downward */
+    const H5O_layout_chunk_t *layout;           /* Chunk layout description */
+    const H5O_storage_chunk_t *storage;         /* Chunk storage description */
+    const hsize_t *offset;	                /* Logical offset of chunk */
+    const struct H5D_rdcc_t *rdcc;              /* Chunk cache.  Only necessary if the index may
+                                                 * be modified, and if any chunks in the dset
+                                                 * may be cached */
+} H5D_chunk_common_ud_t;
+
+/* B-tree callback info for various operations */
+typedef struct H5D_chunk_ud_t {
+    H5D_chunk_common_ud_t common;       /* Common info for B-tree user data (must be first) */
+
+    /* Upward */
+    unsigned    idx_hint;               /*index of chunk in cache, if present */
+    uint32_t	nbytes;			/*size of stored data	*/
+    unsigned	filter_mask;		/*excluded filters	*/
+    haddr_t	addr;			/*file address of chunk */
+} H5D_chunk_ud_t;
+
+/* Typedef for "generic" chunk callbacks */
+typedef int (*H5D_chunk_cb_func_t)(const H5D_chunk_rec_t *chunk_rec,
+    void *udata);
+
+/* Typedefs for chunk operations */
+typedef herr_t (*H5D_chunk_init_func_t)(const H5D_chk_idx_info_t *idx_info,
+    const H5S_t *space, haddr_t dset_ohdr_addr);
+typedef herr_t (*H5D_chunk_create_func_t)(const H5D_chk_idx_info_t *idx_info);
+typedef hbool_t (*H5D_chunk_is_space_alloc_func_t)(const H5O_storage_chunk_t *storage);
+typedef herr_t (*H5D_chunk_insert_func_t)(const H5D_chk_idx_info_t *idx_info,
+    H5D_chunk_ud_t *udata);
+typedef herr_t (*H5D_chunk_get_addr_func_t)(const H5D_chk_idx_info_t *idx_info,
+    H5D_chunk_ud_t *udata);
+typedef herr_t (*H5D_chunk_resize_func_t)(H5O_layout_chunk_t *layout);
+typedef int (*H5D_chunk_iterate_func_t)(const H5D_chk_idx_info_t *idx_info,
+    H5D_chunk_cb_func_t chunk_cb, void *chunk_udata);
+typedef herr_t (*H5D_chunk_remove_func_t)(const H5D_chk_idx_info_t *idx_info,
+    H5D_chunk_common_ud_t *udata);
+typedef herr_t (*H5D_chunk_delete_func_t)(const H5D_chk_idx_info_t *idx_info);
+typedef herr_t (*H5D_chunk_copy_setup_func_t)(const H5D_chk_idx_info_t *idx_info_src,
+    const H5D_chk_idx_info_t *idx_info_dst);
+typedef herr_t (*H5D_chunk_copy_shutdown_func_t)(H5O_storage_chunk_t *storage_src,
+    H5O_storage_chunk_t *storage_dst, hid_t dxpl_id);
+typedef herr_t (*H5D_chunk_size_func_t)(const H5D_chk_idx_info_t *idx_info,
+    hsize_t *idx_size);
+typedef herr_t (*H5D_chunk_reset_func_t)(H5O_storage_chunk_t *storage, hbool_t reset_addr);
+typedef herr_t (*H5D_chunk_dump_func_t)(const H5O_storage_chunk_t *storage,
+    FILE *stream);
+typedef herr_t (*H5D_chunk_dest_func_t)(const H5D_chk_idx_info_t *idx_info);
+
+/* Typedef for grouping chunk I/O routines */
+typedef struct H5D_chunk_ops_t {
+    H5D_chunk_init_func_t init;             /* Routine to initialize indexing information in memory */
+    H5D_chunk_create_func_t create;         /* Routine to create chunk index */
+    H5D_chunk_is_space_alloc_func_t is_space_alloc;    /* Query routine to determine if storage/index is allocated */
+    H5D_chunk_insert_func_t insert;         /* Routine to insert a chunk into an index */
+    H5D_chunk_get_addr_func_t get_addr;     /* Routine to retrieve address of chunk in file */
+    H5D_chunk_resize_func_t resize;         /* Routine to update chunk index info after resizing dataset */
+    H5D_chunk_iterate_func_t iterate;       /* Routine to iterate over chunks */
+    H5D_chunk_remove_func_t remove;         /* Routine to remove a chunk from an index */
+    H5D_chunk_delete_func_t idx_delete;     /* Routine to delete index & all chunks from file*/
+    H5D_chunk_copy_setup_func_t copy_setup; /* Routine to perform any necessary setup for copying chunks */
+    H5D_chunk_copy_shutdown_func_t copy_shutdown; /* Routine to perform any necessary shutdown for copying chunks */
+    H5D_chunk_size_func_t size;             /* Routine to get size of indexing information */
+    H5D_chunk_reset_func_t reset;           /* Routine to reset indexing information */
+    H5D_chunk_dump_func_t dump;             /* Routine to dump indexing information */
+    H5D_chunk_dest_func_t dest;             /* Routine to destroy indexing information in memory */
+} H5D_chunk_ops_t;
+
+/* Structure holding information about a chunk's selection for mapping */
+typedef struct H5D_chunk_info_t {
+    hsize_t index;              /* "Index" of chunk in dataset */
+    uint32_t chunk_points;      /* Number of elements selected in chunk */
+    hsize_t coords[H5O_LAYOUT_NDIMS];   /* Coordinates of chunk in file dataset's dataspace */
+    H5S_t *fspace;              /* Dataspace describing chunk & selection in it */
+    unsigned fspace_shared;     /* Indicate that the file space for a chunk is shared and shouldn't be freed */
+    H5S_t *mspace;              /* Dataspace describing selection in memory corresponding to this chunk */
+    unsigned mspace_shared;     /* Indicate that the memory space for a chunk is shared and shouldn't be freed */
+} H5D_chunk_info_t;
+
+/* Main structure holding the mapping between file chunks and memory */
+typedef struct H5D_chunk_map_t {
+    H5O_layout_t *layout;       /* Dataset layout information*/
+    hsize_t nelmts;             /* Number of elements selected in file & memory dataspaces */
+
+    const H5S_t *file_space;    /* Pointer to the file dataspace */
+    unsigned f_ndims;           /* Number of dimensions for file dataspace */
+    hsize_t f_dims[H5O_LAYOUT_NDIMS];   /* File dataspace dimensions */
+
+    const H5S_t *mem_space;     /* Pointer to the memory dataspace */
+    H5S_t *mchunk_tmpl;         /* Dataspace template for new memory chunks */
+    H5S_sel_iter_t mem_iter;    /* Iterator for elements in memory selection */
+    unsigned m_ndims;           /* Number of dimensions for memory dataspace */
+    H5S_sel_type msel_type;     /* Selection type in memory */
+
+    H5SL_t *sel_chunks;         /* Skip list containing information for each chunk selected */
+
+    H5S_t  *single_space;       /* Dataspace for single chunk */
+    H5D_chunk_info_t *single_chunk_info;  /* Pointer to single chunk's info */
+    hbool_t use_single;         /* Whether I/O is on a single element */
+
+    hsize_t last_index;         /* Index of last chunk operated on */
+    H5D_chunk_info_t *last_chunk_info;  /* Pointer to last chunk's info */
+
+    hsize_t chunk_dim[H5O_LAYOUT_NDIMS];    /* Size of chunk in each dimension */
+
+#ifdef H5_HAVE_PARALLEL
+    H5D_chunk_info_t **select_chunk;    /* Store the information about whether this chunk is selected or not */
+#endif /* H5_HAVE_PARALLEL */
+} H5D_chunk_map_t;
+
+/* Cached information about a particular chunk */
+typedef struct H5D_chunk_cached_t{
+    hbool_t     valid;                          /*whether cache info is valid*/
+    hsize_t	offset[H5O_LAYOUT_NDIMS];	/*logical offset to start*/
+    uint32_t	nbytes;				/*size of stored data	*/
+    unsigned	filter_mask;			/*excluded filters	*/
+    haddr_t	addr;				/*file address of chunk */
+} H5D_chunk_cached_t;
+
+/* The raw data chunk cache */
+typedef struct H5D_rdcc_t {
+    struct {
+        unsigned	ninits;	/* Number of chunk creations		*/
+        unsigned	nhits;	/* Number of cache hits			*/
+        unsigned	nmisses;/* Number of cache misses		*/
+        unsigned	nflushes;/* Number of cache flushes		*/
+    } stats;
+    size_t		nbytes_max; /* Maximum cached raw data in bytes	*/
+    size_t		nslots;	/* Number of chunk slots allocated	*/
+    double		w0;     /* Chunk preemption policy          */
+    struct H5D_rdcc_ent_t *head; /* Head of doubly linked list		*/
+    struct H5D_rdcc_ent_t *tail; /* Tail of doubly linked list		*/
+    size_t		nbytes_used; /* Current cached raw data in bytes */
+    int			nused;	/* Number of chunk slots in use		*/
+    H5D_chunk_cached_t last;    /* Cached copy of last chunk information */
+    struct H5D_rdcc_ent_t **slot; /* Chunk slots, each points to a chunk*/
+    H5SL_t		*sel_chunks; /* Skip list containing information for each chunk selected */
+    H5S_t		*single_space; /* Dataspace for single element I/O on chunks */
+    H5D_chunk_info_t *single_chunk_info;  /* Pointer to single chunk's info */
+} H5D_rdcc_t;
+
+/* The raw data contiguous data cache */
+typedef struct H5D_rdcdc_t {
+    unsigned char *sieve_buf;   /* Buffer to hold data sieve buffer */
+    haddr_t sieve_loc;          /* File location (offset) of the data sieve buffer */
+    size_t sieve_size;          /* Size of the data sieve buffer used (in bytes) */
+    size_t sieve_buf_size;      /* Size of the data sieve buffer allocated (in bytes) */
+    hbool_t sieve_dirty;        /* Flag to indicate that the data sieve buffer is dirty */
+} H5D_rdcdc_t;
+
+/*
+ * A dataset is made of two layers, an H5D_t struct that is unique to
+ * each instance of an opened datset, and a shared struct that is only
+ * created once for a given dataset.  Thus, if a dataset is opened twice,
+ * there will be two IDs and two H5D_t structs, both sharing one H5D_shared_t.
+ */
+typedef struct H5D_shared_t {
+    size_t              fo_count;       /* Reference count */
+    hid_t               type_id;        /* ID for dataset's datatype    */
+    H5T_t              *type;           /* Datatype for this dataset     */
+    H5S_t              *space;          /* Dataspace of this dataset    */
+    hbool_t             space_dirty;    /* Whether the dataspace info needs to be flushed to the file */
+    hbool_t             layout_dirty;   /* Whether the layout info needs to be flushed to the file */
+    hid_t               dcpl_id;        /* Dataset creation property id */
+    H5D_dcpl_cache_t    dcpl_cache;     /* Cached DCPL values */
+    H5O_layout_t        layout;         /* Data layout                  */
+    hbool_t             checked_filters;/* TRUE if dataset passes can_apply check */
+
+    /* Buffered/cached information for types of raw data storage*/
+    struct {
+        H5D_rdcdc_t     contig;         /* Information about contiguous data */
+                                        /* (Note that the "contig" cache
+                                         * information can be used by a chunked
+                                         * dataset in certain circumstances)
+                                         */
+        H5D_rdcc_t      chunk;          /* Information about chunked data */
+    } cache;
+} H5D_shared_t;
+
+struct H5D_t {
+    H5O_loc_t           oloc;           /* Object header location       */
+    H5G_name_t          path;           /* Group hierarchy path         */
+    H5D_shared_t        *shared;        /* cached information from file */
+};
+
+/* Enumerated type for allocating dataset's storage */
+typedef enum {
+    H5D_ALLOC_CREATE,           /* Dataset is being created */
+    H5D_ALLOC_OPEN,             /* Dataset is being opened */
+    H5D_ALLOC_EXTEND,           /* Dataset's dataspace is being extended */
+    H5D_ALLOC_WRITE             /* Dataset is being extended */
+} H5D_time_alloc_t;
+
+
+/* Typedef for dataset creation operation */
+typedef struct {
+    hid_t type_id;              /* Datatype for dataset */
+    const H5S_t *space;         /* Dataspace for dataset */
+    hid_t dcpl_id;              /* Dataset creation property list */
+    hid_t dapl_id;              /* Dataset access property list */
+} H5D_obj_create_t;
+
+/* Typedef for filling a buffer with a fill value */
+typedef struct H5D_fill_buf_info_t {
+    H5MM_allocate_t fill_alloc_func;    /* Routine to call for allocating fill buffer */
+    void        *fill_alloc_info;       /* Extra info for allocation routine */
+    H5MM_free_t fill_free_func;         /* Routine to call for freeing fill buffer */
+    void        *fill_free_info;        /* Extra info for free routine */
+    H5T_path_t *fill_to_mem_tpath;      /* Datatype conversion path for converting the fill value to the memory buffer */
+    H5T_path_t *mem_to_dset_tpath;      /* Datatype conversion path for converting the memory buffer to the dataset elements */
+    const H5O_fill_t *fill;             /* Pointer to fill value */
+    void       *fill_buf;               /* Fill buffer */
+    size_t      fill_buf_size;          /* Size of fill buffer */
+    hbool_t     use_caller_fill_buf;    /* Whether the caller provided the fill buffer */
+    void       *bkg_buf;                /* Background conversion buffer */
+    size_t      bkg_buf_size;           /* Size of background buffer */
+    H5T_t      *mem_type;               /* Pointer to memory datatype */
+    const H5T_t *file_type;             /* Pointer to file datatype */
+    hid_t       mem_tid;                /* ID for memory version of disk datatype */
+    hid_t       file_tid;               /* ID for disk datatype */
+    size_t      mem_elmt_size, file_elmt_size;       /* Size of element in memory and on disk */
+    size_t      max_elmt_size;          /* Max. size of memory or file datatype */
+    size_t      elmts_per_buf;          /* # of elements that fit into a buffer */
+    hbool_t     has_vlen_fill_type;     /* Whether the datatype for the fill value has a variable-length component */
+} H5D_fill_buf_info_t;
+
+/* Internal data structure for computing variable-length dataset's total size */
+typedef struct {
+    H5D_t *dset;        /* Dataset for operation */
+    H5S_t *fspace;      /* Dataset's dataspace for operation */
+    H5S_t *mspace;      /* Memory dataspace for operation */
+    void *fl_tbuf;      /* Ptr to the temporary buffer we are using for fixed-length data */
+    void *vl_tbuf;      /* Ptr to the temporary buffer we are using for VL data */
+    hid_t xfer_pid;     /* ID of the dataset xfer property list */
+    hsize_t size;       /* Accumulated number of bytes for the selection */
+} H5D_vlen_bufsize_t;
+
+/* Raw data chunks are cached.  Each entry in the cache is: */
+typedef struct H5D_rdcc_ent_t {
+    hbool_t	locked;		/*entry is locked in cache		*/
+    hbool_t	dirty;		/*needs to be written to disk?		*/
+    hbool_t     deleted;        /*chunk about to be deleted (do not flush) */
+    hsize_t	offset[H5O_LAYOUT_NDIMS]; /*chunk name			*/
+    uint32_t	rd_count;	/*bytes remaining to be read		*/
+    uint32_t	wr_count;	/*bytes remaining to be written		*/
+    haddr_t     chunk_addr;     /*address of chunk in file		*/
+    uint8_t	*chunk;		/*the unfiltered chunk data		*/
+    unsigned	idx;		/*index in hash table			*/
+    struct H5D_rdcc_ent_t *next;/*next item in doubly-linked list	*/
+    struct H5D_rdcc_ent_t *prev;/*previous item in doubly-linked list	*/
+} H5D_rdcc_ent_t;
+typedef H5D_rdcc_ent_t *H5D_rdcc_ent_ptr_t; /* For free lists */
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+extern H5D_dxpl_cache_t H5D_def_dxpl_cache;
+
+/* Storage layout class I/O operations */
+H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_CONTIG[1];
+H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_EFL[1];
+H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_COMPACT[1];
+H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_CHUNK[1];
+
+/* Chunked layout operations */
+H5_DLLVAR const H5D_chunk_ops_t H5D_COPS_BTREE[1];
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+H5_DLL herr_t H5D__term_pub_interface(void);
+H5_DLL herr_t H5D__term_deprec_interface(void);
+H5_DLL H5D_t *H5D__create(H5F_t *file, hid_t type_id, const H5S_t *space,
+    hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id);
+H5_DLL H5D_t *H5D__create_named(const H5G_loc_t *loc, const char *name,
+    hid_t type_id, const H5S_t *space, hid_t lcpl_id, hid_t dcpl_id,
+    hid_t dapl_id, hid_t dxpl_id);
+H5_DLL herr_t H5D__get_space_status(H5D_t *dset, H5D_space_status_t *allocation,
+    hid_t dxpl_id);
+H5_DLL herr_t H5D__alloc_storage(const H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc,
+    hbool_t full_overwrite, hsize_t old_dim[]);
+H5_DLL herr_t H5D__get_storage_size(H5D_t *dset, hid_t dxpl_id, hsize_t *storage_size);
+H5_DLL haddr_t H5D__get_offset(const H5D_t *dset);
+H5_DLL herr_t H5D__iterate(void *buf, hid_t type_id, const H5S_t *space,
+    H5D_operator_t op, void *operator_data);
+H5_DLL void *H5D__vlen_get_buf_size_alloc(size_t size, void *info);
+H5_DLL herr_t H5D__vlen_get_buf_size(void *elem, hid_t type_id, unsigned ndim,
+    const hsize_t *point, void *op_data);
+H5_DLL herr_t H5D__check_filters(H5D_t *dataset);
+H5_DLL herr_t H5D__set_extent(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id);
+H5_DLL herr_t H5D__get_dxpl_cache(hid_t dxpl_id, H5D_dxpl_cache_t **cache);
+H5_DLL herr_t H5D__flush_sieve_buf(H5D_t *dataset, hid_t dxpl_id);
+H5_DLL herr_t H5D__mark(const H5D_t *dataset, hid_t dxpl_id, unsigned flags);
+H5_DLL herr_t H5D__flush_real(H5D_t *dataset, hid_t dxpl_id);
+
+/* Internal I/O routines */
+H5_DLL herr_t H5D__read(H5D_t *dataset, hid_t mem_type_id,
+    const H5S_t *mem_space, const H5S_t *file_space, hid_t dset_xfer_plist,
+    void *buf/*out*/);
+
+/* Functions that perform direct serial I/O operations */
+H5_DLL herr_t H5D__select_read(const H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
+H5_DLL herr_t H5D__select_write(const H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
+
+/* Functions that perform scatter-gather serial I/O operations */
+H5_DLL herr_t H5D__scatter_mem(const void *_tscat_buf,
+    const H5S_t *space, H5S_sel_iter_t *iter, size_t nelmts,
+    const H5D_dxpl_cache_t *dxpl_cache, void *_buf);
+H5_DLL herr_t H5D__scatgath_read(const H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
+H5_DLL herr_t H5D__scatgath_write(const H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
+
+/* Functions that operate on dataset's layout information */
+H5_DLL herr_t H5D__layout_set_io_ops(const H5D_t *dataset);
+H5_DLL size_t H5D__layout_meta_size(const H5F_t *f, const H5O_layout_t *layout,
+    hbool_t include_compact_data);
+H5_DLL herr_t H5D__layout_oh_create(H5F_t *file, hid_t dxpl_id, H5O_t *oh,
+    H5D_t *dset, hid_t dapl_id);
+H5_DLL herr_t H5D__layout_oh_read(H5D_t *dset, hid_t dxpl_id, hid_t dapl_id,
+    H5P_genplist_t *plist);
+H5_DLL herr_t H5D__layout_oh_write(H5D_t *dataset, hid_t dxpl_id, H5O_t *oh,
+    unsigned update_flags);
+
+/* Functions that operate on contiguous storage */
+H5_DLL herr_t H5D__contig_alloc(H5F_t *f, hid_t dxpl_id,
+    H5O_storage_contig_t *storage);
+H5_DLL hbool_t H5D__contig_is_space_alloc(const H5O_storage_t *storage);
+H5_DLL herr_t H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id);
+H5_DLL herr_t H5D__contig_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
+    H5D_chunk_map_t *fm);
+H5_DLL herr_t H5D__contig_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
+    H5D_chunk_map_t *fm);
+H5_DLL herr_t H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
+    H5F_t *f_dst, H5O_storage_contig_t *storage_dst, H5T_t *src_dtype,
+    H5O_copy_t *cpy_info, hid_t dxpl_id);
+H5_DLL herr_t H5D__contig_delete(H5F_t *f, hid_t dxpl_id,
+    const H5O_storage_t *store);
+
+
+/* Functions that operate on chunked dataset storage */
+H5_DLL htri_t H5D__chunk_cacheable(const H5D_io_info_t *io_info, haddr_t caddr,
+    hbool_t write_op);
+H5_DLL herr_t H5D__chunk_create(const H5D_t *dset /*in,out*/, hid_t dxpl_id);
+H5_DLL herr_t H5D__chunk_set_info(const H5D_t *dset);
+H5_DLL herr_t H5D__chunk_init(H5F_t *f, hid_t dxpl_id, const H5D_t *dset,
+    hid_t dapl_id);
+H5_DLL hbool_t H5D__chunk_is_space_alloc(const H5O_storage_t *storage);
+H5_DLL herr_t H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id,
+    const hsize_t *chunk_offset, hsize_t chunk_idx, H5D_chunk_ud_t *udata);
+H5_DLL void *H5D__chunk_lock(const H5D_io_info_t *io_info,
+    H5D_chunk_ud_t *udata, hbool_t relax);
+H5_DLL herr_t H5D__chunk_unlock(const H5D_io_info_t *io_info,
+    const H5D_chunk_ud_t *udata, hbool_t dirty, void *chunk,
+    uint32_t naccessed);
+H5_DLL herr_t H5D__chunk_allocated(H5D_t *dset, hid_t dxpl_id, hsize_t *nbytes);
+H5_DLL herr_t H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id,
+    hbool_t full_overwrite, hsize_t old_dim[]);
+H5_DLL herr_t H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id,
+    const hsize_t *old_dim);
+#ifdef H5_HAVE_PARALLEL
+H5_DLL herr_t H5D__chunk_addrmap(const H5D_io_info_t *io_info, haddr_t chunk_addr[]);
+#endif /* H5_HAVE_PARALLEL */
+H5_DLL herr_t H5D__chunk_update_cache(H5D_t *dset, hid_t dxpl_id);
+H5_DLL herr_t H5D__chunk_copy(H5F_t *f_src, H5O_storage_chunk_t *storage_src,
+    H5O_layout_chunk_t *layout_src, H5F_t *f_dst, H5O_storage_chunk_t *storage_dst,
+    const H5S_extent_t *ds_extent_src, const H5T_t *dt_src,
+    const H5O_pline_t *pline_src, H5O_copy_t *cpy_info, hid_t dxpl_id);
+H5_DLL herr_t H5D__chunk_bh_info(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout,
+    const H5O_pline_t *pline, hsize_t *btree_size);
+H5_DLL herr_t H5D__chunk_dump_index(H5D_t *dset, hid_t dxpl_id, FILE *stream);
+H5_DLL herr_t H5D__chunk_dest(H5F_t *f, hid_t dxpl_id, H5D_t *dset);
+H5_DLL herr_t H5D__chunk_delete(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    H5O_storage_t *store);
+H5_DLL herr_t H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters, 
+         hsize_t *offset, uint32_t data_size, const void *buf);
+#ifdef H5D_CHUNK_DEBUG
+H5_DLL herr_t H5D__chunk_stats(const H5D_t *dset, hbool_t headers);
+#endif /* H5D_CHUNK_DEBUG */
+
+/* Functions that operate on compact dataset storage */
+H5_DLL herr_t H5D__compact_fill(const H5D_t *dset, hid_t dxpl_id);
+H5_DLL herr_t H5D__compact_copy(H5F_t *f_src, H5O_storage_compact_t *storage_src,
+    H5F_t *f_dst, H5O_storage_compact_t *storage_dst, H5T_t *src_dtype,
+    H5O_copy_t *cpy_info, hid_t dxpl_id);
+
+/* Functions that operate on EFL (External File List)*/
+H5_DLL hbool_t H5D__efl_is_space_alloc(const H5O_storage_t *storage);
+H5_DLL herr_t H5D__efl_bh_info(H5F_t *f, hid_t dxpl_id, H5O_efl_t *efl,
+    hsize_t *heap_size);
+
+/* Functions that perform fill value operations on datasets */
+H5_DLL herr_t H5D__fill(const void *fill, const H5T_t *fill_type, void *buf,
+    const H5T_t *buf_type, const H5S_t *space, hid_t dxpl_id);
+H5_DLL herr_t H5D__fill_init(H5D_fill_buf_info_t *fb_info, void *caller_fill_buf,
+    H5MM_allocate_t alloc_func, void *alloc_info,
+    H5MM_free_t free_func, void *free_info,
+    const H5O_fill_t *fill, const H5T_t *dset_type, hid_t dset_type_id,
+    size_t nelmts, size_t min_buf_size, hid_t dxpl_id);
+H5_DLL herr_t H5D__fill_refill_vl(H5D_fill_buf_info_t *fb_info, size_t nelmts,
+    hid_t dxpl_id);
+H5_DLL herr_t H5D__fill_term(H5D_fill_buf_info_t *fb_info);
+
+#ifdef H5_HAVE_PARALLEL
+
+#ifdef H5S_DEBUG
+#ifndef H5Dmpio_DEBUG
+#define H5Dmpio_DEBUG
+#endif /*H5Dmpio_DEBUG*/
+#endif/*H5S_DEBUG*/
+/* MPI-IO function to read, it will select either regular or irregular read */
+H5_DLL herr_t H5D__mpio_select_read(const H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
+
+/* MPI-IO function to write, it will select either regular or irregular read */
+H5_DLL herr_t H5D__mpio_select_write(const H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info,
+    hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
+
+/* MPI-IO functions to handle contiguous collective IO */
+H5_DLL herr_t H5D__contig_collective_read(H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
+    const H5S_t *mem_space, H5D_chunk_map_t *fm);
+H5_DLL herr_t H5D__contig_collective_write(H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
+    const H5S_t *mem_space, H5D_chunk_map_t *fm);
+
+/* MPI-IO functions to handle chunked collective IO */
+H5_DLL herr_t H5D__chunk_collective_read(H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
+    const H5S_t *mem_space, H5D_chunk_map_t *fm);
+H5_DLL herr_t H5D__chunk_collective_write(H5D_io_info_t *io_info,
+    const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
+    const H5S_t *mem_space, H5D_chunk_map_t *fm);
+
+/* MPI-IO function to check if a direct I/O transfer is possible between
+ * memory and the file */
+H5_DLL htri_t H5D__mpio_opt_possible(const H5D_io_info_t *io_info,
+    const H5S_t *file_space, const H5S_t *mem_space,
+    const H5D_type_info_t *type_info, const H5D_chunk_map_t *fm,
+    H5P_genplist_t *dx_plist);
+
+#endif /* H5_HAVE_PARALLEL */
+
+/* Testing functions */
+#ifdef H5D_TESTING
+H5_DLL herr_t H5D__layout_version_test(hid_t did, unsigned *version);
+H5_DLL herr_t H5D__layout_contig_size_test(hid_t did, hsize_t *size);
+H5_DLL herr_t H5D__current_cache_size_test(hid_t did, size_t *nbytes_used, int *nused);
+#endif /* H5D_TESTING */
+
+#endif /*_H5Dpkg_H*/
+
diff --git a/Resources/windows-libs/HDF5/include/H5Dpublic.h b/Resources/windows-libs/HDF5/include/H5Dpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..4309d6409c38800eeb64b92f39eb969d6ee61e6e
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Dpublic.h
@@ -0,0 +1,173 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5D module.
+ */
+#ifndef _H5Dpublic_H
+#define _H5Dpublic_H
+
+/* System headers needed by this file */
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/* Macros used to "unset" chunk cache configuration parameters */
+#define H5D_CHUNK_CACHE_NSLOTS_DEFAULT     ((size_t) -1)
+#define H5D_CHUNK_CACHE_NBYTES_DEFAULT      ((size_t) -1)
+#define H5D_CHUNK_CACHE_W0_DEFAULT          -1.
+
+/* Property names for H5LTDdirect_chunk_write */   
+#define H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME	        "direct_chunk_flag"
+#define H5D_XFER_DIRECT_CHUNK_WRITE_FILTERS_NAME	"direct_chunk_filters"
+#define H5D_XFER_DIRECT_CHUNK_WRITE_OFFSET_NAME		"direct_chunk_offset"
+#define H5D_XFER_DIRECT_CHUNK_WRITE_DATASIZE_NAME	"direct_chunk_datasize"
+ 
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Values for the H5D_LAYOUT property */
+typedef enum H5D_layout_t {
+    H5D_LAYOUT_ERROR	= -1,
+
+    H5D_COMPACT		= 0,	/*raw data is very small		     */
+    H5D_CONTIGUOUS	= 1,	/*the default				     */
+    H5D_CHUNKED		= 2,	/*slow and fancy			     */
+    H5D_NLAYOUTS	= 3	/*this one must be last!		     */
+} H5D_layout_t;
+
+/* Types of chunk index data structures */
+typedef enum H5D_chunk_index_t {
+    H5D_CHUNK_BTREE	= 0	/* v1 B-tree index			     */
+} H5D_chunk_index_t;
+
+/* Values for the space allocation time property */
+typedef enum H5D_alloc_time_t {
+    H5D_ALLOC_TIME_ERROR	= -1,
+    H5D_ALLOC_TIME_DEFAULT  	= 0,
+    H5D_ALLOC_TIME_EARLY	= 1,
+    H5D_ALLOC_TIME_LATE		= 2,
+    H5D_ALLOC_TIME_INCR		= 3
+} H5D_alloc_time_t;
+
+/* Values for the status of space allocation */
+typedef enum H5D_space_status_t {
+    H5D_SPACE_STATUS_ERROR		= -1,
+    H5D_SPACE_STATUS_NOT_ALLOCATED	= 0,
+    H5D_SPACE_STATUS_PART_ALLOCATED	= 1,
+    H5D_SPACE_STATUS_ALLOCATED		= 2
+} H5D_space_status_t;
+
+/* Values for time of writing fill value property */
+typedef enum H5D_fill_time_t {
+    H5D_FILL_TIME_ERROR	= -1,
+    H5D_FILL_TIME_ALLOC = 0,
+    H5D_FILL_TIME_NEVER	= 1,
+    H5D_FILL_TIME_IFSET	= 2
+} H5D_fill_time_t;
+
+/* Values for fill value status */
+typedef enum H5D_fill_value_t {
+    H5D_FILL_VALUE_ERROR        =-1,
+    H5D_FILL_VALUE_UNDEFINED    =0,
+    H5D_FILL_VALUE_DEFAULT      =1,
+    H5D_FILL_VALUE_USER_DEFINED =2
+} H5D_fill_value_t;
+
+/********************/
+/* Public Variables */
+/********************/
+
+/*********************/
+/* Public Prototypes */
+/*********************/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Define the operator function pointer for H5Diterate() */
+typedef herr_t (*H5D_operator_t)(void *elem, hid_t type_id, unsigned ndim,
+				 const hsize_t *point, void *operator_data);
+
+/* Define the operator function pointer for H5Dscatter() */
+typedef herr_t (*H5D_scatter_func_t)(const void **src_buf/*out*/,
+                                     size_t *src_buf_bytes_used/*out*/,
+                                     void *op_data);
+
+/* Define the operator function pointer for H5Dgather() */
+typedef herr_t (*H5D_gather_func_t)(const void *dst_buf,
+                                    size_t dst_buf_bytes_used, void *op_data);
+
+H5_DLL hid_t H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id,
+    hid_t space_id, hid_t lcpl_id, hid_t dcpl_id, hid_t dapl_id);
+H5_DLL hid_t H5Dcreate_anon(hid_t file_id, hid_t type_id, hid_t space_id,
+    hid_t plist_id, hid_t dapl_id);
+H5_DLL hid_t H5Dopen2(hid_t file_id, const char *name, hid_t dapl_id);
+H5_DLL herr_t H5Dclose(hid_t dset_id);
+H5_DLL hid_t H5Dget_space(hid_t dset_id);
+H5_DLL herr_t H5Dget_space_status(hid_t dset_id, H5D_space_status_t *allocation);
+H5_DLL hid_t H5Dget_type(hid_t dset_id);
+H5_DLL hid_t H5Dget_create_plist(hid_t dset_id);
+H5_DLL hid_t H5Dget_access_plist(hid_t dset_id);
+H5_DLL hsize_t H5Dget_storage_size(hid_t dset_id);
+H5_DLL haddr_t H5Dget_offset(hid_t dset_id);
+H5_DLL herr_t H5Dread(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
+			hid_t file_space_id, hid_t plist_id, void *buf/*out*/);
+H5_DLL herr_t H5Dwrite(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
+			 hid_t file_space_id, hid_t plist_id, const void *buf);
+H5_DLL herr_t H5Diterate(void *buf, hid_t type_id, hid_t space_id,
+            H5D_operator_t op, void *operator_data);
+H5_DLL herr_t H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf);
+H5_DLL herr_t H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id, hsize_t *size);
+H5_DLL herr_t H5Dfill(const void *fill, hid_t fill_type, void *buf,
+        hid_t buf_type, hid_t space);
+H5_DLL herr_t H5Dset_extent(hid_t dset_id, const hsize_t size[]);
+H5_DLL herr_t H5Dscatter(H5D_scatter_func_t op, void *op_data, hid_t type_id,
+    hid_t dst_space_id, void *dst_buf);
+H5_DLL herr_t H5Dgather(hid_t src_space_id, const void *src_buf, hid_t type_id,
+    size_t dst_buf_size, void *dst_buf, H5D_gather_func_t op, void *op_data);
+H5_DLL herr_t H5Ddebug(hid_t dset_id);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+
+/* Typedefs */
+
+
+/* Function prototypes */
+H5_DLL hid_t H5Dcreate1(hid_t file_id, const char *name, hid_t type_id,
+    hid_t space_id, hid_t dcpl_id);
+H5_DLL hid_t H5Dopen1(hid_t file_id, const char *name);
+H5_DLL herr_t H5Dextend(hid_t dset_id, const hsize_t size[]);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Dpublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5DxferProp.h b/Resources/windows-libs/HDF5/include/H5DxferProp.h
new file mode 100644
index 0000000000000000000000000000000000000000..835dfdbe73bbf97ec5c40f1709b6f12fdad25d3c
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5DxferProp.h
@@ -0,0 +1,123 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class DSetMemXferPropList represents the HDF5 dataset transfer property list
+// and inherits from PropList.
+
+#ifndef __H5DSetMemXferPropList_H
+#define __H5DSetMemXferPropList_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class DSetMemXferPropList
+    \brief Class DSetMemXferPropList represents the dataset memory and
+    transfer property list.
+*/
+class H5_DLLCPP DSetMemXferPropList : public PropList {
+   public:
+	static const DSetMemXferPropList DEFAULT;
+
+	// Creates a dataset memory and transfer property list.
+	DSetMemXferPropList();
+
+	// Creates a dataset transform property list.
+	DSetMemXferPropList(const char* expression);
+
+	// Sets type conversion and background buffers.
+	void setBuffer( size_t size, void* tconv, void* bkg ) const;
+
+	// Reads buffer settings.
+	size_t getBuffer( void** tconv, void** bkg ) const;
+
+	// Sets B-tree split ratios for a dataset transfer property list.
+	void setBtreeRatios( double left, double middle, double right ) const;
+
+	// Gets B-tree split ratios for a dataset transfer property list.
+	void getBtreeRatios( double& left, double& middle, double& right ) const;
+
+	// Sets data transform expression.
+	void setDataTransform(const char* expression) const;
+	void setDataTransform(const H5std_string& expression) const;
+
+	// Gets data transform expression.
+	ssize_t getDataTransform(char* exp, size_t buf_size=0) const;
+	H5std_string getDataTransform() const;
+
+	// Sets the dataset transfer property list status to TRUE or FALSE.
+	void setPreserve( bool status ) const;
+
+	// Checks status of the dataset transfer property list.
+	bool getPreserve() const;
+
+	// Sets an exception handling callback for datatype conversion.
+	void setTypeConvCB( H5T_conv_except_func_t op, void *user_data) const;
+
+	// Gets the exception handling callback for datatype conversion.
+	void getTypeConvCB( H5T_conv_except_func_t *op, void **user_data) const;
+
+	// Sets the memory manager for variable-length datatype
+	// allocation in H5Dread and H5Dvlen_reclaim.
+	void setVlenMemManager( H5MM_allocate_t alloc, void* alloc_info,
+				H5MM_free_t free, void* free_info ) const;
+
+	// alloc and free are set to NULL, indicating that system
+	// malloc and free are to be used.
+	void setVlenMemManager() const;
+
+	// Gets the memory manager for variable-length datatype
+	// allocation in H5Dread and H5Tvlen_reclaim.
+	void getVlenMemManager( H5MM_allocate_t& alloc, void** alloc_info,
+				H5MM_free_t& free, void** free_info ) const;
+
+	// Sets the size of a contiguous block reserved for small data.
+	void setSmallDataBlockSize(hsize_t size);
+
+	// Returns the current small data block size setting.
+	hsize_t getSmallDataBlockSize();
+
+	// Sets number of I/O vectors to be read/written in hyperslab I/O.
+	void setHyperVectorSize(size_t vector_size);
+
+	// Returns the number of I/O vectors to be read/written in
+	// hyperslab I/O.
+	size_t getHyperVectorSize();
+
+	// Enables or disables error-detecting for a dataset reading
+	// process.
+	void setEDCCheck(H5Z_EDC_t check);
+
+	// Determines whether error-detection is enabled for dataset reads.
+	H5Z_EDC_t getEDCCheck();
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("DSetMemXferPropList"); }
+
+	// Copy constructor: makes a copy of a DSetMemXferPropList object.
+	DSetMemXferPropList(const DSetMemXferPropList& orig);
+
+	// Creates a copy of an existing dataset memory and transfer
+	// property list using the property list id.
+	DSetMemXferPropList(const hid_t plist_id);
+
+	// Noop destructor
+	virtual ~DSetMemXferPropList();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5DSetMemXferPropList_H
diff --git a/Resources/windows-libs/HDF5/include/H5Edefin.h b/Resources/windows-libs/HDF5/include/H5Edefin.h
new file mode 100644
index 0000000000000000000000000000000000000000..8bc52dd09908577255b094f09a186ecb55abe1eb
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Edefin.h
@@ -0,0 +1,216 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Generated automatically by bin/make_err -- do not edit */
+/* Add new errors to H5err.txt file */
+
+
+#ifndef _H5Edefin_H
+#define _H5Edefin_H
+
+/* Major error IDs */
+hid_t H5E_DATASET_g        = FAIL;      /* Dataset */
+hid_t H5E_FUNC_g           = FAIL;      /* Function entry/exit */
+hid_t H5E_STORAGE_g        = FAIL;      /* Data storage */
+hid_t H5E_FILE_g           = FAIL;      /* File accessibilty */
+hid_t H5E_SOHM_g           = FAIL;      /* Shared Object Header Messages */
+hid_t H5E_SYM_g            = FAIL;      /* Symbol table */
+hid_t H5E_PLUGIN_g         = FAIL;      /* Plugin for dynamically loaded library */
+hid_t H5E_VFL_g            = FAIL;      /* Virtual File Layer */
+hid_t H5E_INTERNAL_g       = FAIL;      /* Internal error (too specific to document in detail) */
+hid_t H5E_BTREE_g          = FAIL;      /* B-Tree node */
+hid_t H5E_REFERENCE_g      = FAIL;      /* References */
+hid_t H5E_DATASPACE_g      = FAIL;      /* Dataspace */
+hid_t H5E_RESOURCE_g       = FAIL;      /* Resource unavailable */
+hid_t H5E_PLIST_g          = FAIL;      /* Property lists */
+hid_t H5E_LINK_g           = FAIL;      /* Links */
+hid_t H5E_DATATYPE_g       = FAIL;      /* Datatype */
+hid_t H5E_RS_g             = FAIL;      /* Reference Counted Strings */
+hid_t H5E_HEAP_g           = FAIL;      /* Heap */
+hid_t H5E_OHDR_g           = FAIL;      /* Object header */
+hid_t H5E_ATOM_g           = FAIL;      /* Object atom */
+hid_t H5E_ATTR_g           = FAIL;      /* Attribute */
+hid_t H5E_NONE_MAJOR_g     = FAIL;      /* No error */
+hid_t H5E_IO_g             = FAIL;      /* Low-level I/O */
+hid_t H5E_SLIST_g          = FAIL;      /* Skip Lists */
+hid_t H5E_EFL_g            = FAIL;      /* External file list */
+hid_t H5E_TST_g            = FAIL;      /* Ternary Search Trees */
+hid_t H5E_ARGS_g           = FAIL;      /* Invalid arguments to routine */
+hid_t H5E_ERROR_g          = FAIL;      /* Error API */
+hid_t H5E_PLINE_g          = FAIL;      /* Data filters */
+hid_t H5E_FSPACE_g         = FAIL;      /* Free Space Manager */
+hid_t H5E_CACHE_g          = FAIL;      /* Object cache */
+
+/* Minor error IDs */
+
+/* Generic low-level file I/O errors */
+hid_t H5E_SEEKERROR_g      = FAIL;      /* Seek failed */
+hid_t H5E_READERROR_g      = FAIL;      /* Read failed */
+hid_t H5E_WRITEERROR_g     = FAIL;      /* Write failed */
+hid_t H5E_CLOSEERROR_g     = FAIL;      /* Close failed */
+hid_t H5E_OVERFLOW_g       = FAIL;      /* Address overflowed */
+hid_t H5E_FCNTL_g          = FAIL;      /* File control (fcntl) failed */
+
+/* Resource errors */
+hid_t H5E_NOSPACE_g        = FAIL;      /* No space available for allocation */
+hid_t H5E_CANTALLOC_g      = FAIL;      /* Can't allocate space */
+hid_t H5E_CANTCOPY_g       = FAIL;      /* Unable to copy object */
+hid_t H5E_CANTFREE_g       = FAIL;      /* Unable to free object */
+hid_t H5E_ALREADYEXISTS_g  = FAIL;      /* Object already exists */
+hid_t H5E_CANTLOCK_g       = FAIL;      /* Unable to lock object */
+hid_t H5E_CANTUNLOCK_g     = FAIL;      /* Unable to unlock object */
+hid_t H5E_CANTGC_g         = FAIL;      /* Unable to garbage collect */
+hid_t H5E_CANTGETSIZE_g    = FAIL;      /* Unable to compute size */
+hid_t H5E_OBJOPEN_g        = FAIL;      /* Object is already open */
+
+/* Heap errors */
+hid_t H5E_CANTRESTORE_g    = FAIL;      /* Can't restore condition */
+hid_t H5E_CANTCOMPUTE_g    = FAIL;      /* Can't compute value */
+hid_t H5E_CANTEXTEND_g     = FAIL;      /* Can't extend heap's space */
+hid_t H5E_CANTATTACH_g     = FAIL;      /* Can't attach object */
+hid_t H5E_CANTUPDATE_g     = FAIL;      /* Can't update object */
+hid_t H5E_CANTOPERATE_g    = FAIL;      /* Can't operate on object */
+
+/* Function entry/exit interface errors */
+hid_t H5E_CANTINIT_g       = FAIL;      /* Unable to initialize object */
+hid_t H5E_ALREADYINIT_g    = FAIL;      /* Object already initialized */
+hid_t H5E_CANTRELEASE_g    = FAIL;      /* Unable to release object */
+
+/* Property list errors */
+hid_t H5E_CANTGET_g        = FAIL;      /* Can't get value */
+hid_t H5E_CANTSET_g        = FAIL;      /* Can't set value */
+hid_t H5E_DUPCLASS_g       = FAIL;      /* Duplicate class name in parent class */
+hid_t H5E_SETDISALLOWED_g  = FAIL;      /* Disallowed operation */
+
+/* Free space errors */
+hid_t H5E_CANTMERGE_g      = FAIL;      /* Can't merge objects */
+hid_t H5E_CANTREVIVE_g     = FAIL;      /* Can't revive object */
+hid_t H5E_CANTSHRINK_g     = FAIL;      /* Can't shrink container */
+
+/* Object header related errors */
+hid_t H5E_LINKCOUNT_g      = FAIL;      /* Bad object header link count */
+hid_t H5E_VERSION_g        = FAIL;      /* Wrong version number */
+hid_t H5E_ALIGNMENT_g      = FAIL;      /* Alignment error */
+hid_t H5E_BADMESG_g        = FAIL;      /* Unrecognized message */
+hid_t H5E_CANTDELETE_g     = FAIL;      /* Can't delete message */
+hid_t H5E_BADITER_g        = FAIL;      /* Iteration failed */
+hid_t H5E_CANTPACK_g       = FAIL;      /* Can't pack messages */
+hid_t H5E_CANTRESET_g      = FAIL;      /* Can't reset object */
+hid_t H5E_CANTRENAME_g     = FAIL;      /* Unable to rename object */
+
+/* System level errors */
+hid_t H5E_SYSERRSTR_g      = FAIL;      /* System error message */
+
+/* I/O pipeline errors */
+hid_t H5E_NOFILTER_g       = FAIL;      /* Requested filter is not available */
+hid_t H5E_CALLBACK_g       = FAIL;      /* Callback failed */
+hid_t H5E_CANAPPLY_g       = FAIL;      /* Error from filter 'can apply' callback */
+hid_t H5E_SETLOCAL_g       = FAIL;      /* Error from filter 'set local' callback */
+hid_t H5E_NOENCODER_g      = FAIL;      /* Filter present but encoding disabled */
+hid_t H5E_CANTFILTER_g     = FAIL;      /* Filter operation failed */
+
+/* Group related errors */
+hid_t H5E_CANTOPENOBJ_g    = FAIL;      /* Can't open object */
+hid_t H5E_CANTCLOSEOBJ_g   = FAIL;      /* Can't close object */
+hid_t H5E_COMPLEN_g        = FAIL;      /* Name component is too long */
+hid_t H5E_PATH_g           = FAIL;      /* Problem with path to object */
+
+/* No error */
+hid_t H5E_NONE_MINOR_g     = FAIL;      /* No error */
+
+/* Plugin errors */
+hid_t H5E_OPENERROR_g      = FAIL;      /* Can't open directory or file */
+
+/* File accessibilty errors */
+hid_t H5E_FILEEXISTS_g     = FAIL;      /* File already exists */
+hid_t H5E_FILEOPEN_g       = FAIL;      /* File already open */
+hid_t H5E_CANTCREATE_g     = FAIL;      /* Unable to create file */
+hid_t H5E_CANTOPENFILE_g   = FAIL;      /* Unable to open file */
+hid_t H5E_CANTCLOSEFILE_g  = FAIL;      /* Unable to close file */
+hid_t H5E_NOTHDF5_g        = FAIL;      /* Not an HDF5 file */
+hid_t H5E_BADFILE_g        = FAIL;      /* Bad file ID accessed */
+hid_t H5E_TRUNCATED_g      = FAIL;      /* File has been truncated */
+hid_t H5E_MOUNT_g          = FAIL;      /* File mount error */
+
+/* Object atom related errors */
+hid_t H5E_BADATOM_g        = FAIL;      /* Unable to find atom information (already closed?) */
+hid_t H5E_BADGROUP_g       = FAIL;      /* Unable to find ID group information */
+hid_t H5E_CANTREGISTER_g   = FAIL;      /* Unable to register new atom */
+hid_t H5E_CANTINC_g        = FAIL;      /* Unable to increment reference count */
+hid_t H5E_CANTDEC_g        = FAIL;      /* Unable to decrement reference count */
+hid_t H5E_NOIDS_g          = FAIL;      /* Out of IDs for group */
+
+/* Cache related errors */
+hid_t H5E_CANTFLUSH_g      = FAIL;      /* Unable to flush data from cache */
+hid_t H5E_CANTSERIALIZE_g  = FAIL;      /* Unable to serialize data from cache */
+hid_t H5E_CANTLOAD_g       = FAIL;      /* Unable to load metadata into cache */
+hid_t H5E_PROTECT_g        = FAIL;      /* Protected metadata error */
+hid_t H5E_NOTCACHED_g      = FAIL;      /* Metadata not currently cached */
+hid_t H5E_SYSTEM_g         = FAIL;      /* Internal error detected */
+hid_t H5E_CANTINS_g        = FAIL;      /* Unable to insert metadata into cache */
+hid_t H5E_CANTPROTECT_g    = FAIL;      /* Unable to protect metadata */
+hid_t H5E_CANTUNPROTECT_g  = FAIL;      /* Unable to unprotect metadata */
+hid_t H5E_CANTPIN_g        = FAIL;      /* Unable to pin cache entry */
+hid_t H5E_CANTUNPIN_g      = FAIL;      /* Unable to un-pin cache entry */
+hid_t H5E_CANTMARKDIRTY_g  = FAIL;      /* Unable to mark a pinned entry as dirty */
+hid_t H5E_CANTDIRTY_g      = FAIL;      /* Unable to mark metadata as dirty */
+hid_t H5E_CANTEXPUNGE_g    = FAIL;      /* Unable to expunge a metadata cache entry */
+hid_t H5E_CANTRESIZE_g     = FAIL;      /* Unable to resize a metadata cache entry */
+
+/* Link related errors */
+hid_t H5E_TRAVERSE_g       = FAIL;      /* Link traversal failure */
+hid_t H5E_NLINKS_g         = FAIL;      /* Too many soft links in path */
+hid_t H5E_NOTREGISTERED_g  = FAIL;      /* Link class not registered */
+hid_t H5E_CANTMOVE_g       = FAIL;      /* Can't move object */
+hid_t H5E_CANTSORT_g       = FAIL;      /* Can't sort objects */
+
+/* Parallel MPI errors */
+hid_t H5E_MPI_g            = FAIL;      /* Some MPI function failed */
+hid_t H5E_MPIERRSTR_g      = FAIL;      /* MPI Error String */
+hid_t H5E_CANTRECV_g       = FAIL;      /* Can't receive data */
+
+/* Dataspace errors */
+hid_t H5E_CANTCLIP_g       = FAIL;      /* Can't clip hyperslab region */
+hid_t H5E_CANTCOUNT_g      = FAIL;      /* Can't count elements */
+hid_t H5E_CANTSELECT_g     = FAIL;      /* Can't select hyperslab */
+hid_t H5E_CANTNEXT_g       = FAIL;      /* Can't move to next iterator location */
+hid_t H5E_BADSELECT_g      = FAIL;      /* Invalid selection */
+hid_t H5E_CANTCOMPARE_g    = FAIL;      /* Can't compare objects */
+
+/* Argument errors */
+hid_t H5E_UNINITIALIZED_g  = FAIL;      /* Information is uinitialized */
+hid_t H5E_UNSUPPORTED_g    = FAIL;      /* Feature is unsupported */
+hid_t H5E_BADTYPE_g        = FAIL;      /* Inappropriate type */
+hid_t H5E_BADRANGE_g       = FAIL;      /* Out of range */
+hid_t H5E_BADVALUE_g       = FAIL;      /* Bad value */
+
+/* B-tree related errors */
+hid_t H5E_NOTFOUND_g       = FAIL;      /* Object not found */
+hid_t H5E_EXISTS_g         = FAIL;      /* Object already exists */
+hid_t H5E_CANTENCODE_g     = FAIL;      /* Unable to encode value */
+hid_t H5E_CANTDECODE_g     = FAIL;      /* Unable to decode value */
+hid_t H5E_CANTSPLIT_g      = FAIL;      /* Unable to split node */
+hid_t H5E_CANTREDISTRIBUTE_g = FAIL;      /* Unable to redistribute records */
+hid_t H5E_CANTSWAP_g       = FAIL;      /* Unable to swap records */
+hid_t H5E_CANTINSERT_g     = FAIL;      /* Unable to insert object */
+hid_t H5E_CANTLIST_g       = FAIL;      /* Unable to list node */
+hid_t H5E_CANTMODIFY_g     = FAIL;      /* Unable to modify record */
+hid_t H5E_CANTREMOVE_g     = FAIL;      /* Unable to remove object */
+
+/* Datatype conversion errors */
+hid_t H5E_CANTCONVERT_g    = FAIL;      /* Can't convert datatypes */
+hid_t H5E_BADSIZE_g        = FAIL;      /* Bad size for object */
+
+#endif /* H5Edefin_H */
diff --git a/Resources/windows-libs/HDF5/include/H5Einit.h b/Resources/windows-libs/HDF5/include/H5Einit.h
new file mode 100644
index 0000000000000000000000000000000000000000..9dadd4186c4ac97ee14a77d20655bdb3de21d458
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Einit.h
@@ -0,0 +1,810 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Generated automatically by bin/make_err -- do not edit */
+/* Add new errors to H5err.txt file */
+
+
+#ifndef _H5Einit_H
+#define _H5Einit_H
+
+/*********************/
+/* Major error codes */
+/*********************/
+
+assert(H5E_DATASET_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Dataset"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_DATASET_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_FUNC_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Function entry/exit"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_FUNC_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_STORAGE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Data storage"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_STORAGE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_FILE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "File accessibilty"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_FILE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_SOHM_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Shared Object Header Messages"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_SOHM_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_SYM_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Symbol table"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_SYM_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_PLUGIN_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Plugin for dynamically loaded library"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_PLUGIN_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_VFL_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Virtual File Layer"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_VFL_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_INTERNAL_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Internal error (too specific to document in detail)"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_INTERNAL_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_BTREE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "B-Tree node"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BTREE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_REFERENCE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "References"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_REFERENCE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_DATASPACE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Dataspace"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_DATASPACE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_RESOURCE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Resource unavailable"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_RESOURCE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_PLIST_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Property lists"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_PLIST_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_LINK_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Links"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_LINK_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_DATATYPE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Datatype"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_DATATYPE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_RS_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Reference Counted Strings"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_RS_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_HEAP_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Heap"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_HEAP_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_OHDR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Object header"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_OHDR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_ATOM_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Object atom"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_ATOM_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_ATTR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Attribute"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_ATTR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_NONE_MAJOR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "No error"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NONE_MAJOR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_IO_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Low-level I/O"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_IO_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_SLIST_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Skip Lists"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_SLIST_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_EFL_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "External file list"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_EFL_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_TST_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Ternary Search Trees"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_TST_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_ARGS_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Invalid arguments to routine"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_ARGS_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_ERROR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Error API"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_ERROR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_PLINE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Data filters"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_PLINE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_FSPACE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Free Space Manager"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_FSPACE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CACHE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MAJOR, "Object cache"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CACHE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/*********************/
+/* Minor error codes */
+/*********************/
+
+
+/* Generic low-level file I/O errors */
+assert(H5E_SEEKERROR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Seek failed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_SEEKERROR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_READERROR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Read failed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_READERROR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_WRITEERROR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Write failed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_WRITEERROR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CLOSEERROR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Close failed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CLOSEERROR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_OVERFLOW_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Address overflowed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_OVERFLOW_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_FCNTL_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "File control (fcntl) failed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_FCNTL_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Resource errors */
+assert(H5E_NOSPACE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "No space available for allocation"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NOSPACE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTALLOC_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't allocate space"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTALLOC_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTCOPY_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to copy object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTCOPY_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTFREE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to free object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTFREE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_ALREADYEXISTS_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Object already exists"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_ALREADYEXISTS_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTLOCK_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to lock object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTLOCK_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTUNLOCK_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to unlock object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTUNLOCK_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTGC_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to garbage collect"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTGC_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTGETSIZE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to compute size"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTGETSIZE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_OBJOPEN_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Object is already open"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_OBJOPEN_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Heap errors */
+assert(H5E_CANTRESTORE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't restore condition"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTRESTORE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTCOMPUTE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't compute value"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTCOMPUTE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTEXTEND_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't extend heap's space"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTEXTEND_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTATTACH_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't attach object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTATTACH_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTUPDATE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't update object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTUPDATE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTOPERATE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't operate on object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTOPERATE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Function entry/exit interface errors */
+assert(H5E_CANTINIT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to initialize object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTINIT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_ALREADYINIT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Object already initialized"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_ALREADYINIT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTRELEASE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to release object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTRELEASE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Property list errors */
+assert(H5E_CANTGET_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't get value"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTGET_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTSET_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't set value"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTSET_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_DUPCLASS_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Duplicate class name in parent class"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_DUPCLASS_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_SETDISALLOWED_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Disallowed operation"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_SETDISALLOWED_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Free space errors */
+assert(H5E_CANTMERGE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't merge objects"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTMERGE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTREVIVE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't revive object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTREVIVE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTSHRINK_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't shrink container"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTSHRINK_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Object header related errors */
+assert(H5E_LINKCOUNT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Bad object header link count"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_LINKCOUNT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_VERSION_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Wrong version number"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_VERSION_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_ALIGNMENT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Alignment error"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_ALIGNMENT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_BADMESG_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unrecognized message"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BADMESG_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTDELETE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't delete message"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTDELETE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_BADITER_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Iteration failed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BADITER_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTPACK_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't pack messages"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTPACK_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTRESET_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't reset object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTRESET_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTRENAME_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to rename object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTRENAME_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* System level errors */
+assert(H5E_SYSERRSTR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "System error message"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_SYSERRSTR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* I/O pipeline errors */
+assert(H5E_NOFILTER_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Requested filter is not available"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NOFILTER_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CALLBACK_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Callback failed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CALLBACK_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANAPPLY_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Error from filter 'can apply' callback"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANAPPLY_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_SETLOCAL_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Error from filter 'set local' callback"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_SETLOCAL_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_NOENCODER_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Filter present but encoding disabled"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NOENCODER_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTFILTER_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Filter operation failed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTFILTER_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Group related errors */
+assert(H5E_CANTOPENOBJ_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't open object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTOPENOBJ_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTCLOSEOBJ_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't close object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTCLOSEOBJ_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_COMPLEN_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Name component is too long"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_COMPLEN_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_PATH_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Problem with path to object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_PATH_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* No error */
+assert(H5E_NONE_MINOR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "No error"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NONE_MINOR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Plugin errors */
+assert(H5E_OPENERROR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't open directory or file"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_OPENERROR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* File accessibilty errors */
+assert(H5E_FILEEXISTS_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "File already exists"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_FILEEXISTS_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_FILEOPEN_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "File already open"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_FILEOPEN_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTCREATE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to create file"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTCREATE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTOPENFILE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to open file"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTOPENFILE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTCLOSEFILE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to close file"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTCLOSEFILE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_NOTHDF5_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Not an HDF5 file"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NOTHDF5_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_BADFILE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Bad file ID accessed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BADFILE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_TRUNCATED_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "File has been truncated"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_TRUNCATED_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_MOUNT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "File mount error"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_MOUNT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Object atom related errors */
+assert(H5E_BADATOM_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to find atom information (already closed?)"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BADATOM_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_BADGROUP_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to find ID group information"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BADGROUP_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTREGISTER_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to register new atom"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTREGISTER_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTINC_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to increment reference count"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTINC_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTDEC_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to decrement reference count"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTDEC_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_NOIDS_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Out of IDs for group"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NOIDS_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Cache related errors */
+assert(H5E_CANTFLUSH_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to flush data from cache"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTFLUSH_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTSERIALIZE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to serialize data from cache"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTSERIALIZE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTLOAD_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to load metadata into cache"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTLOAD_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_PROTECT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Protected metadata error"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_PROTECT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_NOTCACHED_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Metadata not currently cached"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NOTCACHED_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_SYSTEM_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Internal error detected"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_SYSTEM_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTINS_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to insert metadata into cache"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTINS_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTPROTECT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to protect metadata"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTPROTECT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTUNPROTECT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to unprotect metadata"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTUNPROTECT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTPIN_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to pin cache entry"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTPIN_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTUNPIN_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to un-pin cache entry"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTUNPIN_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTMARKDIRTY_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to mark a pinned entry as dirty"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTMARKDIRTY_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTDIRTY_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to mark metadata as dirty"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTDIRTY_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTEXPUNGE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to expunge a metadata cache entry"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTEXPUNGE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTRESIZE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to resize a metadata cache entry"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTRESIZE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Link related errors */
+assert(H5E_TRAVERSE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Link traversal failure"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_TRAVERSE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_NLINKS_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Too many soft links in path"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NLINKS_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_NOTREGISTERED_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Link class not registered"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NOTREGISTERED_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTMOVE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't move object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTMOVE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTSORT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't sort objects"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTSORT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Parallel MPI errors */
+assert(H5E_MPI_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Some MPI function failed"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_MPI_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_MPIERRSTR_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "MPI Error String"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_MPIERRSTR_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTRECV_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't receive data"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTRECV_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Dataspace errors */
+assert(H5E_CANTCLIP_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't clip hyperslab region"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTCLIP_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTCOUNT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't count elements"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTCOUNT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTSELECT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't select hyperslab"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTSELECT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTNEXT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't move to next iterator location"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTNEXT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_BADSELECT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Invalid selection"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BADSELECT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTCOMPARE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't compare objects"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTCOMPARE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Argument errors */
+assert(H5E_UNINITIALIZED_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Information is uinitialized"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_UNINITIALIZED_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_UNSUPPORTED_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Feature is unsupported"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_UNSUPPORTED_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_BADTYPE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Inappropriate type"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BADTYPE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_BADRANGE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Out of range"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BADRANGE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_BADVALUE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Bad value"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BADVALUE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* B-tree related errors */
+assert(H5E_NOTFOUND_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Object not found"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_NOTFOUND_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_EXISTS_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Object already exists"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_EXISTS_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTENCODE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to encode value"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTENCODE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTDECODE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to decode value"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTDECODE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTSPLIT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to split node"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTSPLIT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTREDISTRIBUTE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to redistribute records"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTREDISTRIBUTE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTSWAP_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to swap records"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTSWAP_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTINSERT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to insert object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTINSERT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTLIST_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to list node"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTLIST_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTMODIFY_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to modify record"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTMODIFY_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_CANTREMOVE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Unable to remove object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTREMOVE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+/* Datatype conversion errors */
+assert(H5E_CANTCONVERT_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Can't convert datatypes"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_CANTCONVERT_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+assert(H5E_BADSIZE_g==(-1));
+if((msg = H5E_create_msg(cls, H5E_MINOR, "Bad size for object"))==NULL)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
+if((H5E_BADSIZE_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
+    HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
+
+#endif /* H5Einit_H */
diff --git a/Resources/windows-libs/HDF5/include/H5EnumType.h b/Resources/windows-libs/HDF5/include/H5EnumType.h
new file mode 100644
index 0000000000000000000000000000000000000000..fe36e8b5ba715687866e112e6c555e05a33fef95
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5EnumType.h
@@ -0,0 +1,78 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5EnumType_H
+#define __H5EnumType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//! Class EnumType operates on HDF5 enum datatypes.
+class H5_DLLCPP EnumType : public DataType {
+
+   public:
+	// Creates an empty enumeration datatype based on a native signed
+	// integer type, whose size is given by size.
+	EnumType( size_t size );
+
+	// Gets the enum datatype of the specified dataset
+	EnumType( const DataSet& dataset );  // H5Dget_type
+
+	// Creates a new enum datatype based on an integer datatype
+	EnumType( const IntType& data_type );  // H5Tenum_create
+
+	// Returns the number of members in this enumeration datatype.
+	int getNmembers () const;
+
+	// Returns the index of a member in this enumeration data type.
+	int getMemberIndex(const char* name) const;
+	int getMemberIndex(const H5std_string& name) const;
+
+	// Returns the value of an enumeration datatype member
+	void getMemberValue( unsigned memb_no, void *value ) const;
+
+	// Inserts a new member to this enumeration type.
+	void insert( const char* name, void *value ) const;
+	void insert( const H5std_string& name, void *value ) const;
+
+	// Returns the symbol name corresponding to a specified member
+	// of this enumeration datatype.
+	H5std_string nameOf( void *value, size_t size ) const;
+
+	// Returns the value corresponding to a specified member of this
+	// enumeration datatype.
+	void valueOf( const char* name, void *value ) const;
+	void valueOf( const H5std_string& name, void *value ) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("EnumType"); }
+
+	// Default constructor
+	EnumType();
+
+	// Creates an enumeration datatype using an existing id
+	EnumType( const hid_t existing_id );
+
+	// Copy constructor: makes a copy of the original EnumType object.
+	EnumType( const EnumType& original );
+
+	virtual ~EnumType();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5EnumType_H
diff --git a/Resources/windows-libs/HDF5/include/H5Epkg.h b/Resources/windows-libs/HDF5/include/H5Epkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..bfaaf9dc243055b993cf2b62879a04ed073e0751
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Epkg.h
@@ -0,0 +1,151 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@hdfgroup.org>
+ *		Wednesday, April 11, 2007
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5E package.  Source files outside the H5E package should
+ *		include H5Eprivate.h instead.
+ */
+#ifndef H5E_PACKAGE
+#error "Do not include this file outside the H5E package!"
+#endif
+
+#ifndef _H5Epkg_H
+#define _H5Epkg_H
+
+/* Get package's private header */
+#include "H5Eprivate.h"
+
+/* Other private headers needed by this file */
+
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* Amount to indent each error */
+#define H5E_INDENT              2
+
+/* Number of slots in an error stack */
+#define H5E_NSLOTS	        32
+
+#ifdef H5_HAVE_THREADSAFE
+/*
+ * The per-thread error stack. pthread_once() initializes a special
+ * key that will be used by all threads to create a stack specific to
+ * each thread individually. The association of stacks to threads will
+ * be handled by the pthread library.
+ *
+ * In order for this macro to work, H5E_get_my_stack() must be preceeded
+ * by "H5E_t *estack =".
+ */
+#define H5E_get_my_stack()  H5E_get_stack()
+#else /* H5_HAVE_THREADSAFE */
+/*
+ * The current error stack.
+ */
+#define H5E_get_my_stack() (H5E_stack_g + 0)
+#endif /* H5_HAVE_THREADSAFE */
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/* Some syntactic sugar to make the compiler happy with two different kinds of callbacks */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+typedef struct {
+    unsigned    vers;       /* Which version callback to use */
+    hbool_t     is_default; /* If the printing function is the library's own. */
+    H5E_auto1_t func1;      /* Old-style callback, NO error stack param. */
+    H5E_auto2_t func2;      /* New-style callback, with error stack param. */
+    H5E_auto1_t func1_default;      /* The saved library's default function - old style. */
+    H5E_auto2_t func2_default;      /* The saved library's default function - new style. */
+} H5E_auto_op_t;
+#else /* H5_NO_DEPRECATED_SYMBOLS */
+typedef struct {
+    H5E_auto_t  func2;      /* Only the new style callback function is available. */
+} H5E_auto_op_t;
+#endif /* H5_NO_DEPRECATED_SYMBOLS */ 
+
+/* Some syntactic sugar to make the compiler happy with two different kinds of callbacks */
+typedef struct {
+    unsigned vers;              /* Which version callback to use */
+    union {
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+        H5E_walk1_t func1;      /* Old-style callback, NO error stack param. */
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+        H5E_walk2_t func2;      /* New-style callback, with error stack param. */
+    }u;
+} H5E_walk_op_t;
+
+/* Error class */
+typedef struct H5E_cls_t {
+    char *cls_name;             /* Name of error class */
+    char *lib_name;             /* Name of library within class */
+    char *lib_vers;             /* Version of library */
+} H5E_cls_t;
+
+/* Major or minor message */
+typedef struct H5E_msg_t {
+    char        *msg;           /* Message for error */
+    H5E_type_t   type;          /* Type of error (major or minor) */
+    H5E_cls_t   *cls;           /* Which error class this message belongs to */
+} H5E_msg_t;
+
+/* Error stack */
+struct H5E_t {
+    size_t nused;		        /* Num slots currently used in stack  */
+    H5E_error2_t slot[H5E_NSLOTS];	/* Array of error records	     */
+    H5E_auto_op_t auto_op;              /* Operator for 'automatic' error reporting */
+    void *auto_data;                    /* Callback data for 'automatic error reporting */
+};
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+#ifndef H5_HAVE_THREADSAFE
+/*
+ * The current error stack.
+ */
+H5_DLLVAR H5E_t	H5E_stack_g[1];
+#endif /* H5_HAVE_THREADSAFE */
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+H5_DLL herr_t H5E__term_deprec_interface(void);
+#ifdef H5_HAVE_THREADSAFE
+H5_DLL H5E_t *H5E_get_stack(void);
+#endif /* H5_HAVE_THREADSAFE */
+H5_DLL ssize_t H5E_get_msg(const H5E_msg_t *msg_ptr, H5E_type_t *type,
+    char *msg, size_t size);
+H5_DLL herr_t H5E_print(const H5E_t *estack, FILE *stream, hbool_t bk_compat);
+H5_DLL herr_t H5E_walk(const H5E_t *estack, H5E_direction_t direction,
+    const H5E_walk_op_t *op, void *client_data);
+H5_DLL herr_t H5E_get_auto(const H5E_t *estack, H5E_auto_op_t *op,
+    void **client_data);
+H5_DLL herr_t H5E_set_auto(H5E_t *estack, const H5E_auto_op_t *op,
+    void *client_data);
+H5_DLL herr_t H5E_pop(H5E_t *err_stack, size_t count);
+
+#endif /* _H5Epkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Epubgen.h b/Resources/windows-libs/HDF5/include/H5Epubgen.h
new file mode 100644
index 0000000000000000000000000000000000000000..75eca0b99f0149acc9ca5369426cd6c324f1decf
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Epubgen.h
@@ -0,0 +1,368 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Generated automatically by bin/make_err -- do not edit */
+/* Add new errors to H5err.txt file */
+
+
+#ifndef _H5Epubgen_H
+#define _H5Epubgen_H
+
+/*********************/
+/* Major error codes */
+/*********************/
+
+#define H5E_DATASET          (H5OPEN H5E_DATASET_g)
+#define H5E_FUNC             (H5OPEN H5E_FUNC_g)
+#define H5E_STORAGE          (H5OPEN H5E_STORAGE_g)
+#define H5E_FILE             (H5OPEN H5E_FILE_g)
+#define H5E_SOHM             (H5OPEN H5E_SOHM_g)
+#define H5E_SYM              (H5OPEN H5E_SYM_g)
+#define H5E_PLUGIN           (H5OPEN H5E_PLUGIN_g)
+#define H5E_VFL              (H5OPEN H5E_VFL_g)
+#define H5E_INTERNAL         (H5OPEN H5E_INTERNAL_g)
+#define H5E_BTREE            (H5OPEN H5E_BTREE_g)
+#define H5E_REFERENCE        (H5OPEN H5E_REFERENCE_g)
+#define H5E_DATASPACE        (H5OPEN H5E_DATASPACE_g)
+#define H5E_RESOURCE         (H5OPEN H5E_RESOURCE_g)
+#define H5E_PLIST            (H5OPEN H5E_PLIST_g)
+#define H5E_LINK             (H5OPEN H5E_LINK_g)
+#define H5E_DATATYPE         (H5OPEN H5E_DATATYPE_g)
+#define H5E_RS               (H5OPEN H5E_RS_g)
+#define H5E_HEAP             (H5OPEN H5E_HEAP_g)
+#define H5E_OHDR             (H5OPEN H5E_OHDR_g)
+#define H5E_ATOM             (H5OPEN H5E_ATOM_g)
+#define H5E_ATTR             (H5OPEN H5E_ATTR_g)
+#define H5E_NONE_MAJOR       (H5OPEN H5E_NONE_MAJOR_g)
+#define H5E_IO               (H5OPEN H5E_IO_g)
+#define H5E_SLIST            (H5OPEN H5E_SLIST_g)
+#define H5E_EFL              (H5OPEN H5E_EFL_g)
+#define H5E_TST              (H5OPEN H5E_TST_g)
+#define H5E_ARGS             (H5OPEN H5E_ARGS_g)
+#define H5E_ERROR            (H5OPEN H5E_ERROR_g)
+#define H5E_PLINE            (H5OPEN H5E_PLINE_g)
+#define H5E_FSPACE           (H5OPEN H5E_FSPACE_g)
+#define H5E_CACHE            (H5OPEN H5E_CACHE_g)
+H5_DLLVAR hid_t H5E_DATASET_g;       /* Dataset */
+H5_DLLVAR hid_t H5E_FUNC_g;          /* Function entry/exit */
+H5_DLLVAR hid_t H5E_STORAGE_g;       /* Data storage */
+H5_DLLVAR hid_t H5E_FILE_g;          /* File accessibilty */
+H5_DLLVAR hid_t H5E_SOHM_g;          /* Shared Object Header Messages */
+H5_DLLVAR hid_t H5E_SYM_g;           /* Symbol table */
+H5_DLLVAR hid_t H5E_PLUGIN_g;        /* Plugin for dynamically loaded library */
+H5_DLLVAR hid_t H5E_VFL_g;           /* Virtual File Layer */
+H5_DLLVAR hid_t H5E_INTERNAL_g;      /* Internal error (too specific to document in detail) */
+H5_DLLVAR hid_t H5E_BTREE_g;         /* B-Tree node */
+H5_DLLVAR hid_t H5E_REFERENCE_g;     /* References */
+H5_DLLVAR hid_t H5E_DATASPACE_g;     /* Dataspace */
+H5_DLLVAR hid_t H5E_RESOURCE_g;      /* Resource unavailable */
+H5_DLLVAR hid_t H5E_PLIST_g;         /* Property lists */
+H5_DLLVAR hid_t H5E_LINK_g;          /* Links */
+H5_DLLVAR hid_t H5E_DATATYPE_g;      /* Datatype */
+H5_DLLVAR hid_t H5E_RS_g;            /* Reference Counted Strings */
+H5_DLLVAR hid_t H5E_HEAP_g;          /* Heap */
+H5_DLLVAR hid_t H5E_OHDR_g;          /* Object header */
+H5_DLLVAR hid_t H5E_ATOM_g;          /* Object atom */
+H5_DLLVAR hid_t H5E_ATTR_g;          /* Attribute */
+H5_DLLVAR hid_t H5E_NONE_MAJOR_g;    /* No error */
+H5_DLLVAR hid_t H5E_IO_g;            /* Low-level I/O */
+H5_DLLVAR hid_t H5E_SLIST_g;         /* Skip Lists */
+H5_DLLVAR hid_t H5E_EFL_g;           /* External file list */
+H5_DLLVAR hid_t H5E_TST_g;           /* Ternary Search Trees */
+H5_DLLVAR hid_t H5E_ARGS_g;          /* Invalid arguments to routine */
+H5_DLLVAR hid_t H5E_ERROR_g;         /* Error API */
+H5_DLLVAR hid_t H5E_PLINE_g;         /* Data filters */
+H5_DLLVAR hid_t H5E_FSPACE_g;        /* Free Space Manager */
+H5_DLLVAR hid_t H5E_CACHE_g;         /* Object cache */
+
+/*********************/
+/* Minor error codes */
+/*********************/
+
+/* Generic low-level file I/O errors */
+#define H5E_SEEKERROR        (H5OPEN H5E_SEEKERROR_g)
+#define H5E_READERROR        (H5OPEN H5E_READERROR_g)
+#define H5E_WRITEERROR       (H5OPEN H5E_WRITEERROR_g)
+#define H5E_CLOSEERROR       (H5OPEN H5E_CLOSEERROR_g)
+#define H5E_OVERFLOW         (H5OPEN H5E_OVERFLOW_g)
+#define H5E_FCNTL            (H5OPEN H5E_FCNTL_g)
+H5_DLLVAR hid_t H5E_SEEKERROR_g;     /* Seek failed */
+H5_DLLVAR hid_t H5E_READERROR_g;     /* Read failed */
+H5_DLLVAR hid_t H5E_WRITEERROR_g;    /* Write failed */
+H5_DLLVAR hid_t H5E_CLOSEERROR_g;    /* Close failed */
+H5_DLLVAR hid_t H5E_OVERFLOW_g;      /* Address overflowed */
+H5_DLLVAR hid_t H5E_FCNTL_g;         /* File control (fcntl) failed */
+
+/* Resource errors */
+#define H5E_NOSPACE          (H5OPEN H5E_NOSPACE_g)
+#define H5E_CANTALLOC        (H5OPEN H5E_CANTALLOC_g)
+#define H5E_CANTCOPY         (H5OPEN H5E_CANTCOPY_g)
+#define H5E_CANTFREE         (H5OPEN H5E_CANTFREE_g)
+#define H5E_ALREADYEXISTS    (H5OPEN H5E_ALREADYEXISTS_g)
+#define H5E_CANTLOCK         (H5OPEN H5E_CANTLOCK_g)
+#define H5E_CANTUNLOCK       (H5OPEN H5E_CANTUNLOCK_g)
+#define H5E_CANTGC           (H5OPEN H5E_CANTGC_g)
+#define H5E_CANTGETSIZE      (H5OPEN H5E_CANTGETSIZE_g)
+#define H5E_OBJOPEN          (H5OPEN H5E_OBJOPEN_g)
+H5_DLLVAR hid_t H5E_NOSPACE_g;       /* No space available for allocation */
+H5_DLLVAR hid_t H5E_CANTALLOC_g;     /* Can't allocate space */
+H5_DLLVAR hid_t H5E_CANTCOPY_g;      /* Unable to copy object */
+H5_DLLVAR hid_t H5E_CANTFREE_g;      /* Unable to free object */
+H5_DLLVAR hid_t H5E_ALREADYEXISTS_g; /* Object already exists */
+H5_DLLVAR hid_t H5E_CANTLOCK_g;      /* Unable to lock object */
+H5_DLLVAR hid_t H5E_CANTUNLOCK_g;    /* Unable to unlock object */
+H5_DLLVAR hid_t H5E_CANTGC_g;        /* Unable to garbage collect */
+H5_DLLVAR hid_t H5E_CANTGETSIZE_g;   /* Unable to compute size */
+H5_DLLVAR hid_t H5E_OBJOPEN_g;       /* Object is already open */
+
+/* Heap errors */
+#define H5E_CANTRESTORE      (H5OPEN H5E_CANTRESTORE_g)
+#define H5E_CANTCOMPUTE      (H5OPEN H5E_CANTCOMPUTE_g)
+#define H5E_CANTEXTEND       (H5OPEN H5E_CANTEXTEND_g)
+#define H5E_CANTATTACH       (H5OPEN H5E_CANTATTACH_g)
+#define H5E_CANTUPDATE       (H5OPEN H5E_CANTUPDATE_g)
+#define H5E_CANTOPERATE      (H5OPEN H5E_CANTOPERATE_g)
+H5_DLLVAR hid_t H5E_CANTRESTORE_g;   /* Can't restore condition */
+H5_DLLVAR hid_t H5E_CANTCOMPUTE_g;   /* Can't compute value */
+H5_DLLVAR hid_t H5E_CANTEXTEND_g;    /* Can't extend heap's space */
+H5_DLLVAR hid_t H5E_CANTATTACH_g;    /* Can't attach object */
+H5_DLLVAR hid_t H5E_CANTUPDATE_g;    /* Can't update object */
+H5_DLLVAR hid_t H5E_CANTOPERATE_g;   /* Can't operate on object */
+
+/* Function entry/exit interface errors */
+#define H5E_CANTINIT         (H5OPEN H5E_CANTINIT_g)
+#define H5E_ALREADYINIT      (H5OPEN H5E_ALREADYINIT_g)
+#define H5E_CANTRELEASE      (H5OPEN H5E_CANTRELEASE_g)
+H5_DLLVAR hid_t H5E_CANTINIT_g;      /* Unable to initialize object */
+H5_DLLVAR hid_t H5E_ALREADYINIT_g;   /* Object already initialized */
+H5_DLLVAR hid_t H5E_CANTRELEASE_g;   /* Unable to release object */
+
+/* Property list errors */
+#define H5E_CANTGET          (H5OPEN H5E_CANTGET_g)
+#define H5E_CANTSET          (H5OPEN H5E_CANTSET_g)
+#define H5E_DUPCLASS         (H5OPEN H5E_DUPCLASS_g)
+#define H5E_SETDISALLOWED    (H5OPEN H5E_SETDISALLOWED_g)
+H5_DLLVAR hid_t H5E_CANTGET_g;       /* Can't get value */
+H5_DLLVAR hid_t H5E_CANTSET_g;       /* Can't set value */
+H5_DLLVAR hid_t H5E_DUPCLASS_g;      /* Duplicate class name in parent class */
+H5_DLLVAR hid_t H5E_SETDISALLOWED_g; /* Disallowed operation */
+
+/* Free space errors */
+#define H5E_CANTMERGE        (H5OPEN H5E_CANTMERGE_g)
+#define H5E_CANTREVIVE       (H5OPEN H5E_CANTREVIVE_g)
+#define H5E_CANTSHRINK       (H5OPEN H5E_CANTSHRINK_g)
+H5_DLLVAR hid_t H5E_CANTMERGE_g;     /* Can't merge objects */
+H5_DLLVAR hid_t H5E_CANTREVIVE_g;    /* Can't revive object */
+H5_DLLVAR hid_t H5E_CANTSHRINK_g;    /* Can't shrink container */
+
+/* Object header related errors */
+#define H5E_LINKCOUNT        (H5OPEN H5E_LINKCOUNT_g)
+#define H5E_VERSION          (H5OPEN H5E_VERSION_g)
+#define H5E_ALIGNMENT        (H5OPEN H5E_ALIGNMENT_g)
+#define H5E_BADMESG          (H5OPEN H5E_BADMESG_g)
+#define H5E_CANTDELETE       (H5OPEN H5E_CANTDELETE_g)
+#define H5E_BADITER          (H5OPEN H5E_BADITER_g)
+#define H5E_CANTPACK         (H5OPEN H5E_CANTPACK_g)
+#define H5E_CANTRESET        (H5OPEN H5E_CANTRESET_g)
+#define H5E_CANTRENAME       (H5OPEN H5E_CANTRENAME_g)
+H5_DLLVAR hid_t H5E_LINKCOUNT_g;     /* Bad object header link count */
+H5_DLLVAR hid_t H5E_VERSION_g;       /* Wrong version number */
+H5_DLLVAR hid_t H5E_ALIGNMENT_g;     /* Alignment error */
+H5_DLLVAR hid_t H5E_BADMESG_g;       /* Unrecognized message */
+H5_DLLVAR hid_t H5E_CANTDELETE_g;    /* Can't delete message */
+H5_DLLVAR hid_t H5E_BADITER_g;       /* Iteration failed */
+H5_DLLVAR hid_t H5E_CANTPACK_g;      /* Can't pack messages */
+H5_DLLVAR hid_t H5E_CANTRESET_g;     /* Can't reset object */
+H5_DLLVAR hid_t H5E_CANTRENAME_g;    /* Unable to rename object */
+
+/* System level errors */
+#define H5E_SYSERRSTR        (H5OPEN H5E_SYSERRSTR_g)
+H5_DLLVAR hid_t H5E_SYSERRSTR_g;     /* System error message */
+
+/* I/O pipeline errors */
+#define H5E_NOFILTER         (H5OPEN H5E_NOFILTER_g)
+#define H5E_CALLBACK         (H5OPEN H5E_CALLBACK_g)
+#define H5E_CANAPPLY         (H5OPEN H5E_CANAPPLY_g)
+#define H5E_SETLOCAL         (H5OPEN H5E_SETLOCAL_g)
+#define H5E_NOENCODER        (H5OPEN H5E_NOENCODER_g)
+#define H5E_CANTFILTER       (H5OPEN H5E_CANTFILTER_g)
+H5_DLLVAR hid_t H5E_NOFILTER_g;      /* Requested filter is not available */
+H5_DLLVAR hid_t H5E_CALLBACK_g;      /* Callback failed */
+H5_DLLVAR hid_t H5E_CANAPPLY_g;      /* Error from filter 'can apply' callback */
+H5_DLLVAR hid_t H5E_SETLOCAL_g;      /* Error from filter 'set local' callback */
+H5_DLLVAR hid_t H5E_NOENCODER_g;     /* Filter present but encoding disabled */
+H5_DLLVAR hid_t H5E_CANTFILTER_g;    /* Filter operation failed */
+
+/* Group related errors */
+#define H5E_CANTOPENOBJ      (H5OPEN H5E_CANTOPENOBJ_g)
+#define H5E_CANTCLOSEOBJ     (H5OPEN H5E_CANTCLOSEOBJ_g)
+#define H5E_COMPLEN          (H5OPEN H5E_COMPLEN_g)
+#define H5E_PATH             (H5OPEN H5E_PATH_g)
+H5_DLLVAR hid_t H5E_CANTOPENOBJ_g;   /* Can't open object */
+H5_DLLVAR hid_t H5E_CANTCLOSEOBJ_g;  /* Can't close object */
+H5_DLLVAR hid_t H5E_COMPLEN_g;       /* Name component is too long */
+H5_DLLVAR hid_t H5E_PATH_g;          /* Problem with path to object */
+
+/* No error */
+#define H5E_NONE_MINOR       (H5OPEN H5E_NONE_MINOR_g)
+H5_DLLVAR hid_t H5E_NONE_MINOR_g;    /* No error */
+
+/* Plugin errors */
+#define H5E_OPENERROR        (H5OPEN H5E_OPENERROR_g)
+H5_DLLVAR hid_t H5E_OPENERROR_g;     /* Can't open directory or file */
+
+/* File accessibilty errors */
+#define H5E_FILEEXISTS       (H5OPEN H5E_FILEEXISTS_g)
+#define H5E_FILEOPEN         (H5OPEN H5E_FILEOPEN_g)
+#define H5E_CANTCREATE       (H5OPEN H5E_CANTCREATE_g)
+#define H5E_CANTOPENFILE     (H5OPEN H5E_CANTOPENFILE_g)
+#define H5E_CANTCLOSEFILE    (H5OPEN H5E_CANTCLOSEFILE_g)
+#define H5E_NOTHDF5          (H5OPEN H5E_NOTHDF5_g)
+#define H5E_BADFILE          (H5OPEN H5E_BADFILE_g)
+#define H5E_TRUNCATED        (H5OPEN H5E_TRUNCATED_g)
+#define H5E_MOUNT            (H5OPEN H5E_MOUNT_g)
+H5_DLLVAR hid_t H5E_FILEEXISTS_g;    /* File already exists */
+H5_DLLVAR hid_t H5E_FILEOPEN_g;      /* File already open */
+H5_DLLVAR hid_t H5E_CANTCREATE_g;    /* Unable to create file */
+H5_DLLVAR hid_t H5E_CANTOPENFILE_g;  /* Unable to open file */
+H5_DLLVAR hid_t H5E_CANTCLOSEFILE_g; /* Unable to close file */
+H5_DLLVAR hid_t H5E_NOTHDF5_g;       /* Not an HDF5 file */
+H5_DLLVAR hid_t H5E_BADFILE_g;       /* Bad file ID accessed */
+H5_DLLVAR hid_t H5E_TRUNCATED_g;     /* File has been truncated */
+H5_DLLVAR hid_t H5E_MOUNT_g;         /* File mount error */
+
+/* Object atom related errors */
+#define H5E_BADATOM          (H5OPEN H5E_BADATOM_g)
+#define H5E_BADGROUP         (H5OPEN H5E_BADGROUP_g)
+#define H5E_CANTREGISTER     (H5OPEN H5E_CANTREGISTER_g)
+#define H5E_CANTINC          (H5OPEN H5E_CANTINC_g)
+#define H5E_CANTDEC          (H5OPEN H5E_CANTDEC_g)
+#define H5E_NOIDS            (H5OPEN H5E_NOIDS_g)
+H5_DLLVAR hid_t H5E_BADATOM_g;       /* Unable to find atom information (already closed?) */
+H5_DLLVAR hid_t H5E_BADGROUP_g;      /* Unable to find ID group information */
+H5_DLLVAR hid_t H5E_CANTREGISTER_g;  /* Unable to register new atom */
+H5_DLLVAR hid_t H5E_CANTINC_g;       /* Unable to increment reference count */
+H5_DLLVAR hid_t H5E_CANTDEC_g;       /* Unable to decrement reference count */
+H5_DLLVAR hid_t H5E_NOIDS_g;         /* Out of IDs for group */
+
+/* Cache related errors */
+#define H5E_CANTFLUSH        (H5OPEN H5E_CANTFLUSH_g)
+#define H5E_CANTSERIALIZE    (H5OPEN H5E_CANTSERIALIZE_g)
+#define H5E_CANTLOAD         (H5OPEN H5E_CANTLOAD_g)
+#define H5E_PROTECT          (H5OPEN H5E_PROTECT_g)
+#define H5E_NOTCACHED        (H5OPEN H5E_NOTCACHED_g)
+#define H5E_SYSTEM           (H5OPEN H5E_SYSTEM_g)
+#define H5E_CANTINS          (H5OPEN H5E_CANTINS_g)
+#define H5E_CANTPROTECT      (H5OPEN H5E_CANTPROTECT_g)
+#define H5E_CANTUNPROTECT    (H5OPEN H5E_CANTUNPROTECT_g)
+#define H5E_CANTPIN          (H5OPEN H5E_CANTPIN_g)
+#define H5E_CANTUNPIN        (H5OPEN H5E_CANTUNPIN_g)
+#define H5E_CANTMARKDIRTY    (H5OPEN H5E_CANTMARKDIRTY_g)
+#define H5E_CANTDIRTY        (H5OPEN H5E_CANTDIRTY_g)
+#define H5E_CANTEXPUNGE      (H5OPEN H5E_CANTEXPUNGE_g)
+#define H5E_CANTRESIZE       (H5OPEN H5E_CANTRESIZE_g)
+H5_DLLVAR hid_t H5E_CANTFLUSH_g;     /* Unable to flush data from cache */
+H5_DLLVAR hid_t H5E_CANTSERIALIZE_g; /* Unable to serialize data from cache */
+H5_DLLVAR hid_t H5E_CANTLOAD_g;      /* Unable to load metadata into cache */
+H5_DLLVAR hid_t H5E_PROTECT_g;       /* Protected metadata error */
+H5_DLLVAR hid_t H5E_NOTCACHED_g;     /* Metadata not currently cached */
+H5_DLLVAR hid_t H5E_SYSTEM_g;        /* Internal error detected */
+H5_DLLVAR hid_t H5E_CANTINS_g;       /* Unable to insert metadata into cache */
+H5_DLLVAR hid_t H5E_CANTPROTECT_g;   /* Unable to protect metadata */
+H5_DLLVAR hid_t H5E_CANTUNPROTECT_g; /* Unable to unprotect metadata */
+H5_DLLVAR hid_t H5E_CANTPIN_g;       /* Unable to pin cache entry */
+H5_DLLVAR hid_t H5E_CANTUNPIN_g;     /* Unable to un-pin cache entry */
+H5_DLLVAR hid_t H5E_CANTMARKDIRTY_g; /* Unable to mark a pinned entry as dirty */
+H5_DLLVAR hid_t H5E_CANTDIRTY_g;     /* Unable to mark metadata as dirty */
+H5_DLLVAR hid_t H5E_CANTEXPUNGE_g;   /* Unable to expunge a metadata cache entry */
+H5_DLLVAR hid_t H5E_CANTRESIZE_g;    /* Unable to resize a metadata cache entry */
+
+/* Link related errors */
+#define H5E_TRAVERSE         (H5OPEN H5E_TRAVERSE_g)
+#define H5E_NLINKS           (H5OPEN H5E_NLINKS_g)
+#define H5E_NOTREGISTERED    (H5OPEN H5E_NOTREGISTERED_g)
+#define H5E_CANTMOVE         (H5OPEN H5E_CANTMOVE_g)
+#define H5E_CANTSORT         (H5OPEN H5E_CANTSORT_g)
+H5_DLLVAR hid_t H5E_TRAVERSE_g;      /* Link traversal failure */
+H5_DLLVAR hid_t H5E_NLINKS_g;        /* Too many soft links in path */
+H5_DLLVAR hid_t H5E_NOTREGISTERED_g; /* Link class not registered */
+H5_DLLVAR hid_t H5E_CANTMOVE_g;      /* Can't move object */
+H5_DLLVAR hid_t H5E_CANTSORT_g;      /* Can't sort objects */
+
+/* Parallel MPI errors */
+#define H5E_MPI              (H5OPEN H5E_MPI_g)
+#define H5E_MPIERRSTR        (H5OPEN H5E_MPIERRSTR_g)
+#define H5E_CANTRECV         (H5OPEN H5E_CANTRECV_g)
+H5_DLLVAR hid_t H5E_MPI_g;           /* Some MPI function failed */
+H5_DLLVAR hid_t H5E_MPIERRSTR_g;     /* MPI Error String */
+H5_DLLVAR hid_t H5E_CANTRECV_g;      /* Can't receive data */
+
+/* Dataspace errors */
+#define H5E_CANTCLIP         (H5OPEN H5E_CANTCLIP_g)
+#define H5E_CANTCOUNT        (H5OPEN H5E_CANTCOUNT_g)
+#define H5E_CANTSELECT       (H5OPEN H5E_CANTSELECT_g)
+#define H5E_CANTNEXT         (H5OPEN H5E_CANTNEXT_g)
+#define H5E_BADSELECT        (H5OPEN H5E_BADSELECT_g)
+#define H5E_CANTCOMPARE      (H5OPEN H5E_CANTCOMPARE_g)
+H5_DLLVAR hid_t H5E_CANTCLIP_g;      /* Can't clip hyperslab region */
+H5_DLLVAR hid_t H5E_CANTCOUNT_g;     /* Can't count elements */
+H5_DLLVAR hid_t H5E_CANTSELECT_g;    /* Can't select hyperslab */
+H5_DLLVAR hid_t H5E_CANTNEXT_g;      /* Can't move to next iterator location */
+H5_DLLVAR hid_t H5E_BADSELECT_g;     /* Invalid selection */
+H5_DLLVAR hid_t H5E_CANTCOMPARE_g;   /* Can't compare objects */
+
+/* Argument errors */
+#define H5E_UNINITIALIZED    (H5OPEN H5E_UNINITIALIZED_g)
+#define H5E_UNSUPPORTED      (H5OPEN H5E_UNSUPPORTED_g)
+#define H5E_BADTYPE          (H5OPEN H5E_BADTYPE_g)
+#define H5E_BADRANGE         (H5OPEN H5E_BADRANGE_g)
+#define H5E_BADVALUE         (H5OPEN H5E_BADVALUE_g)
+H5_DLLVAR hid_t H5E_UNINITIALIZED_g; /* Information is uinitialized */
+H5_DLLVAR hid_t H5E_UNSUPPORTED_g;   /* Feature is unsupported */
+H5_DLLVAR hid_t H5E_BADTYPE_g;       /* Inappropriate type */
+H5_DLLVAR hid_t H5E_BADRANGE_g;      /* Out of range */
+H5_DLLVAR hid_t H5E_BADVALUE_g;      /* Bad value */
+
+/* B-tree related errors */
+#define H5E_NOTFOUND         (H5OPEN H5E_NOTFOUND_g)
+#define H5E_EXISTS           (H5OPEN H5E_EXISTS_g)
+#define H5E_CANTENCODE       (H5OPEN H5E_CANTENCODE_g)
+#define H5E_CANTDECODE       (H5OPEN H5E_CANTDECODE_g)
+#define H5E_CANTSPLIT        (H5OPEN H5E_CANTSPLIT_g)
+#define H5E_CANTREDISTRIBUTE (H5OPEN H5E_CANTREDISTRIBUTE_g)
+#define H5E_CANTSWAP         (H5OPEN H5E_CANTSWAP_g)
+#define H5E_CANTINSERT       (H5OPEN H5E_CANTINSERT_g)
+#define H5E_CANTLIST         (H5OPEN H5E_CANTLIST_g)
+#define H5E_CANTMODIFY       (H5OPEN H5E_CANTMODIFY_g)
+#define H5E_CANTREMOVE       (H5OPEN H5E_CANTREMOVE_g)
+H5_DLLVAR hid_t H5E_NOTFOUND_g;      /* Object not found */
+H5_DLLVAR hid_t H5E_EXISTS_g;        /* Object already exists */
+H5_DLLVAR hid_t H5E_CANTENCODE_g;    /* Unable to encode value */
+H5_DLLVAR hid_t H5E_CANTDECODE_g;    /* Unable to decode value */
+H5_DLLVAR hid_t H5E_CANTSPLIT_g;     /* Unable to split node */
+H5_DLLVAR hid_t H5E_CANTREDISTRIBUTE_g; /* Unable to redistribute records */
+H5_DLLVAR hid_t H5E_CANTSWAP_g;      /* Unable to swap records */
+H5_DLLVAR hid_t H5E_CANTINSERT_g;    /* Unable to insert object */
+H5_DLLVAR hid_t H5E_CANTLIST_g;      /* Unable to list node */
+H5_DLLVAR hid_t H5E_CANTMODIFY_g;    /* Unable to modify record */
+H5_DLLVAR hid_t H5E_CANTREMOVE_g;    /* Unable to remove object */
+
+/* Datatype conversion errors */
+#define H5E_CANTCONVERT      (H5OPEN H5E_CANTCONVERT_g)
+#define H5E_BADSIZE          (H5OPEN H5E_BADSIZE_g)
+H5_DLLVAR hid_t H5E_CANTCONVERT_g;   /* Can't convert datatypes */
+H5_DLLVAR hid_t H5E_BADSIZE_g;       /* Bad size for object */
+
+#endif /* H5Epubgen_H */
diff --git a/Resources/windows-libs/HDF5/include/H5Epublic.h b/Resources/windows-libs/HDF5/include/H5Epublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..932b8574b7e473e43fd4111ddcc3086b03234bd5
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Epublic.h
@@ -0,0 +1,228 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5E module.
+ */
+#ifndef _H5Epublic_H
+#define _H5Epublic_H
+
+#include <stdio.h>              /*FILE arg of H5Eprint()                     */
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+/* Value for the default error stack */
+#define H5E_DEFAULT             0
+
+/* Different kinds of error information */
+typedef enum H5E_type_t {
+    H5E_MAJOR,
+    H5E_MINOR
+} H5E_type_t;
+
+/* Information about an error; element of error stack */
+typedef struct H5E_error2_t {
+    hid_t       cls_id;         /*class ID                           */
+    hid_t       maj_num;	/*major error ID		     */
+    hid_t       min_num;	/*minor error number		     */
+    unsigned	line;		/*line in file where error occurs    */
+    const char	*func_name;   	/*function in which error occurred   */
+    const char	*file_name;	/*file in which error occurred       */
+    const char	*desc;		/*optional supplied description      */
+} H5E_error2_t;
+
+/* When this header is included from a private header, don't make calls to H5open() */
+#undef H5OPEN
+#ifndef _H5private_H
+#define H5OPEN          H5open(),
+#else   /* _H5private_H */
+#define H5OPEN
+#endif  /* _H5private_H */
+
+/* HDF5 error class */
+#define H5E_ERR_CLS		(H5OPEN H5E_ERR_CLS_g)
+H5_DLLVAR hid_t H5E_ERR_CLS_g;
+
+/* Include the automatically generated public header information */
+/* (This includes the list of major and minor error codes for the library) */
+#include "H5Epubgen.h"
+
+/*
+ * One often needs to temporarily disable automatic error reporting when
+ * trying something that's likely or expected to fail.  The code to try can
+ * be nested between calls to H5Eget_auto() and H5Eset_auto(), but it's
+ * easier just to use this macro like:
+ * 	H5E_BEGIN_TRY {
+ *	    ...stuff here that's likely to fail...
+ *      } H5E_END_TRY;
+ *
+ * Warning: don't break, return, or longjmp() from the body of the loop or
+ *	    the error reporting won't be properly restored!
+ *
+ * These two macros still use the old API functions for backward compatibility
+ * purpose.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+#define H5E_BEGIN_TRY {							      \
+    unsigned H5E_saved_is_v2;					              \
+    union {								      \
+        H5E_auto1_t efunc1;						      \
+        H5E_auto2_t efunc2;					              \
+    } H5E_saved;							      \
+    void *H5E_saved_edata;						      \
+								    	      \
+    (void)H5Eauto_is_v2(H5E_DEFAULT, &H5E_saved_is_v2);		              \
+    if(H5E_saved_is_v2) {						      \
+        (void)H5Eget_auto2(H5E_DEFAULT, &H5E_saved.efunc2, &H5E_saved_edata); \
+        (void)H5Eset_auto2(H5E_DEFAULT, NULL, NULL);		              \
+    } else {								      \
+        (void)H5Eget_auto1(&H5E_saved.efunc1, &H5E_saved_edata);		      \
+        (void)H5Eset_auto1(NULL, NULL);					      \
+    }
+
+#define H5E_END_TRY							      \
+    if(H5E_saved_is_v2)							      \
+        (void)H5Eset_auto2(H5E_DEFAULT, H5E_saved.efunc2, H5E_saved_edata);   \
+    else								      \
+        (void)H5Eset_auto1(H5E_saved.efunc1, H5E_saved_edata);		      \
+}
+#else /* H5_NO_DEPRECATED_SYMBOLS */
+#define H5E_BEGIN_TRY {							      \
+    H5E_auto_t saved_efunc;						      \
+    void *H5E_saved_edata;						      \
+								    	      \
+    (void)H5Eget_auto(H5E_DEFAULT, &saved_efunc, &H5E_saved_edata);	      \
+    (void)H5Eset_auto(H5E_DEFAULT, NULL, NULL);
+
+#define H5E_END_TRY							      \
+    (void)H5Eset_auto(H5E_DEFAULT, saved_efunc, H5E_saved_edata);	      \
+}
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+/*
+ * Public API Convenience Macros for Error reporting - Documented
+ */
+/* Use the Standard C __FILE__ & __LINE__ macros instead of typing them in */
+#define H5Epush_sim(func, cls, maj, min, str) H5Epush2(H5E_DEFAULT, __FILE__, func, __LINE__, cls, maj, min, str)
+
+/*
+ * Public API Convenience Macros for Error reporting - Undocumented
+ */
+/* Use the Standard C __FILE__ & __LINE__ macros instead of typing them in */
+/*  And return after pushing error onto stack */
+#define H5Epush_ret(func, cls, maj, min, str, ret) {			      \
+    H5Epush2(H5E_DEFAULT, __FILE__, func, __LINE__, cls, maj, min, str);      \
+    return(ret);							      \
+}
+
+/* Use the Standard C __FILE__ & __LINE__ macros instead of typing them in
+ * And goto a label after pushing error onto stack.
+ */
+#define H5Epush_goto(func, cls, maj, min, str, label) {			      \
+    H5Epush2(H5E_DEFAULT, __FILE__, func, __LINE__, cls, maj, min, str);      \
+    goto label;								      \
+}
+
+/* Error stack traversal direction */
+typedef enum H5E_direction_t {
+    H5E_WALK_UPWARD	= 0,		/*begin deep, end at API function    */
+    H5E_WALK_DOWNWARD	= 1		/*begin at API function, end deep    */
+} H5E_direction_t;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Error stack traversal callback function pointers */
+typedef herr_t (*H5E_walk2_t)(unsigned n, const H5E_error2_t *err_desc,
+    void *client_data);
+typedef herr_t (*H5E_auto2_t)(hid_t estack, void *client_data);
+
+/* Public API functions */
+H5_DLL hid_t  H5Eregister_class(const char *cls_name, const char *lib_name,
+    const char *version);
+H5_DLL herr_t H5Eunregister_class(hid_t class_id);
+H5_DLL herr_t H5Eclose_msg(hid_t err_id);
+H5_DLL hid_t  H5Ecreate_msg(hid_t cls, H5E_type_t msg_type, const char *msg);
+H5_DLL hid_t  H5Ecreate_stack(void);
+H5_DLL hid_t  H5Eget_current_stack(void);
+H5_DLL herr_t H5Eclose_stack(hid_t stack_id);
+H5_DLL ssize_t H5Eget_class_name(hid_t class_id, char *name, size_t size);
+H5_DLL herr_t H5Eset_current_stack(hid_t err_stack_id);
+H5_DLL herr_t H5Epush2(hid_t err_stack, const char *file, const char *func, unsigned line,
+    hid_t cls_id, hid_t maj_id, hid_t min_id, const char *msg, ...);
+H5_DLL herr_t H5Epop(hid_t err_stack, size_t count);
+H5_DLL herr_t H5Eprint2(hid_t err_stack, FILE *stream);
+H5_DLL herr_t H5Ewalk2(hid_t err_stack, H5E_direction_t direction, H5E_walk2_t func,
+    void *client_data);
+H5_DLL herr_t H5Eget_auto2(hid_t estack_id, H5E_auto2_t *func, void **client_data);
+H5_DLL herr_t H5Eset_auto2(hid_t estack_id, H5E_auto2_t func, void *client_data);
+H5_DLL herr_t H5Eclear2(hid_t err_stack);
+H5_DLL herr_t H5Eauto_is_v2(hid_t err_stack, unsigned *is_stack);
+H5_DLL ssize_t H5Eget_msg(hid_t msg_id, H5E_type_t *type, char *msg,
+    size_t size);
+H5_DLL ssize_t H5Eget_num(hid_t error_stack_id);
+
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Typedefs */
+
+/* Alias major & minor error types to hid_t's, for compatibility with new
+ *      error API in v1.8
+ */
+typedef hid_t   H5E_major_t;
+typedef hid_t   H5E_minor_t;
+
+/* Information about an error element of error stack. */
+typedef struct H5E_error1_t {
+    H5E_major_t maj_num;                /*major error number                 */
+    H5E_minor_t min_num;                /*minor error number                 */
+    const char  *func_name;             /*function in which error occurred   */
+    const char  *file_name;             /*file in which error occurred       */
+    unsigned    line;                   /*line in file where error occurs    */
+    const char  *desc;                  /*optional supplied description      */
+} H5E_error1_t;
+
+/* Error stack traversal callback function pointers */
+typedef herr_t (*H5E_walk1_t)(int n, H5E_error1_t *err_desc, void *client_data);
+typedef herr_t (*H5E_auto1_t)(void *client_data);
+
+/* Function prototypes */
+H5_DLL herr_t H5Eclear1(void);
+H5_DLL herr_t H5Eget_auto1(H5E_auto1_t *func, void **client_data);
+H5_DLL herr_t H5Epush1(const char *file, const char *func, unsigned line,
+    H5E_major_t maj, H5E_minor_t min, const char *str);
+H5_DLL herr_t H5Eprint1(FILE *stream);
+H5_DLL herr_t H5Eset_auto1(H5E_auto1_t func, void *client_data);
+H5_DLL herr_t H5Ewalk1(H5E_direction_t direction, H5E_walk1_t func,
+    void *client_data);
+H5_DLL char *H5Eget_major(H5E_major_t maj);
+H5_DLL char *H5Eget_minor(H5E_minor_t min);
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end _H5Epublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Eterm.h b/Resources/windows-libs/HDF5/include/H5Eterm.h
new file mode 100644
index 0000000000000000000000000000000000000000..86902b8b65c4326576fa4b210ecb7341e1abf131
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Eterm.h
@@ -0,0 +1,218 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Generated automatically by bin/make_err -- do not edit */
+/* Add new errors to H5err.txt file */
+
+
+#ifndef _H5Eterm_H
+#define _H5Eterm_H
+
+/* Reset major error IDs */
+    
+H5E_DATASET_g=    
+H5E_FUNC_g=    
+H5E_STORAGE_g=    
+H5E_FILE_g=    
+H5E_SOHM_g=    
+H5E_SYM_g=    
+H5E_PLUGIN_g=    
+H5E_VFL_g=    
+H5E_INTERNAL_g=    
+H5E_BTREE_g=    
+H5E_REFERENCE_g=    
+H5E_DATASPACE_g=    
+H5E_RESOURCE_g=    
+H5E_PLIST_g=    
+H5E_LINK_g=    
+H5E_DATATYPE_g=    
+H5E_RS_g=    
+H5E_HEAP_g=    
+H5E_OHDR_g=    
+H5E_ATOM_g=    
+H5E_ATTR_g=    
+H5E_NONE_MAJOR_g=    
+H5E_IO_g=    
+H5E_SLIST_g=    
+H5E_EFL_g=    
+H5E_TST_g=    
+H5E_ARGS_g=    
+H5E_ERROR_g=    
+H5E_PLINE_g=    
+H5E_FSPACE_g=    
+H5E_CACHE_g= (-1);
+
+/* Reset minor error IDs */
+
+
+/* Generic low-level file I/O errors */    
+H5E_SEEKERROR_g=    
+H5E_READERROR_g=    
+H5E_WRITEERROR_g=    
+H5E_CLOSEERROR_g=    
+H5E_OVERFLOW_g=    
+H5E_FCNTL_g=
+
+/* Resource errors */    
+H5E_NOSPACE_g=    
+H5E_CANTALLOC_g=    
+H5E_CANTCOPY_g=    
+H5E_CANTFREE_g=    
+H5E_ALREADYEXISTS_g=    
+H5E_CANTLOCK_g=    
+H5E_CANTUNLOCK_g=    
+H5E_CANTGC_g=    
+H5E_CANTGETSIZE_g=    
+H5E_OBJOPEN_g=
+
+/* Heap errors */    
+H5E_CANTRESTORE_g=    
+H5E_CANTCOMPUTE_g=    
+H5E_CANTEXTEND_g=    
+H5E_CANTATTACH_g=    
+H5E_CANTUPDATE_g=    
+H5E_CANTOPERATE_g=
+
+/* Function entry/exit interface errors */    
+H5E_CANTINIT_g=    
+H5E_ALREADYINIT_g=    
+H5E_CANTRELEASE_g=
+
+/* Property list errors */    
+H5E_CANTGET_g=    
+H5E_CANTSET_g=    
+H5E_DUPCLASS_g=    
+H5E_SETDISALLOWED_g=
+
+/* Free space errors */    
+H5E_CANTMERGE_g=    
+H5E_CANTREVIVE_g=    
+H5E_CANTSHRINK_g=
+
+/* Object header related errors */    
+H5E_LINKCOUNT_g=    
+H5E_VERSION_g=    
+H5E_ALIGNMENT_g=    
+H5E_BADMESG_g=    
+H5E_CANTDELETE_g=    
+H5E_BADITER_g=    
+H5E_CANTPACK_g=    
+H5E_CANTRESET_g=    
+H5E_CANTRENAME_g=
+
+/* System level errors */    
+H5E_SYSERRSTR_g=
+
+/* I/O pipeline errors */    
+H5E_NOFILTER_g=    
+H5E_CALLBACK_g=    
+H5E_CANAPPLY_g=    
+H5E_SETLOCAL_g=    
+H5E_NOENCODER_g=    
+H5E_CANTFILTER_g=
+
+/* Group related errors */    
+H5E_CANTOPENOBJ_g=    
+H5E_CANTCLOSEOBJ_g=    
+H5E_COMPLEN_g=    
+H5E_PATH_g=
+
+/* No error */    
+H5E_NONE_MINOR_g=
+
+/* Plugin errors */    
+H5E_OPENERROR_g=
+
+/* File accessibilty errors */    
+H5E_FILEEXISTS_g=    
+H5E_FILEOPEN_g=    
+H5E_CANTCREATE_g=    
+H5E_CANTOPENFILE_g=    
+H5E_CANTCLOSEFILE_g=    
+H5E_NOTHDF5_g=    
+H5E_BADFILE_g=    
+H5E_TRUNCATED_g=    
+H5E_MOUNT_g=
+
+/* Object atom related errors */    
+H5E_BADATOM_g=    
+H5E_BADGROUP_g=    
+H5E_CANTREGISTER_g=    
+H5E_CANTINC_g=    
+H5E_CANTDEC_g=    
+H5E_NOIDS_g=
+
+/* Cache related errors */    
+H5E_CANTFLUSH_g=    
+H5E_CANTSERIALIZE_g=    
+H5E_CANTLOAD_g=    
+H5E_PROTECT_g=    
+H5E_NOTCACHED_g=    
+H5E_SYSTEM_g=    
+H5E_CANTINS_g=    
+H5E_CANTPROTECT_g=    
+H5E_CANTUNPROTECT_g=    
+H5E_CANTPIN_g=    
+H5E_CANTUNPIN_g=    
+H5E_CANTMARKDIRTY_g=    
+H5E_CANTDIRTY_g=    
+H5E_CANTEXPUNGE_g=    
+H5E_CANTRESIZE_g=
+
+/* Link related errors */    
+H5E_TRAVERSE_g=    
+H5E_NLINKS_g=    
+H5E_NOTREGISTERED_g=    
+H5E_CANTMOVE_g=    
+H5E_CANTSORT_g=
+
+/* Parallel MPI errors */    
+H5E_MPI_g=    
+H5E_MPIERRSTR_g=    
+H5E_CANTRECV_g=
+
+/* Dataspace errors */    
+H5E_CANTCLIP_g=    
+H5E_CANTCOUNT_g=    
+H5E_CANTSELECT_g=    
+H5E_CANTNEXT_g=    
+H5E_BADSELECT_g=    
+H5E_CANTCOMPARE_g=
+
+/* Argument errors */    
+H5E_UNINITIALIZED_g=    
+H5E_UNSUPPORTED_g=    
+H5E_BADTYPE_g=    
+H5E_BADRANGE_g=    
+H5E_BADVALUE_g=
+
+/* B-tree related errors */    
+H5E_NOTFOUND_g=    
+H5E_EXISTS_g=    
+H5E_CANTENCODE_g=    
+H5E_CANTDECODE_g=    
+H5E_CANTSPLIT_g=    
+H5E_CANTREDISTRIBUTE_g=    
+H5E_CANTSWAP_g=    
+H5E_CANTINSERT_g=    
+H5E_CANTLIST_g=    
+H5E_CANTMODIFY_g=    
+H5E_CANTREMOVE_g=
+
+/* Datatype conversion errors */    
+H5E_CANTCONVERT_g=    
+H5E_BADSIZE_g= (-1);
+
+#endif /* H5Eterm_H */
diff --git a/Resources/windows-libs/HDF5/include/H5Exception.h b/Resources/windows-libs/HDF5/include/H5Exception.h
new file mode 100644
index 0000000000000000000000000000000000000000..5373150f943da68ba4d8ec84ada5a459852d00fa
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Exception.h
@@ -0,0 +1,178 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5Exception_H
+#define __H5Exception_H
+
+#include <string>
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#ifdef H5_NO_STD
+    #define H5std_string ::string
+#else
+    #define H5std_string std::string
+#endif
+#endif
+
+/*! \class Exception
+    \brief Exception provides wrappers of HDF5 error handling functions.
+
+    Many classes are derived from Exception for specific HDF5 C interfaces.
+*/
+class H5_DLLCPP Exception {
+   public:
+	// Creates an exception with a function name where the failure occurs
+	// and an optional detailed message
+	Exception(const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+
+	// Returns a character string that describes the error specified by
+	// a major error number.
+	H5std_string getMajorString( hid_t err_major_id ) const;
+
+	// Returns a character string that describes the error specified by
+	// a minor error number.
+	H5std_string getMinorString( hid_t err_minor_id ) const;
+
+	// Returns the detailed message set at the time the exception is thrown
+	H5std_string getDetailMsg() const;
+	const char* getCDetailMsg() const;	// C string of detailed message
+	H5std_string getFuncName() const;	// function name as a string object
+	const char* getCFuncName() const;	// function name as a char string
+
+	// Turns on the automatic error printing.
+	static void setAutoPrint( H5E_auto2_t& func, void* client_data);
+
+	// Turns off the automatic error printing.
+	static void dontPrint();
+
+	// Retrieves the current settings for the automatic error stack
+	// traversal function and its data.
+	static void getAutoPrint( H5E_auto2_t& func, void** client_data);
+
+	// Clears the error stack for the current thread.
+	static void clearErrorStack();
+
+	// Walks the error stack for the current thread, calling the
+	// specified function.
+	static void walkErrorStack( H5E_direction_t direction,
+				H5E_walk2_t func, void* client_data);
+
+	// Prints the error stack in a default manner.
+	static void printErrorStack(FILE* stream = stderr,
+				    hid_t err_stack = H5E_DEFAULT); // Static
+	virtual void printError(FILE* stream = NULL) const;
+
+	// Default constructor
+	Exception();
+
+	// copy constructor
+	Exception( const Exception& orig);
+
+	// virtual Destructor
+	virtual ~Exception() throw();
+
+   private:
+	H5std_string detail_message;
+	H5std_string func_name;
+
+   protected:
+        // Default value for detail_message
+        static const char DEFAULT_MSG[];
+};
+
+class H5_DLLCPP FileIException : public Exception {
+   public:
+	FileIException( const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	FileIException();
+	virtual ~FileIException() throw();
+};
+
+class H5_DLLCPP GroupIException : public Exception {
+   public:
+	GroupIException( const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	GroupIException();
+	virtual ~GroupIException() throw();
+};
+
+class H5_DLLCPP DataSpaceIException : public Exception {
+   public:
+	DataSpaceIException(const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	DataSpaceIException();
+	virtual ~DataSpaceIException() throw();
+};
+
+class H5_DLLCPP DataTypeIException : public Exception {
+   public:
+	DataTypeIException(const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	DataTypeIException();
+	virtual ~DataTypeIException() throw();
+};
+
+class H5_DLLCPP PropListIException : public Exception {
+   public:
+	PropListIException(const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	PropListIException();
+	virtual ~PropListIException() throw();
+};
+
+class H5_DLLCPP DataSetIException : public Exception {
+   public:
+	DataSetIException(const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	DataSetIException();
+	virtual ~DataSetIException() throw();
+};
+
+class H5_DLLCPP AttributeIException : public Exception {
+   public:
+	AttributeIException(const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	AttributeIException();
+	virtual ~AttributeIException() throw();
+};
+
+class H5_DLLCPP ReferenceException : public Exception {
+   public:
+	ReferenceException(const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	ReferenceException();
+	virtual ~ReferenceException() throw();
+};
+
+class H5_DLLCPP LibraryIException : public Exception {
+   public:
+	LibraryIException(const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	LibraryIException();
+	virtual ~LibraryIException() throw();
+};
+
+class H5_DLLCPP LocationException : public Exception {
+   public:
+	LocationException(const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	LocationException();
+	virtual ~LocationException() throw();
+};
+
+class H5_DLLCPP IdComponentException : public Exception {
+   public:
+	IdComponentException(const H5std_string& func_name, const H5std_string& message = DEFAULT_MSG);
+	IdComponentException();
+	virtual ~IdComponentException() throw();
+};
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+
+#endif // __H5Exception_H
diff --git a/Resources/windows-libs/HDF5/include/H5FDcore.h b/Resources/windows-libs/HDF5/include/H5FDcore.h
new file mode 100644
index 0000000000000000000000000000000000000000..dca110ea20826e9a7c23f286d1153a4aed69b26b
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDcore.h
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the sec2 driver.
+ */
+#ifndef H5FDcore_H
+#define H5FDcore_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_CORE	(H5FD_core_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+H5_DLL hid_t H5FD_core_init(void);
+H5_DLL void H5FD_core_term(void);
+H5_DLL herr_t H5Pset_fapl_core(hid_t fapl_id, size_t increment,
+				hbool_t backing_store);
+H5_DLL herr_t H5Pget_fapl_core(hid_t fapl_id, size_t *increment/*out*/,
+				hbool_t *backing_store/*out*/);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5FDdirect.h b/Resources/windows-libs/HDF5/include/H5FDdirect.h
new file mode 100644
index 0000000000000000000000000000000000000000..26c70f30fa09a5077c4dffcb78faf500e30a3dc6
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDdirect.h
@@ -0,0 +1,57 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Raymond Lu <slu@hdfgroup.uiuc.edu>
+ *              Wednesday, 20 September 2006
+ *
+ * Purpose:	The public header file for the direct driver.
+ */
+#ifndef H5FDdirect_H
+#define H5FDdirect_H
+
+#include "H5Ipublic.h"
+
+#ifdef H5_HAVE_DIRECT
+#       define H5FD_DIRECT	(H5FD_direct_init())
+#else
+#       define H5FD_DIRECT      (-1)
+#endif /* H5_HAVE_DIRECT */
+
+#ifdef H5_HAVE_DIRECT
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Default values for memory boundary, file block size, and maximal copy buffer size.
+ * Application can set these values through the function H5Pset_fapl_direct. */
+#define MBOUNDARY_DEF		4096
+#define FBSIZE_DEF		4096
+#define CBSIZE_DEF		16*1024*1024
+
+H5_DLL hid_t H5FD_direct_init(void);
+H5_DLL void H5FD_direct_term(void);
+H5_DLL herr_t H5Pset_fapl_direct(hid_t fapl_id, size_t alignment, size_t block_size,
+			size_t cbuf_size);
+H5_DLL herr_t H5Pget_fapl_direct(hid_t fapl_id, size_t *boundary/*out*/,
+			size_t *block_size/*out*/, size_t *cbuf_size/*out*/);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H5_HAVE_DIRECT */
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5FDfamily.h b/Resources/windows-libs/HDF5/include/H5FDfamily.h
new file mode 100644
index 0000000000000000000000000000000000000000..dcb63e647e16d7083e4645f316d16479aad3d923
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDfamily.h
@@ -0,0 +1,44 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  4, 1999
+ *
+ * Purpose:	The public header file for the family driver.
+ */
+#ifndef H5FDfamily_H
+#define H5FDfamily_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_FAMILY	(H5FD_family_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_family_init(void);
+H5_DLL void H5FD_family_term(void);
+H5_DLL herr_t H5Pset_fapl_family(hid_t fapl_id, hsize_t memb_size,
+			  hid_t memb_fapl_id);
+H5_DLL herr_t H5Pget_fapl_family(hid_t fapl_id, hsize_t *memb_size/*out*/,
+			  hid_t *memb_fapl_id/*out*/);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5FDlog.h b/Resources/windows-libs/HDF5/include/H5FDlog.h
new file mode 100644
index 0000000000000000000000000000000000000000..ffc4df1a56ce0a55fadd5b94f36995a291dc0a23
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDlog.h
@@ -0,0 +1,72 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *              Monday, April 17, 2000
+ *
+ * Purpose:	The public header file for the log driver.
+ */
+#ifndef H5FDlog_H
+#define H5FDlog_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_LOG	(H5FD_log_init())
+
+/* Flags for H5Pset_fapl_log() */
+/* Flags for tracking where reads/writes/seeks occur */
+#define H5FD_LOG_LOC_READ   0x00000001
+#define H5FD_LOG_LOC_WRITE  0x00000002
+#define H5FD_LOG_LOC_SEEK   0x00000004
+#define H5FD_LOG_LOC_IO     (H5FD_LOG_LOC_READ|H5FD_LOG_LOC_WRITE|H5FD_LOG_LOC_SEEK)
+/* Flags for tracking number of times each byte is read/written */
+#define H5FD_LOG_FILE_READ  0x00000008
+#define H5FD_LOG_FILE_WRITE 0x00000010
+#define H5FD_LOG_FILE_IO    (H5FD_LOG_FILE_READ|H5FD_LOG_FILE_WRITE)
+/* Flag for tracking "flavor" (type) of information stored at each byte */
+#define H5FD_LOG_FLAVOR     0x00000020
+/* Flags for tracking total number of reads/writes/seeks/truncates */
+#define H5FD_LOG_NUM_READ   0x00000040
+#define H5FD_LOG_NUM_WRITE  0x00000080
+#define H5FD_LOG_NUM_SEEK   0x00000100
+#define H5FD_LOG_NUM_TRUNCATE 0x00000200
+#define H5FD_LOG_NUM_IO     (H5FD_LOG_NUM_READ|H5FD_LOG_NUM_WRITE|H5FD_LOG_NUM_SEEK|H5FD_LOG_NUM_TRUNCATE)
+/* Flags for tracking time spent in open/stat/read/write/seek/close */
+#define H5FD_LOG_TIME_OPEN  0x00000400
+#define H5FD_LOG_TIME_STAT  0x00000800
+#define H5FD_LOG_TIME_READ  0x00001000
+#define H5FD_LOG_TIME_WRITE 0x00002000
+#define H5FD_LOG_TIME_SEEK  0x00004000
+#define H5FD_LOG_TIME_CLOSE 0x00008000
+#define H5FD_LOG_TIME_IO    (H5FD_LOG_TIME_OPEN|H5FD_LOG_TIME_STAT|H5FD_LOG_TIME_READ|H5FD_LOG_TIME_WRITE|H5FD_LOG_TIME_SEEK|H5FD_LOG_TIME_CLOSE)
+/* Flag for tracking allocation of space in file */
+#define H5FD_LOG_ALLOC      0x00010000
+#define H5FD_LOG_ALL        (H5FD_LOG_ALLOC|H5FD_LOG_TIME_IO|H5FD_LOG_NUM_IO|H5FD_LOG_FLAVOR|H5FD_LOG_FILE_IO|H5FD_LOG_LOC_IO)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_log_init(void);
+H5_DLL void H5FD_log_term(void);
+H5_DLL herr_t H5Pset_fapl_log(hid_t fapl_id, const char *logfile, unsigned long long flags, size_t buf_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/Resources/windows-libs/HDF5/include/H5FDmpi.h b/Resources/windows-libs/HDF5/include/H5FDmpi.h
new file mode 100644
index 0000000000000000000000000000000000000000..784fe70c0568c2ec8e662a327f6299a6727c96c0
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDmpi.h
@@ -0,0 +1,62 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *              Friday, January 30, 2004
+ *
+ * Purpose:	The public header file for common items for all MPI VFL drivers
+ */
+#ifndef H5FDmpi_H
+#define H5FDmpi_H
+
+/***** Macros for One linked collective IO case. *****/
+/* The default value to do one linked collective IO for all chunks.
+   If the average number of chunks per process is greater than this value,
+      the library will create an MPI derived datatype to link all chunks to do collective IO.
+      The user can set this value through an API. */
+
+#define H5D_ONE_LINK_CHUNK_IO_THRESHOLD 0
+/***** Macros for multi-chunk collective IO case. *****/
+/* The default value of the threshold to do collective IO for this chunk.
+   If the average percentage of processes per chunk is greater than the default value,
+   collective IO is done for this chunk.
+*/
+
+#define H5D_MULTI_CHUNK_IO_COL_THRESHOLD 60
+/* Type of I/O for data transfer properties */
+typedef enum H5FD_mpio_xfer_t {
+    H5FD_MPIO_INDEPENDENT = 0, 		/*zero is the default*/
+    H5FD_MPIO_COLLECTIVE
+} H5FD_mpio_xfer_t;
+
+/* Type of chunked dataset I/O */
+typedef enum H5FD_mpio_chunk_opt_t {
+    H5FD_MPIO_CHUNK_DEFAULT = 0,
+    H5FD_MPIO_CHUNK_ONE_IO,  		/*zero is the default*/
+    H5FD_MPIO_CHUNK_MULTI_IO
+} H5FD_mpio_chunk_opt_t;
+
+/* Type of collective I/O */
+typedef enum H5FD_mpio_collective_opt_t {
+    H5FD_MPIO_COLLECTIVE_IO = 0,
+    H5FD_MPIO_INDIVIDUAL_IO  		/*zero is the default*/
+} H5FD_mpio_collective_opt_t;
+
+/* Include all the MPI VFL headers */
+#include "H5FDmpio.h"           /* MPI I/O file driver			*/
+
+#endif /* H5FDmpi_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5FDmpio.h b/Resources/windows-libs/HDF5/include/H5FDmpio.h
new file mode 100644
index 0000000000000000000000000000000000000000..1d91cc32cb45bde9abc4c4248724f92617aa218c
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDmpio.h
@@ -0,0 +1,66 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the mpio driver.
+ */
+#ifndef H5FDmpio_H
+#define H5FDmpio_H
+
+/* Macros */
+
+#ifdef H5_HAVE_PARALLEL
+#   define H5FD_MPIO	(H5FD_mpio_init())
+#else
+#   define H5FD_MPIO	(-1)
+#endif /* H5_HAVE_PARALLEL */
+
+#ifdef H5_HAVE_PARALLEL
+/*Turn on H5FDmpio_debug if H5F_DEBUG is on */
+#ifdef H5F_DEBUG
+#ifndef H5FDmpio_DEBUG
+#define H5FDmpio_DEBUG
+#endif
+#endif
+
+/* Global var whose value comes from environment variable */
+/* (Defined in H5FDmpio.c) */
+H5_DLLVAR hbool_t H5FD_mpi_opt_types_g;
+
+/* Function prototypes */
+#ifdef __cplusplus
+extern "C" {
+#endif
+H5_DLL hid_t H5FD_mpio_init(void);
+H5_DLL void H5FD_mpio_term(void);
+H5_DLL herr_t H5Pset_fapl_mpio(hid_t fapl_id, MPI_Comm comm, MPI_Info info);
+H5_DLL herr_t H5Pget_fapl_mpio(hid_t fapl_id, MPI_Comm *comm/*out*/,
+			MPI_Info *info/*out*/);
+H5_DLL herr_t H5Pset_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t xfer_mode);
+H5_DLL herr_t H5Pget_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t *xfer_mode/*out*/);
+H5_DLL herr_t H5Pset_dxpl_mpio_collective_opt(hid_t dxpl_id, H5FD_mpio_collective_opt_t opt_mode);
+H5_DLL herr_t H5Pset_dxpl_mpio_chunk_opt(hid_t dxpl_id, H5FD_mpio_chunk_opt_t opt_mode);
+H5_DLL herr_t H5Pset_dxpl_mpio_chunk_opt_num(hid_t dxpl_id, unsigned num_chunk_per_proc);
+H5_DLL herr_t H5Pset_dxpl_mpio_chunk_opt_ratio(hid_t dxpl_id, unsigned percent_num_proc_per_chunk);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H5_HAVE_PARALLEL */
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5FDmulti.h b/Resources/windows-libs/HDF5/include/H5FDmulti.h
new file mode 100644
index 0000000000000000000000000000000000000000..b45a02957004a98a13c5133e022aa859ba2863e3
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDmulti.h
@@ -0,0 +1,49 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the "multi" driver.
+ */
+#ifndef H5FDmulti_H
+#define H5FDmulti_H
+
+#include "H5Ipublic.h"
+#include "H5Ppublic.h"             /* Property lists */
+#include "H5Fpublic.h"
+
+#define H5FD_MULTI	(H5FD_multi_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+H5_DLL hid_t H5FD_multi_init(void);
+H5_DLL void H5FD_multi_term(void);
+H5_DLL herr_t H5Pset_fapl_multi(hid_t fapl_id, const H5FD_mem_t *memb_map,
+			 const hid_t *memb_fapl, const char * const *memb_name,
+			 const haddr_t *memb_addr, hbool_t relax);
+H5_DLL herr_t H5Pget_fapl_multi(hid_t fapl_id, H5FD_mem_t *memb_map/*out*/,
+			 hid_t *memb_fapl/*out*/, char **memb_name/*out*/,
+			 haddr_t *memb_addr/*out*/, hbool_t *relax/*out*/);
+H5_DLL herr_t H5Pset_fapl_split(hid_t fapl, const char *meta_ext,
+			 hid_t meta_plist_id, const char *raw_ext,
+			 hid_t raw_plist_id);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5FDpkg.h b/Resources/windows-libs/HDF5/include/H5FDpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..7c0988ea13d8d5cf7bac50e4ddcecd0a352995f6
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDpkg.h
@@ -0,0 +1,67 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@hdfgroup.org>
+ *		Thursday, January  3, 2008
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5FD package.  Source files outside the H5FD package should
+ *		include H5FDprivate.h instead.
+ */
+#ifndef H5FD_PACKAGE
+#error "Do not include this file outside the H5FD package!"
+#endif
+
+#ifndef _H5FDpkg_H
+#define _H5FDpkg_H
+
+/* Get package's private header */
+#include "H5FDprivate.h"	/* File drivers				*/
+
+/* Other private headers needed by this file */
+#include "H5FLprivate.h"	/* Free lists                           */
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+H5_DLL herr_t H5FD_init(void);
+H5_DLL haddr_t H5FD_alloc_real(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type,
+    hsize_t size, haddr_t *align_addr, hsize_t *align_size);
+H5_DLL herr_t H5FD_free_real(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type,
+    haddr_t addr, hsize_t size);
+
+
+/* Testing routines */
+#ifdef H5FD_TESTING
+#endif /* H5FD_TESTING */
+
+#endif /* _H5FDpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5FDpublic.h b/Resources/windows-libs/HDF5/include/H5FDpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..f1b3920fb6a324db00aa51fced31a50e84553af6
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDpublic.h
@@ -0,0 +1,318 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, July 26, 1999
+ */
+#ifndef _H5FDpublic_H
+#define _H5FDpublic_H
+
+#include "H5public.h"
+#include "H5Fpublic.h"		/*for H5F_close_degree_t */
+
+#define H5_HAVE_VFL 1 /*define a convenient app feature test*/
+#define H5FD_VFD_DEFAULT 0   /* Default VFL driver value */
+
+/* Types of allocation requests: see H5Fpublic.h  */
+typedef enum H5F_mem_t	H5FD_mem_t;
+
+/* Map "fractal heap" header blocks to 'ohdr' type file memory, since its
+ * a fair amount of work to add a new kind of file memory and they are similar
+ * enough to object headers and probably too minor to deserve their own type.
+ *
+ * Map "fractal heap" indirect blocks to 'ohdr' type file memory, since they
+ * are similar to fractal heap header blocks.
+ *
+ * Map "fractal heap" direct blocks to 'lheap' type file memory, since they
+ * will be replacing local heaps.
+ *
+ * Map "fractal heap" 'huge' objects to 'draw' type file memory, since they
+ * represent large objects that are directly stored in the file.
+ *
+ *      -QAK
+ */
+#define H5FD_MEM_FHEAP_HDR      H5FD_MEM_OHDR
+#define H5FD_MEM_FHEAP_IBLOCK   H5FD_MEM_OHDR
+#define H5FD_MEM_FHEAP_DBLOCK   H5FD_MEM_LHEAP
+#define H5FD_MEM_FHEAP_HUGE_OBJ H5FD_MEM_DRAW
+
+/* Map "free space" header blocks to 'ohdr' type file memory, since its
+ * a fair amount of work to add a new kind of file memory and they are similar
+ * enough to object headers and probably too minor to deserve their own type.
+ *
+ * Map "free space" serialized sections to 'lheap' type file memory, since they
+ * are similar enough to local heap info.
+ *
+ *      -QAK
+ */
+#define H5FD_MEM_FSPACE_HDR     H5FD_MEM_OHDR
+#define H5FD_MEM_FSPACE_SINFO   H5FD_MEM_LHEAP
+
+/* Map "shared object header message" master table to 'ohdr' type file memory,
+ * since its a fair amount of work to add a new kind of file memory and they are
+ * similar enough to object headers and probably too minor to deserve their own
+ * type.
+ *
+ * Map "shared object header message" indices to 'btree' type file memory,
+ * since they are similar enough to B-tree nodes.
+ *
+ *      -QAK
+ */
+#define H5FD_MEM_SOHM_TABLE     H5FD_MEM_OHDR
+#define H5FD_MEM_SOHM_INDEX     H5FD_MEM_BTREE
+
+/*
+ * A free-list map which maps all types of allocation requests to a single
+ * free list.  This is useful for drivers that don't really care about
+ * keeping different requests segregated in the underlying file and which
+ * want to make most efficient reuse of freed memory.  The use of the
+ * H5FD_MEM_SUPER free list is arbitrary.
+ */
+#define H5FD_FLMAP_SINGLE {						      \
+    H5FD_MEM_SUPER,			/*default*/			      \
+    H5FD_MEM_SUPER,			/*super*/			      \
+    H5FD_MEM_SUPER,			/*btree*/			      \
+    H5FD_MEM_SUPER,			/*draw*/			      \
+    H5FD_MEM_SUPER,			/*gheap*/			      \
+    H5FD_MEM_SUPER,			/*lheap*/			      \
+    H5FD_MEM_SUPER			/*ohdr*/			      \
+}
+
+/*
+ * A free-list map which segregates requests into `raw' or `meta' data
+ * pools.
+ */
+#define H5FD_FLMAP_DICHOTOMY {						      \
+    H5FD_MEM_SUPER,			/*default*/			      \
+    H5FD_MEM_SUPER,			/*super*/			      \
+    H5FD_MEM_SUPER,			/*btree*/			      \
+    H5FD_MEM_DRAW,			/*draw*/			      \
+    H5FD_MEM_DRAW,			/*gheap*/			      \
+    H5FD_MEM_SUPER,			/*lheap*/			      \
+    H5FD_MEM_SUPER			/*ohdr*/			      \
+}
+
+/*
+ * The default free list map which causes each request type to use it's own
+ * free-list.
+ */
+#define H5FD_FLMAP_DEFAULT {						      \
+    H5FD_MEM_DEFAULT,			/*default*/			      \
+    H5FD_MEM_DEFAULT,			/*super*/			      \
+    H5FD_MEM_DEFAULT,			/*btree*/			      \
+    H5FD_MEM_DEFAULT,			/*draw*/			      \
+    H5FD_MEM_DEFAULT,			/*gheap*/			      \
+    H5FD_MEM_DEFAULT,			/*lheap*/			      \
+    H5FD_MEM_DEFAULT			/*ohdr*/			      \
+}
+
+
+/* Define VFL driver features that can be enabled on a per-driver basis */
+/* These are returned with the 'query' function pointer in H5FD_class_t */
+    /*
+     * Defining the H5FD_FEAT_AGGREGATE_METADATA for a VFL driver means that
+     * the library will attempt to allocate a larger block for metadata and
+     * then sub-allocate each metadata request from that larger block.
+     */
+#define H5FD_FEAT_AGGREGATE_METADATA    0x00000001
+    /*
+     * Defining the H5FD_FEAT_ACCUMULATE_METADATA for a VFL driver means that
+     * the library will attempt to cache metadata as it is written to the file
+     * and build up a larger block of metadata to eventually pass to the VFL
+     * 'write' routine.
+     *
+     * Distinguish between updating the metadata accumulator on writes and
+     * reads.  This is particularly (perhaps only, even) important for MPI-I/O
+     * where we guarantee that writes are collective, but reads may not be.
+     * If we were to allow the metadata accumulator to be written during a
+     * read operation, the application would hang.
+     */
+#define H5FD_FEAT_ACCUMULATE_METADATA_WRITE     0x00000002
+#define H5FD_FEAT_ACCUMULATE_METADATA_READ      0x00000004
+#define H5FD_FEAT_ACCUMULATE_METADATA   (H5FD_FEAT_ACCUMULATE_METADATA_WRITE|H5FD_FEAT_ACCUMULATE_METADATA_READ)
+    /*
+     * Defining the H5FD_FEAT_DATA_SIEVE for a VFL driver means that
+     * the library will attempt to cache raw data as it is read from/written to
+     * a file in a "data seive" buffer.  See Rajeev Thakur's papers:
+     *  http://www.mcs.anl.gov/~thakur/papers/romio-coll.ps.gz
+     *  http://www.mcs.anl.gov/~thakur/papers/mpio-high-perf.ps.gz
+     */
+#define H5FD_FEAT_DATA_SIEVE            0x00000008
+    /*
+     * Defining the H5FD_FEAT_AGGREGATE_SMALLDATA for a VFL driver means that
+     * the library will attempt to allocate a larger block for "small" raw data
+     * and then sub-allocate "small" raw data requests from that larger block.
+     */
+#define H5FD_FEAT_AGGREGATE_SMALLDATA   0x00000010
+    /*
+     * Defining the H5FD_FEAT_IGNORE_DRVRINFO for a VFL driver means that
+     * the library will ignore the driver info that is encoded in the file
+     * for the VFL driver.  (This will cause the driver info to be eliminated
+     * from the file when it is flushed/closed, if the file is opened R/W).
+     */
+#define H5FD_FEAT_IGNORE_DRVRINFO       0x00000020
+    /*
+     * Defining the H5FD_FEAT_DIRTY_SBLK_LOAD for a VFL driver means that
+     * the library will mark the superblock dirty when the file is opened
+     * R/W.  This will cause the driver info to be re-encoded when the file
+     * is flushed/closed.
+     */
+#define H5FD_FEAT_DIRTY_SBLK_LOAD       0x00000040
+    /*
+     * Defining the H5FD_FEAT_POSIX_COMPAT_HANDLE for a VFL driver means that
+     * the handle for the VFD (returned with the 'get_handle' callback) is
+     * of type 'int' and is compatible with POSIX I/O calls.
+     */
+#define H5FD_FEAT_POSIX_COMPAT_HANDLE   0x00000080
+    /* 
+     * Defining the H5FD_FEAT_ALLOW_FILE_IMAGE for a VFL driver means that
+     * the driver is able to use a file image in the fapl as the initial
+     * contents of a file.
+     */
+#define H5FD_FEAT_ALLOW_FILE_IMAGE      0x00000400
+    /*
+     * Defining the H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS for a VFL driver
+     * means that the driver is able to use callbacks to make a copy of the
+     * image to store in memory.
+     */
+#define H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS 0x00000800
+
+
+/* Forward declaration */
+typedef struct H5FD_t H5FD_t;
+
+/* Class information for each file driver */
+typedef struct H5FD_class_t {
+    const char *name;
+    haddr_t maxaddr;
+    H5F_close_degree_t fc_degree;
+    hsize_t (*sb_size)(H5FD_t *file);
+    herr_t  (*sb_encode)(H5FD_t *file, char *name/*out*/,
+                         unsigned char *p/*out*/);
+    herr_t  (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p);
+    size_t  fapl_size;
+    void *  (*fapl_get)(H5FD_t *file);
+    void *  (*fapl_copy)(const void *fapl);
+    herr_t  (*fapl_free)(void *fapl);
+    size_t  dxpl_size;
+    void *  (*dxpl_copy)(const void *dxpl);
+    herr_t  (*dxpl_free)(void *dxpl);
+    H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl,
+                    haddr_t maxaddr);
+    herr_t  (*close)(H5FD_t *file);
+    int     (*cmp)(const H5FD_t *f1, const H5FD_t *f2);
+    herr_t  (*query)(const H5FD_t *f1, unsigned long *flags);
+    herr_t  (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map);
+    haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+    herr_t  (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                    haddr_t addr, hsize_t size);
+    haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type);
+    herr_t  (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr);
+    haddr_t (*get_eof)(const H5FD_t *file);
+    herr_t  (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle);
+    herr_t  (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl,
+                    haddr_t addr, size_t size, void *buffer);
+    herr_t  (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl,
+                     haddr_t addr, size_t size, const void *buffer);
+    herr_t  (*flush)(H5FD_t *file, hid_t dxpl_id, unsigned closing);
+    herr_t  (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
+    herr_t  (*lock)(H5FD_t *file, unsigned char *oid, unsigned lock_type, hbool_t last);
+    herr_t  (*unlock)(H5FD_t *file, unsigned char *oid, hbool_t last);
+    H5FD_mem_t fl_map[H5FD_MEM_NTYPES];
+} H5FD_class_t;
+
+/* A free list is a singly-linked list of address/size pairs. */
+typedef struct H5FD_free_t {
+    haddr_t		addr;
+    hsize_t		size;
+    struct H5FD_free_t	*next;
+} H5FD_free_t;
+
+/*
+ * The main datatype for each driver. Public fields common to all drivers
+ * are declared here and the driver appends private fields in memory.
+ */
+struct H5FD_t {
+    hid_t               driver_id;      /*driver ID for this file   */
+    const H5FD_class_t *cls;            /*constant class info       */
+    unsigned long       fileno;         /* File 'serial' number     */
+    unsigned long       feature_flags;  /* VFL Driver feature Flags */
+    haddr_t             maxaddr;        /* For this file, overrides class */
+    haddr_t             base_addr;      /* Base address for HDF5 data w/in file */
+
+    /* Space allocation management fields */
+    hsize_t             threshold;      /* Threshold for alignment  */
+    hsize_t             alignment;      /* Allocation alignment     */
+};
+
+/* Define enum for the source of file image callbacks */
+typedef enum {
+    H5FD_FILE_IMAGE_OP_NO_OP,
+    H5FD_FILE_IMAGE_OP_PROPERTY_LIST_SET,     
+    H5FD_FILE_IMAGE_OP_PROPERTY_LIST_COPY,
+    H5FD_FILE_IMAGE_OP_PROPERTY_LIST_GET,
+    H5FD_FILE_IMAGE_OP_PROPERTY_LIST_CLOSE,
+    H5FD_FILE_IMAGE_OP_FILE_OPEN,
+    H5FD_FILE_IMAGE_OP_FILE_RESIZE,
+    H5FD_FILE_IMAGE_OP_FILE_CLOSE
+} H5FD_file_image_op_t;
+
+/* Define structure to hold file image callbacks */
+typedef struct {
+    void   *(*image_malloc)(size_t size, H5FD_file_image_op_t file_image_op, 
+                            void *udata);
+    void   *(*image_memcpy)(void *dest, const void *src, size_t size,
+                            H5FD_file_image_op_t file_image_op, void *udata);
+    void   *(*image_realloc)(void *ptr, size_t size, 
+                            H5FD_file_image_op_t file_image_op, void *udata);
+    herr_t  (*image_free)(void *ptr, H5FD_file_image_op_t file_image_op, 
+                          void *udata);
+    void   *(*udata_copy)(void *udata);
+    herr_t  (*udata_free)(void *udata);
+    void *udata;
+} H5FD_file_image_callbacks_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Function prototypes */
+H5_DLL hid_t H5FDregister(const H5FD_class_t *cls);
+H5_DLL herr_t H5FDunregister(hid_t driver_id);
+H5_DLL H5FD_t *H5FDopen(const char *name, unsigned flags, hid_t fapl_id,
+                        haddr_t maxaddr);
+H5_DLL herr_t H5FDclose(H5FD_t *file);
+H5_DLL int H5FDcmp(const H5FD_t *f1, const H5FD_t *f2);
+H5_DLL int H5FDquery(const H5FD_t *f, unsigned long *flags);
+H5_DLL haddr_t H5FDalloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+H5_DLL herr_t H5FDfree(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                       haddr_t addr, hsize_t size);
+H5_DLL haddr_t H5FDget_eoa(H5FD_t *file, H5FD_mem_t type);
+H5_DLL herr_t H5FDset_eoa(H5FD_t *file, H5FD_mem_t type, haddr_t eoa);
+H5_DLL haddr_t H5FDget_eof(H5FD_t *file);
+H5_DLL herr_t H5FDget_vfd_handle(H5FD_t *file, hid_t fapl, void**file_handle);
+H5_DLL herr_t H5FDread(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                       haddr_t addr, size_t size, void *buf/*out*/);
+H5_DLL herr_t H5FDwrite(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                        haddr_t addr, size_t size, const void *buf);
+H5_DLL herr_t H5FDflush(H5FD_t *file, hid_t dxpl_id, unsigned closing);
+H5_DLL herr_t H5FDtruncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
diff --git a/Resources/windows-libs/HDF5/include/H5FDsec2.h b/Resources/windows-libs/HDF5/include/H5FDsec2.h
new file mode 100644
index 0000000000000000000000000000000000000000..b7db0d5ea998e779c8ea2f47ef42789ebaa5b39d
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDsec2.h
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the sec2 driver.
+ */
+#ifndef H5FDsec2_H
+#define H5FDsec2_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_SEC2	(H5FD_sec2_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_sec2_init(void);
+H5_DLL void H5FD_sec2_term(void);
+H5_DLL herr_t H5Pset_fapl_sec2(hid_t fapl_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/Resources/windows-libs/HDF5/include/H5FDstdio.h b/Resources/windows-libs/HDF5/include/H5FDstdio.h
new file mode 100644
index 0000000000000000000000000000000000000000..80443d890165a4588df6b01e594309fc39bfe16c
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDstdio.h
@@ -0,0 +1,41 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the sec2 driver.
+ */
+#ifndef H5FDstdio_H
+#define H5FDstdio_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_STDIO	(H5FD_stdio_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_stdio_init(void);
+H5_DLL void H5FD_stdio_term(void);
+H5_DLL herr_t H5Pset_fapl_stdio(hid_t fapl_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5FDwindows.h b/Resources/windows-libs/HDF5/include/H5FDwindows.h
new file mode 100644
index 0000000000000000000000000000000000000000..7b547bf034d20adc8d1ed7dca18bc30b261e185f
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FDwindows.h
@@ -0,0 +1,49 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Scott Wegner <swegner@hdfgroup.org>
+ *				Based on code by Robb Matzke
+ *              Thursday, May 24 2007
+ *
+ * Purpose:	The public header file for the windows driver.
+ */
+#ifndef H5FDwindows_H
+#define H5FDwindows_H
+
+#include "H5Ipublic.h"
+#include "H5FDsec2.h"
+
+#define H5FD_WINDOWS	(H5FD_windows_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* The code behind the windows VFD has been removed and the windows
+ * VFD initialization has been redirected to the SEC2 driver.  The
+ * "Windows" VFD was actually identical to the SEC2 driver code
+ * (a planned Win32 API driver never happened) so this change
+ * should be transparent to users.
+ */
+#define H5FD_windows_init H5FD_sec2_init
+#define H5FD_windows_term H5FD_sec2_term
+H5_DLL herr_t H5Pset_fapl_windows(hid_t fapl_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5FSpkg.h b/Resources/windows-libs/HDF5/include/H5FSpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..e22e4113ad0a88c59692444a62025d0a8e1aab78
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FSpkg.h
@@ -0,0 +1,250 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *		Tuesday, May  2, 2006
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5FS package.  Source files outside the H5FS package should
+ *		include H5FSprivate.h instead.
+ */
+#ifndef H5FS_PACKAGE
+#error "Do not include this file outside the H5FS package!"
+#endif
+
+#ifndef _H5FSpkg_H
+#define _H5FSpkg_H
+
+/* Uncomment this macro to enable debugging output for free space manager */
+/* #define H5FS_DEBUG */
+
+/* Uncomment this macro to enable debugging output for free space sections */
+/* #define H5FS_SINFO_DEBUG */
+
+/* Uncomment this macro to enable extra sanity checking */
+/* #define H5FS_DEBUG_ASSERT */
+
+/* Get package's private header */
+#include "H5FSprivate.h"	/* File free space                      */
+
+/* Other private headers needed by this file */
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5SLprivate.h"	/* Skip lists				*/
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* Size of checksum information (on disk) */
+#define H5FS_SIZEOF_CHKSUM      4
+
+/* "Standard" size of prefix information for free space metadata */
+#define H5FS_METADATA_PREFIX_SIZE (                                           \
+    H5_SIZEOF_MAGIC   /* Signature */                                         \
+    + 1 /* Version */                                                         \
+    + H5FS_SIZEOF_CHKSUM /* Metadata checksum */                              \
+    )
+
+/* Size of the fractal heap header on disk */
+#define H5FS_HEADER_SIZE(f) (                                                 \
+    /* General metadata fields */                                             \
+    H5FS_METADATA_PREFIX_SIZE                                                 \
+                                                                              \
+    /* Free space header specific fields */                                   \
+    + 1 /* Client ID */                                                       \
+    + H5F_SIZEOF_SIZE(f) /* Total free space tracked */                       \
+    + H5F_SIZEOF_SIZE(f) /* Total # of sections tracked */                    \
+    + H5F_SIZEOF_SIZE(f) /* # of serializable sections tracked */             \
+    + H5F_SIZEOF_SIZE(f) /* # of ghost sections tracked */                    \
+    + 2 /* Number of section classes */                                       \
+    + 2 /* Shrink percent */                                                  \
+    + 2 /* Expand percent */                                                  \
+    + 2 /* Size of address space for sections (log2 of value) */              \
+    + H5F_SIZEOF_SIZE(f) /* Max. size of section to track */                  \
+    + H5F_SIZEOF_ADDR(f) /* Address of serialized free space sections */      \
+    + H5F_SIZEOF_SIZE(f) /* Size of serialized free space sections used */    \
+    + H5F_SIZEOF_SIZE(f) /* Allocated size of serialized free space sections */ \
+    )
+
+/* Size of the free space serialized sections on disk */
+#define H5FS_SINFO_PREFIX_SIZE(f) (                                           \
+    /* General metadata fields */                                             \
+    H5FS_METADATA_PREFIX_SIZE                                                 \
+                                                                              \
+    /* Free space serialized sections specific fields */                      \
+    + H5F_SIZEOF_ADDR(f) /* Address of free space header for these sections */ \
+    )
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/* Callback info for loading a free space header into the cache */
+typedef struct H5FS_hdr_cache_ud_t {
+    H5F_t *f;                  /* File that free space header is within */
+    size_t nclasses;                            /* Number of section classes */
+    const H5FS_section_class_t **classes;       /* Array of section class info */
+    void *cls_init_udata;                       /* Pointer to class init user data */
+    haddr_t addr;              /* Address of header */
+} H5FS_hdr_cache_ud_t;
+
+/* Callback info for loading free space section info into the cache */
+typedef struct H5FS_sinfo_cache_ud_t {
+    H5F_t *f;                  /* File that free space section info is within */
+    H5FS_t *fspace;            /* free space manager */
+    hid_t dxpl_id;
+} H5FS_sinfo_cache_ud_t;
+
+/* Free space section bin info */
+typedef struct H5FS_bin_t {
+    size_t tot_sect_count;      /* Total # of sections in this bin */
+    size_t serial_sect_count;   /* # of serializable sections in this bin */
+    size_t ghost_sect_count;    /* # of un-serializable sections in this bin */
+    H5SL_t *bin_list;           /* Skip list of differently sized sections */
+} H5FS_bin_t;
+
+/* Free space node for free space sections of the same size */
+typedef struct H5FS_node_t {
+    hsize_t sect_size;          /* Size of all sections on list */
+    size_t serial_count;        /* # of serializable sections on list */
+    size_t ghost_count;         /* # of un-serializable sections on list */
+    H5SL_t *sect_list;          /* Skip list to hold pointers to actual free list section node */
+} H5FS_node_t;
+
+/* Free space section info */
+typedef struct H5FS_sinfo_t {
+    /* Information for H5AC cache functions, _must_ be first field in structure */
+    H5AC_info_t cache_info;
+
+/* Stored information */
+    H5FS_bin_t *bins;           /* Array of lists of lists of free sections   */
+
+/* Computed/cached values */
+    hbool_t dirty;              /* Whether this info in memory is out of sync w/info in file */
+    unsigned nbins;             /* Number of bins                             */
+    size_t serial_size;         /* Total size of all serializable sections    */
+    size_t tot_size_count;      /* Total number of differently sized sections */
+    size_t serial_size_count;   /* Total number of differently sized serializable sections */
+    size_t ghost_size_count;    /* Total number of differently sized un-serializable sections */
+    unsigned sect_prefix_size;  /* Size of the section serialization prefix (in bytes) */
+    unsigned sect_off_size;     /* Size of a section offset (in bytes)        */
+    unsigned sect_len_size;     /* Size of a section length (in bytes)        */
+    H5FS_t *fspace;             /* Pointer to free space manager that owns sections */
+
+/* Memory data structures (not stored directly) */
+    H5SL_t *merge_list;         /* Skip list to hold sections for detecting merges */
+} H5FS_sinfo_t;
+
+/* Free space header info */
+struct H5FS_t {
+    /* Information for H5AC cache functions, _must_ be first field in structure */
+    H5AC_info_t cache_info;
+
+/* Stored information */
+    /* Statistics about sections managed */
+    hsize_t tot_space;          /* Total amount of space tracked              */
+    hsize_t tot_sect_count;     /* Total # of sections tracked                */
+    hsize_t serial_sect_count;  /* # of serializable sections tracked         */
+    hsize_t ghost_sect_count;   /* # of un-serializable sections tracked      */
+
+    /* Creation parameters */
+    H5FS_client_t client;       /* Type of user of this free space manager    */
+    unsigned nclasses;          /* Number of section classes handled          */
+    unsigned shrink_percent;    /* Percent of "normal" serialized size to shrink serialized space at */
+    unsigned expand_percent;    /* Percent of "normal" serialized size to expand serialized space at */
+    unsigned max_sect_addr;     /* Size of address space free sections are within (log2 of actual value) */
+    hsize_t max_sect_size;      /* Maximum size of section to track */
+
+    /* Serialized section information */
+    haddr_t sect_addr;          /* Address of the section info in the file    */
+    hsize_t sect_size;          /* Size of the section info in the file       */
+    hsize_t alloc_sect_size;    /* Allocated size of the section info in the file */
+
+/* Computed/cached values */
+    unsigned rc;                /* Count of outstanding references to struct  */
+    haddr_t addr;               /* Address of free space header on disk       */
+    size_t hdr_size;            /* Size of free space header on disk          */
+    H5FS_sinfo_t *sinfo;        /* Section information                        */
+    unsigned sinfo_lock_count;  /* # of times the section info has been locked */
+    hbool_t sinfo_protected;    /* Whether the section info was protected when locked */
+    hbool_t sinfo_modified;     /* Whether the section info has been modified while locked */
+    H5AC_protect_t sinfo_accmode; /* Access mode for protecting the section info */
+    size_t max_cls_serial_size; /* Max. additional size of serialized form of section */
+    hsize_t    threshold;      	/* Threshold for alignment              */
+    hsize_t    alignment;      	/* Alignment                            */
+
+
+/* Memory data structures (not stored directly) */
+    H5FS_section_class_t *sect_cls; /* Array of section classes for this free list */
+};
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/* H5FS header inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_FSPACE_HDR[1];
+
+/* H5FS section info inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_FSPACE_SINFO[1];
+
+/* Declare a free list to manage the H5FS_node_t struct */
+H5FL_EXTERN(H5FS_node_t);
+
+/* Declare a free list to manage the H5FS_bin_t sequence information */
+H5FL_SEQ_EXTERN(H5FS_bin_t);
+
+/* Declare a free list to manage the H5FS_sinfo_t struct */
+H5FL_EXTERN(H5FS_sinfo_t);
+
+/* Declare a free list to manage the H5FS_t struct */
+H5FL_EXTERN(H5FS_t);
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+/* Free space manager header routines */
+H5_DLL H5FS_t *H5FS_new(const H5F_t *f, size_t nclasses,
+    const H5FS_section_class_t *classes[], void *cls_init_udata);
+H5_DLL herr_t H5FS_incr(H5FS_t *fspace);
+H5_DLL herr_t H5FS_decr(H5FS_t *fspace);
+H5_DLL herr_t H5FS_dirty(H5FS_t *fspace);
+
+/* Free space section routines */
+H5_DLL H5FS_sinfo_t *H5FS_sinfo_new(H5F_t *f, H5FS_t *fspace);
+
+/* Routines for destroying structures */
+H5_DLL herr_t H5FS_hdr_dest(H5FS_t *hdr);
+H5_DLL herr_t H5FS_sinfo_dest(H5FS_sinfo_t *sinfo);
+
+/* Sanity check routines */
+#ifdef H5FS_DEBUG
+H5_DLL herr_t H5FS_assert(const H5FS_t *fspace);
+H5_DLL herr_t H5FS_sect_assert(const H5FS_t *fspace);
+#endif /* H5FS_DEBUG */
+
+/* Testing routines */
+#ifdef H5FS_TESTING
+H5_DLL herr_t H5FS_get_cparam_test(const H5FS_t *fh, H5FS_create_t *cparam);
+H5_DLL int H5FS_cmp_cparam_test(const H5FS_create_t *cparam1, const H5FS_create_t *cparam2);
+#endif /* H5FS_TESTING */
+
+#endif /* _H5FSpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5FSpublic.h b/Resources/windows-libs/HDF5/include/H5FSpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..d1bae94ade3cece623108b1362ce322ef2cd45ee
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FSpublic.h
@@ -0,0 +1,54 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5FSpublic.h
+ *                      May  2 2006
+ *                      Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *
+ * Purpose:             Public declarations for the file free space package.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef _H5FSpublic_H
+#define _H5FSpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/**********************************/
+/* Public API Function Prototypes */
+/**********************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _H5FSpublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5FaccProp.h b/Resources/windows-libs/HDF5/include/H5FaccProp.h
new file mode 100644
index 0000000000000000000000000000000000000000..4042eba6f839ebfaeeac61b098022fed3b23a8a4
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FaccProp.h
@@ -0,0 +1,148 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class FileAccPropList represents the HDF5 file access property list and
+// inherits from DataType.
+
+#ifndef __H5FileAccPropList_H
+#define __H5FileAccPropList_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//! Class FileAccPropList represents the HDF5 file access property list.
+class H5_DLLCPP FileAccPropList : public PropList {
+   public:
+	static const FileAccPropList DEFAULT;
+
+	// Creates a file access property list.
+	FileAccPropList();
+
+	// Modifies this property list to use the H5FD_STDIO driver
+	void setStdio() const;
+
+	// Set file driver for this property list
+	void setDriver(hid_t new_driver_id, const void *new_driver_info) const;
+
+	// Returns a low-level file driver identifier.
+	hid_t getDriver() const;
+
+	// Sets offset for family driver.
+	void setFamilyOffset(hsize_t offset) const;
+
+	// Gets offset for family driver.
+	hsize_t getFamilyOffset() const;
+
+	// Modifies this file access property list to use the sec2 driver.
+	void setSec2() const;
+
+	// Modifies this file access property list to use the H5FD_CORE
+	// driver.
+	void setCore (size_t increment, hbool_t backing_store) const;
+
+	// Queries H5FD_CORE driver properties.
+	void getCore (size_t& increment, hbool_t& backing_store) const;
+
+	// Sets this file access properties list to the family driver.
+	void setFamily( hsize_t memb_size, const FileAccPropList& memb_plist ) const;
+
+	// Returns information about the family file access property list.
+	void getFamily(hsize_t& memb_size, FileAccPropList& memb_plist) const;
+	FileAccPropList getFamily(hsize_t& memb_size) const;
+
+	// Emulates the old split file driver,
+	void setSplit(const FileAccPropList& meta_plist,
+		      const FileAccPropList& raw_plist,
+		      const char* meta_ext = ".meta",
+		      const char* raw_ext = ".raw" ) const;
+	void setSplit(const FileAccPropList& meta_plist,
+		      const FileAccPropList& raw_plist,
+		      const H5std_string& meta_ext = ".meta",
+		      const H5std_string& raw_ext = ".raw") const;
+	// These two overloaded functions are kept for backward compatibility
+	// only; they missed the const's and will be removed in future release.
+	void setSplit(FileAccPropList& meta_plist, FileAccPropList& raw_plist,
+	     const char* meta_ext=".meta", const char* raw_ext=".raw") const;
+	void setSplit(FileAccPropList& meta_plist, FileAccPropList& raw_plist,
+	     const H5std_string& meta_ext=".meta",
+	     const H5std_string& raw_ext=".raw") const;
+
+	// Sets the maximum size of the data sieve buffer.
+	void setSieveBufSize(size_t bufsize) const;
+
+	// Returns the current settings for the data sieve buffer size
+	// property
+	size_t getSieveBufSize() const;
+
+	// Sets the minimum size of metadata block allocations.
+	void setMetaBlockSize(hsize_t &block_size) const;
+
+	// Returns the current metadata block size setting.
+	hsize_t getMetaBlockSize() const;
+
+	// Modifies this file access property list to use the logging driver.
+	void setLog(const char *logfile, unsigned flags, size_t buf_size) const;
+	void setLog(const H5std_string& logfile, unsigned flags, size_t buf_size) const;
+
+	// Sets alignment properties of this file access property list
+	void setAlignment( hsize_t threshold = 1, hsize_t alignment = 1 ) const;
+
+	// Retrieves the current settings for alignment properties from
+	// this property list.
+	void getAlignment( hsize_t& threshold, hsize_t& alignment ) const;
+
+	// Sets data type for multi driver.
+	void setMultiType(H5FD_mem_t dtype) const;
+
+	// Returns the data type property for MULTI driver.
+	H5FD_mem_t getMultiType() const;
+
+	// Sets the meta data cache and raw data chunk cache parameters.
+	void setCache( int mdc_nelmts, size_t rdcc_nelmts, size_t rdcc_nbytes, double rdcc_w0 ) const;
+
+	// Queries the meta data cache and raw data chunk cache parameters.
+	void getCache( int& mdc_nelmts, size_t& rdcc_nelmts, size_t& rdcc_nbytes, double& rdcc_w0 ) const;
+
+	// Sets the degree for the file close behavior.
+	void setFcloseDegree(H5F_close_degree_t degree);
+
+	// Returns the degree for the file close behavior.
+	H5F_close_degree_t getFcloseDegree();
+
+	// Sets garbage collecting references flag.
+	void setGcReferences( unsigned gc_ref = 0 ) const;
+
+	// Returns garbage collecting references setting.
+	unsigned getGcReferences() const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("FileAccPropList"); }
+
+	// Copy constructor: creates a copy of a FileAccPropList object.
+	FileAccPropList( const FileAccPropList& original );
+
+	// Creates a copy of an existing file access property list
+	// using the property list id.
+	FileAccPropList (const hid_t plist_id);
+
+	// Noop destructor
+	virtual ~FileAccPropList();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5FileAccPropList_H
diff --git a/Resources/windows-libs/HDF5/include/H5FcreatProp.h b/Resources/windows-libs/HDF5/include/H5FcreatProp.h
new file mode 100644
index 0000000000000000000000000000000000000000..4149880cd7ca6d90ff086df7bcdcd3c9e498ae08
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FcreatProp.h
@@ -0,0 +1,79 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5FileCreatPropList_H
+#define __H5FileCreatPropList_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//! Class FileCreatPropList represents the HDF5 file create property list.
+class H5_DLLCPP FileCreatPropList : public PropList {
+   public:
+	// Default file creation property list.
+	static const FileCreatPropList DEFAULT;
+
+	// Creates a file create property list.
+	FileCreatPropList();
+
+	// Retrieves version information for various parts of a file.
+	void getVersion( unsigned& super, unsigned& freelist, unsigned& stab, unsigned& shhdr ) const;
+
+	// Sets the userblock size field of a file creation property list.
+	void setUserblock( hsize_t size ) const;
+
+	// Gets the size of a user block in this file creation property list.
+	hsize_t getUserblock() const;
+
+	// Retrieves the size-of address and size quantities stored in a
+	// file according to this file creation property list.
+	void getSizes( size_t& sizeof_addr, size_t& sizeof_size ) const;
+
+	// Sets file size-of addresses and sizes.
+	void setSizes( size_t sizeof_addr = 4, size_t sizeof_size = 4 ) const;
+
+	// Retrieves the size of the symbol table B-tree 1/2 rank and the
+	// symbol table leaf node 1/2 size.
+	void getSymk( unsigned& int_nodes_k, unsigned& leaf_nodes_k ) const;
+
+	// Sets the size of parameters used to control the symbol table nodes.
+	void setSymk( unsigned int_nodes_k, unsigned leaf_nodes_k ) const;
+
+	// Returns the 1/2 rank of an indexed storage B-tree.
+	unsigned getIstorek() const;
+
+	// Sets the size of parameter used to control the B-trees for
+	// indexing chunked datasets.
+	void setIstorek( unsigned ik ) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("FileCreatPropList"); }
+
+	// Copy constructor: creates a copy of a FileCreatPropList object.
+	FileCreatPropList(const FileCreatPropList& orig);
+
+	// Creates a copy of an existing file create property list
+	// using the property list id.
+	FileCreatPropList (const hid_t plist_id);
+
+	// Noop destructor
+	virtual ~FileCreatPropList();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5FileCreatPropList_H
diff --git a/Resources/windows-libs/HDF5/include/H5File.h b/Resources/windows-libs/HDF5/include/H5File.h
new file mode 100644
index 0000000000000000000000000000000000000000..0ef85b58a168c0f22fb785c931d155beebf0089e
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5File.h
@@ -0,0 +1,124 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5File_H
+#define __H5File_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class H5File
+    \brief Class H5File represents an HDF5 file.
+
+    It inherits from H5Location and CommonFG.
+*/
+class H5_DLLCPP H5File : public H5Location, public CommonFG {
+   public:
+	// Creates or opens an HDF5 file.
+	H5File( const char* name, unsigned int flags,
+	   const FileCreatPropList& create_plist = FileCreatPropList::DEFAULT,
+	   const FileAccPropList& access_plist = FileAccPropList::DEFAULT );
+	H5File( const H5std_string& name, unsigned int flags,
+	   const FileCreatPropList& create_plist = FileCreatPropList::DEFAULT,
+	   const FileAccPropList& access_plist = FileAccPropList::DEFAULT );
+
+	// Open the file
+	void openFile(const H5std_string& name, unsigned int flags,
+	    const FileAccPropList& access_plist = FileAccPropList::DEFAULT);
+	void openFile(const char* name, unsigned int flags,
+	    const FileAccPropList& access_plist = FileAccPropList::DEFAULT);
+
+	// Close this file.
+	virtual void close();
+
+	// Gets the access property list of this file.
+	FileAccPropList getAccessPlist() const;
+
+	// Gets the creation property list of this file.
+	FileCreatPropList getCreatePlist() const;
+
+	// Retrieves the file size of an opened file.
+	hsize_t getFileSize() const;
+
+	// Returns the amount of free space in the file.
+	hssize_t getFreeSpace() const;
+
+	// Returns the number of opened object IDs (files, datasets, groups
+	// and datatypes) in the same file.
+	ssize_t getObjCount(unsigned types) const;
+	ssize_t getObjCount() const;
+
+	// Retrieves a list of opened object IDs (files, datasets, groups
+	// and datatypes) in the same file.
+	void getObjIDs(unsigned types, size_t max_objs, hid_t *oid_list) const;
+
+	// Returns the pointer to the file handle of the low-level file driver.
+	void getVFDHandle(void **file_handle) const;
+	void getVFDHandle(const FileAccPropList& fapl, void **file_handle) const;
+	void getVFDHandle(FileAccPropList& fapl, void **file_handle) const; // kept for backward compatibility
+
+	// Determines if a file, specified by its name, is in HDF5 format
+	static bool isHdf5(const char* name );
+	static bool isHdf5(const H5std_string& name );
+
+	// Reopens this file.
+	void reOpen();	// added for better name
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	void reopen();  // obsolete in favor of reOpen()
+
+	// Gets the file id
+	virtual hid_t getLocId() const;
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("H5File"); }
+
+	// Throw file exception.
+	virtual void throwException(const H5std_string& func_name, const H5std_string& msg) const;
+
+	// Default constructor
+	H5File();
+
+	// Copy constructor: makes a copy of the original H5File object.
+	H5File(const H5File& original);
+
+	// Gets the HDF5 file id.
+	virtual hid_t getId() const;
+
+	// H5File destructor.
+	virtual ~H5File();
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Sets the HDF5 file id.
+	virtual void p_setId(const hid_t new_id);
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+   private:
+	hid_t id;	// HDF5 file id
+
+	// This function is private and contains common code between the
+	// constructors taking a string or a char*
+	void p_get_file( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist );
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5File_H
diff --git a/Resources/windows-libs/HDF5/include/H5FloatType.h b/Resources/windows-libs/HDF5/include/H5FloatType.h
new file mode 100644
index 0000000000000000000000000000000000000000..4d5de171fe4ba2e23e48f42597cf5368530b1a09
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5FloatType.h
@@ -0,0 +1,75 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5FloatType_H
+#define __H5FloatType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//! Class FloatType operates on HDF5 floating point datatype.
+class H5_DLLCPP FloatType : public AtomType {
+   public:
+        // Creates a floating-point type using a predefined type.
+        FloatType( const PredType& pred_type );
+
+	// Gets the floating-point datatype of the specified dataset.
+	FloatType( const DataSet& dataset );
+
+	// Retrieves the exponent bias of a floating-point type.
+	size_t getEbias() const;
+
+	// Sets the exponent bias of a floating-point type.
+	void setEbias( size_t ebias ) const;
+
+	// Retrieves floating point datatype bit field information.
+	void getFields( size_t& spos, size_t& epos, size_t& esize, size_t& mpos, size_t& msize ) const;
+
+	// Sets locations and sizes of floating point bit fields.
+	void setFields( size_t spos, size_t epos, size_t esize, size_t mpos, size_t msize ) const;
+
+	// Retrieves the internal padding type for unused bits in floating-point datatypes.
+	H5T_pad_t getInpad( H5std_string& pad_string ) const;
+
+	// Fills unused internal floating point bits.
+	void setInpad( H5T_pad_t inpad ) const;
+
+	// Retrieves mantissa normalization of a floating-point datatype.
+	H5T_norm_t getNorm( H5std_string& norm_string ) const;
+
+	// Sets the mantissa normalization of a floating-point datatype.
+	void setNorm( H5T_norm_t norm ) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("FloatType"); }
+
+	// Default constructor
+	FloatType();
+
+	// Creates a floating-point datatype using an existing id.
+	FloatType( const hid_t existing_id );
+
+	// Copy constructor: makes a copy of the original FloatType object.
+	FloatType( const FloatType& original );
+
+	// Noop destructor.
+	virtual ~FloatType();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5FloatType_H
diff --git a/Resources/windows-libs/HDF5/include/H5Fpkg.h b/Resources/windows-libs/HDF5/include/H5Fpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..1f10dbc88bcc62c5e73d8c505fb6f8887343b4f2
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Fpkg.h
@@ -0,0 +1,347 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *		Thursday, September 28, 2000
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5F package.  Source files outside the H5F package should
+ *		include H5Fprivate.h instead.
+ */
+#ifndef H5F_PACKAGE
+#error "Do not include this file outside the H5F package!"
+#endif
+
+#ifndef _H5Fpkg_H
+#define _H5Fpkg_H
+
+/* Get package's private header */
+#include "H5Fprivate.h"
+
+/* Other public headers needed by this file */
+#include "H5Bpublic.h"          /* B-tree header, for H5B_NUM_BTREE_ID */
+
+/* Other private headers needed by this file */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"        /* Metadata cache                       */
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5FOprivate.h"        /* File objects                         */
+#include "H5FSprivate.h"	/* File free space                      */
+#include "H5Gprivate.h"		/* Groups 			  	*/
+#include "H5Oprivate.h"         /* Object header messages               */
+#include "H5RCprivate.h"	/* Reference counted object functions	*/
+
+
+/*
+ * Feature: Define this constant on the compiler command-line if you want to
+ *	    see some debugging messages on the debug stream.
+ */
+#ifdef NDEBUG
+#  undef H5F_DEBUG
+#endif
+
+/* Define the HDF5 file signature */
+#define H5F_SIGNATURE	  "\211HDF\r\n\032\n"
+#define H5F_SIGNATURE_LEN 8
+
+/* Superblock status flags */
+#define H5F_SUPER_WRITE_ACCESS          0x01
+#define H5F_SUPER_FILE_OK               0x02
+#define H5F_SUPER_ALL_FLAGS             (H5F_SUPER_WRITE_ACCESS | H5F_SUPER_FILE_OK)
+
+/* Mask for removing private file access flags */
+#define H5F_ACC_PUBLIC_FLAGS 	        0x001fu
+
+/* Free space section+aggregator merge flags */
+#define H5F_FS_MERGE_METADATA           0x01    /* Section can merge with metadata aggregator */
+#define H5F_FS_MERGE_RAWDATA            0x02    /* Section can merge with small 'raw' data aggregator */
+
+/* Macro to abstract checking whether file is using a free space manager */
+#define H5F_HAVE_FREE_SPACE_MANAGER(F)  TRUE    /* Currently always have a free space manager */
+
+/* Macros for encoding/decoding superblock */
+#define H5F_MAX_DRVINFOBLOCK_SIZE  1024         /* Maximum size of superblock driver info buffer */
+#define H5F_DRVINFOBLOCK_HDR_SIZE 16            /* Size of superblock driver info header */
+
+/* Superblock sizes for various versions */
+#define H5F_SIZEOF_CHKSUM 4     /* Checksum size in the file */
+
+/* Fixed-size portion at the beginning of all superblocks */
+#define H5F_SUPERBLOCK_FIXED_SIZE ( H5F_SIGNATURE_LEN                   \
+        + 1) /* superblock version */
+
+/* Macros for computing variable-size superblock size */
+#define H5F_SUPERBLOCK_VARLEN_SIZE_COMMON                               \
+        (2  /* freespace, and root group versions */			\
+        + 1 /* reserved */                                              \
+        + 3 /* shared header vers, size of address, size of lengths */  \
+        + 1 /* reserved */                                              \
+        + 4 /* group leaf k, group internal k */                        \
+        + 4) /* consistency flags */
+#define H5F_SUPERBLOCK_VARLEN_SIZE_V0(f)                                \
+        ( H5F_SUPERBLOCK_VARLEN_SIZE_COMMON /* Common variable-length info */ \
+        + H5F_SIZEOF_ADDR(f) /* base address */                         \
+        + H5F_SIZEOF_ADDR(f) /* <unused> */				\
+        + H5F_SIZEOF_ADDR(f) /* EOF address */                          \
+        + H5F_SIZEOF_ADDR(f) /* driver block address */                 \
+        + H5G_SIZEOF_ENTRY(f)) /* root group ptr */
+#define H5F_SUPERBLOCK_VARLEN_SIZE_V1(f)                                \
+        ( H5F_SUPERBLOCK_VARLEN_SIZE_COMMON /* Common variable-length info */ \
+        + 2 /* indexed B-tree internal k */                             \
+        + 2 /* reserved */                                              \
+        + H5F_SIZEOF_ADDR(f) /* base address */                         \
+        + H5F_SIZEOF_ADDR(f) /* <unused> */				\
+        + H5F_SIZEOF_ADDR(f) /* EOF address */                          \
+        + H5F_SIZEOF_ADDR(f) /* driver block address */                 \
+        + H5G_SIZEOF_ENTRY(f)) /* root group ptr */
+#define H5F_SUPERBLOCK_VARLEN_SIZE_V2(f)                                \
+        ( 2 /* size of address, size of lengths */                      \
+        + 1 /* consistency flags */                                     \
+        + H5F_SIZEOF_ADDR(f) /* base address */                         \
+        + H5F_SIZEOF_ADDR(f) /* superblock extension address */         \
+        + H5F_SIZEOF_ADDR(f) /* EOF address */                          \
+        + H5F_SIZEOF_ADDR(f) /* root group object header address */     \
+        + H5F_SIZEOF_CHKSUM) /* superblock checksum (keep this last) */
+#define H5F_SUPERBLOCK_VARLEN_SIZE(v, f) (				\
+        (v == 0 ? H5F_SUPERBLOCK_VARLEN_SIZE_V0(f) : 0)			\
+        + (v == 1 ? H5F_SUPERBLOCK_VARLEN_SIZE_V1(f) : 0)               \
+        + (v == 2 ? H5F_SUPERBLOCK_VARLEN_SIZE_V2(f) : 0))
+
+/* Total size of superblock, depends on superblock version */
+#define H5F_SUPERBLOCK_SIZE(v, f) ( H5F_SUPERBLOCK_FIXED_SIZE           \
+        + H5F_SUPERBLOCK_VARLEN_SIZE(v, f))
+
+
+/* Forward declaration external file cache struct used below (defined in
+ * H5Fefc.c) */
+typedef struct H5F_efc_t H5F_efc_t;
+
+/* Structure for metadata & "small [raw] data" block aggregation fields */
+struct H5F_blk_aggr_t {
+    unsigned long       feature_flag;   /* Feature flag type */
+    hsize_t             alloc_size;     /* Size for allocating new blocks */
+    hsize_t             tot_size;       /* Total amount of bytes aggregated into block */
+    hsize_t             size;           /* Current size of block left */
+    haddr_t             addr;           /* Location of block left */
+};
+
+/* Structure for metadata accumulator fields */
+typedef struct H5F_meta_accum_t {
+    unsigned char      *buf;            /* Buffer to hold the accumulated metadata */
+    haddr_t             loc;            /* File location (offset) of the accumulated metadata */
+    size_t              size;           /* Size of the accumulated metadata buffer used (in bytes) */
+    size_t              alloc_size;     /* Size of the accumulated metadata buffer allocated (in bytes) */
+    size_t              dirty_off;      /* Offset of the dirty region in the accumulator buffer */
+    size_t              dirty_len;      /* Length of the dirty region in the accumulator buffer */
+    hbool_t             dirty;          /* Flag to indicate that the accumulated metadata is dirty */
+} H5F_meta_accum_t;
+
+/* Enum for free space manager state */
+typedef enum H5F_fs_state_t {
+    H5F_FS_STATE_CLOSED,                /* Free space manager is closed */
+    H5F_FS_STATE_OPEN,                  /* Free space manager has been opened */
+    H5F_FS_STATE_DELETING               /* Free space manager is being deleted */
+} H5F_fs_state_t;
+
+/* A record of the mount table */
+typedef struct H5F_mount_t {
+    struct H5G_t	*group;	/* Mount point group held open		*/
+    struct H5F_t	*file;	/* File mounted at that point		*/
+} H5F_mount_t;
+
+/*
+ * The mount table describes what files are attached to (mounted on) the file
+ * to which this table belongs.
+ */
+typedef struct H5F_mtab_t {
+    unsigned		nmounts;/* Number of children which are mounted	*/
+    unsigned		nalloc;	/* Number of mount slots allocated	*/
+    H5F_mount_t		*child;	/* An array of mount records		*/
+} H5F_mtab_t;
+
+/* Structure specifically to store superblock. This was originally
+ * maintained entirely within H5F_file_t, but is now extracted
+ * here because the superblock is now handled by the cache */
+typedef struct H5F_super_t {
+    H5AC_info_t cache_info;     /* Cache entry information structure          */
+    unsigned    super_vers;     /* Superblock version                         */
+    uint8_t     status_flags;   /* File status flags                          */
+    unsigned    sym_leaf_k;     /* Size of leaves in symbol tables            */
+    unsigned    btree_k[H5B_NUM_BTREE_ID]; /* B-tree key values for each type */
+    haddr_t     base_addr;      /* Absolute base address for rel.addrs.       */
+                                /* (superblock for file is at this offset)    */
+    haddr_t     ext_addr;       /* Relative address of superblock extension   */
+    haddr_t     driver_addr;    /* File driver information block address      */
+    haddr_t     root_addr;      /* Root group address                         */
+    H5G_entry_t *root_ent;      /* Root group symbol table entry              */
+} H5F_super_t;
+
+/*
+ * Define the structure to store the file information for HDF5 files. One of
+ * these structures is allocated per file, not per H5Fopen(). That is, set of
+ * H5F_t structs can all point to the same H5F_file_t struct. The `nrefs'
+ * count in this struct indicates the number of H5F_t structs which are
+ * pointing to this struct.
+ */
+struct H5F_file_t {
+    H5FD_t	*lf; 		/* Lower level file handle for I/O	*/
+    H5F_super_t *sblock;        /* Pointer to (pinned) superblock for file */
+    unsigned	nrefs;		/* Ref count for times file is opened	*/
+    unsigned	flags;		/* Access Permissions for file          */
+    H5F_mtab_t	mtab;		/* File mount table                     */
+    H5F_efc_t   *efc;           /* External file cache                  */
+
+    /* Cached values from FCPL/superblock */
+    uint8_t	sizeof_addr;	/* Size of addresses in file            */
+    uint8_t	sizeof_size;	/* Size of offsets in file              */
+    haddr_t	sohm_addr;	/* Relative address of shared object header message table */
+    unsigned	sohm_vers;	/* Version of shared message table on disk */
+    unsigned	sohm_nindexes;	/* Number of shared messages indexes in the table */
+    unsigned long feature_flags; /* VFL Driver feature Flags            */
+    haddr_t	maxaddr;	/* Maximum address for file             */
+
+    H5AC_t      *cache;		/* The object cache	 		*/
+    H5AC_cache_config_t
+		mdc_initCacheCfg; /* initial configuration for the      */
+                                /* metadata cache.  This structure is   */
+                                /* fixed at creation time and should    */
+                                /* not change thereafter.               */
+    hid_t       fcpl_id;	/* File creation property list ID 	*/
+    H5F_close_degree_t fc_degree;   /* File close behavior degree	*/
+    size_t	rdcc_nslots;	/* Size of raw data chunk cache (slots)	*/
+    size_t	rdcc_nbytes;	/* Size of raw data chunk cache	(bytes)	*/
+    double	rdcc_w0;	/* Preempt read chunks first? [0.0..1.0]*/
+    size_t      sieve_buf_size; /* Size of the data sieve buffer allocated (in bytes) */
+    hsize_t	threshold;	/* Threshold for alignment		*/
+    hsize_t	alignment;	/* Alignment				*/
+    unsigned	gc_ref;		/* Garbage-collect references?		*/
+    hbool_t	latest_format;	/* Always use the latest format?	*/
+    hbool_t	store_msg_crt_idx;  /* Store creation index for object header messages?	*/
+    unsigned	ncwfs;		/* Num entries on cwfs list		*/
+    struct H5HG_heap_t **cwfs;	/* Global heap cache			*/
+    struct H5G_t *root_grp;	/* Open root group			*/
+    H5FO_t *open_objs;          /* Open objects in file                 */
+    H5RC_t *grp_btree_shared;   /* Ref-counted group B-tree node info   */
+
+    /* File space allocation information */
+    hbool_t     use_tmp_space;  /* Whether temp. file space allocation is allowed */
+    haddr_t	tmp_addr;       /* Next address to use for temp. space in the file */
+    unsigned fs_aggr_merge[H5FD_MEM_NTYPES];    /* Flags for whether free space can merge with aggregator(s) */
+    H5F_fs_state_t fs_state[H5FD_MEM_NTYPES];   /* State of free space manager for each type */
+    haddr_t fs_addr[H5FD_MEM_NTYPES];   /* Address of free space manager info for each type */
+    H5FS_t *fs_man[H5FD_MEM_NTYPES];    /* Free space manager for each file space type */
+    H5FD_mem_t fs_type_map[H5FD_MEM_NTYPES]; /* Mapping of "real" file space type into tracked type */
+    H5F_blk_aggr_t meta_aggr;   /* Metadata aggregation info */
+                                /* (if aggregating metadata allocations) */
+    H5F_blk_aggr_t sdata_aggr;  /* "Small data" aggregation info */
+                                /* (if aggregating "small data" allocations) */
+
+    /* Metadata accumulator information */
+    H5F_meta_accum_t accum;     /* Metadata accumulator info           	*/
+};
+
+/*
+ * This is the top-level file descriptor.  One of these structures is
+ * allocated every time H5Fopen() is called although they may contain pointers
+ * to shared H5F_file_t structs.
+ */
+struct H5F_t {
+    char		*open_name;	/* Name used to open file	*/
+    char		*actual_name;	/* Actual name of the file, after resolving symlinks, etc. */
+    char               	*extpath;       /* Path for searching target external link file */
+    H5F_file_t		*shared;	/* The shared file info		*/
+    unsigned		nopen_objs;	/* Number of open object headers*/
+    H5FO_t              *obj_count;     /* # of time each object is opened through top file structure */
+    hid_t               file_id;        /* ID of this file              */
+    hbool_t             closing;        /* File is in the process of being closed */
+    struct H5F_t        *parent;        /* Parent file that this file is mounted to */
+    unsigned            nmounts;        /* Number of children mounted to this file */
+};
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/* Declare a free list to manage the H5F_t struct */
+H5FL_EXTERN(H5F_t);
+
+/* Declare a free list to manage the H5F_file_t struct */
+H5FL_EXTERN(H5F_file_t);
+
+H5_DLLVAR const H5AC_class_t H5AC_SUPERBLOCK[1];
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+/* General routines */
+H5_DLL herr_t H5F_init(void);
+H5_DLL herr_t H5F__term_deprec_interface(void);
+H5_DLL herr_t H5F_locate_signature(H5FD_t *file, hid_t dxpl_id, haddr_t *sig_addr);
+H5_DLL herr_t H5F_flush(H5F_t *f, hid_t dxpl_id, hbool_t closing);
+
+/* File mount related routines */
+H5_DLL herr_t H5F_close_mounts(H5F_t *f);
+H5_DLL int H5F_term_unmount_cb(void *obj_ptr, hid_t obj_id, void *key);
+H5_DLL herr_t H5F_mount_count_ids(H5F_t *f, unsigned *nopen_files, unsigned *nopen_objs);
+
+/* Superblock related routines */
+H5_DLL herr_t H5F_super_init(H5F_t *f, hid_t dxpl_id);
+H5_DLL herr_t H5F_super_read(H5F_t *f, hid_t dxpl_id);
+H5_DLL herr_t H5F_super_size(H5F_t *f, hid_t dxpl_id, hsize_t *super_size,
+    hsize_t *super_ext_info);
+H5_DLL herr_t H5F_super_free(H5F_super_t *sblock);
+
+/* Superblock extension related routines */
+H5_DLL herr_t H5F_super_ext_open(H5F_t *f, haddr_t ext_addr, H5O_loc_t *ext_ptr);
+H5_DLL herr_t H5F_super_ext_write_msg(H5F_t *f, hid_t dxpl_id, void *mesg, unsigned id, hbool_t may_create);
+H5_DLL herr_t H5F_super_ext_close(H5F_t *f, H5O_loc_t *ext_ptr, hid_t dxpl_id,
+    hbool_t was_created);
+
+/* Metadata accumulator routines */
+H5_DLL herr_t H5F_accum_read(const H5F_t *f, hid_t dxpl_id, H5FD_mem_t type,
+    haddr_t addr, size_t size, void *buf);
+H5_DLL herr_t H5F_accum_write(const H5F_t *f, hid_t dxpl_id, H5FD_mem_t type,
+    haddr_t addr, size_t size, const void *buf);
+H5_DLL herr_t H5F_accum_free(H5F_t *f, hid_t dxpl_id, H5FD_mem_t type,
+    haddr_t addr, hsize_t size);
+H5_DLL herr_t H5F_accum_flush(const H5F_t *f, hid_t dxpl_id);
+H5_DLL herr_t H5F_accum_reset(const H5F_t *f, hid_t dxpl_id, hbool_t flush);
+
+/* Shared file list related routines */
+H5_DLL herr_t H5F_sfile_add(H5F_file_t *shared);
+H5_DLL H5F_file_t * H5F_sfile_search(H5FD_t *lf);
+H5_DLL herr_t H5F_sfile_remove(H5F_file_t *shared);
+
+/* External file cache routines */
+H5_DLL H5F_efc_t *H5F_efc_create(unsigned max_nfiles);
+H5_DLL unsigned H5F_efc_max_nfiles(H5F_efc_t *efc);
+H5_DLL herr_t H5F_efc_release(H5F_efc_t *efc);
+H5_DLL herr_t H5F_efc_destroy(H5F_efc_t *efc);
+H5_DLL herr_t H5F_efc_try_close(H5F_t *f);
+
+/* Testing functions */
+#ifdef H5F_TESTING
+H5_DLL herr_t H5F_get_sohm_mesg_count_test(hid_t fid, unsigned type_id,
+    size_t *mesg_count);
+H5_DLL herr_t H5F_check_cached_stab_test(hid_t file_id);
+H5_DLL herr_t H5F_get_maxaddr_test(hid_t file_id, haddr_t *maxaddr);
+#endif /* H5F_TESTING */
+
+#endif /* _H5Fpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Fpublic.h b/Resources/windows-libs/HDF5/include/H5Fpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..8466a26aa6c28d9c309c70a4d0129b0af533254d
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Fpublic.h
@@ -0,0 +1,196 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5F module.
+ */
+#ifndef _H5Fpublic_H
+#define _H5Fpublic_H
+
+/* Public header files needed by this file */
+#include "H5public.h"
+#include "H5ACpublic.h"
+#include "H5Ipublic.h"
+
+/* When this header is included from a private header, don't make calls to H5check() */
+#undef H5CHECK
+#ifndef _H5private_H
+#define H5CHECK          H5check(),
+#else   /* _H5private_H */
+#define H5CHECK
+#endif  /* _H5private_H */
+
+/*
+ * These are the bits that can be passed to the `flags' argument of
+ * H5Fcreate() and H5Fopen(). Use the bit-wise OR operator (|) to combine
+ * them as needed.  As a side effect, they call H5check_version() to make sure
+ * that the application is compiled with a version of the hdf5 header files
+ * which are compatible with the library to which the application is linked.
+ * We're assuming that these constants are used rather early in the hdf5
+ * session.
+ *
+ */
+#define H5F_ACC_RDONLY	(H5CHECK 0x0000u)	/*absence of rdwr => rd-only */
+#define H5F_ACC_RDWR	(H5CHECK 0x0001u)	/*open for read and write    */
+#define H5F_ACC_TRUNC	(H5CHECK 0x0002u)	/*overwrite existing files   */
+#define H5F_ACC_EXCL	(H5CHECK 0x0004u)	/*fail if file already exists*/
+#define H5F_ACC_DEBUG	(H5CHECK 0x0008u)	/*print debug info	     */
+#define H5F_ACC_CREAT	(H5CHECK 0x0010u)	/*create non-existing files  */
+
+/* Value passed to H5Pset_elink_acc_flags to cause flags to be taken from the
+ * parent file. */
+#define H5F_ACC_DEFAULT (H5CHECK 0xffffu)	/*ignore setting on lapl     */
+
+/* Flags for H5Fget_obj_count() & H5Fget_obj_ids() calls */
+#define H5F_OBJ_FILE	(0x0001u)       /* File objects */
+#define H5F_OBJ_DATASET	(0x0002u)       /* Dataset objects */
+#define H5F_OBJ_GROUP	(0x0004u)       /* Group objects */
+#define H5F_OBJ_DATATYPE (0x0008u)      /* Named datatype objects */
+#define H5F_OBJ_ATTR    (0x0010u)       /* Attribute objects */
+#define H5F_OBJ_ALL 	(H5F_OBJ_FILE|H5F_OBJ_DATASET|H5F_OBJ_GROUP|H5F_OBJ_DATATYPE|H5F_OBJ_ATTR)
+#define H5F_OBJ_LOCAL   (0x0020u)       /* Restrict search to objects opened through current file ID */
+                                        /* (as opposed to objects opened through any file ID accessing this file) */
+
+#define H5F_FAMILY_DEFAULT (hsize_t)0
+
+#ifdef H5_HAVE_PARALLEL
+/*
+ * Use this constant string as the MPI_Info key to set H5Fmpio debug flags.
+ * To turn on H5Fmpio debug flags, set the MPI_Info value with this key to
+ * have the value of a string consisting of the characters that turn on the
+ * desired flags.
+ */
+#define H5F_MPIO_DEBUG_KEY "H5F_mpio_debug_key"
+#endif /* H5_HAVE_PARALLEL */
+
+/* The difference between a single file and a set of mounted files */
+typedef enum H5F_scope_t {
+    H5F_SCOPE_LOCAL	= 0,	/*specified file handle only		*/
+    H5F_SCOPE_GLOBAL	= 1 	/*entire virtual file			*/
+} H5F_scope_t;
+
+/* Unlimited file size for H5Pset_external() */
+#define H5F_UNLIMITED	((hsize_t)(-1L))
+
+/* How does file close behave?
+ * H5F_CLOSE_DEFAULT - Use the degree pre-defined by underlining VFL
+ * H5F_CLOSE_WEAK    - file closes only after all opened objects are closed
+ * H5F_CLOSE_SEMI    - if no opened objects, file is close; otherwise, file
+		       close fails
+ * H5F_CLOSE_STRONG  - if there are opened objects, close them first, then
+		       close file
+ */
+typedef enum H5F_close_degree_t {
+    H5F_CLOSE_DEFAULT   = 0,
+    H5F_CLOSE_WEAK      = 1,
+    H5F_CLOSE_SEMI      = 2,
+    H5F_CLOSE_STRONG    = 3
+} H5F_close_degree_t;
+
+/* Current "global" information about file */
+/* (just size info currently) */
+typedef struct H5F_info_t {
+    hsize_t		super_ext_size;	/* Superblock extension size */
+    struct {
+	hsize_t		hdr_size;       /* Shared object header message header size */
+	H5_ih_info_t	msgs_info;      /* Shared object header message index & heap size */
+    } sohm;
+} H5F_info_t;
+
+/*
+ * Types of allocation requests. The values larger than H5FD_MEM_DEFAULT
+ * should not change other than adding new types to the end. These numbers
+ * might appear in files.
+ *
+ * Note: please change the log VFD flavors array if you change this
+ * enumeration.
+ */
+typedef enum H5F_mem_t {
+    H5FD_MEM_NOLIST     = -1,   /* Data should not appear in the free list.
+                                 * Must be negative.
+                                 */
+    H5FD_MEM_DEFAULT    = 0,    /* Value not yet set.  Can also be the
+                                 * datatype set in a larger allocation
+                                 * that will be suballocated by the library.
+                                 * Must be zero.
+                                 */
+    H5FD_MEM_SUPER      = 1,    /* Superblock data */
+    H5FD_MEM_BTREE      = 2,    /* B-tree data */
+    H5FD_MEM_DRAW       = 3,    /* Raw data (content of datasets, etc.) */
+    H5FD_MEM_GHEAP      = 4,    /* Global heap data */
+    H5FD_MEM_LHEAP      = 5,    /* Local heap data */
+    H5FD_MEM_OHDR       = 6,    /* Object header data */
+
+    H5FD_MEM_NTYPES             /* Sentinel value - must be last */
+} H5F_mem_t;
+
+/* Library's file format versions */
+typedef enum H5F_libver_t {
+    H5F_LIBVER_EARLIEST,        /* Use the earliest possible format for storing objects */
+    H5F_LIBVER_LATEST           /* Use the latest possible format available for storing objects*/
+} H5F_libver_t;
+
+/* Define file format version for 1.8 to prepare for 1.10 release.  
+ * (Not used anywhere now)*/
+#define H5F_LIBVER_18 H5F_LIBVER_LATEST
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Functions in H5F.c */
+H5_DLL htri_t H5Fis_hdf5(const char *filename);
+H5_DLL hid_t  H5Fcreate(const char *filename, unsigned flags,
+		  	  hid_t create_plist, hid_t access_plist);
+H5_DLL hid_t  H5Fopen(const char *filename, unsigned flags,
+		        hid_t access_plist);
+H5_DLL hid_t  H5Freopen(hid_t file_id);
+H5_DLL herr_t H5Fflush(hid_t object_id, H5F_scope_t scope);
+H5_DLL herr_t H5Fclose(hid_t file_id);
+H5_DLL hid_t  H5Fget_create_plist(hid_t file_id);
+H5_DLL hid_t  H5Fget_access_plist(hid_t file_id);
+H5_DLL herr_t H5Fget_intent(hid_t file_id, unsigned * intent);
+H5_DLL ssize_t H5Fget_obj_count(hid_t file_id, unsigned types);
+H5_DLL ssize_t H5Fget_obj_ids(hid_t file_id, unsigned types, size_t max_objs, hid_t *obj_id_list);
+H5_DLL herr_t H5Fget_vfd_handle(hid_t file_id, hid_t fapl, void **file_handle);
+H5_DLL herr_t H5Fmount(hid_t loc, const char *name, hid_t child, hid_t plist);
+H5_DLL herr_t H5Funmount(hid_t loc, const char *name);
+H5_DLL hssize_t H5Fget_freespace(hid_t file_id);
+H5_DLL herr_t H5Fget_filesize(hid_t file_id, hsize_t *size);
+H5_DLL ssize_t H5Fget_file_image(hid_t file_id, void * buf_ptr, size_t buf_len);
+H5_DLL herr_t H5Fget_mdc_config(hid_t file_id,
+				H5AC_cache_config_t * config_ptr);
+H5_DLL herr_t H5Fset_mdc_config(hid_t file_id,
+				H5AC_cache_config_t * config_ptr);
+H5_DLL herr_t H5Fget_mdc_hit_rate(hid_t file_id, double * hit_rate_ptr);
+H5_DLL herr_t H5Fget_mdc_size(hid_t file_id,
+                              size_t * max_size_ptr,
+                              size_t * min_clean_size_ptr,
+                              size_t * cur_size_ptr,
+                              int * cur_num_entries_ptr);
+H5_DLL herr_t H5Freset_mdc_hit_rate_stats(hid_t file_id);
+H5_DLL ssize_t H5Fget_name(hid_t obj_id, char *name, size_t size);
+H5_DLL herr_t H5Fget_info(hid_t obj_id, H5F_info_t *bh_info);
+H5_DLL herr_t H5Fclear_elink_file_cache(hid_t file_id);
+#ifdef H5_HAVE_PARALLEL
+H5_DLL herr_t H5Fset_mpi_atomicity(hid_t file_id, hbool_t flag);
+H5_DLL herr_t H5Fget_mpi_atomicity(hid_t file_id, hbool_t *flag);
+#endif /* H5_HAVE_PARALLEL */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Fpublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Gpkg.h b/Resources/windows-libs/HDF5/include/H5Gpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..b194adb19f001b0e2bf9458cbcd5f65cbfdbcf34
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Gpkg.h
@@ -0,0 +1,539 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Robb Matzke <matzke@llnl.gov>
+ *             Thursday, September 18, 1997
+ *
+ * Purpose:     This file contains declarations which are visible
+ *              only within the H5G package. Source files outside the
+ *              H5G package should include H5Gprivate.h instead.
+ */
+#ifndef H5G_PACKAGE
+#error "Do not include this file outside the H5G package!"
+#endif
+
+#ifndef _H5Gpkg_H
+#define _H5Gpkg_H
+
+/* Get package's private header */
+#include "H5Gprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5B2private.h"	/* v2 B-trees				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5HFprivate.h"	/* Fractal heaps			*/
+#include "H5HLprivate.h"	/* Local Heaps				*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5SLprivate.h"	/* Skip lists				*/
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* Standard length of fractal heap ID for link */
+#define H5G_DENSE_FHEAP_ID_LEN  7
+
+/* Size of a symbol table node on disk */
+#define H5G_NODE_SIZE(f)     (                                                \
+    /* General metadata fields */                                             \
+    H5_SIZEOF_MAGIC                                                           \
+    + 1         /* Version */                                                 \
+    + 1         /* Reserved */                                                \
+    + 2         /* Number of symbols */                                       \
+                                                                              \
+    /* Entries */                                                             \
+    + ((2 * H5F_SYM_LEAF_K(f)) * H5G_SIZEOF_ENTRY(f))                         \
+    )
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/*
+ * Various types of object header information can be cached in a symbol
+ * table entry (it's normal home is the object header to which the entry
+ * points).  This datatype determines what (if anything) is cached in the
+ * symbol table entry.
+ */
+typedef enum H5G_cache_type_t {
+    H5G_CACHED_ERROR	= -1, 	/*force enum to be signed		     */
+    H5G_NOTHING_CACHED  = 0,    /*nothing is cached, must be 0               */
+    H5G_CACHED_STAB     = 1,    /*symbol table, `stab'                       */
+    H5G_CACHED_SLINK	= 2, 	/*symbolic link				     */
+
+    H5G_NCACHED                 /*THIS MUST BE LAST                          */
+} H5G_cache_type_t;
+
+/*
+ * A symbol table entry caches these parameters from object header
+ * messages...  The values are entered into the symbol table when an object
+ * header is created (by hand) and are extracted from the symbol table with a
+ * callback function registered in H5O_init_interface().  Be sure to update
+ * H5G_ent_decode(), H5G_ent_encode(), and H5G__ent_debug() as well.
+ */
+typedef union H5G_cache_t {
+    struct {
+        haddr_t btree_addr;             /*file address of symbol table B-tree*/
+        haddr_t heap_addr;              /*file address of stab name heap     */
+    } stab;
+
+    struct {
+	size_t	lval_offset;		/*link value offset		     */
+    } slink;
+} H5G_cache_t;
+
+/*
+ * A symbol table entry.  The two important fields are `name_off' and
+ * `header'.  The remaining fields are used for caching information that
+ * also appears in the object header to which this symbol table entry
+ * points.
+ */
+struct H5G_entry_t {
+    H5G_cache_type_t type;              /*type of information cached         */
+    H5G_cache_t cache;                  /*cached data from object header     */
+    size_t      name_off;               /*offset of name within name heap    */
+    haddr_t     header;                 /*file address of object header      */
+};
+
+/*
+ * A symbol table node is a collection of symbol table entries.  It can
+ * be thought of as the lowest level of the B-link tree that points to
+ * a collection of symbol table entries that belong to a specific symbol
+ * table or group.
+ */
+typedef struct H5G_node_t {
+    H5AC_info_t cache_info;     /* Information for H5AC cache functions, _must_ be */
+                                /* first field in structure */
+    size_t node_size;           /* Size of node on disk              */
+    unsigned nsyms;             /* Number of symbols                 */
+    H5G_entry_t *entry;         /* Array of symbol table entries     */
+} H5G_node_t;
+
+/*
+ * Shared information for all open group objects
+ */
+struct H5G_shared_t {
+    int fo_count;                   /* open file object count */
+    hbool_t mounted;                /* Group is mount point */
+};
+
+/*
+ * A group handle passed around through layers of the library within and
+ * above the H5G layer.
+ */
+struct H5G_t {
+    H5G_shared_t *shared;               /* Shared file object data */
+    H5O_loc_t oloc;                     /* Object location for group */
+    H5G_name_t path;                    /* Group hierarchy path   */
+};
+
+/* Link iteration operator for internal library callbacks */
+typedef herr_t (*H5G_lib_iterate_t)(const H5O_link_t *lnk, void *op_data);
+
+/* Data structure to hold table of links for a group */
+typedef struct {
+    size_t      nlinks;         /* # of links in table */
+    H5O_link_t *lnks;           /* Pointer to array of links */
+} H5G_link_table_t;
+
+/*
+ * Common data exchange structure for symbol table nodes.  This structure is
+ * passed through the B-link tree layer to the methods for the objects
+ * to which the B-link tree points.
+ *
+ * It's also used for B-tree iterators which require no additional info.
+ *
+ */
+typedef struct H5G_bt_common_t {
+    /* downward */
+    const char  *name;                  /*points to temporary memory         */
+    H5HL_t *heap;                       /*symbol table heap		     */
+} H5G_bt_common_t;
+
+/*
+ * Data exchange structure for symbol table nodes.  This structure is
+ * passed through the B-link tree layer to the insert method for entries.
+ */
+typedef struct H5G_bt_ins_t {
+    /* downward */
+    H5G_bt_common_t common;             /* Common info for B-tree user data (must be first) */
+    const H5O_link_t *lnk;              /* Link to insert into table         */
+    H5O_type_t obj_type;                /* Type of object being inserted */
+    const void *crt_info;               /* Creation info for object being inserted */
+} H5G_bt_ins_t;
+
+/*
+ * Data exchange structure for symbol table nodes.  This structure is
+ * passed through the B-link tree layer to the remove method for entries.
+ */
+typedef struct H5G_bt_rm_t {
+    /* downward */
+    H5G_bt_common_t common;         /* Common info for B-tree user data (must be first) */
+    H5RS_str_t *grp_full_path_r;    /* Full path of group where link is removed */
+} H5G_bt_rm_t;
+
+/* Typedef for B-tree 'find' operation */
+typedef herr_t (*H5G_bt_find_op_t)(const H5G_entry_t *ent/*in*/, void *operator_data/*in,out*/);
+
+/*
+ * Data exchange structure for symbol table nodes.  This structure is
+ * passed through the B-link tree layer to the 'find' method for entries.
+ */
+typedef struct H5G_bt_lkp_t {
+    /* downward */
+    H5G_bt_common_t common;         /* Common info for B-tree user data (must be first) */
+    H5G_bt_find_op_t op;            /* Operator to call when correct entry is found */
+    void *op_data;                  /* Data to pass to operator */
+
+    /* upward */
+} H5G_bt_lkp_t;
+
+/*
+ * Data exchange structure to pass through the B-tree layer for the
+ * H5B_iterate function.
+ */
+typedef struct H5G_bt_it_it_t {
+    /* downward */
+    H5HL_t      *heap;          /*symbol table heap 			     */
+    hsize_t	skip;		/*initial entries to skip		     */
+    H5G_lib_iterate_t op;	/*iteration operator			     */
+    void	*op_data;	/*user-defined operator data		     */
+
+    /* upward */
+    hsize_t	*final_ent;	/*final entry looked at                      */
+} H5G_bt_it_it_t;
+
+/* Data passed through B-tree iteration for copying copy symbol table content */
+typedef struct H5G_bt_it_cpy_t {
+    const H5O_loc_t *src_oloc;  /* Source object location */
+    haddr_t     src_heap_addr;  /* Heap address of the source symbol table  */
+    H5F_t       *dst_file;      /* File of destination group */
+    const H5O_stab_t *dst_stab; /* Symbol table message for destination group */
+    H5O_copy_t  *cpy_info;      /* Information for copy operation */
+} H5G_bt_it_cpy_t;
+
+/* Common information for "by index" lookups in symbol tables */
+typedef struct H5G_bt_it_idx_common_t {
+    /* downward */
+    hsize_t     idx;            /* Index of group member to be queried */
+    hsize_t     num_objs;       /* The number of objects having been traversed */
+    H5G_bt_find_op_t op;        /* Operator to call when correct entry is found */
+} H5G_bt_it_idx_common_t;
+
+/* Data passed through B-tree iteration for building a table of the links */
+typedef struct H5G_bt_it_bt_t {
+    /* downward */
+    size_t alloc_nlinks;        /* Number of links allocated in table */
+    H5HL_t *heap;               /* Symbol table heap */
+
+    /* upward */
+    H5G_link_table_t *ltable;   /* Link table to add information to */
+} H5G_bt_it_bt_t;
+
+/* Typedefs for "new format" groups */
+/* (fractal heap & v2 B-tree info) */
+
+/* Typedef for native 'name' field index records in the v2 B-tree */
+/* (Keep 'id' field first so generic record handling in callbacks works) */
+typedef struct H5G_dense_bt2_name_rec_t {
+    uint8_t id[H5G_DENSE_FHEAP_ID_LEN]; /* Heap ID for link */
+    uint32_t hash;                      /* Hash of 'name' field value */
+} H5G_dense_bt2_name_rec_t;
+
+/* Typedef for native 'creation order' field index records in the v2 B-tree */
+/* (Keep 'id' field first so generic record handling in callbacks works) */
+typedef struct H5G_dense_bt2_corder_rec_t {
+    uint8_t id[H5G_DENSE_FHEAP_ID_LEN]; /* Heap ID for link */
+    int64_t corder;                     /* 'creation order' field value */
+} H5G_dense_bt2_corder_rec_t;
+
+/*
+ * Common data exchange structure for dense link storage.  This structure is
+ * passed through the v2 B-tree layer to the methods for the objects
+ * to which the v2 B-tree points.
+ */
+typedef struct H5G_bt2_ud_common_t {
+    /* downward */
+    H5F_t       *f;                     /* Pointer to file that fractal heap is in */
+    hid_t       dxpl_id;                /* DXPL for operation                */
+    H5HF_t      *fheap;                 /* Fractal heap handle               */
+    const char  *name;                  /* Name of link to compare           */
+    uint32_t    name_hash;              /* Hash of name of link to compare   */
+    int64_t     corder;                 /* Creation order value of link to compare   */
+    H5B2_found_t found_op;              /* Callback when correct link is found */
+    void        *found_op_data;         /* Callback data when correct link is found */
+} H5G_bt2_ud_common_t;
+
+/*
+ * Data exchange structure for dense link storage.  This structure is
+ * passed through the v2 B-tree layer when inserting links.
+ */
+typedef struct H5G_bt2_ud_ins_t {
+    /* downward */
+    H5G_bt2_ud_common_t common;         /* Common info for B-tree user data (must be first) */
+    uint8_t id[H5G_DENSE_FHEAP_ID_LEN]; /* Heap ID of link to insert         */
+} H5G_bt2_ud_ins_t;
+
+/* Typedef for group creation operation */
+typedef struct H5G_obj_create_t{
+    hid_t gcpl_id;              /* Group creation property list */
+    H5G_cache_type_t cache_type; /* Type of symbol table entry cache */
+    H5G_cache_t cache;          /* Cached data for symbol table entry */
+} H5G_obj_create_t;
+
+/* Callback information for copying groups */
+typedef struct H5G_copy_file_ud_t {
+    H5O_copy_file_ud_common_t common;   /* Shared information (must be first) */
+    H5G_cache_type_t cache_type;        /* Type of symbol table entry cache */
+    H5G_cache_t cache;                  /* Cached data for symbol table entry */
+} H5G_copy_file_ud_t;
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/*
+ * This is the class identifier to give to the B-tree functions.
+ */
+H5_DLLVAR H5B_class_t H5B_SNODE[1];
+
+/* The cache subclass */
+H5_DLLVAR const H5AC_class_t H5AC_SNODE[1];
+
+/* The v2 B-tree class for indexing 'name' field on links */
+H5_DLLVAR const H5B2_class_t H5G_BT2_NAME[1];
+
+/* The v2 B-tree class for indexing 'creation order' field on links */
+H5_DLLVAR const H5B2_class_t H5G_BT2_CORDER[1];
+
+/* Free list for managing H5G_t structs */
+H5FL_EXTERN(H5G_t);
+
+/* Free list for managing H5G_shared_t structs */
+H5FL_EXTERN(H5G_shared_t);
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+/*
+ * General group routines
+ */
+H5_DLL H5G_t *H5G__create(H5F_t *file, H5G_obj_create_t *gcrt_info,
+    hid_t dxpl_id);
+H5_DLL H5G_t *H5G__create_named(const H5G_loc_t *loc, const char *name,
+    hid_t lcpl_id, hid_t gcpl_id, hid_t gapl_id, hid_t dxpl_id);
+H5_DLL H5G_t *H5G__open_name(const H5G_loc_t *loc, const char *name,
+    hid_t gapl_id, hid_t dxpl_id);
+
+/*
+ * Group hierarchy traversal routines
+ */
+H5_DLL herr_t H5G__traverse_special(const H5G_loc_t *grp_loc,
+    const H5O_link_t *lnk, unsigned target, size_t *nlinks, hbool_t last_comp,
+    H5G_loc_t *obj_loc, hbool_t *obj_exists, hid_t lapl_id, hid_t dxpl_id);
+
+/*
+ * Utility functions
+ */
+H5_DLL herr_t H5G__init(void);
+H5_DLL herr_t H5G__term_deprec_interface(void);
+H5_DLL const char *H5G__component(const char *name, size_t *size_p);
+
+/*
+ * Functions that understand symbol tables but not names.  The
+ * functions that understand names are exported to the rest of
+ * the library and appear in H5Gprivate.h.
+ */
+H5_DLL herr_t H5G__stab_create(H5O_loc_t *grp_oloc, hid_t dxpl_id,
+    const H5O_ginfo_t *ginfo, H5O_stab_t *stab);
+H5_DLL herr_t H5G__stab_create_components(H5F_t *f, H5O_stab_t *stab, size_t size_hint, hid_t dxpl_id);
+H5_DLL herr_t H5G__stab_insert(const H5O_loc_t *grp_oloc, const char *name,
+    H5O_link_t *obj_lnk, H5O_type_t obj_type, const void *crt_info,
+    hid_t dxpl_id);
+H5_DLL herr_t H5G__stab_insert_real(H5F_t *f, const H5O_stab_t *stab,
+    const char *name, H5O_link_t *obj_lnk, H5O_type_t obj_type,
+    const void *crt_info, hid_t dxpl_id);
+H5_DLL herr_t H5G__stab_delete(H5F_t *f, hid_t dxpl_id, const H5O_stab_t *stab);
+H5_DLL herr_t H5G__stab_iterate(const H5O_loc_t *oloc, hid_t dxpl_id, H5_iter_order_t order,
+    hsize_t skip, hsize_t *last_lnk, H5G_lib_iterate_t op, void *op_data);
+H5_DLL herr_t H5G__stab_count(struct H5O_loc_t *oloc, hsize_t *num_objs, hid_t dxpl_id);
+H5_DLL herr_t H5G__stab_bh_size(H5F_t *f, hid_t dxpl_id, const H5O_stab_t *stab,
+    H5_ih_info_t *bh_info);
+H5_DLL ssize_t H5G__stab_get_name_by_idx(const H5O_loc_t *oloc, H5_iter_order_t order,
+    hsize_t n, char* name, size_t size, hid_t dxpl_id);
+H5_DLL herr_t H5G__stab_remove(const H5O_loc_t *oloc, hid_t dxpl_id,
+    H5RS_str_t *grp_full_path_r, const char *name);
+H5_DLL herr_t H5G__stab_remove_by_idx(const H5O_loc_t *oloc, hid_t dxpl_id,
+    H5RS_str_t *grp_full_path_r, H5_iter_order_t order, hsize_t n);
+H5_DLL herr_t H5G__stab_lookup(const H5O_loc_t *grp_oloc, const char *name,
+    H5O_link_t *lnk, hid_t dxpl_id);
+H5_DLL herr_t H5G__stab_lookup_by_idx(const H5O_loc_t *grp_oloc, H5_iter_order_t order,
+    hsize_t n, H5O_link_t *lnk, hid_t dxpl_id);
+#ifndef H5_STRICT_FORMAT_CHECKS
+H5_DLL herr_t H5G__stab_valid(H5O_loc_t *grp_oloc, hid_t dxpl_id,
+    H5O_stab_t *alt_stab);
+#endif /* H5_STRICT_FORMAT_CHECKS */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+H5_DLL H5G_obj_t H5G__stab_get_type_by_idx(H5O_loc_t *oloc, hsize_t idx,
+    hid_t dxpl_id);
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+
+/*
+ * Functions that understand symbol table entries.
+ */
+H5_DLL void H5G__ent_copy(H5G_entry_t *dst, const H5G_entry_t *src,
+            H5_copy_depth_t depth);
+H5_DLL void H5G__ent_reset(H5G_entry_t *ent);
+H5_DLL herr_t H5G__ent_decode_vec(const H5F_t *f, const uint8_t **pp,
+				  H5G_entry_t *ent, unsigned n);
+H5_DLL herr_t H5G__ent_encode_vec(const H5F_t *f, uint8_t **pp,
+				  const H5G_entry_t *ent, unsigned n);
+H5_DLL herr_t H5G__ent_convert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap,
+    const char *name, const H5O_link_t *lnk, H5O_type_t obj_type,
+    const void *crt_info, H5G_entry_t *ent);
+H5_DLL herr_t H5G__ent_debug(const H5G_entry_t *ent, FILE * stream, int indent,
+    int fwidth, const H5HL_t *heap);
+
+/* Functions that understand symbol table nodes */
+H5_DLL herr_t H5G__node_init(H5F_t *f);
+H5_DLL int H5G__node_iterate(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+		     const void *_rt_key, void *_udata);
+H5_DLL int H5G__node_sumup(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+		     const void *_rt_key, void *_udata);
+H5_DLL int H5G__node_by_idx(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+		     const void *_rt_key, void *_udata);
+H5_DLL int H5G__node_copy(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+		     const void *_rt_key, void *_udata);
+H5_DLL int H5G__node_build_table(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+		     const void *_rt_key, void *_udata);
+H5_DLL herr_t H5G__node_iterate_size(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+                     const void *_rt_key, void *_udata);
+H5_DLL herr_t H5G__node_free(H5G_node_t *sym);
+
+/* Functions that understand links in groups */
+H5_DLL herr_t H5G__ent_to_link(H5O_link_t *lnk, const H5HL_t *heap,
+    const H5G_entry_t *ent, const char *name);
+H5_DLL herr_t H5G__link_to_loc(const H5G_loc_t *grp_loc, const H5O_link_t *lnk,
+    H5G_loc_t *obj_loc);
+H5_DLL herr_t H5G__link_sort_table(H5G_link_table_t *ltable, H5_index_t idx_type,
+    H5_iter_order_t order);
+H5_DLL herr_t H5G__link_iterate_table(const H5G_link_table_t *ltable,
+    hsize_t skip, hsize_t *last_lnk, const H5G_lib_iterate_t op, void *op_data);
+H5_DLL herr_t H5G__link_release_table(H5G_link_table_t *ltable);
+H5_DLL herr_t H5G__link_name_replace(H5F_t *file, hid_t dxpl_id,
+    H5RS_str_t *grp_full_path_r, const H5O_link_t *lnk);
+
+/* Functions that understand "compact" link storage */
+H5_DLL herr_t H5G__compact_insert(const H5O_loc_t *grp_oloc, H5O_link_t *obj_lnk,
+    hid_t dxpl_id);
+H5_DLL ssize_t H5G__compact_get_name_by_idx(const H5O_loc_t *oloc, hid_t dxpl_id,
+    const H5O_linfo_t *linfo, H5_index_t idx_type, H5_iter_order_t order,
+    hsize_t idx, char *name, size_t size);
+H5_DLL herr_t H5G__compact_remove(const H5O_loc_t *oloc, hid_t dxpl_id,
+    H5RS_str_t *grp_full_path_r, const char *name);
+H5_DLL herr_t H5G__compact_remove_by_idx(const H5O_loc_t *oloc, hid_t dxpl_id,
+    const H5O_linfo_t *linfo, H5RS_str_t *grp_full_path_r, H5_index_t idx_type,
+    H5_iter_order_t order, hsize_t n);
+H5_DLL herr_t H5G__compact_iterate(const H5O_loc_t *oloc, hid_t dxpl_id,
+    const H5O_linfo_t *linfo, H5_index_t idx_type, H5_iter_order_t order,
+    hsize_t skip, hsize_t *last_lnk, H5G_lib_iterate_t op, void *op_data);
+H5_DLL htri_t H5G__compact_lookup(const H5O_loc_t *grp_oloc, const char *name,
+    H5O_link_t *lnk, hid_t dxpl_id);
+H5_DLL herr_t H5G__compact_lookup_by_idx(const H5O_loc_t *oloc, hid_t dxpl_id,
+    const H5O_linfo_t *linfo, H5_index_t idx_type, H5_iter_order_t order,
+    hsize_t n, H5O_link_t *lnk);
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+H5_DLL H5G_obj_t H5G__compact_get_type_by_idx(H5O_loc_t *oloc, hid_t dxpl_id,
+    const H5O_linfo_t *linfo, hsize_t idx);
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+/* Functions that understand "dense" link storage */
+H5_DLL herr_t H5G__dense_build_table(H5F_t *f, hid_t dxpl_id, const H5O_linfo_t *linfo,
+    H5_index_t idx_type, H5_iter_order_t order, H5G_link_table_t *ltable);
+H5_DLL herr_t H5G__dense_create(H5F_t *f, hid_t dxpl_id, H5O_linfo_t *linfo,
+    const H5O_pline_t *pline);
+H5_DLL herr_t H5G__dense_insert(H5F_t *f, hid_t dxpl_id,
+    const H5O_linfo_t *linfo, const H5O_link_t *lnk);
+H5_DLL htri_t H5G__dense_lookup(H5F_t *f, hid_t dxpl_id,
+    const H5O_linfo_t *linfo, const char *name, H5O_link_t *lnk);
+H5_DLL herr_t H5G__dense_lookup_by_idx(H5F_t *f, hid_t dxpl_id,
+    const H5O_linfo_t *linfo, H5_index_t idx_type, H5_iter_order_t order,
+    hsize_t n, H5O_link_t *lnk);
+H5_DLL herr_t H5G__dense_iterate(H5F_t *f, hid_t dxpl_id, const H5O_linfo_t *linfo,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t skip, hsize_t *last_lnk,
+    H5G_lib_iterate_t op, void *op_data);
+H5_DLL ssize_t H5G__dense_get_name_by_idx(H5F_t  *f, hid_t dxpl_id,
+    H5O_linfo_t *linfo, H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    char *name, size_t size);
+H5_DLL herr_t H5G__dense_remove(H5F_t *f, hid_t dxpl_id, const H5O_linfo_t *linfo,
+    H5RS_str_t *grp_full_path_r, const char *name);
+H5_DLL herr_t H5G__dense_remove_by_idx(H5F_t *f, hid_t dxpl_id,
+    const H5O_linfo_t *linfo, H5RS_str_t *grp_full_path_r, H5_index_t idx_type,
+    H5_iter_order_t order, hsize_t n);
+H5_DLL herr_t H5G__dense_delete(H5F_t *f, hid_t dxpl_id, H5O_linfo_t *linfo,
+    hbool_t adj_link);
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+H5_DLL H5G_obj_t H5G__dense_get_type_by_idx(H5F_t  *f, hid_t dxpl_id,
+    H5O_linfo_t *linfo, hsize_t idx);
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+/* Functions that understand group objects */
+H5_DLL herr_t H5G__obj_create(H5F_t *f, hid_t dxpl_id,
+    H5G_obj_create_t *gcrt_info, H5O_loc_t *oloc/*out*/);
+H5_DLL herr_t H5G__obj_create_real(H5F_t *f, hid_t dxpl_id,
+    const H5O_ginfo_t *ginfo, const H5O_linfo_t *linfo,
+    const H5O_pline_t *pline, H5G_obj_create_t *gcrt_info,
+    H5O_loc_t *oloc/*out*/);
+H5_DLL htri_t H5G__obj_get_linfo(const H5O_loc_t *grp_oloc, H5O_linfo_t *linfo,
+    hid_t dxpl_id);
+H5_DLL herr_t H5G__obj_iterate(const H5O_loc_t *grp_oloc,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t skip, hsize_t *last_lnk,
+    H5G_lib_iterate_t op, void *op_data, hid_t dxpl_id);
+H5_DLL herr_t H5G__obj_info(H5O_loc_t *oloc, H5G_info_t *grp_info, hid_t dxpl_id);
+H5_DLL htri_t H5G__obj_lookup(const H5O_loc_t *grp_oloc, const char *name,
+    H5O_link_t *lnk, hid_t dxpl_id);
+
+/*
+ * These functions operate on group hierarchy names.
+ */
+H5_DLL herr_t H5G__name_init(H5G_name_t *name, const char *path);
+
+/*
+ * These functions operate on group "locations"
+ */
+H5_DLL herr_t H5G__loc_copy(H5G_loc_t *dst, const H5G_loc_t *src, H5_copy_depth_t depth);
+H5_DLL herr_t H5G__loc_insert(H5G_loc_t *grp_loc, const char *name,
+    H5G_loc_t *obj_loc, H5O_type_t obj_type, const void *crt_info, hid_t dxpl_id);
+
+/* Testing functions */
+#ifdef H5G_TESTING
+H5_DLL htri_t H5G__is_empty_test(hid_t gid);
+H5_DLL htri_t H5G__has_links_test(hid_t gid, unsigned *nmsgs);
+H5_DLL htri_t H5G__has_stab_test(hid_t gid);
+H5_DLL htri_t H5G__is_new_dense_test(hid_t gid);
+H5_DLL herr_t H5G__new_dense_info_test(hid_t gid, hsize_t *name_count, hsize_t *corder_count);
+H5_DLL herr_t H5G__lheap_size_test(hid_t gid, size_t *lheap_size);
+H5_DLL herr_t H5G__user_path_test(hid_t obj_id, char *user_path, size_t *user_path_len, unsigned *user_path_hidden);
+H5_DLL herr_t H5G__verify_cached_stab_test(H5O_loc_t *grp_oloc, H5G_entry_t *ent);
+H5_DLL herr_t H5G__verify_cached_stabs_test(hid_t gid);
+#endif /* H5G_TESTING */
+
+#endif /* _H5Gpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Gpublic.h b/Resources/windows-libs/HDF5/include/H5Gpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..5b8b05478a5bdf36df8efbf507ec55b6b03fc589
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Gpublic.h
@@ -0,0 +1,178 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Gpublic.h
+ *                      Jul 11 1997
+ *                      Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5G package
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Gpublic_H
+#define _H5Gpublic_H
+
+/* System headers needed by this file */
+#include <sys/types.h>
+
+/* Public headers needed by this file */
+#include "H5public.h"		/* Generic Functions			*/
+#include "H5Lpublic.h"		/* Links                                */
+#include "H5Opublic.h"		/* Object headers			*/
+#include "H5Tpublic.h"		/* Datatypes				*/
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Types of link storage for groups */
+typedef enum H5G_storage_type_t {
+    H5G_STORAGE_TYPE_UNKNOWN = -1,	/* Unknown link storage type	*/
+    H5G_STORAGE_TYPE_SYMBOL_TABLE,      /* Links in group are stored with a "symbol table" */
+                                        /* (this is sometimes called "old-style" groups) */
+    H5G_STORAGE_TYPE_COMPACT,		/* Links are stored in object header */
+    H5G_STORAGE_TYPE_DENSE 		/* Links are stored in fractal heap & indexed with v2 B-tree */
+} H5G_storage_type_t;
+
+/* Information struct for group (for H5Gget_info/H5Gget_info_by_name/H5Gget_info_by_idx) */
+typedef struct H5G_info_t {
+    H5G_storage_type_t 	storage_type;	/* Type of storage for links in group */
+    hsize_t 	nlinks;		        /* Number of links in group */
+    int64_t     max_corder;             /* Current max. creation order value for group */
+    hbool_t     mounted;                /* Whether group has a file mounted on it */
+} H5G_info_t;
+
+/********************/
+/* Public Variables */
+/********************/
+
+
+/*********************/
+/* Public Prototypes */
+/*********************/
+H5_DLL hid_t H5Gcreate2(hid_t loc_id, const char *name, hid_t lcpl_id,
+    hid_t gcpl_id, hid_t gapl_id);
+H5_DLL hid_t H5Gcreate_anon(hid_t loc_id, hid_t gcpl_id, hid_t gapl_id);
+H5_DLL hid_t H5Gopen2(hid_t loc_id, const char *name, hid_t gapl_id);
+H5_DLL hid_t H5Gget_create_plist(hid_t group_id);
+H5_DLL herr_t H5Gget_info(hid_t loc_id, H5G_info_t *ginfo);
+H5_DLL herr_t H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *ginfo,
+    hid_t lapl_id);
+H5_DLL herr_t H5Gget_info_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, H5G_info_t *ginfo,
+    hid_t lapl_id);
+H5_DLL herr_t H5Gclose(hid_t group_id);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+/* Link definitions */
+#define H5G_SAME_LOC H5L_SAME_LOC
+#define H5G_LINK_ERROR H5L_TYPE_ERROR
+#define H5G_LINK_HARD H5L_TYPE_HARD
+#define H5G_LINK_SOFT H5L_TYPE_SOFT
+#define H5G_link_t H5L_type_t
+
+/* Macros for types of objects in a group (see H5G_obj_t definition) */
+#define H5G_NTYPES	256		/* Max possible number of types	*/
+#define H5G_NLIBTYPES	8		/* Number of internal types	*/
+#define H5G_NUSERTYPES	(H5G_NTYPES - H5G_NLIBTYPES)
+#define H5G_USERTYPE(X)	(8 + (X))	/* User defined types		*/
+
+
+/* Typedefs */
+
+/*
+ * An object has a certain type. The first few numbers are reserved for use
+ * internally by HDF5. Users may add their own types with higher values.  The
+ * values are never stored in the file -- they only exist while an
+ * application is running.  An object may satisfy the `isa' function for more
+ * than one type.
+ */
+typedef enum H5G_obj_t {
+    H5G_UNKNOWN = -1,		/* Unknown object type		*/
+    H5G_GROUP,		        /* Object is a group		*/
+    H5G_DATASET,		/* Object is a dataset		*/
+    H5G_TYPE,			/* Object is a named data type	*/
+    H5G_LINK,		        /* Object is a symbolic link	*/
+    H5G_UDLINK,		        /* Object is a user-defined link */
+    H5G_RESERVED_5,		/* Reserved for future use	*/
+    H5G_RESERVED_6,		/* Reserved for future use	*/
+    H5G_RESERVED_7		/* Reserved for future use	*/
+} H5G_obj_t;
+
+/* Prototype for H5Giterate() operator */
+typedef herr_t (*H5G_iterate_t)(hid_t group, const char *name, void *op_data);
+
+/* Information about an object */
+typedef struct H5G_stat_t {
+    unsigned long 	fileno[2];	/*file number			*/
+    unsigned long 	objno[2];	/*object number			*/
+    unsigned 		nlink;		/*number of hard links to object*/
+    H5G_obj_t 		type;		/*basic object type		*/
+    time_t		mtime;		/*modification time		*/
+    size_t		linklen;	/*symbolic link value length	*/
+    H5O_stat_t          ohdr;           /* Object header information    */
+} H5G_stat_t;
+
+
+/* Function prototypes */
+H5_DLL hid_t H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint);
+H5_DLL hid_t H5Gopen1(hid_t loc_id, const char *name);
+H5_DLL herr_t H5Glink(hid_t cur_loc_id, H5G_link_t type, const char *cur_name,
+    const char *new_name);
+H5_DLL herr_t H5Glink2(hid_t cur_loc_id, const char *cur_name, H5G_link_t type,
+    hid_t new_loc_id, const char *new_name);
+H5_DLL herr_t H5Gmove(hid_t src_loc_id, const char *src_name,
+    const char *dst_name);
+H5_DLL herr_t H5Gmove2(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
+    const char *dst_name);
+H5_DLL herr_t H5Gunlink(hid_t loc_id, const char *name);
+H5_DLL herr_t H5Gget_linkval(hid_t loc_id, const char *name, size_t size,
+    char *buf/*out*/);
+H5_DLL herr_t H5Gset_comment(hid_t loc_id, const char *name, const char *comment);
+H5_DLL int H5Gget_comment(hid_t loc_id, const char *name, size_t bufsize,
+    char *buf);
+H5_DLL herr_t H5Giterate(hid_t loc_id, const char *name, int *idx,
+        H5G_iterate_t op, void *op_data);
+H5_DLL herr_t H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs);
+H5_DLL herr_t H5Gget_objinfo(hid_t loc_id, const char *name,
+    hbool_t follow_link, H5G_stat_t *statbuf/*out*/);
+H5_DLL ssize_t H5Gget_objname_by_idx(hid_t loc_id, hsize_t idx, char* name,
+    size_t size);
+H5_DLL H5G_obj_t H5Gget_objtype_by_idx(hid_t loc_id, hsize_t idx);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Gpublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Group.h b/Resources/windows-libs/HDF5/include/H5Group.h
new file mode 100644
index 0000000000000000000000000000000000000000..100b214b55c7d7a9eb3a991862c4c2c68adbe7db
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Group.h
@@ -0,0 +1,75 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5Group_H
+#define __H5Group_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class Group
+    \brief Class Group represents an HDF5 group.
+
+    It inherits many operations from H5Location and CommonFG.
+*/
+class H5_DLLCPP Group : public H5Object, public CommonFG {
+   public:
+	// Close this group.
+	virtual void close();
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("Group"); }
+
+	// Throw group exception.
+	virtual void throwException(const H5std_string& func_name, const H5std_string& msg) const;
+
+	// for CommonFG to get the file id.
+	virtual hid_t getLocId() const;
+
+	// Creates a group by way of dereference.
+	Group(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
+        Group(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
+
+	// default constructor
+	Group();
+
+	// Copy constructor: makes a copy of the original object
+	Group(const Group& original);
+
+	// Gets the group id.
+	virtual hid_t getId() const;
+
+	// Destructor
+	virtual ~Group();
+
+	// Creates a copy of an existing group using its id.
+	Group( const hid_t group_id );
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Sets the group id.
+	virtual void p_setId(const hid_t new_id);
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+   private:
+	hid_t id;	// HDF5 group id
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5Group_H
diff --git a/Resources/windows-libs/HDF5/include/H5HFpkg.h b/Resources/windows-libs/HDF5/include/H5HFpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..9c9c34c7d29c3de4a8771e385331e74ba520a796
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5HFpkg.h
@@ -0,0 +1,799 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *		Friday, February 24, 2006
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5HF package.  Source files outside the H5HF package should
+ *		include H5HFprivate.h instead.
+ */
+#ifndef H5HF_PACKAGE
+#error "Do not include this file outside the H5HF package!"
+#endif
+
+#ifndef _H5HFpkg_H
+#define _H5HFpkg_H
+
+/* Get package's private header */
+#include "H5HFprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5B2private.h"	/* v2 B-trees				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5FSprivate.h"	/* Free space manager			*/
+#include "H5SLprivate.h"	/* Skip lists				*/
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* Size of checksum information (on disk) */
+#define H5HF_SIZEOF_CHKSUM      4
+
+/* "Standard" size of prefix information for fractal heap metadata */
+#define H5HF_METADATA_PREFIX_SIZE(c) (                                        \
+    H5_SIZEOF_MAGIC   /* Signature */                                         \
+    + 1 /* Version */                                                         \
+    + ((c) ? H5HF_SIZEOF_CHKSUM : 0) /* Metadata checksum */                  \
+    )
+
+/* Size of doubling-table information */
+#define H5HF_DTABLE_INFO_SIZE(h) (                                            \
+    2   /* Width of table (i.e. # of columns) */                              \
+    + (h)->sizeof_size /* Starting block size */                              \
+    + (h)->sizeof_size /* Maximum direct block size */                        \
+    + 2 /* Max. size of heap (log2 of actual value - i.e. the # of bits) */   \
+    + 2 /* Starting # of rows in root indirect block */                       \
+    + (h)->sizeof_addr /* File address of table managed */                    \
+    + 2 /* Current # of rows in root indirect block */                        \
+    )
+
+/* Flags for status byte */
+#define H5HF_HDR_FLAGS_HUGE_ID_WRAPPED 0x01     /* "huge" object IDs have wrapped */
+#define H5HF_HDR_FLAGS_CHECKSUM_DBLOCKS 0x02    /* checksum direct blocks */
+
+/* Size of the fractal heap header on disk */
+/* (this is the fixed-len portion, the variable-len I/O filter information
+ *      follows this information, if there are I/O filters for the heap)
+ */
+#define H5HF_HEADER_SIZE(h)     (                                             \
+    /* General metadata fields */                                             \
+    H5HF_METADATA_PREFIX_SIZE(TRUE)                                           \
+                                                                              \
+    /* Fractal Heap Header specific fields */                                 \
+                                                                              \
+    /* General heap information */                                            \
+    + 2 /* Heap ID len */                                                     \
+    + 2 /* I/O filters' encoded len */                                        \
+    + 1 /* Status flags */                                                    \
+                                                                              \
+    /* "Huge" object fields */                                                \
+    + 4 /* Max. size of "managed" object */                                   \
+    + (h)->sizeof_size /* Next ID for "huge" object */                        \
+    + (h)->sizeof_addr /* File address of "huge" object tracker B-tree  */    \
+                                                                              \
+    /* "Managed" object free space fields */                                  \
+    + (h)->sizeof_size /* Total man. free space */                            \
+    + (h)->sizeof_addr /* File address of free section header */              \
+                                                                              \
+    /* Statistics fields */                                                   \
+    + (h)->sizeof_size /* Size of man. space in heap */                       \
+    + (h)->sizeof_size /* Size of man. space iterator offset in heap */       \
+    + (h)->sizeof_size /* Size of alloacted man. space in heap */             \
+    + (h)->sizeof_size /* Number of man. objects in heap */                   \
+    + (h)->sizeof_size /* Size of huge space in heap */                       \
+    + (h)->sizeof_size /* Number of huge objects in heap */                   \
+    + (h)->sizeof_size /* Size of tiny space in heap */                       \
+    + (h)->sizeof_size /* Number of tiny objects in heap */                   \
+                                                                              \
+    /* "Managed" object doubling table info */                                \
+    + H5HF_DTABLE_INFO_SIZE(h) /* Size of managed obj. doubling-table info */ \
+    )
+
+/* Size of overhead for a direct block */
+#define H5HF_MAN_ABS_DIRECT_OVERHEAD(h) (                                     \
+    /* General metadata fields */                                             \
+    H5HF_METADATA_PREFIX_SIZE(h->checksum_dblocks)                            \
+                                                                              \
+    /* Fractal heap managed, absolutely mapped direct block specific fields */ \
+    + (h)->sizeof_addr          /* File address of heap owning the block */   \
+    + (h)->heap_off_size        /* Offset of the block in the heap */         \
+    )
+
+/* Size of managed indirect block entry for a child direct block */
+#define H5HF_MAN_INDIRECT_CHILD_DIR_ENTRY_SIZE(h) (                           \
+    ((h)->filter_len > 0 ?                                                    \
+        ((h)->sizeof_addr + (h)->sizeof_size + 4) : /* Size of entries for filtered direct blocks */ \
+        (h)->sizeof_addr)             /* Size of entries for un-filtered direct blocks */ \
+    )
+
+/* Size of managed indirect block */
+#define H5HF_MAN_INDIRECT_SIZE(h, r) (                                        \
+    /* General metadata fields */                                             \
+    H5HF_METADATA_PREFIX_SIZE(TRUE)                                           \
+                                                                              \
+    /* Fractal heap managed, absolutely mapped indirect block specific fields */ \
+    + (h)->sizeof_addr          /* File address of heap owning the block */   \
+    + (h)->heap_off_size        /* Offset of the block in the heap */         \
+    + (MIN(r, (h)->man_dtable.max_direct_rows) * (h)->man_dtable.cparam.width * H5HF_MAN_INDIRECT_CHILD_DIR_ENTRY_SIZE(h)) /* Size of entries for direct blocks */ \
+    + (((r > (h)->man_dtable.max_direct_rows) ? (r - (h)->man_dtable.max_direct_rows) : 0)  * (h)->man_dtable.cparam.width * (h)->sizeof_addr) /* Size of entries for indirect blocks */ \
+    )
+
+/* Compute the # of bytes required to store an offset into a given buffer size */
+#define H5HF_SIZEOF_OFFSET_BITS(b)   (((b) + 7) / 8)
+#define H5HF_SIZEOF_OFFSET_LEN(l)   H5HF_SIZEOF_OFFSET_BITS(H5VM_log2_of2((unsigned)(l)))
+
+/* Heap ID bit flags */
+/* Heap ID version (2 bits: 6-7) */
+#define H5HF_ID_VERS_CURR       0x00    /* Current version of ID format */
+#define H5HF_ID_VERS_MASK       0xC0    /* Mask for getting the ID version from flags */
+/* Heap ID type (2 bits: 4-5) */
+#define H5HF_ID_TYPE_MAN        0x00    /* "Managed" object - stored in fractal heap blocks */
+#define H5HF_ID_TYPE_HUGE       0x10    /* "Huge" object - stored in file directly */
+#define H5HF_ID_TYPE_TINY       0x20    /* "Tiny" object - stored in heap ID directly */
+#define H5HF_ID_TYPE_RESERVED   0x30    /* "?" object - reserved for future use */
+#define H5HF_ID_TYPE_MASK       0x30    /* Mask for getting the ID type from flags */
+/* Heap ID bits 0-3 reserved for future use */
+
+/* Encode a "managed" heap ID */
+#define H5HF_MAN_ID_ENCODE(i, h, o, l)                                        \
+    *(i) = H5HF_ID_VERS_CURR | H5HF_ID_TYPE_MAN;                              \
+    (i)++;                                                                    \
+    UINT64ENCODE_VAR((i), (o), (h)->heap_off_size);                           \
+    UINT64ENCODE_VAR((i), (l), (h)->heap_len_size)
+
+/* Decode a "managed" heap ID */
+#define H5HF_MAN_ID_DECODE(i, h, f, o, l)                                     \
+    f = *(uint8_t *)i++;                                                      \
+    UINT64DECODE_VAR((i), (o), (h)->heap_off_size);                           \
+    UINT64DECODE_VAR((i), (l), (h)->heap_len_size)
+
+/* Free space section types for fractal heap */
+/* (values stored in free space data structures in file) */
+#define H5HF_FSPACE_SECT_SINGLE         0       /* Section is a range of actual bytes in a direct block */
+#define H5HF_FSPACE_SECT_FIRST_ROW      1       /* Section is first range of blocks in an indirect block row */
+#define H5HF_FSPACE_SECT_NORMAL_ROW     2       /* Section is a range of blocks in an indirect block row */
+#define H5HF_FSPACE_SECT_INDIRECT       3       /* Section is a span of blocks in an indirect block */
+
+/* Flags for 'op' operations */
+#define H5HF_OP_MODIFY          0x0001          /* Operation will modify object */
+#define H5HF_OP_FLAGS           (H5HF_OP_MODIFY)        /* Bit-wise OR of all op flags */
+
+/* Flags for 'root_iblock_flags' field in header */
+#define H5HF_ROOT_IBLOCK_PINNED         0x01
+#define H5HF_ROOT_IBLOCK_PROTECTED      0x02
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/* Doubling-table info */
+typedef struct H5HF_dtable_t {
+    /* Immutable, pre-set information for table */
+    H5HF_dtable_cparam_t    cparam;     /* Creation parameters for table */
+
+    /* Derived information (stored, varies during lifetime of table) */
+    haddr_t     table_addr;     /* Address of first block for table */
+                                /* Undefined if no space allocated for table */
+    unsigned    curr_root_rows; /* Current number of rows in the root indirect block */
+                                /* 0 indicates that the TABLE_ADDR field points
+                                 * to direct block (of START_BLOCK_SIZE) instead
+                                 * of indirect root block.
+                                 */
+
+    /* Computed information (not stored) */
+    unsigned    max_root_rows;      /* Maximum # of rows in root indirect block */
+    unsigned    max_direct_rows;    /* Maximum # of direct rows in any indirect block */
+    unsigned    start_bits;         /* # of bits for starting block size (i.e. log2(start_block_size)) */
+    unsigned    max_direct_bits;    /* # of bits for max. direct block size (i.e. log2(max_direct_size)) */
+    unsigned    max_dir_blk_off_size;   /* Max. size of offsets in direct blocks */
+    unsigned    first_row_bits;     /* # of bits in address of first row */
+    hsize_t     num_id_first_row;   /* Number of IDs in first row of table */
+    hsize_t     *row_block_size;    /* Block size per row of indirect block */
+    hsize_t     *row_block_off;     /* Cumulative offset per row of indirect block */
+    hsize_t     *row_tot_dblock_free;   /* Total free space in dblocks for this row */
+                                    /* (For indirect block rows, it's the total
+                                     * free space in all direct blocks referenced
+                                     * from the indirect block)
+                                     */
+    size_t      *row_max_dblock_free;   /* Max. free space in dblocks for this row */
+                                    /* (For indirect block rows, it's the maximum
+                                     * free space in a direct block referenced
+                                     * from the indirect block)
+                                     */
+} H5HF_dtable_t;
+
+/* Fractal heap free list info (forward decl - defined in H5HFflist.c) */
+typedef struct H5HF_freelist_t H5HF_freelist_t;
+
+/* Forward decl indirect block info */
+typedef struct H5HF_indirect_t H5HF_indirect_t;
+
+/* Fractal heap block location */
+typedef struct H5HF_block_loc_t {
+    /* Necessary table fields */
+    unsigned    row;            /* Row of block in doubling table             */
+    unsigned    col;            /* Column of block in doubling table          */
+
+    /* Derived/computed/cached table fields */
+    unsigned    entry;          /* Entry of block in doubling table           */
+
+    /* Infrastructure */
+    H5HF_indirect_t *context;   /* Pointer to the indirect block containing the block */
+    struct H5HF_block_loc_t *up;  /* Pointer to next level up in the stack of levels */
+} H5HF_block_loc_t;
+
+/* Fractal heap block iterator info */
+typedef struct H5HF_block_iter_t {
+    hbool_t ready;              /* Set if iterator is finished initializing   */
+    H5HF_block_loc_t *curr;     /* Pointer to the current level information for iterator */
+} H5HF_block_iter_t;
+
+/* Fractal heap free space section info */
+typedef struct H5HF_free_section_t {
+    H5FS_section_info_t sect_info;              /* Free space section information (must be first in struct) */
+    union {
+        struct {
+            H5HF_indirect_t *parent;            /* Indirect block parent for free section's direct block */
+            unsigned par_entry;                 /* Entry of free section's direct block in parent indirect block */
+        } single;
+        struct {
+            struct H5HF_free_section_t *under;  /* Pointer to indirect block underlying row section */
+            unsigned    row;                    /* Row for range of blocks */
+            unsigned    col;                    /* Column for range of blocks */
+            unsigned    num_entries;            /* Number of entries covered */
+
+            /* Fields that aren't stored */
+            hbool_t     checked_out;            /* Flag to indicate that a row section is temporarily out of the free space manager */
+        } row;
+        struct {
+            /* Holds either a pointer to an indirect block (if its "live") or
+             *  the block offset of it's indirect block (if its "serialized")
+             *  (This allows the indirect block that the section is within to
+             *          be compared with other sections, whether it's serialized
+             *          or not)
+             */
+            union {
+                H5HF_indirect_t *iblock;        /* Indirect block for free section */
+                hsize_t iblock_off;             /* Indirect block offset in "heap space" */
+            } u;
+            unsigned    row;                    /* Row for range of blocks */
+            unsigned    col;                    /* Column for range of blocks */
+            unsigned    num_entries;            /* Number of entries covered */
+
+            /* Fields that aren't stored */
+            struct H5HF_free_section_t *parent; /* Pointer to "parent" indirect section */
+            unsigned    par_entry;              /* Entry within parent indirect section */
+            hsize_t     span_size;              /* Size of space tracked, in "heap space" */
+            unsigned    iblock_entries;         /* Number of entries in indirect block where section is located */
+            unsigned    rc;                     /* Reference count of outstanding row & child indirect sections */
+            unsigned    dir_nrows;              /* Number of direct rows in section */
+            struct H5HF_free_section_t **dir_rows;  /* Array of pointers to outstanding row sections */
+            unsigned    indir_nents;            /* Number of indirect entries in section */
+            struct H5HF_free_section_t **indir_ents; /* Array of pointers to outstanding child indirect sections */
+        } indirect;
+    } u;
+} H5HF_free_section_t;
+
+/* The fractal heap header information */
+/* (Each fractal heap header has certain information that is shared across all
+ * the instances of blocks in that fractal heap)
+ */
+typedef struct H5HF_hdr_t {
+    /* Information for H5AC cache functions, _must_ be first field in structure */
+    H5AC_info_t cache_info;
+
+    /* General header information (stored in header) */
+    unsigned    id_len;         /* Size of heap IDs (in bytes) */
+    unsigned    filter_len;     /* Size of I/O filter information (in bytes) */
+
+    /* Flags for heap settings (stored in status byte in header) */
+    hbool_t     debug_objs;     /* Is the heap storing objects in 'debug' format */
+    hbool_t     write_once;     /* Is heap being written in "write once" mode? */
+    hbool_t     huge_ids_wrapped; /* Have "huge" object IDs wrapped around? */
+    hbool_t     checksum_dblocks; /* Should the direct blocks in the heap be checksummed? */
+
+    /* Doubling table information (partially stored in header) */
+    /* (Partially set by user, partially derived/updated internally) */
+    H5HF_dtable_t man_dtable;   /* Doubling-table info for managed objects */
+
+    /* Free space information for managed objects (stored in header) */
+    hsize_t     total_man_free; /* Total amount of free space in managed blocks */
+    haddr_t     fs_addr;        /* Address of free space header on disk */
+
+    /* "Huge" object support (stored in header) */
+    uint32_t    max_man_size;   /* Max. size of object to manage in doubling table */
+    hsize_t     huge_next_id;   /* Next ID to use for indirectly tracked 'huge' object */
+    haddr_t     huge_bt2_addr;  /* Address of v2 B-tree for tracking "huge" object info */
+
+    /* I/O filter support (stored in header, if any are used) */
+    H5O_pline_t pline;          /* I/O filter pipeline for heap objects */
+    size_t      pline_root_direct_size;    /* Size of filtered root direct block */
+    unsigned    pline_root_direct_filter_mask; /* I/O filter mask for filtered root direct block */
+
+    /* Statistics for heap (stored in header) */
+    hsize_t     man_size;       /* Total amount of 'managed' space in heap */
+    hsize_t     man_alloc_size; /* Total amount of allocated 'managed' space in heap */
+    hsize_t     man_iter_off;   /* Offset of iterator in 'managed' heap space */
+    hsize_t     man_nobjs;      /* Number of 'managed' objects in heap */
+    hsize_t     huge_size;      /* Total size of 'huge' objects in heap */
+    hsize_t     huge_nobjs;     /* Number of 'huge' objects in heap */
+    hsize_t     tiny_size;      /* Total size of 'tiny' objects in heap */
+    hsize_t     tiny_nobjs;     /* Number of 'tiny' objects in heap */
+
+    /* Cached/computed values (not stored in header) */
+    size_t      rc;             /* Reference count of heap's components using heap header */
+    haddr_t     heap_addr;      /* Address of heap header in the file */
+    size_t      heap_size;      /* Size of heap header in the file */
+    H5AC_protect_t mode;        /* Access mode for heap */
+    H5F_t      *f;              /* Pointer to file for heap */
+    size_t      file_rc;        /* Reference count of files using heap header */
+    hbool_t     pending_delete; /* Heap is pending deletion */
+    uint8_t     sizeof_size;    /* Size of file sizes */
+    uint8_t     sizeof_addr;    /* Size of file addresses */
+    struct H5HF_indirect_t *root_iblock;    /* Pointer to root indirect block */
+    unsigned    root_iblock_flags;      /* Flags to indicate whether root indirect block is pinned/protected */
+    H5FS_t      *fspace;        /* Free space list for objects in heap */
+    H5HF_block_iter_t next_block;   /* Block iterator for searching for next block with space */
+    H5B2_t      *huge_bt2;      /* v2 B-tree handle for huge objects */
+    hsize_t     huge_max_id;    /* Max. 'huge' heap ID before rolling 'huge' heap IDs over */
+    uint8_t     huge_id_size;   /* Size of 'huge' heap IDs (in bytes) */
+    hbool_t     huge_ids_direct; /* Flag to indicate that 'huge' object's offset & length are stored directly in heap ID */
+    size_t      tiny_max_len;   /* Max. size of tiny objects for this heap */
+    hbool_t     tiny_len_extended; /* Flag to indicate that 'tiny' object's length is stored in extended form (i.e. w/extra byte) */
+    uint8_t     heap_off_size;  /* Size of heap offsets (in bytes) */
+    uint8_t     heap_len_size;  /* Size of heap ID lengths (in bytes) */
+    hbool_t     checked_filters; /* TRUE if pipeline passes can_apply checks */
+} H5HF_hdr_t;
+
+/* Common indirect block doubling table entry */
+/* (common between entries pointing to direct & indirect child blocks) */
+typedef struct H5HF_indirect_ent_t {
+    haddr_t     addr;           /* Direct block's address                     */
+} H5HF_indirect_ent_t;
+
+/* Extern indirect block doubling table entry for compressed direct blocks */
+/* (only exists for indirect blocks in heaps that have I/O filters) */
+typedef struct H5HF_indirect_filt_ent_t {
+    size_t     size;            /* Size of child direct block, after passing though I/O filters */
+    unsigned	filter_mask;	/* Excluded filters for child direct block */
+} H5HF_indirect_filt_ent_t;
+
+/* Fractal heap indirect block */
+struct H5HF_indirect_t {
+    /* Information for H5AC cache functions, _must_ be first field in structure */
+    H5AC_info_t cache_info;
+
+    /* Internal heap information (not stored) */
+    size_t      rc;             /* Reference count of objects using this block */
+    H5HF_hdr_t	*hdr;	        /* Shared heap header info	              */
+    struct H5HF_indirect_t *parent;	/* Shared parent indirect block info  */
+    unsigned    par_entry;      /* Entry in parent's table                    */
+    haddr_t     addr;           /* Address of this indirect block on disk     */
+    size_t      size;           /* Size of indirect block on disk             */
+    unsigned    nrows;          /* Total # of rows in indirect block          */
+    unsigned    max_rows;       /* Max. # of rows in indirect block           */
+    unsigned    nchildren;      /* Number of child blocks                     */
+    unsigned    max_child;      /* Max. offset used in child entries          */
+    struct H5HF_indirect_t **child_iblocks; /* Array of pointers to pinned child indirect blocks */
+
+    /* Stored values */
+    hsize_t     block_off;      /* Offset of the block within the heap's address space */
+    H5HF_indirect_ent_t *ents;  /* Pointer to block entry table               */
+    H5HF_indirect_filt_ent_t *filt_ents;    /* Pointer to filtered information for direct blocks */
+};
+
+/* A fractal heap direct block */
+typedef struct H5HF_direct_t {
+    /* Information for H5AC cache functions, _must_ be first field in structure */
+    H5AC_info_t cache_info;
+
+    /* Internal heap information */
+    H5HF_hdr_t	*hdr;	        /* Shared heap header info	              */
+    H5HF_indirect_t *parent;	/* Shared parent indirect block info          */
+    unsigned    par_entry;      /* Entry in parent's table                    */
+    size_t      size;           /* Size of direct block                       */
+    hsize_t     file_size;      /* Size of direct block in file (only valid when block's space is being freed) */
+    unsigned    blk_off_size;   /* Size of offsets in the block               */
+    uint8_t     *blk;           /* Pointer to buffer containing block data    */
+
+    /* Stored values */
+    hsize_t     block_off;      /* Offset of the block within the heap's address space */
+} H5HF_direct_t;
+
+/* Fractal heap */
+struct H5HF_t {
+    H5HF_hdr_t  *hdr;           /* Pointer to internal fractal heap header info */
+    H5F_t      *f;              /* Pointer to file for heap */
+};
+
+/* Fractal heap "parent info" (for loading a block) */
+typedef struct H5HF_parent_t {
+    H5HF_hdr_t *hdr;                /* Pointer to heap header info */
+    H5HF_indirect_t *iblock;    /* Pointer to parent indirect block */
+    unsigned entry;             /* Location of block in parent's entry table */
+} H5HF_parent_t;
+
+/* Typedef for indirectly accessed 'huge' object's records in the v2 B-tree */
+typedef struct H5HF_huge_bt2_indir_rec_t {
+    haddr_t addr;       /* Address of the object in the file */
+    hsize_t len;        /* Length of the object in the file */
+    hsize_t id;         /* ID used for object (not used for 'huge' objects directly accessed) */
+} H5HF_huge_bt2_indir_rec_t;
+
+/* Typedef for indirectly accessed, filtered 'huge' object's records in the v2 B-tree */
+typedef struct H5HF_huge_bt2_filt_indir_rec_t {
+    haddr_t addr;       /* Address of the filtered object in the file */
+    hsize_t len;        /* Length of the filtered object in the file */
+    unsigned filter_mask;   /* I/O pipeline filter mask for filtered object in the file */
+    hsize_t obj_size;   /* Size of the de-filtered object in memory */
+    hsize_t id;         /* ID used for object (not used for 'huge' objects directly accessed) */
+} H5HF_huge_bt2_filt_indir_rec_t;
+
+/* Typedef for directly accessed 'huge' object's records in the v2 B-tree */
+typedef struct H5HF_huge_bt2_dir_rec_t {
+    haddr_t addr;       /* Address of the object in the file */
+    hsize_t len;        /* Length of the object in the file */
+} H5HF_huge_bt2_dir_rec_t;
+
+/* Typedef for directly accessed, filtered 'huge' object's records in the v2 B-tree */
+typedef struct H5HF_huge_bt2_filt_dir_rec_t {
+    haddr_t addr;       /* Address of the filtered object in the file */
+    hsize_t len;        /* Length of the filtered object in the file */
+    unsigned filter_mask;   /* I/O pipeline filter mask for filtered object in the file */
+    hsize_t obj_size;   /* Size of the de-filtered object in memory */
+} H5HF_huge_bt2_filt_dir_rec_t;
+
+/* User data for free space section 'add' callback */
+typedef struct {
+    H5HF_hdr_t *hdr;            /* Fractal heap header */
+    hid_t dxpl_id;              /* DXPL ID for operation */
+} H5HF_sect_add_ud_t;
+
+/* User data for v2 B-tree 'remove' callback on 'huge' objects */
+typedef struct {
+    H5HF_hdr_t *hdr;            /* Fractal heap header (in) */
+    hid_t dxpl_id;              /* DXPL ID for operation (in) */
+    hsize_t obj_len;            /* Length of object removed (out) */
+} H5HF_huge_remove_ud_t;
+
+/* User data for fractal heap header cache client callback */
+typedef struct H5HF_hdr_cache_ud_t {
+    H5F_t *f;                   /* File pointer */
+    hid_t dxpl_id;              /* DXPL ID for operation (in) */
+} H5HF_hdr_cache_ud_t;
+
+/* User data for fractal heap indirect block cache client callbacks */
+typedef struct H5HF_iblock_cache_ud_t {
+    H5HF_parent_t * par_info;   /* Parent info */
+    H5F_t * f;                  /* File pointer */
+    const unsigned *nrows;      /* Number of rows */
+} H5HF_iblock_cache_ud_t;
+
+/* User data for fractal heap direct block cache client callbacks */
+typedef struct H5HF_dblock_cache_ud_t {
+    H5HF_parent_t par_info;     /* Parent info */
+    H5F_t * f;                  /* File pointer */
+    size_t odi_size;		/* On disk image size of the direct block.
+				 * Note that there is no necessary relation
+				 * between this value, and the actual
+				 * direct block size, as conpression may
+				 * reduce the size of the on disk image,
+				 * and check sums may increase it.
+				 */
+    size_t dblock_size;		/* size of the direct block, which bears
+				 * no necessary relation to the block
+				 * odi_size -- the size of the on disk
+				 * image of the block.  Note that the
+				 * metadata cache is only interested
+				 * in the odi_size, and thus it is this
+				 * value that is passed to the cache in
+				 * calls to it.
+				 */
+    unsigned filter_mask;	/* Excluded filters for direct block */
+} H5HF_dblock_cache_ud_t;
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/* H5HF header inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_FHEAP_HDR[1];
+
+/* H5HF indirect block inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_FHEAP_IBLOCK[1];
+
+/* H5HF direct block inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_FHEAP_DBLOCK[1];
+
+/* The v2 B-tree class for tracking indirectly accessed 'huge' objects */
+H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_INDIR[1];
+
+/* The v2 B-tree class for tracking indirectly accessed filtered 'huge' objects */
+H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_FILT_INDIR[1];
+
+/* The v2 B-tree class for tracking directly accessed 'huge' objects */
+H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_DIR[1];
+
+/* The v2 B-tree class for tracking directly accessed filtered 'huge' objects */
+H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_FILT_DIR[1];
+
+/* H5HF single section inherits serializable properties from H5FS_section_class_t */
+H5_DLLVAR H5FS_section_class_t H5HF_FSPACE_SECT_CLS_SINGLE[1];
+
+/* H5HF 'first' row section inherits serializable properties from H5FS_section_class_t */
+H5_DLLVAR H5FS_section_class_t H5HF_FSPACE_SECT_CLS_FIRST_ROW[1];
+
+/* H5HF 'normal' row section inherits serializable properties from H5FS_section_class_t */
+H5_DLLVAR H5FS_section_class_t H5HF_FSPACE_SECT_CLS_NORMAL_ROW[1];
+
+/* H5HF indirect section inherits serializable properties from H5FS_section_class_t */
+H5_DLLVAR H5FS_section_class_t H5HF_FSPACE_SECT_CLS_INDIRECT[1];
+
+/* Declare a free list to manage the H5HF_indirect_t struct */
+H5FL_EXTERN(H5HF_indirect_t);
+
+/* Declare a free list to manage the H5HF_indirect_ent_t sequence information */
+H5FL_SEQ_EXTERN(H5HF_indirect_ent_t);
+
+/* Declare a free list to manage the H5HF_indirect_filt_ent_t sequence information */
+H5FL_SEQ_EXTERN(H5HF_indirect_filt_ent_t);
+
+/* Declare a free list to manage the H5HF_indirect_t * sequence information */
+typedef H5HF_indirect_t *H5HF_indirect_ptr_t;
+H5FL_SEQ_EXTERN(H5HF_indirect_ptr_t);
+
+/* Declare a free list to manage the H5HF_direct_t struct */
+H5FL_EXTERN(H5HF_direct_t);
+
+/* Declare a free list to manage heap direct block data to/from disk */
+H5FL_BLK_EXTERN(direct_block);
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+/* Doubling table routines */
+H5_DLL herr_t H5HF_dtable_init(H5HF_dtable_t *dtable);
+H5_DLL herr_t H5HF_dtable_dest(H5HF_dtable_t *dtable);
+H5_DLL herr_t H5HF_dtable_lookup(const H5HF_dtable_t *dtable, hsize_t off,
+    unsigned *row, unsigned *col);
+H5_DLL unsigned H5HF_dtable_size_to_row(const H5HF_dtable_t *dtable, size_t block_size);
+H5_DLL unsigned H5HF_dtable_size_to_rows(const H5HF_dtable_t *dtable, hsize_t size);
+H5_DLL hsize_t H5HF_dtable_span_size(const H5HF_dtable_t *dtable, unsigned start_row,
+    unsigned start_col, unsigned num_entries);
+
+/* Heap header routines */
+H5_DLL H5HF_hdr_t * H5HF_hdr_alloc(H5F_t *f);
+H5_DLL haddr_t H5HF_hdr_create(H5F_t *f, hid_t dxpl_id, const H5HF_create_t *cparam);
+H5_DLL H5HF_hdr_t *H5HF_hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+    H5AC_protect_t rw);
+H5_DLL herr_t H5HF_hdr_finish_init_phase1(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_hdr_finish_init_phase2(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_hdr_finish_init(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_hdr_incr(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_hdr_decr(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_hdr_fuse_incr(H5HF_hdr_t *hdr);
+H5_DLL size_t H5HF_hdr_fuse_decr(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_hdr_dirty(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_hdr_adj_free(H5HF_hdr_t *hdr, ssize_t amt);
+H5_DLL herr_t H5HF_hdr_adjust_heap(H5HF_hdr_t *hdr, hsize_t new_size, hssize_t extra_free);
+H5_DLL herr_t H5HF_hdr_inc_alloc(H5HF_hdr_t *hdr, size_t alloc_size);
+H5_DLL herr_t H5HF_hdr_start_iter(H5HF_hdr_t *hdr, H5HF_indirect_t *iblock, hsize_t curr_off, unsigned curr_entry);
+H5_DLL herr_t H5HF_hdr_skip_blocks(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_indirect_t *iblock, unsigned start_entry, unsigned nentries);
+H5_DLL herr_t H5HF_hdr_update_iter(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t min_dblock_size);
+H5_DLL herr_t H5HF_hdr_inc_iter(H5HF_hdr_t *hdr, hsize_t adv_size, unsigned nentries);
+H5_DLL herr_t H5HF_hdr_reverse_iter(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    haddr_t dblock_addr);
+H5_DLL herr_t H5HF_hdr_reset_iter(H5HF_hdr_t *hdr, hsize_t curr_off);
+H5_DLL herr_t H5HF_hdr_empty(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_hdr_free(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_hdr_delete(H5HF_hdr_t *hdr, hid_t dxpl_id);
+H5_DLL herr_t H5HF_hdr_dest(H5HF_hdr_t *hdr);
+
+/* Indirect block routines */
+H5_DLL herr_t H5HF_iblock_incr(H5HF_indirect_t *iblock);
+H5_DLL herr_t H5HF_iblock_decr(H5HF_indirect_t *iblock);
+H5_DLL herr_t H5HF_iblock_dirty(H5HF_indirect_t *iblock);
+H5_DLL herr_t H5HF_man_iblock_root_create(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    size_t min_dblock_size);
+H5_DLL herr_t H5HF_man_iblock_root_double(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    size_t min_dblock_size);
+H5_DLL herr_t H5HF_man_iblock_alloc_row(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_free_section_t **sec_node);
+H5_DLL herr_t H5HF_man_iblock_create(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_indirect_t *par_iblock, unsigned par_entry, unsigned nrows,
+    unsigned max_rows, haddr_t *addr_p);
+H5_DLL H5HF_indirect_t *H5HF_man_iblock_protect(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    haddr_t iblock_addr, unsigned iblock_nrows,
+    H5HF_indirect_t *par_iblock, unsigned par_entry, hbool_t must_protect,
+    H5AC_protect_t rw, hbool_t *did_protect);
+H5_DLL herr_t H5HF_man_iblock_unprotect(H5HF_indirect_t *iblock, hid_t dxpl_id,
+    unsigned cache_flags, hbool_t did_protect);
+H5_DLL herr_t H5HF_man_iblock_attach(H5HF_indirect_t *iblock, unsigned entry,
+    haddr_t dblock_addr);
+H5_DLL herr_t H5HF_man_iblock_detach(H5HF_indirect_t *iblock, hid_t dxpl_id, unsigned entry);
+H5_DLL herr_t H5HF_man_iblock_entry_addr(H5HF_indirect_t *iblock, unsigned entry,
+    haddr_t *child_addr);
+H5_DLL herr_t H5HF_man_iblock_delete(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    haddr_t iblock_addr, unsigned iblock_nrows, H5HF_indirect_t *par_iblock,
+    unsigned par_entry);
+H5_DLL herr_t H5HF_man_iblock_size(H5F_t *f, hid_t dxpl_id, H5HF_hdr_t *hdr,
+    haddr_t iblock_addr, unsigned nrows, H5HF_indirect_t *par_iblock, unsigned par_entry, hsize_t *heap_size/*out*/);
+H5_DLL herr_t H5HF_man_iblock_dest(H5HF_indirect_t *iblock);
+
+/* Direct block routines */
+H5_DLL herr_t H5HF_man_dblock_new(H5HF_hdr_t *fh, hid_t dxpl_id, size_t request,
+    H5HF_free_section_t **ret_sec_node);
+H5_DLL herr_t H5HF_man_dblock_create(hid_t dxpl_id, H5HF_hdr_t *hdr,
+    H5HF_indirect_t *par_iblock, unsigned par_entry, haddr_t *addr_p,
+    H5HF_free_section_t **ret_sec_node);
+H5_DLL herr_t H5HF_man_dblock_destroy(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_direct_t *dblock, haddr_t dblock_addr);
+H5_DLL H5HF_direct_t *H5HF_man_dblock_protect(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    haddr_t dblock_addr, size_t dblock_size,
+    H5HF_indirect_t *par_iblock, unsigned par_entry,
+    H5AC_protect_t rw);
+H5_DLL herr_t H5HF_man_dblock_locate(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    hsize_t obj_off, H5HF_indirect_t **par_iblock,
+    unsigned *par_entry, hbool_t *par_did_protect, H5AC_protect_t rw);
+H5_DLL herr_t H5HF_man_dblock_delete(H5F_t *f, hid_t dxpl_id, haddr_t dblock_addr,
+    hsize_t dblock_size);
+H5_DLL herr_t H5HF_man_dblock_dest(H5HF_direct_t *dblock);
+
+/* Managed object routines */
+H5_DLL herr_t H5HF_man_insert(H5HF_hdr_t *fh, hid_t dxpl_id, size_t obj_size,
+    const void *obj, void *id);
+H5_DLL herr_t H5HF_man_read(H5HF_hdr_t *fh, hid_t dxpl_id, const uint8_t *id,
+    void *obj);
+H5_DLL herr_t H5HF_man_write(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
+    const void *obj);
+H5_DLL herr_t H5HF_man_op(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
+    H5HF_operator_t op, void *op_data);
+H5_DLL herr_t H5HF_man_remove(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id);
+
+/* 'Huge' object routines */
+H5_DLL herr_t H5HF_huge_init(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_huge_insert(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t obj_size,
+    void *obj, void *id);
+H5_DLL herr_t H5HF_huge_get_obj_len(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    const uint8_t *id, size_t *obj_len_p);
+H5_DLL herr_t H5HF_huge_read(H5HF_hdr_t *fh, hid_t dxpl_id, const uint8_t *id,
+    void *obj);
+H5_DLL herr_t H5HF_huge_write(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
+    const void *obj);
+H5_DLL herr_t H5HF_huge_op(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
+    H5HF_operator_t op, void *op_data);
+H5_DLL herr_t H5HF_huge_remove(H5HF_hdr_t *fh, hid_t dxpl_id, const uint8_t *id);
+H5_DLL herr_t H5HF_huge_term(H5HF_hdr_t *hdr, hid_t dxpl_id);
+H5_DLL herr_t H5HF_huge_delete(H5HF_hdr_t *hdr, hid_t dxpl_id);
+
+/* 'Huge' object v2 B-tree function callbacks */
+H5_DLL herr_t H5HF_huge_bt2_indir_found(const void *nrecord, void *op_data);
+H5_DLL herr_t H5HF_huge_bt2_indir_remove(const void *nrecord, void *op_data);
+H5_DLL herr_t H5HF_huge_bt2_filt_indir_found(const void *nrecord, void *op_data);
+H5_DLL herr_t H5HF_huge_bt2_filt_indir_remove(const void *nrecord, void *op_data);
+H5_DLL herr_t H5HF_huge_bt2_dir_remove(const void *nrecord, void *op_data);
+H5_DLL herr_t H5HF_huge_bt2_filt_dir_found(const void *nrecord, void *op_data);
+H5_DLL herr_t H5HF_huge_bt2_filt_dir_remove(const void *nrecord, void *op_data);
+
+/* 'Tiny' object routines */
+H5_DLL herr_t H5HF_tiny_init(H5HF_hdr_t *hdr);
+H5_DLL herr_t H5HF_tiny_insert(H5HF_hdr_t *hdr, size_t obj_size, const void *obj,
+    void *id);
+H5_DLL herr_t H5HF_tiny_get_obj_len(H5HF_hdr_t *hdr, const uint8_t *id,
+    size_t *obj_len_p);
+H5_DLL herr_t H5HF_tiny_read(H5HF_hdr_t *fh, const uint8_t *id, void *obj);
+H5_DLL herr_t H5HF_tiny_op(H5HF_hdr_t *hdr, const uint8_t *id,
+    H5HF_operator_t op, void *op_data);
+H5_DLL herr_t H5HF_tiny_remove(H5HF_hdr_t *fh, const uint8_t *id);
+
+/* Debugging routines for dumping file structures */
+H5_DLL void H5HF_hdr_print(const H5HF_hdr_t *hdr, hid_t dxpl_id,
+	hbool_t dump_internal, FILE *stream, int indent, int fwidth);
+H5_DLL herr_t H5HF_hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+    FILE *stream, int indent, int fwidth);
+H5_DLL herr_t H5HF_dblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+    FILE *stream, int indent, int fwidth, haddr_t hdr_addr, size_t nrec);
+H5_DLL void H5HF_iblock_print(const H5HF_indirect_t *iblock, hbool_t dump_internal,
+    FILE *stream, int indent, int fwidth);
+H5_DLL herr_t H5HF_iblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+    FILE *stream, int indent, int fwidth, haddr_t hdr_addr, unsigned nrows);
+
+/* Block iteration routines */
+H5_DLL herr_t H5HF_man_iter_init(H5HF_block_iter_t *biter);
+H5_DLL herr_t H5HF_man_iter_start_offset(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_block_iter_t *biter, hsize_t offset);
+H5_DLL herr_t H5HF_man_iter_start_entry(H5HF_hdr_t *hdr, H5HF_block_iter_t *biter,
+    H5HF_indirect_t *iblock, unsigned start_entry);
+H5_DLL herr_t H5HF_man_iter_set_entry(const H5HF_hdr_t *hdr,
+    H5HF_block_iter_t *biter, unsigned entry);
+H5_DLL herr_t H5HF_man_iter_next(H5HF_hdr_t *hdr, H5HF_block_iter_t *biter,
+    unsigned nentries);
+H5_DLL herr_t H5HF_man_iter_up(H5HF_block_iter_t *biter);
+H5_DLL herr_t H5HF_man_iter_down(H5HF_block_iter_t *biter, H5HF_indirect_t *iblock);
+H5_DLL herr_t H5HF_man_iter_reset(H5HF_block_iter_t *biter);
+H5_DLL herr_t H5HF_man_iter_curr(H5HF_block_iter_t *biter, unsigned *row, unsigned *col,
+    unsigned *entry, H5HF_indirect_t **block);
+H5_DLL herr_t H5HF_man_iter_offset(H5HF_hdr_t *hdr, H5HF_block_iter_t *biter,
+    hsize_t *offset);
+H5_DLL hbool_t H5HF_man_iter_ready(H5HF_block_iter_t *biter);
+
+/* Free space manipulation routines */
+H5_DLL herr_t H5HF_space_start(H5HF_hdr_t *hdr, hid_t dxpl_id, hbool_t may_create);
+H5_DLL herr_t H5HF_space_add(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_free_section_t *node, unsigned flags);
+H5_DLL htri_t H5HF_space_find(H5HF_hdr_t *hdr, hid_t dxpl_id, hsize_t request,
+    H5HF_free_section_t **node);
+H5_DLL herr_t H5HF_space_revert_root(const H5HF_hdr_t *hdr, hid_t dxpl_id);
+H5_DLL herr_t H5HF_space_create_root(const H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_indirect_t *root_iblock);
+H5_DLL herr_t H5HF_space_size(H5HF_hdr_t *hdr, hid_t dxpl_id, hsize_t *fs_size);
+H5_DLL herr_t H5HF_space_remove(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_free_section_t *node);
+H5_DLL herr_t H5HF_space_close(H5HF_hdr_t *hdr, hid_t dxpl_id);
+H5_DLL herr_t H5HF_space_delete(H5HF_hdr_t *hdr, hid_t dxpl_id);
+H5_DLL herr_t H5HF_space_sect_change_class(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_free_section_t *sect, unsigned new_class);
+
+/* Free space section routines */
+H5_DLL H5HF_free_section_t *H5HF_sect_single_new(hsize_t sect_off,
+    size_t sect_size, H5HF_indirect_t *parent, unsigned par_entry);
+H5_DLL herr_t H5HF_sect_single_revive(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_free_section_t *sect);
+H5_DLL herr_t H5HF_sect_single_dblock_info(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_free_section_t *sect, haddr_t *dblock_addr, size_t *dblock_size);
+H5_DLL herr_t H5HF_sect_single_reduce(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_free_section_t *sect, size_t amt);
+H5_DLL herr_t H5HF_sect_row_revive(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_free_section_t *sect);
+H5_DLL herr_t H5HF_sect_row_reduce(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_free_section_t *sect, unsigned *entry_p);
+H5_DLL H5HF_indirect_t *H5HF_sect_row_get_iblock(H5HF_free_section_t *sect);
+H5_DLL herr_t H5HF_sect_indirect_add(H5HF_hdr_t *hdr, hid_t dxpl_id,
+    H5HF_indirect_t *iblock, unsigned start_entry, unsigned nentries);
+H5_DLL herr_t H5HF_sect_single_free(H5FS_section_info_t *sect);
+
+/* Internal operator callbacks */
+H5_DLL herr_t H5HF_op_read(const void *obj, size_t obj_len, void *op_data);
+H5_DLL herr_t H5HF_op_write(const void *obj, size_t obj_len, void *op_data);
+
+/* Testing routines */
+#ifdef H5HF_TESTING
+H5_DLL herr_t H5HF_get_cparam_test(const H5HF_t *fh, H5HF_create_t *cparam);
+H5_DLL int H5HF_cmp_cparam_test(const H5HF_create_t *cparam1, const H5HF_create_t *cparam2);
+H5_DLL unsigned H5HF_get_max_root_rows(const H5HF_t *fh);
+H5_DLL unsigned H5HF_get_dtable_width_test(const H5HF_t *fh);
+H5_DLL unsigned H5HF_get_dtable_max_drows_test(const H5HF_t *fh);
+H5_DLL unsigned H5HF_get_iblock_max_drows_test(const H5HF_t *fh, unsigned pos);
+H5_DLL hsize_t H5HF_get_dblock_size_test(const H5HF_t *fh, unsigned row);
+H5_DLL hsize_t H5HF_get_dblock_free_test(const H5HF_t *fh, unsigned row);
+H5_DLL herr_t H5HF_get_id_off_test(const H5HF_t *fh, const void *id, hsize_t *obj_off);
+H5_DLL herr_t H5HF_get_id_type_test(const void *id, unsigned char *obj_type);
+H5_DLL herr_t H5HF_get_tiny_info_test(const H5HF_t *fh, size_t *max_len,
+    hbool_t *len_extended);
+H5_DLL herr_t H5HF_get_huge_info_test(const H5HF_t *fh, hsize_t *next_id,
+    hbool_t *ids_direct);
+#endif /* H5HF_TESTING */
+
+#endif /* _H5HFpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5HFpublic.h b/Resources/windows-libs/HDF5/include/H5HFpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..78b367bb62034c82fcef9745c556f96ac5816fa2
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5HFpublic.h
@@ -0,0 +1,54 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5HFpublic.h
+ *                      Feb 24 2006
+ *                      Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *
+ * Purpose:             Public declarations for the fractal heap package.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef _H5HFpublic_H
+#define _H5HFpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/**********************************/
+/* Public API Function Prototypes */
+/**********************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _H5HFpublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5HGpkg.h b/Resources/windows-libs/HDF5/include/H5HGpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..5d4234f00d5d5e99351cf4acced2537a6206533c
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5HGpkg.h
@@ -0,0 +1,150 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *             Wednesday, July 9, 2003
+ *
+ * Purpose:     This file contains declarations which are visible
+ *              only within the H5HG package. Source files outside the
+ *              H5HG package should include H5HGprivate.h instead.
+ */
+#ifndef H5HG_PACKAGE
+#error "Do not include this file outside the H5HG package!"
+#endif
+
+#ifndef _H5HGpkg_H
+#define _H5HGpkg_H
+
+/* Get package's private header */
+#include "H5HGprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5FLprivate.h"	/* Free lists                           */
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/* The cache subclass */
+H5_DLLVAR const H5AC_class_t H5AC_GHEAP[1];
+
+/* Declare extern the free list to manage the H5HG_t struct */
+H5FL_EXTERN(H5HG_heap_t);
+
+/* Declare extern the free list to manage sequences of H5HG_obj_t's */
+H5FL_SEQ_EXTERN(H5HG_obj_t);
+
+/* Declare extern the PQ free list to manage heap chunks */
+H5FL_BLK_EXTERN(gheap_chunk);
+
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/*
+ * Global heap collection version.
+ */
+#define H5HG_VERSION	1
+
+/*
+ * All global heap collections are at least this big.  This allows us to read
+ * most collections with a single read() since we don't have to read a few
+ * bytes of header to figure out the size.  If the heap is larger than this
+ * then a second read gets the rest after we've decoded the header.
+ */
+#define H5HG_MINSIZE	4096
+
+/*
+ * Pad all global heap messages to a multiple of eight bytes so we can load
+ * the entire collection into memory and operate on it there.  Eight should
+ * be sufficient for machines that have alignment constraints because our
+ * largest data type is eight bytes.
+ */
+#define H5HG_ALIGNMENT	8
+#define H5HG_ALIGN(X)	(H5HG_ALIGNMENT*(((X)+H5HG_ALIGNMENT-1)/	      \
+					 H5HG_ALIGNMENT))
+#define H5HG_ISALIGNED(X) ((X)==H5HG_ALIGN(X))
+
+/*
+ * The size of the collection header, always a multiple of the alignment so
+ * that the stuff that follows the header is aligned.
+ */
+#define H5HG_SIZEOF_HDR(f)						      \
+    H5HG_ALIGN(4 +			/*magic number		*/	      \
+	       1 +			/*version number	*/	      \
+	       3 +			/*reserved		*/	      \
+	       H5F_SIZEOF_SIZE(f))	/*collection size	*/
+
+/*
+ * The overhead associated with each object in the heap, always a multiple of
+ * the alignment so that the stuff that follows the header is aligned.
+ */
+#define H5HG_SIZEOF_OBJHDR(f)						      \
+    H5HG_ALIGN(2 +			/*object id number	*/	      \
+	       2 +			/*reference count	*/	      \
+	       4 +			/*reserved		*/	      \
+	       H5F_SIZEOF_SIZE(f))	/*object data size	*/
+
+/*
+ * The initial guess for the number of messages in a collection.  We assume
+ * that all objects in that collection are zero length, giving the maximum
+ * possible number of objects in the collection.  The collection itself has
+ * some overhead and each message has some overhead.  The `+2' accounts for
+ * rounding and for the free space object.
+ */
+#define H5HG_NOBJS(f,z) (int)((((z)-H5HG_SIZEOF_HDR(f))/		      \
+			       H5HG_SIZEOF_OBJHDR(f)+2))
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+typedef struct H5HG_obj_t {
+    int		nrefs;		/*reference count		*/
+    size_t		size;		/*total size of object		*/
+    uint8_t		*begin;		/*ptr to object into heap->chunk*/
+} H5HG_obj_t;
+
+/* Forward declarations for fields */
+struct H5F_file_t;
+
+struct H5HG_heap_t {
+    H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+                            /* first field in structure */
+    haddr_t		addr;		/*collection address		*/
+    size_t		size;		/*total size of collection	*/
+    uint8_t		*chunk;		/*the collection, incl. header	*/
+    size_t		nalloc;		/*numb object slots allocated	*/
+    size_t		nused;		/*number of slots used		*/
+                                        /* If this value is >65535 then all indices */
+                                        /* have been used at some time and the */
+                                        /* correct new index should be searched for */
+    struct H5F_file_t   *shared;        /* shared file */
+    H5HG_obj_t	*obj;		/*array of object descriptions	*/
+};
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+H5_DLL herr_t H5HG_free(H5HG_heap_t *heap);
+H5_DLL H5HG_heap_t *H5HG_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw);
+
+#endif /* _H5HGpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5HGpublic.h b/Resources/windows-libs/HDF5/include/H5HGpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..01cd60c6af3a254c68588c7c370663f56f11d9b2
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5HGpublic.h
@@ -0,0 +1,33 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Friday, March 27, 1998
+ */
+#ifndef _H5HGpublic_H
+#define _H5HGpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5HLpkg.h b/Resources/windows-libs/HDF5/include/H5HLpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..bf9be2ce8495b9ef25f801a24ff482f983966af3
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5HLpkg.h
@@ -0,0 +1,160 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *             Wednesday, July 9, 2003
+ *
+ * Purpose:     This file contains declarations which are visible
+ *              only within the H5HL package. Source files outside the
+ *              H5HL package should include H5HLprivate.h instead.
+ */
+#ifndef H5HL_PACKAGE
+#error "Do not include this file outside the H5HL package!"
+#endif
+
+#ifndef _H5HLpkg_H
+#define _H5HLpkg_H
+
+/* Get package's private header */
+#include "H5HLprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5FLprivate.h"	/* Free lists                           */
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/* The local heap prefix cache subclass */
+H5_DLLVAR const H5AC_class_t H5AC_LHEAP_PRFX[1];
+
+/* The local heap data block cache subclass */
+H5_DLLVAR const H5AC_class_t H5AC_LHEAP_DBLK[1];
+
+/* Declare extern the free list to manage the H5HL_free_t struct */
+H5FL_EXTERN(H5HL_free_t);
+
+/* Declare extern the PQ free list to manage the heap chunk information */
+H5FL_BLK_EXTERN(lheap_chunk);
+
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+#define H5HL_SIZEOF_HDR(F)						      \
+    H5HL_ALIGN(H5_SIZEOF_MAGIC +	/*heap signature		*/    \
+	       1 +			/*version			*/    \
+	       3 +			/*reserved			*/    \
+	       H5F_SIZEOF_SIZE(F) +	/*data size			*/    \
+	       H5F_SIZEOF_SIZE(F) +	/*free list head		*/    \
+	       H5F_SIZEOF_ADDR(F))	/*data address			*/
+
+/* Value indicating end of free list on disk */
+#define H5HL_FREE_NULL	1
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+typedef struct H5HL_free_t {
+    size_t		offset;		/*offset of free block		*/
+    size_t		size;		/*size of free block		*/
+    struct H5HL_free_t	*prev;		/*previous entry in free list	*/
+    struct H5HL_free_t	*next;		/*next entry in free list	*/
+} H5HL_free_t;
+
+/* Forward declarations */
+typedef struct H5HL_dblk_t H5HL_dblk_t;
+typedef struct H5HL_prfx_t H5HL_prfx_t;
+
+struct H5HL_t {
+    /* General heap-management fields */
+    size_t                  rc;         /* Ref. count for prefix & data block using this struct */
+    size_t                  prots;      /* # of times the heap has been protected */
+    size_t                  sizeof_size; /* Size of file sizes */
+    size_t                  sizeof_addr; /* Size of file addresses */
+    hbool_t                 single_cache_obj;   /* Indicate if the heap is a single object in the cache */
+    H5HL_free_t		   *freelist;	/*the free list			*/
+
+    /* Prefix-specific fields */
+    H5HL_prfx_t            *prfx;       /* The prefix object for the heap */
+    haddr_t                 prfx_addr;  /* address of heap prefix */
+    size_t                  prfx_size;  /* size of heap prefix */
+    hsize_t                 free_block; /* Address of first free block */
+
+    /* Data block-specific fields */
+    H5HL_dblk_t            *dblk;       /* The data block object for the heap */
+    haddr_t		    dblk_addr;	/* address of data block	*/
+    size_t		    dblk_size;	/* size of heap data block on disk and in mem */
+    uint8_t		   *dblk_image;	/* The data block image */
+};
+
+/* Struct for heap data block */
+struct H5HL_dblk_t {
+    H5AC_info_t cache_info;    /* Information for H5AC cache functions, _must_ be */
+                                /* first field in structure */
+    H5HL_t                 *heap;       /* Pointer to heap for data block */
+};
+
+/* Struct for heap prefix */
+struct H5HL_prfx_t {
+    H5AC_info_t cache_info;    /* Information for H5AC cache functions, _must_ be */
+                                /* first field in structure */
+    H5HL_t                 *heap;       /* Pointer to heap for prefix */
+};
+
+/* Callback information for loading local heap prefix from disk */
+typedef struct H5HL_cache_prfx_ud_t {
+    /* Downwards */
+    size_t sizeof_size;                 /* Size of file sizes */
+    size_t sizeof_addr;                 /* Size of file addresses */
+    haddr_t prfx_addr;                  /* Address of prefix */
+    size_t sizeof_prfx;                 /* Size of heap prefix */
+
+    /* Upwards */
+} H5HL_cache_prfx_ud_t;
+
+/* Callback information for loading local heap data block from disk */
+typedef struct H5HL_cache_dblk_ud_t {
+    /* Downwards */
+    H5HL_t *heap;                       /* Local heap */
+
+    /* Upwards */
+    hbool_t loaded;                     /* Whether data block was loaded from file */
+} H5HL_cache_dblk_ud_t;
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+/* Heap routines */
+H5_DLL H5HL_t *H5HL_new(size_t sizeof_size, size_t sizeof_addr, size_t prfx_size);
+H5_DLL herr_t H5HL_dest(H5HL_t *heap);
+
+/* Heap prefix routines */
+H5_DLL H5HL_prfx_t *H5HL_prfx_new(H5HL_t *heap);
+H5_DLL herr_t H5HL_prfx_dest(H5HL_prfx_t *prfx);
+
+/* Heap data block routines */
+H5_DLL H5HL_dblk_t *H5HL_dblk_new(H5HL_t *heap);
+H5_DLL herr_t H5HL_dblk_dest(H5HL_dblk_t *dblk);
+
+#endif /* _H5HLpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5HLpublic.h b/Resources/windows-libs/HDF5/include/H5HLpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..db00f510c926c07244f51773b13ddeb7dccf81c1
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5HLpublic.h
@@ -0,0 +1,41 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5HLpublic.h
+ *                      Jul 16 1997
+ *                      Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5HL (local heap) package.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5HLpublic_H
+#define _H5HLpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5IMpublic.h b/Resources/windows-libs/HDF5/include/H5IMpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..6833f02d6e437e1de15d0f1cfc846039974ba8a8
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5IMpublic.h
@@ -0,0 +1,87 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5IMpublic_H
+#define _H5IMpublic_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+H5_HLDLL herr_t  H5IMmake_image_8bit( hid_t loc_id,
+                            const char *dset_name,
+                            hsize_t width,
+                            hsize_t height,
+                            const unsigned char *buffer );
+
+H5_HLDLL herr_t  H5IMmake_image_24bit( hid_t loc_id,
+                             const char *dset_name,
+                             hsize_t width,
+                             hsize_t height,
+                             const char *interlace,
+                             const unsigned char *buffer );
+
+H5_HLDLL herr_t  H5IMget_image_info( hid_t loc_id,
+                     const char *dset_name,
+                     hsize_t *width,
+                     hsize_t *height,
+                     hsize_t *planes,
+                     char    *interlace,
+                     hssize_t *npals );
+
+H5_HLDLL herr_t  H5IMread_image( hid_t loc_id,
+                       const char *dset_name,
+                       unsigned char *buffer );
+
+H5_HLDLL herr_t  H5IMmake_palette( hid_t loc_id,
+                         const char *pal_name,
+                         const hsize_t *pal_dims,
+                         const unsigned char *pal_data );
+
+H5_HLDLL herr_t  H5IMlink_palette( hid_t loc_id,
+                        const char *image_name,
+                        const char *pal_name );
+
+H5_HLDLL herr_t  H5IMunlink_palette( hid_t loc_id,
+                           const char *image_name,
+                           const char *pal_name );
+
+H5_HLDLL herr_t  H5IMget_npalettes( hid_t loc_id,
+                          const char *image_name,
+                          hssize_t *npals );
+
+H5_HLDLL herr_t  H5IMget_palette_info( hid_t loc_id,
+                        const char *image_name,
+                        int pal_number,
+                        hsize_t *pal_dims );
+
+H5_HLDLL herr_t  H5IMget_palette( hid_t loc_id,
+                        const char *image_name,
+                        int pal_number,
+                        unsigned char *pal_data );
+
+H5_HLDLL herr_t  H5IMis_image( hid_t loc_id,
+                     const char *dset_name );
+
+H5_HLDLL herr_t  H5IMis_palette( hid_t loc_id,
+                     const char *dset_name );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5IdComponent.h b/Resources/windows-libs/HDF5/include/H5IdComponent.h
new file mode 100644
index 0000000000000000000000000000000000000000..986e50a09b608e5f0bc26ffe3fdb2d477058bde7
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5IdComponent.h
@@ -0,0 +1,111 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __IdComponent_H
+#define __IdComponent_H
+
+// IdComponent represents an HDF5 object that has an identifier.
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class DataSpace;
+/*! \class IdComponent
+    \brief Class IdComponent provides wrappers of the C functions that
+     operate on an HDF5 identifier.
+
+    In most cases, the C library handles these operations and an application
+    rarely needs them.
+*/
+class H5_DLLCPP IdComponent {
+   public:
+	// Increment reference counter.
+	void incRefCount(const hid_t obj_id) const;
+	void incRefCount() const;
+
+	// Decrement reference counter.
+	void decRefCount(const hid_t obj_id) const;
+	void decRefCount() const;
+
+	// Get the reference counter to this identifier.
+	int getCounter(const hid_t obj_id) const;
+	int getCounter() const;
+
+	// Returns an HDF5 object type, given the object id.
+	static H5I_type_t getHDFObjType(const hid_t obj_id);
+
+	// Returns an HDF5 object type of this object.
+	H5I_type_t getHDFObjType() const;
+
+	// Assignment operator.
+	IdComponent& operator=( const IdComponent& rhs );
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Gets the identifier of this object.
+	virtual hid_t getId () const = 0;
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+	// Sets the identifier of this object to a new value.
+	void setId(const hid_t new_id);
+
+	// Creates an object to hold an HDF5 identifier.
+	IdComponent( const hid_t h5_id );
+
+	// Copy constructor: makes copy of the original IdComponent object.
+	IdComponent( const IdComponent& original );
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Pure virtual function for there are various H5*close for the
+	// subclasses.
+	virtual void close() = 0;
+
+	// Makes and returns the string "<class-name>::<func_name>";
+	// <class-name> is returned by fromClass().
+	H5std_string inMemFunc(const char* func_name) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass() const { return("IdComponent");}
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+	// Destructor
+	virtual ~IdComponent();
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+	// Default constructor.
+	IdComponent();
+
+	// Gets the name of the file, in which an HDF5 object belongs.
+	H5std_string p_get_file_name() const;
+
+	// Verifies that the given id is valid.
+	static bool p_valid_id(const hid_t obj_id);
+
+	// Sets the identifier of this object to a new value. - this one
+	// doesn't increment reference count
+	virtual void p_setId(const hid_t new_id) = 0;
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+}; // end class IdComponent
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __IdComponent_H
diff --git a/Resources/windows-libs/HDF5/include/H5Include.h b/Resources/windows-libs/HDF5/include/H5Include.h
new file mode 100644
index 0000000000000000000000000000000000000000..87cb182aa19c81ec883f784086ffce86ad59baf5
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Include.h
@@ -0,0 +1,30 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <hdf5.h>
+
+// Define bool type for platforms that don't support bool yet
+#ifdef BOOL_NOTDEFINED
+#ifdef false
+#undef false
+#endif
+#ifdef true
+#undef true
+#endif
+typedef int bool;
+const bool  false = 0;
+const bool  true  = 1;
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5IntType.h b/Resources/windows-libs/HDF5/include/H5IntType.h
new file mode 100644
index 0000000000000000000000000000000000000000..95fa64246cd5e7b1950bcbd44524589c107ab6c9
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5IntType.h
@@ -0,0 +1,57 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5IntType_H
+#define __H5IntType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//! Class IntType operates on HDF5 integer datatype.
+class H5_DLLCPP IntType : public AtomType {
+   public:
+	// Creates a integer type using a predefined type
+	IntType(const PredType& pred_type);
+
+	// Gets the integer datatype of the specified dataset
+	IntType(const DataSet& dataset);
+
+	// Retrieves the sign type for an integer type
+	H5T_sign_t getSign() const;
+
+	// Sets the sign proprety for an integer type.
+	void setSign( H5T_sign_t sign ) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("IntType"); }
+
+	// Default constructor
+	IntType();
+
+	// Creates a integer datatype using an existing id
+	IntType(const hid_t existing_id);
+
+	// Copy constructor: makes copy of IntType object
+	IntType(const IntType& original);
+
+	// Noop destructor.
+	virtual ~IntType();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5IntType_H
diff --git a/Resources/windows-libs/HDF5/include/H5Ipkg.h b/Resources/windows-libs/HDF5/include/H5Ipkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..dc8e867585b10bef5c2da1c5d1b00a70f841e3d6
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Ipkg.h
@@ -0,0 +1,76 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *		Thursday, May 15, 2003
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5I package.  Source files outside the H5I package should
+ *		include H5Iprivate.h instead.
+ */
+#ifndef H5I_PACKAGE
+#error "Do not include this file outside the H5I package!"
+#endif
+
+#ifndef _H5Ipkg_H
+#define _H5Ipkg_H
+
+/* Get package's private header */
+#include "H5Iprivate.h"
+
+/* Other private headers needed by this file */
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/*
+ * Number of bits to use for ID Type in each atom. Increase if more types
+ * are needed (though this will decrease the number of available IDs per
+ * type). This is the only number that must be changed since all other bit
+ * field sizes and masks are calculated from TYPE_BITS.
+ */
+#define TYPE_BITS	7
+#define TYPE_MASK	((1<<TYPE_BITS)-1)
+
+#define H5I_MAX_NUM_TYPES TYPE_MASK
+
+/*
+ * Number of bits to use for the Atom index in each atom (assumes 8-bit
+ * bytes). We don't use the sign bit.
+ */
+#define ID_BITS		((sizeof(hid_t)*8)-(TYPE_BITS+1))
+#define ID_MASK		((1<<ID_BITS)-1)
+
+/* Map an atom to an ID type number */
+#define H5I_TYPE(a)	((H5I_type_t)(((hid_t)(a)>>ID_BITS) & TYPE_MASK))
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+/* Testing functions */
+#ifdef H5I_TESTING
+H5_DLL ssize_t H5I_get_name_test(hid_t id, char *name/*out*/, size_t size,
+    hbool_t *cached);
+#endif /* H5I_TESTING */
+
+#endif /*_H5Ipkg_H*/
diff --git a/Resources/windows-libs/HDF5/include/H5Ipublic.h b/Resources/windows-libs/HDF5/include/H5Ipublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6305564544b500bad7a510b717f16f1f322aad7
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Ipublic.h
@@ -0,0 +1,104 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains function prototypes for each exported function in
+ * the H5I module.
+ */
+#ifndef _H5Ipublic_H
+#define _H5Ipublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/*
+ * Library type values.  Start with `1' instead of `0' because it makes the
+ * tracing output look better when hid_t values are large numbers.  Change the
+ * TYPE_BITS in H5I.c if the MAXID gets larger than 32 (an assertion will
+ * fail otherwise).
+ *
+ * When adding types here, add a section to the 'misc19' test in test/tmisc.c
+ * to verify that the H5I{inc|dec|get}_ref() routines work correctly with in.
+ *
+ */
+typedef enum H5I_type_t {
+    H5I_UNINIT		= (-2), /*uninitialized type			    */
+    H5I_BADID		= (-1),	/*invalid Type				    */
+    H5I_FILE		= 1,	/*type ID for File objects		    */
+    H5I_GROUP,		        /*type ID for Group objects		    */
+    H5I_DATATYPE,	        /*type ID for Datatype objects		    */
+    H5I_DATASPACE,	        /*type ID for Dataspace objects		    */
+    H5I_DATASET,	        /*type ID for Dataset objects		    */
+    H5I_ATTR,		        /*type ID for Attribute objects		    */
+    H5I_REFERENCE,	        /*type ID for Reference objects		    */
+    H5I_VFL,			/*type ID for virtual file layer	    */
+    H5I_GENPROP_CLS,            /*type ID for generic property list classes */
+    H5I_GENPROP_LST,            /*type ID for generic property lists        */
+    H5I_ERROR_CLASS,            /*type ID for error classes		    */
+    H5I_ERROR_MSG,              /*type ID for error messages		    */
+    H5I_ERROR_STACK,            /*type ID for error stacks		    */
+    H5I_NTYPES		        /*number of library types, MUST BE LAST!    */
+} H5I_type_t;
+
+/* Type of atoms to return to users */
+typedef int hid_t;
+#define H5_SIZEOF_HID_T         H5_SIZEOF_INT
+
+/* An invalid object ID. This is also negative for error return. */
+#define H5I_INVALID_HID         (-1)
+
+/*
+ * Function for freeing objects. This function will be called with an object
+ * ID type number and a pointer to the object. The function should free the
+ * object and return non-negative to indicate that the object
+ * can be removed from the ID type. If the function returns negative
+ * (failure) then the object will remain in the ID type.
+ */
+typedef herr_t (*H5I_free_t)(void*);
+
+/* Type of the function to compare objects & keys */
+typedef int (*H5I_search_func_t)(void *obj, hid_t id, void *key);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Public API functions */
+
+H5_DLL hid_t H5Iregister(H5I_type_t type, const void *object);
+H5_DLL void *H5Iobject_verify(hid_t id, H5I_type_t id_type);
+H5_DLL void *H5Iremove_verify(hid_t id, H5I_type_t id_type);
+H5_DLL H5I_type_t H5Iget_type(hid_t id);
+H5_DLL hid_t H5Iget_file_id(hid_t id);
+H5_DLL ssize_t H5Iget_name(hid_t id, char *name/*out*/, size_t size);
+H5_DLL int H5Iinc_ref(hid_t id);
+H5_DLL int H5Idec_ref(hid_t id);
+H5_DLL int H5Iget_ref(hid_t id);
+H5_DLL H5I_type_t H5Iregister_type(size_t hash_size, unsigned reserved, H5I_free_t free_func);
+H5_DLL herr_t H5Iclear_type(H5I_type_t type, hbool_t force);
+H5_DLL herr_t H5Idestroy_type(H5I_type_t type);
+H5_DLL int H5Iinc_type_ref(H5I_type_t type);
+H5_DLL int H5Idec_type_ref(H5I_type_t type);
+H5_DLL int H5Iget_type_ref(H5I_type_t type);
+H5_DLL void *H5Isearch(H5I_type_t type, H5I_search_func_t func, void *key);
+H5_DLL herr_t H5Inmembers(H5I_type_t type, hsize_t *num_members);
+H5_DLL htri_t H5Itype_exists(H5I_type_t type);
+H5_DLL htri_t H5Iis_valid(hid_t id);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Ipublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5LTparse.h b/Resources/windows-libs/HDF5/include/H5LTparse.h
new file mode 100644
index 0000000000000000000000000000000000000000..2dd8057aed929c042f686e31d799e14239698dc5
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5LTparse.h
@@ -0,0 +1,65 @@
+#ifndef YYERRCODE
+#define YYERRCODE 256
+#endif
+
+#define H5T_STD_I8BE_TOKEN 257
+#define H5T_STD_I8LE_TOKEN 258
+#define H5T_STD_I16BE_TOKEN 259
+#define H5T_STD_I16LE_TOKEN 260
+#define H5T_STD_I32BE_TOKEN 261
+#define H5T_STD_I32LE_TOKEN 262
+#define H5T_STD_I64BE_TOKEN 263
+#define H5T_STD_I64LE_TOKEN 264
+#define H5T_STD_U8BE_TOKEN 265
+#define H5T_STD_U8LE_TOKEN 266
+#define H5T_STD_U16BE_TOKEN 267
+#define H5T_STD_U16LE_TOKEN 268
+#define H5T_STD_U32BE_TOKEN 269
+#define H5T_STD_U32LE_TOKEN 270
+#define H5T_STD_U64BE_TOKEN 271
+#define H5T_STD_U64LE_TOKEN 272
+#define H5T_NATIVE_CHAR_TOKEN 273
+#define H5T_NATIVE_SCHAR_TOKEN 274
+#define H5T_NATIVE_UCHAR_TOKEN 275
+#define H5T_NATIVE_SHORT_TOKEN 276
+#define H5T_NATIVE_USHORT_TOKEN 277
+#define H5T_NATIVE_INT_TOKEN 278
+#define H5T_NATIVE_UINT_TOKEN 279
+#define H5T_NATIVE_LONG_TOKEN 280
+#define H5T_NATIVE_ULONG_TOKEN 281
+#define H5T_NATIVE_LLONG_TOKEN 282
+#define H5T_NATIVE_ULLONG_TOKEN 283
+#define H5T_IEEE_F32BE_TOKEN 284
+#define H5T_IEEE_F32LE_TOKEN 285
+#define H5T_IEEE_F64BE_TOKEN 286
+#define H5T_IEEE_F64LE_TOKEN 287
+#define H5T_NATIVE_FLOAT_TOKEN 288
+#define H5T_NATIVE_DOUBLE_TOKEN 289
+#define H5T_NATIVE_LDOUBLE_TOKEN 290
+#define H5T_STRING_TOKEN 291
+#define STRSIZE_TOKEN 292
+#define STRPAD_TOKEN 293
+#define CSET_TOKEN 294
+#define CTYPE_TOKEN 295
+#define H5T_VARIABLE_TOKEN 296
+#define H5T_STR_NULLTERM_TOKEN 297
+#define H5T_STR_NULLPAD_TOKEN 298
+#define H5T_STR_SPACEPAD_TOKEN 299
+#define H5T_CSET_ASCII_TOKEN 300
+#define H5T_CSET_UTF8_TOKEN 301
+#define H5T_C_S1_TOKEN 302
+#define H5T_FORTRAN_S1_TOKEN 303
+#define H5T_OPAQUE_TOKEN 304
+#define OPQ_SIZE_TOKEN 305
+#define OPQ_TAG_TOKEN 306
+#define H5T_COMPOUND_TOKEN 307
+#define H5T_ENUM_TOKEN 308
+#define H5T_ARRAY_TOKEN 309
+#define H5T_VLEN_TOKEN 310
+#define STRING 311
+#define NUMBER 312
+typedef union {
+    int   ival;         /*for integer token*/
+    char  *sval;        /*for name string*/
+} YYSTYPE;
+extern YYSTYPE H5LTyylval;
diff --git a/Resources/windows-libs/HDF5/include/H5LTpublic.h b/Resources/windows-libs/HDF5/include/H5LTpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..929c6bdde4a4ed7ea3d3379546b2c6d1187cf548
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5LTpublic.h
@@ -0,0 +1,370 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5LTpublic_H
+#define _H5LTpublic_H
+
+/* Flag definitions for H5LTopen_file_image() */
+#define H5LT_FILE_IMAGE_OPEN_RW      0x0001 /* Open image for read-write */
+#define H5LT_FILE_IMAGE_DONT_COPY    0x0002 /* The HDF5 lib won't copy   */
+/* user supplied image buffer. The same image is open with the core driver.  */
+#define H5LT_FILE_IMAGE_DONT_RELEASE 0x0004 /* The HDF5 lib won't        */
+/* deallocate user supplied image buffer. The user application is reponsible */
+/* for doing so.                                                             */ 
+#define H5LT_FILE_IMAGE_ALL          0x0007
+
+typedef enum H5LT_lang_t {
+    H5LT_LANG_ERR = -1, /*this is the first*/
+    H5LT_DDL      = 0,  /*for DDL*/
+    H5LT_C        = 1,  /*for C*/
+    H5LT_FORTRAN  = 2,  /*for Fortran*/
+    H5LT_NO_LANG  = 3   /*this is the last*/
+} H5LT_lang_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*-------------------------------------------------------------------------
+ *
+ * Make dataset functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5LTmake_dataset( hid_t loc_id,
+                         const char *dset_name,
+                         int rank,
+                         const hsize_t *dims,
+                         hid_t type_id,
+                         const void *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_char( hid_t loc_id,
+                              const char *dset_name,
+                              int rank,
+                              const hsize_t *dims,
+                              const char *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_short( hid_t loc_id,
+                               const char *dset_name,
+                               int rank,
+                               const hsize_t *dims,
+                               const short *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_int( hid_t loc_id,
+                             const char *dset_name,
+                             int rank,
+                             const hsize_t *dims,
+                             const int *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_long( hid_t loc_id,
+                              const char *dset_name,
+                              int rank,
+                              const hsize_t *dims,
+                              const long *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_float( hid_t loc_id,
+                               const char *dset_name,
+                               int rank,
+                               const hsize_t *dims,
+                               const float *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_double( hid_t loc_id,
+                                const char *dset_name,
+                                int rank,
+                                const hsize_t *dims,
+                                const double *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_string( hid_t loc_id,
+                               const char *dset_name,
+                               const char *buf );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Read dataset functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5LTread_dataset( hid_t loc_id,
+                         const char *dset_name,
+                         hid_t type_id,
+                         void *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_char( hid_t loc_id,
+                              const char *dset_name,
+                              char *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_short( hid_t loc_id,
+                               const char *dset_name,
+                               short *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_int( hid_t loc_id,
+                             const char *dset_name,
+                             int *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_long( hid_t loc_id,
+                              const char *dset_name,
+                              long *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_float( hid_t loc_id,
+                               const char *dset_name,
+                               float *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_double( hid_t loc_id,
+                                const char *dset_name,
+                                double *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_string( hid_t loc_id,
+                                const char *dset_name,
+                                char *buf );
+
+/*-------------------------------------------------------------------------
+ *
+ * Query dataset functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5LTget_dataset_ndims( hid_t loc_id,
+                             const char *dset_name,
+                             int *rank );
+
+H5_HLDLL herr_t  H5LTget_dataset_info( hid_t loc_id,
+                             const char *dset_name,
+                             hsize_t *dims,
+                             H5T_class_t *type_class,
+                             size_t *type_size );
+
+H5_HLDLL herr_t  H5LTfind_dataset( hid_t loc_id, const char *name );
+
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Set attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5LTset_attribute_string( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 const char *attr_data );
+
+H5_HLDLL herr_t  H5LTset_attribute_char( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const char *buffer,
+                               size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_uchar( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const unsigned char *buffer,
+                               size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_short( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const short *buffer,
+                              size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_ushort( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const unsigned short *buffer,
+                              size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_int( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const int *buffer,
+                              size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_uint( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const unsigned int *buffer,
+                              size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const long *buffer,
+                               size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_long_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const long long *buffer,
+                               size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_ulong( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const unsigned long *buffer,
+                               size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_float( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                const float *buffer,
+                                size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_double( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 const double *buffer,
+                                 size_t size );
+
+/*-------------------------------------------------------------------------
+ *
+ * Get attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5LTget_attribute( hid_t loc_id,
+                          const char *obj_name,
+                          const char *attr_name,
+                          hid_t mem_type_id,
+                          void *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_string( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 char *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_char( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               char *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_uchar( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               unsigned char *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_short( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                short *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_ushort( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                unsigned short *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_int( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              int *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_uint( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              unsigned int *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               long *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_long_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               long long *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_ulong( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               unsigned long *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_float( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                float *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_double( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 double *data );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Query attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5LTget_attribute_ndims( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                int *rank );
+
+H5_HLDLL herr_t  H5LTget_attribute_info( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               hsize_t *dims,
+                               H5T_class_t *type_class,
+                               size_t *type_size );
+
+
+
+
+
+/*-------------------------------------------------------------------------
+ *
+ * General functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL hid_t H5LTtext_to_dtype(const char *text, H5LT_lang_t lang_type);
+H5_HLDLL herr_t H5LTdtype_to_text(hid_t dtype, char *str, H5LT_lang_t lang_type, size_t *len);
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Utility functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t H5LTfind_attribute( hid_t loc_id, const char *name );
+
+H5_HLDLL htri_t H5LTpath_valid(hid_t loc_id, const char *path, hbool_t check_object_valid);
+
+/*-------------------------------------------------------------------------
+ *
+ * File image operations functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL hid_t H5LTopen_file_image(void *buf_ptr, size_t buf_size, unsigned flags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/Resources/windows-libs/HDF5/include/H5Library.h b/Resources/windows-libs/HDF5/include/H5Library.h
new file mode 100644
index 0000000000000000000000000000000000000000..e5365f921e6dc7f407aa7749788f17c0f365ee31
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Library.h
@@ -0,0 +1,76 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5Library_H
+#define __H5Library_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define NOTATEXIT       (-10)   // just in case the HDF5 library use more
+	// negative constants. Note: the solution used for the atexit/global
+	// destructors is not reliable, and desperately needs improvement
+	// It is not even working, inifiteloop message still printed when
+	// calling H5close
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+/*! \class H5Library
+    \brief Class H5Library operates the HDF5 library globably.
+
+    It is not neccessary to construct an instance of H5Library to use the
+    methods.
+*/
+class H5_DLLCPP H5Library {
+   public:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	static bool need_cleanup; // indicates if H5close should be called
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+	// Initializes the HDF5 library.
+	static void open();
+
+	// Flushes all data to disk, closes files, and cleans up memory.
+	static void close();
+
+	// Instructs library not to install atexit cleanup routine
+	static void dontAtExit();
+
+	// Returns the HDF library release number.
+	static void getLibVersion( unsigned& majnum, unsigned& minnum, unsigned& relnum );
+
+	// Verifies that the arguments match the version numbers compiled
+	// into the library
+	static void checkVersion( unsigned majnum, unsigned minnum, unsigned relnum );
+
+	// Walks through all the garbage collection routines for the library,
+	// which are supposed to free any unused memory they have allocated.
+	static void garbageCollect();
+
+	// Sets limits on the different kinds of free lists.
+	static void setFreeListLimits(int reg_global_lim, int reg_list_lim, int
+	arr_global_lim, int arr_list_lim, int blk_global_lim, int blk_list_lim);
+
+   private:
+	// Default constructor - no instance ever created
+	H5Library() {};
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5Library_H
diff --git a/Resources/windows-libs/HDF5/include/H5Location.h b/Resources/windows-libs/HDF5/include/H5Location.h
new file mode 100644
index 0000000000000000000000000000000000000000..592f68d2317d1be5d681542de062c68c691c837f
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Location.h
@@ -0,0 +1,171 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5Location_H
+#define __H5Location_H
+
+#include "H5Classes.h"		// constains forward class declarations
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP H5Location;  // forward declaration for UserData4Aiterate
+
+// Define the operator function pointer for H5Aiterate().
+typedef void (*attr_operator_t)( H5Location& loc/*in*/,
+                                 const H5std_string attr_name/*in*/,
+                                 void *operator_data/*in,out*/);
+
+class UserData4Aiterate { // user data for attribute iteration
+   public:
+	attr_operator_t op;
+	void* opData;
+	H5Location* location;
+};
+
+/*! \class H5Location
+    \brief H5Location is an abstract base class, added in version 1.8.12.
+
+    It provides a collection of wrappers for the C functions that take a
+    location identifier to specify the HDF5 object.  The location identifier
+    can be either file, group, dataset, or named datatype.
+*/
+// Most of these methods were in H5Object but are now moved here because
+// a location can be a file, group, dataset, or named datatype. -BMR, 2013-10-1
+class H5_DLLCPP H5Location : public IdComponent {
+   public:
+	// Creates an attribute for the specified object at this location
+	// PropList is currently not used, so always be default.
+	Attribute createAttribute( const char* name, const DataType& type, const DataSpace& space, const PropList& create_plist = PropList::DEFAULT ) const;
+	Attribute createAttribute( const H5std_string& name, const DataType& type, const DataSpace& space, const PropList& create_plist = PropList::DEFAULT ) const;
+
+	// Given its name, opens the attribute that belongs to an object at
+	// this location.
+	Attribute openAttribute( const char* name ) const;
+	Attribute openAttribute( const H5std_string& name ) const;
+
+	// Given its index, opens the attribute that belongs to an object at
+	// this location.
+	Attribute openAttribute( const unsigned int idx ) const;
+
+	// Flushes all buffers associated with this location to disk.
+	void flush( H5F_scope_t scope ) const;
+
+	// Gets the name of the file, specified by this location.
+	H5std_string getFileName() const;
+
+	// Determines the number of attributes at this location.
+	int getNumAttrs() const;
+
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+	// Retrieves the type of object that an object reference points to.
+	H5G_obj_t getObjType(void *ref, H5R_type_t ref_type = H5R_OBJECT) const;
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+	// Retrieves the type of object that an object reference points to.
+	H5O_type_t getRefObjType(void *ref, H5R_type_t ref_type = H5R_OBJECT) const;
+	// Note: getRefObjType deprecates getObjType, but getObjType's name is
+	// misleading, so getRefObjType is used in the new function instead.
+
+	// Iterate user's function over the attributes at this location.
+	int iterateAttrs(attr_operator_t user_op, unsigned* idx = NULL, void* op_data = NULL);
+
+	// Checks whether the named attribute exists at this location.
+	bool attrExists(const char* name) const;
+	bool attrExists(const H5std_string& name) const;
+
+	// Renames the named attribute to a new name.
+	void renameAttr(const char* oldname, const char* newname) const;
+	void renameAttr(const H5std_string& oldname, const H5std_string& newname) const;
+
+	// Removes the named attribute from this location.
+	void removeAttr(const char* name) const;
+	void removeAttr(const H5std_string& name) const;
+
+	// Sets the comment for an HDF5 object specified by its name.
+	void setComment(const char* name, const char* comment) const;
+	void setComment(const H5std_string& name, const H5std_string& comment) const;
+	void setComment(const char* comment) const;
+	void setComment(const H5std_string& comment) const;
+
+	// Retrieves comment for the HDF5 object specified by its name.
+	ssize_t getComment(const char* name, size_t buf_size, char* comment) const;
+	H5std_string getComment(const char* name, size_t buf_size=0) const;
+	H5std_string getComment(const H5std_string& name, size_t buf_size=0) const;
+
+	// Removes the comment for the HDF5 object specified by its name.
+	void removeComment(const char* name) const;
+	void removeComment(const H5std_string& name) const;
+
+	// Creates a reference to a named object or to a dataset region
+	// in this object.
+	void reference(void* ref, const char* name, 
+			H5R_type_t ref_type = H5R_OBJECT) const;
+	void reference(void* ref, const H5std_string& name, 
+			H5R_type_t ref_type = H5R_OBJECT) const;
+	void reference(void* ref, const char* name, const DataSpace& dataspace,
+			H5R_type_t ref_type = H5R_DATASET_REGION) const;
+	void reference(void* ref, const H5std_string& name, const DataSpace& dataspace,
+			H5R_type_t ref_type = H5R_DATASET_REGION) const;
+
+	// Open a referenced object whose location is specified by either
+	// a file, an HDF5 object, or an attribute.
+	void dereference(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
+	void dereference(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
+
+	// Retrieves a dataspace with the region pointed to selected.
+	DataSpace getRegion(void *ref, H5R_type_t ref_type = H5R_DATASET_REGION) const;
+
+	///\brief Returns an identifier. (pure virtual)
+	virtual hid_t getId() const = 0;
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Default constructor,
+	H5Location();
+
+	// Creates a copy of an existing object giving the location id.
+	H5Location(const hid_t loc_id);
+
+	// Copy constructor.
+	H5Location(const H5Location& original);
+
+	// Creates a reference to an HDF5 object or a dataset region.
+	void p_reference(void* ref, const char* name, hid_t space_id, H5R_type_t ref_type) const;
+
+	// Dereferences a ref into an HDF5 id.
+	hid_t p_dereference(hid_t loc_id, const void* ref, H5R_type_t ref_type, const char* from_func);
+
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+	// Retrieves the type of object that an object reference points to.
+	H5G_obj_t p_get_obj_type(void *ref, H5R_type_t ref_type) const;
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+	// Retrieves the type of object that an object reference points to.
+	H5O_type_t p_get_ref_obj_type(void *ref, H5R_type_t ref_type) const;
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+	// Noop destructor.
+	virtual ~H5Location();
+
+}; /* end class H5Location */
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5Location_H
diff --git a/Resources/windows-libs/HDF5/include/H5Lpkg.h b/Resources/windows-libs/HDF5/include/H5Lpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..2e931f527864f9d693e08ec869a68739a1cea5a3
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Lpkg.h
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: James Laird <matzke@llnl.gov>
+ *             Friday, December 1, 2005
+ *
+ * Purpose:     This file contains declarations which are visible
+ *              only within the H5L package. Source files outside the
+ *              H5L package should include H5Lprivate.h instead.
+ */
+#ifndef H5L_PACKAGE
+#error "Do not include this file outside the H5L package!"
+#endif
+
+#ifndef _H5Lpkg_H
+#define _H5Lpkg_H
+
+/* Get package's private header */
+#include "H5Lprivate.h"
+
+/* Other private headers needed by this file */
+
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+H5_DLL herr_t H5L_create_ud(const H5G_loc_t *link_loc, const char *link_name,
+    const void * ud_data, size_t ud_data_size, H5L_type_t type,
+    hid_t lcpl_id, hid_t lapl_id, hid_t dxpl_id);
+H5_DLL herr_t H5L_link_copy_file(H5F_t *dst_file, hid_t dxpl_id,
+    const H5O_link_t *_src_lnk, const H5O_loc_t *src_oloc, H5O_link_t *dst_lnk,
+    H5O_copy_t *cpy_info);
+
+#endif /* _H5Lpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Lpublic.h b/Resources/windows-libs/HDF5/include/H5Lpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..620d2e9b00cd40ee07a09c729eaf3b379ee00929
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Lpublic.h
@@ -0,0 +1,202 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Lpublic.h
+ *                      Dec 1 2005
+ *                      James Laird
+ *
+ * Purpose:             Public declarations for the H5L package (links)
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Lpublic_H
+#define _H5Lpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"		/* Generic Functions			*/
+#include "H5Ipublic.h"		/* IDs			  		*/
+#include "H5Tpublic.h"		/* Datatypes				*/
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/* Maximum length of a link's name */
+/* (encoded in a 32-bit unsigned integer) */
+#define H5L_MAX_LINK_NAME_LEN   ((uint32_t)(-1))  /* (4GB - 1) */
+
+/* Macro to indicate operation occurs on same location */
+#define H5L_SAME_LOC 0
+
+/* Current version of the H5L_class_t struct */
+#define H5L_LINK_CLASS_T_VERS 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Link class types.
+ * Values less than 64 are reserved for the HDF5 library's internal use.
+ * Values 64 to 255 are for "user-defined" link class types; these types are
+ * defined by HDF5 but their behavior can be overridden by users.
+ * Users who want to create new classes of links should contact the HDF5
+ * development team at hdfhelp@ncsa.uiuc.edu .
+ * These values can never change because they appear in HDF5 files.
+ */
+typedef enum {
+    H5L_TYPE_ERROR = (-1),      /* Invalid link type id         */
+    H5L_TYPE_HARD = 0,          /* Hard link id                 */
+    H5L_TYPE_SOFT = 1,          /* Soft link id                 */
+    H5L_TYPE_EXTERNAL = 64,     /* External link id             */
+    H5L_TYPE_MAX = 255	        /* Maximum link type id         */
+} H5L_type_t;
+#define H5L_TYPE_BUILTIN_MAX H5L_TYPE_SOFT      /* Maximum value link value for "built-in" link types */
+#define H5L_TYPE_UD_MIN      H5L_TYPE_EXTERNAL  /* Link ids at or above this value are "user-defined" link types. */
+
+/* Information struct for link (for H5Lget_info/H5Lget_info_by_idx) */
+typedef struct {
+    H5L_type_t          type;           /* Type of link                   */
+    hbool_t             corder_valid;   /* Indicate if creation order is valid */
+    int64_t             corder;         /* Creation order                 */
+    H5T_cset_t          cset;           /* Character set of link name     */
+    union {
+        haddr_t         address;        /* Address hard link points to    */
+        size_t          val_size;       /* Size of a soft link or UD link value */
+    } u;
+} H5L_info_t;
+
+/* The H5L_class_t struct can be used to override the behavior of a
+ * "user-defined" link class. Users should populate the struct with callback
+ * functions defined below.
+ */
+/* Callback prototypes for user-defined links */
+/* Link creation callback */
+typedef herr_t (*H5L_create_func_t)(const char *link_name, hid_t loc_group,
+    const void *lnkdata, size_t lnkdata_size, hid_t lcpl_id);
+
+/* Callback for when the link is moved */
+typedef herr_t (*H5L_move_func_t)(const char *new_name, hid_t new_loc,
+    const void *lnkdata, size_t lnkdata_size);
+
+/* Callback for when the link is copied */
+typedef herr_t (*H5L_copy_func_t)(const char *new_name, hid_t new_loc,
+    const void *lnkdata, size_t lnkdata_size);
+
+/* Callback during link traversal */
+typedef herr_t (*H5L_traverse_func_t)(const char *link_name, hid_t cur_group,
+    const void *lnkdata, size_t lnkdata_size, hid_t lapl_id);
+
+/* Callback for when the link is deleted */
+typedef herr_t (*H5L_delete_func_t)(const char *link_name, hid_t file,
+    const void *lnkdata, size_t lnkdata_size);
+
+/* Callback for querying the link */
+/* Returns the size of the buffer needed */
+typedef ssize_t (*H5L_query_func_t)(const char *link_name, const void *lnkdata,
+    size_t lnkdata_size, void *buf /*out*/, size_t buf_size);
+
+/* User-defined link types */
+typedef struct {
+    int version;                    /* Version number of this struct        */
+    H5L_type_t id;                  /* Link type ID                         */
+    const char *comment;            /* Comment for debugging                */
+    H5L_create_func_t create_func;  /* Callback during link creation        */
+    H5L_move_func_t move_func;      /* Callback after moving link           */
+    H5L_copy_func_t copy_func;      /* Callback after copying link          */
+    H5L_traverse_func_t trav_func;  /* Callback during link traversal       */
+    H5L_delete_func_t del_func;     /* Callback for link deletion           */
+    H5L_query_func_t query_func;    /* Callback for queries                 */
+} H5L_class_t;
+
+/* Prototype for H5Literate/H5Literate_by_name() operator */
+typedef herr_t (*H5L_iterate_t)(hid_t group, const char *name, const H5L_info_t *info,
+    void *op_data);
+
+/* Callback for external link traversal */
+typedef herr_t (*H5L_elink_traverse_t)(const char *parent_file_name,
+    const char *parent_group_name, const char *child_file_name,
+    const char *child_object_name, unsigned *acc_flags, hid_t fapl_id,
+    void *op_data);
+
+
+/********************/
+/* Public Variables */
+/********************/
+
+
+/*********************/
+/* Public Prototypes */
+/*********************/
+H5_DLL herr_t H5Lmove(hid_t src_loc, const char *src_name, hid_t dst_loc,
+    const char *dst_name, hid_t lcpl_id, hid_t lapl_id);
+H5_DLL herr_t H5Lcopy(hid_t src_loc, const char *src_name, hid_t dst_loc,
+    const char *dst_name, hid_t lcpl_id, hid_t lapl_id);
+H5_DLL herr_t H5Lcreate_hard(hid_t cur_loc, const char *cur_name,
+    hid_t dst_loc, const char *dst_name, hid_t lcpl_id, hid_t lapl_id);
+H5_DLL herr_t H5Lcreate_soft(const char *link_target, hid_t link_loc_id,
+    const char *link_name, hid_t lcpl_id, hid_t lapl_id);
+H5_DLL herr_t H5Ldelete(hid_t loc_id, const char *name, hid_t lapl_id);
+H5_DLL herr_t H5Ldelete_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id);
+H5_DLL herr_t H5Lget_val(hid_t loc_id, const char *name, void *buf/*out*/,
+    size_t size, hid_t lapl_id);
+H5_DLL herr_t H5Lget_val_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    void *buf/*out*/, size_t size, hid_t lapl_id);
+H5_DLL htri_t H5Lexists(hid_t loc_id, const char *name, hid_t lapl_id);
+H5_DLL herr_t H5Lget_info(hid_t loc_id, const char *name,
+    H5L_info_t *linfo /*out*/, hid_t lapl_id);
+H5_DLL herr_t H5Lget_info_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    H5L_info_t *linfo /*out*/, hid_t lapl_id);
+H5_DLL ssize_t H5Lget_name_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    char *name /*out*/, size_t size, hid_t lapl_id);
+H5_DLL herr_t H5Literate(hid_t grp_id, H5_index_t idx_type,
+    H5_iter_order_t order, hsize_t *idx, H5L_iterate_t op, void *op_data);
+H5_DLL herr_t H5Literate_by_name(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t *idx,
+    H5L_iterate_t op, void *op_data, hid_t lapl_id);
+H5_DLL herr_t H5Lvisit(hid_t grp_id, H5_index_t idx_type, H5_iter_order_t order,
+    H5L_iterate_t op, void *op_data);
+H5_DLL herr_t H5Lvisit_by_name(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, H5L_iterate_t op,
+    void *op_data, hid_t lapl_id);
+
+/* UD link functions */
+H5_DLL herr_t H5Lcreate_ud(hid_t link_loc_id, const char *link_name,
+    H5L_type_t link_type, const void *udata, size_t udata_size, hid_t lcpl_id,
+    hid_t lapl_id);
+H5_DLL herr_t H5Lregister(const H5L_class_t *cls);
+H5_DLL herr_t H5Lunregister(H5L_type_t id);
+H5_DLL htri_t H5Lis_registered(H5L_type_t id);
+
+/* External link functions */
+H5_DLL herr_t H5Lunpack_elink_val(const void *ext_linkval/*in*/, size_t link_size,
+   unsigned *flags, const char **filename/*out*/, const char **obj_path /*out*/);
+H5_DLL herr_t H5Lcreate_external(const char *file_name, const char *obj_name,
+    hid_t link_loc_id, const char *link_name, hid_t lcpl_id, hid_t lapl_id);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Lpublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5MMpublic.h b/Resources/windows-libs/HDF5/include/H5MMpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..bfcb8073bbc0755b7e9dd557bd76b35bc5d0cf24
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5MMpublic.h
@@ -0,0 +1,47 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5MMproto.h
+ *                      Jul 10 1997
+ *                      Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5MM (memory management)
+ *                      package.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5MMpublic_H
+#define _H5MMpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/* These typedefs are currently used for VL datatype allocation/freeing */
+typedef void *(*H5MM_allocate_t)(size_t size, void *alloc_info);
+typedef void (*H5MM_free_t)(void *mem, void *free_info);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5MMpublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5MPpkg.h b/Resources/windows-libs/HDF5/include/H5MPpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..5a0b1f86e1b716d35c011774f561864dffabbb43
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5MPpkg.h
@@ -0,0 +1,106 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *		Monday, May  2, 2005
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5MP package.  Source files outside the H5MP package should
+ *		include H5MPprivate.h instead.
+ */
+#ifndef H5MP_PACKAGE
+#error "Do not include this file outside the H5MP package!"
+#endif
+
+#ifndef _H5MPpkg_H
+#define _H5MPpkg_H
+
+/* Get package's private header */
+#include "H5MPprivate.h"	/* Memory Pools				*/
+
+/* Other private headers needed by this file */
+#include "H5FLprivate.h"	/* Free Lists                           */
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* Alignment macros */
+/* (Ideas from Apache APR :-) */
+
+/* Default alignment necessary */
+#define H5MP_BLOCK_ALIGNMENT    8
+
+/* General alignment macro */
+/* (this only works for aligning to power of 2 boundary) */
+#define H5MP_ALIGN(x, a) \
+       (((x) + ((size_t)(a)) - 1) & ~(((size_t)(a)) - 1))
+
+/* Default alignment */
+#define H5MP_BLOCK_ALIGN(x) H5MP_ALIGN(x, H5MP_BLOCK_ALIGNMENT)
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/* Free block in pool */
+typedef struct H5MP_page_blk_t {
+    size_t size;                        /* Size of block (includes this H5MP_page_blk_t info) */
+    unsigned is_free:1;                 /* Flag to indicate the block is free */
+    struct H5MP_page_t *page;           /* Pointer to page block is located in */
+    struct H5MP_page_blk_t *prev;       /* Pointer to previous block in page */
+    struct H5MP_page_blk_t *next;       /* Pointer to next block in page */
+} H5MP_page_blk_t;
+
+/* Memory pool page */
+typedef struct H5MP_page_t {
+    size_t free_size;                   /* Total amount of free space in page */
+    unsigned fac_alloc:1;               /* Flag to indicate the page was allocated by the pool's factory */
+    H5MP_page_blk_t *free_blk;          /* Pointer to first free block in page */
+    struct H5MP_page_t *next;           /* Pointer to next page in pool */
+    struct H5MP_page_t *prev;           /* Pointer to previous page in pool */
+} H5MP_page_t;
+
+/* Memory pool header */
+struct H5MP_pool_t {
+    H5FL_fac_head_t *page_fac;  /* Free-list factory for pages */
+    size_t page_size;           /* Page size for pool */
+    size_t free_size;           /* Total amount of free space in pool */
+    size_t max_size;            /* Maximum block that will fit in a standard page */
+    H5MP_page_t *first;         /* Pointer to first page in pool */
+    unsigned flags;             /* Bit flags for pool settings */
+};
+
+
+/*****************************************/
+/* Package Private Variable Declarations */
+/*****************************************/
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+#ifdef H5MP_TESTING
+H5_DLL herr_t H5MP_get_pool_free_size (const H5MP_pool_t *mp, size_t *free_size);
+H5_DLL htri_t H5MP_pool_is_free_size_correct(const H5MP_pool_t *mp);
+H5_DLL herr_t H5MP_get_pool_first_page(const H5MP_pool_t *mp, H5MP_page_t **page);
+H5_DLL herr_t H5MP_get_page_free_size(const H5MP_page_t *mp, size_t *page);
+H5_DLL herr_t H5MP_get_page_next_page(const H5MP_page_t *page, H5MP_page_t **next_page);
+#endif /* H5MP_TESTING */
+
+#endif /* _H5MPpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Object.h b/Resources/windows-libs/HDF5/include/H5Object.h
new file mode 100644
index 0000000000000000000000000000000000000000..5576d13fc2ffc08ee9efca897c295f73034ab50d
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Object.h
@@ -0,0 +1,76 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5Object_H
+#define __H5Object_H
+
+#include "H5Location.h"
+#include "H5Classes.h"		// constains forward class declarations
+
+// H5Object is a baseclass.  It has these subclasses:
+// Group, DataSet, and DataType.
+// DataType, in turn, has several specific datatypes as subclasses.
+// Modification:
+//	Sept 18, 2012: Added class H5Location in between IdComponent and
+//		H5Object.  An H5File now inherits from H5Location.  All HDF5
+//		wrappers in H5Object are moved up to H5Location.  H5Object
+//		is left mostly empty for future wrappers that are only for
+//		group, dataset, and named datatype.  Note that the reason for
+//		adding H5Location instead of simply moving H5File to be under
+//		H5Object is H5File is not an HDF5 object, and renaming H5Object
+//		to H5Location will risk breaking user applications.
+//		-BMR
+//	Apr 2, 2014: Added wrapper getObjName for H5Iget_name 
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/*! \class H5Object
+    \brief Class H5Object is a bridge between H5Location and DataSet, DataType,
+     and Group.
+
+    All the wrappers in H5Object were moved to H5Location.
+*/
+class H5_DLLCPP H5Object : public H5Location {
+   public:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Copy constructor: makes copy of an H5Object object.
+	H5Object(const H5Object& original);
+
+	// Gets the name of this HDF5 object, i.e., Group, DataSet, or
+	// DataType.
+	ssize_t getObjName(char *obj_name, size_t buf_size = 0) const;
+	ssize_t getObjName(H5std_string& obj_name, size_t len = 0) const;
+	H5std_string getObjName() const;
+
+	// Noop destructor.
+	virtual ~H5Object();
+
+   protected:
+	// Default constructor
+	H5Object();
+
+	// Creates a copy of an existing object giving the object id
+	H5Object( const hid_t object_id );
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+}; /* end class H5Object */
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5Object_H
diff --git a/Resources/windows-libs/HDF5/include/H5Opkg.h b/Resources/windows-libs/HDF5/include/H5Opkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..ff525376ce472f41f0171854fb0cd11862006cd2
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Opkg.h
@@ -0,0 +1,626 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5O_PACKAGE
+#error "Do not include this file outside the H5O package!"
+#endif
+
+#ifndef _H5Opkg_H
+#define _H5Opkg_H
+
+/* Get package's private header */
+#include "H5Oprivate.h"		/* Object headers		  	*/
+
+/* Other private headers needed by this file */
+#include "H5ACprivate.h"        /* Metadata cache                       */
+#include "H5FLprivate.h"	/* Free Lists                           */
+
+/* Object header macros */
+#define H5O_NMESGS	8 		/*initial number of messages	     */
+#define H5O_NCHUNKS	2		/*initial number of chunks	     */
+#define H5O_MIN_SIZE	22		/* Min. obj header data size (must be big enough for a message prefix and a continuation message) */
+#define H5O_MSG_TYPES   24              /* # of types of messages            */
+#define H5O_MAX_CRT_ORDER_IDX 65535     /* Max. creation order index value   */
+
+/* Versions of object header structure */
+
+/* Initial version of the object header format */
+#define H5O_VERSION_1		1
+
+/* Revised version - leaves out reserved bytes and alignment padding, and adds
+ *      magic number as prefix and checksum as suffix for all chunks.
+ */
+#define H5O_VERSION_2		2
+
+/* The latest version of the format.  Look through the 'flush'
+ *      and 'size' callback for places to change when updating this. */
+#define H5O_VERSION_LATEST	H5O_VERSION_2
+
+/*
+ * Align messages on 8-byte boundaries because we would like to copy the
+ * object header chunks directly into memory and operate on them there, even
+ * on 64-bit architectures.  This allows us to reduce the number of disk I/O
+ * requests with a minimum amount of mem-to-mem copies.
+ *
+ * Note: We no longer attempt to do this. - QAK, 10/16/06
+ */
+#define H5O_ALIGN_OLD(X)	(8 * (((X) + 7) / 8))
+#define H5O_ALIGN_VERS(V, X)						      \
+    (((V) == H5O_VERSION_1) ?						      \
+		H5O_ALIGN_OLD(X)					      \
+        :								      \
+		(X)							      \
+    )
+#define H5O_ALIGN_OH(O, X)						      \
+     H5O_ALIGN_VERS((O)->version, X)
+#define H5O_ALIGN_F(F, X)						      \
+     H5O_ALIGN_VERS((H5F_USE_LATEST_FORMAT(F) ? H5O_VERSION_LATEST : H5O_VERSION_1), X)
+
+/* Size of checksum (on disk) */
+#define H5O_SIZEOF_CHKSUM               4
+
+/* ========= Object Creation properties ============ */
+/* Default values for some of the object creation properties */
+/* NOTE: The H5O_CRT_ATTR_MAX_COMPACT_DEF & H5O_CRT_ATTR_MIN_DENSE_DEF values
+ *      are "built into" the file format, make certain existing files with
+ *      default attribute phase change storage are handled correctly if they
+ *      are changed.
+ */
+#define H5O_CRT_ATTR_MAX_COMPACT_DEF    8
+#define H5O_CRT_ATTR_MIN_DENSE_DEF      6
+#define H5O_CRT_OHDR_FLAGS_DEF          H5O_HDR_STORE_TIMES
+
+/* Object header status flag definitions */
+#define H5O_HDR_CHUNK0_1                0x00    /* Use 1-byte value for chunk #0 size */
+#define H5O_HDR_CHUNK0_2                0x01    /* Use 2-byte value for chunk #0 size */
+#define H5O_HDR_CHUNK0_4                0x02    /* Use 4-byte value for chunk #0 size */
+#define H5O_HDR_CHUNK0_8                0x03    /* Use 8-byte value for chunk #0 size */
+
+/*
+ * Size of object header prefix.
+ */
+#define H5O_SIZEOF_HDR(O)						      \
+    (((O)->version == H5O_VERSION_1)  					      \
+        ?								      \
+            H5O_ALIGN_OLD(1 +	/*version number	*/		      \
+                1 +		/*reserved 		*/		      \
+                2 +		/*number of messages	*/		      \
+                4 +		/*reference count	*/		      \
+                4)		/*chunk data size	*/		      \
+        :								      \
+            (H5_SIZEOF_MAGIC +	/*magic number  	*/		      \
+                1 +		/*version number 	*/		      \
+                1 +		/*flags		 	*/		      \
+                (((O)->flags & H5O_HDR_STORE_TIMES) ? (			      \
+                  4 +		/*access time		*/		      \
+                  4 +		/*modification time	*/		      \
+                  4 +		/*change time		*/		      \
+                  4		/*birth time		*/		      \
+                ) : 0) +						      \
+                (((O)->flags & H5O_HDR_ATTR_STORE_PHASE_CHANGE) ? (	      \
+                  2 +		/*max compact attributes */		      \
+                  2		/*min dense attributes	*/		      \
+                ) : 0) +						      \
+                (1 << ((O)->flags & H5O_HDR_CHUNK0_SIZE)) + /*chunk 0 data size */ \
+                H5O_SIZEOF_CHKSUM) /*checksum size	*/		      \
+    )
+
+/*
+ * Size of object header message prefix
+ */
+#define H5O_SIZEOF_MSGHDR_VERS(V,C)					      \
+    (((V) == H5O_VERSION_1)  						      \
+        ?								      \
+            H5O_ALIGN_OLD(2 +	/*message type		*/		      \
+                2 +		/*sizeof message data	*/		      \
+                1 +		/*flags              	*/		      \
+                3)		/*reserved		*/		      \
+        :								      \
+            (1 +		/*message type		*/		      \
+                2 + 		/*sizeof message data	*/		      \
+                1 +		/*flags              	*/		      \
+                ((C) ? (						      \
+                  2		/*creation index     	*/		      \
+                ) : 0))							      \
+    )
+#define H5O_SIZEOF_MSGHDR_OH(O)						      \
+    H5O_SIZEOF_MSGHDR_VERS((O)->version, (O)->flags & H5O_HDR_ATTR_CRT_ORDER_TRACKED)
+#define H5O_SIZEOF_MSGHDR_F(F, C)						      \
+    H5O_SIZEOF_MSGHDR_VERS((H5F_USE_LATEST_FORMAT(F) || H5F_STORE_MSG_CRT_IDX(F)) ? H5O_VERSION_LATEST : H5O_VERSION_1, (C))
+
+/*
+ * Size of chunk "header" for each chunk
+ */
+#define H5O_SIZEOF_CHKHDR_VERS(V)					      \
+    (((V) == H5O_VERSION_1)  						      \
+        ?								      \
+            0 +		/*no magic #  */				      \
+                0 	/*no checksum */				      \
+        :								      \
+            H5_SIZEOF_MAGIC + 		/*magic #  */			      \
+                H5O_SIZEOF_CHKSUM 	/*checksum */			      \
+    )
+#define H5O_SIZEOF_CHKHDR_OH(O)						      \
+    H5O_SIZEOF_CHKHDR_VERS((O)->version)
+
+/*
+ * Size of checksum for each chunk
+ */
+#define H5O_SIZEOF_CHKSUM_VERS(V)					      \
+    (((V) == H5O_VERSION_1)  						      \
+        ?								      \
+            0 		/*no checksum */				      \
+        :								      \
+            H5O_SIZEOF_CHKSUM 		/*checksum */			      \
+    )
+#define H5O_SIZEOF_CHKSUM_OH(O)						      \
+    H5O_SIZEOF_CHKSUM_VERS((O)->version)
+
+/* Input/output flags for decode functions */
+#define H5O_DECODEIO_NOCHANGE           0x01u   /* IN: do not modify values */
+#define H5O_DECODEIO_DIRTY              0x02u   /* OUT: message has been changed */
+
+/* Macro to incremend ndecode_dirtied (only if we are debugging) */
+#ifndef NDEBUG
+#define INCR_NDECODE_DIRTIED(OH) (OH)->ndecode_dirtied++;
+#else /* NDEBUG */
+#define INCR_NDECODE_DIRTIED(OH) ;
+#endif /* NDEBUG */
+
+/* Load native information for a message, if it's not already present */
+/* (Only works for messages with decode callback) */
+#define H5O_LOAD_NATIVE(F, DXPL, IOF, OH, MSG, ERR)                           \
+    if(NULL == (MSG)->native) {                                               \
+        const H5O_msg_class_t	*msg_type = (MSG)->type;                      \
+        unsigned                ioflags = (IOF);                              \
+                                                                              \
+        /* Decode the message */                                              \
+        HDassert(msg_type->decode);                                           \
+        if(NULL == ((MSG)->native = (msg_type->decode)((F), (DXPL), (OH), (MSG)->flags, &ioflags, (MSG)->raw))) \
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, ERR, "unable to decode message") \
+                                                                              \
+        /* Mark the message dirty if it was changed by decoding */            \
+        if((ioflags & H5O_DECODEIO_DIRTY) && (H5F_get_intent((F)) & H5F_ACC_RDWR)) { \
+            (MSG)->dirty = TRUE;                                              \
+            /* Increment the count of messages dirtied by decoding, but */    \
+            /* only ifndef NDEBUG */                                          \
+            INCR_NDECODE_DIRTIED(OH)                                          \
+        }                                                                     \
+                                                                              \
+        /* Set the message's "shared info", if it's shareable */	      \
+        if((MSG)->flags & H5O_MSG_FLAG_SHAREABLE) {                           \
+            H5O_UPDATE_SHARED((H5O_shared_t *)(MSG)->native, H5O_SHARE_TYPE_HERE, (F), msg_type->id, (MSG)->crt_idx, (OH)->chunk[0].addr) \
+        } /* end if */                                                        \
+                                                                              \
+        /* Set the message's "creation index", if it has one */		      \
+        if(msg_type->set_crt_index) {				      	      \
+            /* Set the creation index for the message */		      \
+            if((msg_type->set_crt_index)((MSG)->native, (MSG)->crt_idx) < 0)  \
+                HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, ERR, "unable to set creation index") \
+        } /* end if */							      \
+    } /* end if */
+
+/* Flags for a message class's "sharability" */
+#define H5O_SHARE_IS_SHARABLE   0x01
+#define H5O_SHARE_IN_OHDR       0x02
+
+
+/* The "message class" type */
+struct H5O_msg_class_t {
+    unsigned	id;				/*message type ID on disk   */
+    const char	*name;				/*for debugging             */
+    size_t	native_size;			/*size of native message    */
+    unsigned    share_flags;			/* Message sharing settings */
+    void	*(*decode)(H5F_t *, hid_t, H5O_t *, unsigned, unsigned *, const uint8_t *);
+    herr_t	(*encode)(H5F_t *, hbool_t, uint8_t *, const void *);
+    void	*(*copy)(const void *, void *);	/*copy native value         */
+    size_t	(*raw_size)(const H5F_t *, hbool_t, const void *);/*sizeof encoded message	*/
+    herr_t	(*reset)(void *);		/*free nested data structs  */
+    herr_t	(*free)(void *);		/*free main data struct  */
+    herr_t	(*del)(H5F_t *, hid_t, H5O_t *, void *);    /* Delete space in file referenced by this message */
+    herr_t	(*link)(H5F_t *, hid_t, H5O_t *, void *);   /* Increment any links in file reference by this message */
+    herr_t	(*set_share)(void*, const H5O_shared_t*);   /* Set shared information */
+    htri_t	(*can_share)(const void *);	/* Is message allowed to be shared? */
+    herr_t	(*pre_copy_file)(H5F_t *, const void *, hbool_t *, const H5O_copy_t *, void *); /*"pre copy" action when copying native value to file */
+    void	*(*copy_file)(H5F_t *, void *, H5F_t *, hbool_t *, unsigned *, H5O_copy_t *, void *, hid_t); /*copy native value to file */
+    herr_t	(*post_copy_file)(const H5O_loc_t *, const void *, H5O_loc_t *, void *, unsigned *, hid_t, H5O_copy_t *); /*"post copy" action when copying native value to file */
+    herr_t      (*get_crt_index)(const void *, H5O_msg_crt_idx_t *);	/* Get message's creation index */
+    herr_t      (*set_crt_index)(void *, H5O_msg_crt_idx_t);	/* Set message's creation index */
+    herr_t	(*debug)(H5F_t*, hid_t, const void*, FILE*, int, int);
+};
+
+struct H5O_mesg_t {
+    const H5O_msg_class_t	*type;	/*type of message		     */
+    hbool_t		dirty;		/*raw out of date wrt native	     */
+    hbool_t		locked;		/*message is locked into chunk	     */
+    uint8_t		flags;		/*message flags			     */
+    H5O_msg_crt_idx_t   crt_idx;        /*message creation index	     */
+    unsigned		chunkno;	/*chunk number for this mesg	     */
+    void		*native;	/*native format message		     */
+    uint8_t		*raw;		/*ptr to raw data		     */
+    size_t		raw_size;	/*size with alignment		     */
+};
+
+typedef struct H5O_chunk_t {
+    haddr_t	addr;			/*chunk file address		     */
+    size_t	size;			/*chunk size			     */
+    size_t	gap;			/*space at end of chunk too small for null message */
+    uint8_t	*image;			/*image of file			     */
+} H5O_chunk_t;
+
+struct H5O_t {
+    H5AC_info_t cache_info; /* Information for metadata cache functions, _must_ be */
+                            /* first field in structure */
+
+    /* File-specific information (not stored) */
+    size_t      sizeof_size;            /* Size of file sizes 		     */
+    size_t      sizeof_addr;            /* Size of file addresses	     */
+
+    /* Debugging information (not stored) */
+#ifdef H5O_ENABLE_BAD_MESG_COUNT
+    hbool_t     store_bad_mesg_count;   /* Flag to indicate that a bad message count should be stored */
+                                        /* (This is to simulate a bug in earlier
+                                         *      versions of the library)
+                                         */
+#endif /* H5O_ENABLE_BAD_MESG_COUNT */
+#ifndef NDEBUG
+    size_t      ndecode_dirtied;        /* Number of messages dirtied by decoding */
+#endif /* NDEBUG */
+
+    /* Chunk management information (not stored) */
+    size_t      rc;                     /* Reference count of [continuation] chunks using this structure */
+    size_t      chunk0_size;            /* Size of serialized first chunk    */
+    hbool_t     mesgs_modified;         /* Whether any messages were modified when the object header was deserialized */
+    hbool_t     prefix_modified;        /* Whether prefix was modified when the object header was deserialized */
+
+    /* Object information (stored) */
+    hbool_t     has_refcount_msg;       /* Whether the object has a ref. count message */
+    unsigned	nlink;			/*link count			     */
+    uint8_t	version;		/*version number		     */
+    uint8_t	flags;			/*flags				     */
+
+    /* Time information (stored, for versions > 1 & H5O_HDR_STORE_TIMES flag set) */
+    time_t      atime;                  /*access time 			     */
+    time_t      mtime;                  /*modification time 		     */
+    time_t      ctime;                  /*change time 			     */
+    time_t      btime;                  /*birth time 			     */
+
+    /* Attribute information (stored, for versions > 1) */
+    unsigned	max_compact;		/* Maximum # of compact attributes   */
+    unsigned	min_dense;		/* Minimum # of "dense" attributes   */
+
+    /* Message management (stored, encoded in chunks) */
+    size_t	nmesgs;			/*number of messages		     */
+    size_t	alloc_nmesgs;		/*number of message slots	     */
+    H5O_mesg_t	*mesg;			/*array of messages		     */
+    size_t      link_msgs_seen;         /* # of link messages seen when loading header */
+    size_t      attr_msgs_seen;         /* # of attribute messages seen when loading header */
+
+    /* Chunk management (not stored) */
+    size_t	nchunks;		/*number of chunks		     */
+    size_t	alloc_nchunks;		/*chunks allocated		     */
+    H5O_chunk_t *chunk;			/*array of chunks		     */
+};
+
+/* Class for types of objects in file */
+typedef struct H5O_obj_class_t {
+    H5O_type_t	type;				/*object type on disk	     */
+    const char	*name;				/*for debugging		     */
+    void       *(*get_copy_file_udata)(void);	/*retrieve user data for 'copy file' operation */
+    void	(*free_copy_file_udata)(void *); /*free user data for 'copy file' operation */
+    htri_t	(*isa)(H5O_t *);		/*if a header matches an object class */
+    hid_t	(*open)(const H5G_loc_t *, hid_t, hid_t, hbool_t );	/*open an object of this class */
+    void	*(*create)(H5F_t *, void *, H5G_loc_t *, hid_t );	/*create an object of this class */
+    H5O_loc_t	*(*get_oloc)(hid_t );		/*get the object header location for an object */
+    herr_t      (*bh_info)(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5_ih_info_t *bh_info); /*get the index & heap info for an object */
+    herr_t      (*flush)(H5G_loc_t *loc, hid_t dxpl_id); 		/*flush an opened object of this class */
+} H5O_obj_class_t;
+
+/* Node in skip list to map addresses from one file to another during object header copy */
+typedef struct H5O_addr_map_t {
+    H5_obj_t    src_obj_pos;            /* Location of source object */
+    haddr_t     dst_addr;               /* Address of object in destination file */
+    hbool_t     is_locked;              /* Indicate that the destination object is locked currently */
+    hsize_t     inc_ref_count;          /* Number of deferred increments to reference count */
+    const H5O_obj_class_t *obj_class;   /* Object class */
+    void        *udata;                 /* Object class copy file udata */
+} H5O_addr_map_t;
+
+/* Stack of continuation messages to interpret */
+typedef struct H5O_cont_msgs_t {
+    size_t      nmsgs;                  /* Number of continuation messages found so far */
+    size_t	alloc_nmsgs;		/* Continuation messages allocated */
+    H5O_cont_t *msgs;			/* Array of continuation messages */
+} H5O_cont_msgs_t;
+
+/* Common callback information for loading object header prefix from disk */
+typedef struct H5O_common_cache_ud_t {
+    H5F_t *f;                           /* Pointer to file for object header/chunk */
+    hid_t dxpl_id;                      /* DXPL for operation */
+    unsigned file_intent;               /* Read/write intent for file */
+    unsigned merged_null_msgs;          /* Number of null messages merged together */
+    hbool_t mesgs_modified;             /* Whether any messages were modified when the object header was deserialized */
+    H5O_cont_msgs_t *cont_msg_info;     /* Pointer to continuation messages to work on */
+    haddr_t addr;                       /* Address of the prefix or chunk */
+} H5O_common_cache_ud_t;
+
+/* Callback information for loading object header prefix from disk */
+typedef struct H5O_cache_ud_t {
+    hbool_t made_attempt;               /* Whether the deserialize routine was already attempted */
+    unsigned v1_pfx_nmesgs;             /* Number of messages from v1 prefix header */
+    H5O_common_cache_ud_t common;       /* Common object header cache callback info */
+} H5O_cache_ud_t;
+
+/* Structure representing each chunk in the cache */
+typedef struct H5O_chunk_proxy_t {
+    H5AC_info_t cache_info;    /* Information for metadata cache functions, _must_ be */
+                                /* first field in structure */
+
+    H5O_t       *oh;                    /* Object header for this chunk */
+    unsigned    chunkno;                /* Chunk number for this chunk */
+} H5O_chunk_proxy_t;
+
+/* Callback information for loading object header chunk from disk */
+typedef struct H5O_chk_cache_ud_t {
+    hbool_t decoding;                   /* Whether the object header is being decoded */
+    H5O_t *oh;                          /* Object header for this chunk */
+    unsigned chunkno;                   /* Index of chunk being brought in (for re-loads) */
+    size_t size;                        /* Size of chunk in the file */
+    H5O_common_cache_ud_t common;       /* Common object header cache callback info */
+} H5O_chk_cache_ud_t;
+
+
+/* H5O object header inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_OHDR[1];
+
+/* H5O object header chunk inherits cache-like properties from H5AC */
+H5_DLLVAR const H5AC_class_t H5AC_OHDR_CHK[1];
+
+/* Header message ID to class mapping */
+H5_DLLVAR const H5O_msg_class_t *const H5O_msg_class_g[H5O_MSG_TYPES];
+
+/* Declare external the free list for H5O_t's */
+H5FL_EXTERN(H5O_t);
+
+/* Declare external the free list for H5O_mesg_t sequences */
+H5FL_SEQ_EXTERN(H5O_mesg_t);
+
+/* Declare external the free list for H5O_chunk_t sequences */
+H5FL_SEQ_EXTERN(H5O_chunk_t);
+
+/* Declare external the free list for chunk_image blocks */
+H5FL_BLK_EXTERN(chunk_image);
+
+/*
+ * Object header messages
+ */
+
+/* Null Message. (0x0000) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_NULL[1];
+
+/* Simple Dataspace Message. (0x0001) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_SDSPACE[1];
+
+/* Link Information Message. (0x0002) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_LINFO[1];
+
+/* Datatype Message. (0x0003) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_DTYPE[1];
+
+/* Old Fill Value Message. (0x0004) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_FILL[1];
+
+/* New Fill Value Message. (0x0005) */
+/*
+ * The new fill value message is fill value plus
+ * space allocation time and fill value writing time and whether fill
+ * value is defined.
+ */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_FILL_NEW[1];
+
+/* Link Message. (0x0006) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_LINK[1];
+
+/* External File List Message. (0x0007) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_EFL[1];
+
+/* Data Layout Message. (0x0008) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_LAYOUT[1];
+
+#ifdef H5O_ENABLE_BOGUS
+/* "Bogus" Message. (0x0009) */
+/*
+ * Used for debugging - should never be found in valid HDF5 file.
+ */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_BOGUS[1];
+#endif /* H5O_ENABLE_BOGUS */
+
+/* Group Information Message. (0x000a) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_GINFO[1];
+
+/* Filter pipeline message. (0x000b) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_PLINE[1];
+
+/* Attribute Message. (0x000c) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_ATTR[1];
+
+/* Object name message. (0x000d) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_NAME[1];
+
+/* Modification Time Message. (0x000e) */
+/*
+ * The message is just a `time_t'.
+ * (See also the "new" modification time message)
+ */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_MTIME[1];
+
+/* Shared Message information message (0x000f)
+ * A message for the superblock extension, holding information about
+ * the file-wide shared message "SOHM" table
+ */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_SHMESG[1];
+
+/* Object Header Continuation Message. (0x0010) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_CONT[1];
+
+/* Symbol Table Message. (0x0011) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_STAB[1];
+
+/* New Modification Time Message. (0x0012) */
+/*
+ * The message is just a `time_t'.
+ */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_MTIME_NEW[1];
+
+/* v1 B-tree 'K' value message (0x0013)
+ * A message for the superblock extension, holding information about
+ * the file-wide v1 B-tree 'K' values.
+ */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_BTREEK[1];
+
+/* Driver info message (0x0014)
+ * A message for the superblock extension, holding information about
+ * the file driver settings
+ */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_DRVINFO[1];
+
+/* Attribute Information Message. (0x0015) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_AINFO[1];
+
+/* Reference Count Message. (0x0016) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_REFCOUNT[1];
+
+/* Placeholder for unknown message. (0x0017) */
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_UNKNOWN[1];
+
+
+/*
+ * Object header "object" types
+ */
+
+/* Group Object. (H5O_TYPE_GROUP - 0) */
+H5_DLLVAR const H5O_obj_class_t H5O_OBJ_GROUP[1];
+
+/* Dataset Object. (H5O_TYPE_DATASET - 1) */
+H5_DLLVAR const H5O_obj_class_t H5O_OBJ_DATASET[1];
+
+/* Datatype Object. (H5O_TYPE_NAMED_DATATYPE - 2) */
+H5_DLLVAR const H5O_obj_class_t H5O_OBJ_DATATYPE[1];
+
+
+/* Package-local function prototypes */
+H5_DLL herr_t H5O_msg_flush(H5F_t *f, H5O_t *oh, H5O_mesg_t *mesg);
+H5_DLL herr_t H5O_flush_msgs(H5F_t *f, H5O_t *oh);
+H5_DLL hid_t H5O_open_by_loc(const H5G_loc_t *obj_loc, hid_t lapl_id, hid_t dxpl_id, hbool_t app_ref);
+H5_DLL herr_t H5O_delete_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, H5O_mesg_t *mesg);
+H5_DLL const H5O_obj_class_t * H5O_obj_class(const H5O_loc_t *loc, hid_t dxpl_id);
+H5_DLL int H5O_link_oh(H5F_t *f, int adjust, hid_t dxpl_id, H5O_t *oh, hbool_t *deleted);
+H5_DLL herr_t H5O_inc_rc(H5O_t *oh);
+H5_DLL herr_t H5O_dec_rc(H5O_t *oh);
+H5_DLL herr_t H5O_free(H5O_t *oh);
+
+/* Object header message routines */
+H5_DLL herr_t H5O_msg_alloc(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    const H5O_msg_class_t *type, unsigned *mesg_flags, void *mesg,
+    size_t *mesg_idx);
+H5_DLL herr_t H5O_msg_append_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    const H5O_msg_class_t *type, unsigned mesg_flags, unsigned update_flags,
+    void *mesg);
+H5_DLL herr_t H5O_msg_write_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    const H5O_msg_class_t *type, unsigned mesg_flags, unsigned update_flags,
+    void *mesg);
+H5_DLL void *H5O_msg_free_real(const H5O_msg_class_t *type, void *mesg);
+H5_DLL herr_t H5O_msg_free_mesg(H5O_mesg_t *mesg);
+H5_DLL unsigned H5O_msg_count_real(const H5O_t *oh, const H5O_msg_class_t *type);
+H5_DLL herr_t H5O_msg_remove_real(H5F_t *f, H5O_t *oh, const H5O_msg_class_t *type,
+    int sequence, H5O_operator_t op, void *op_data, hbool_t adj_link, hid_t dxpl_id);
+H5_DLL void *H5O_msg_copy_file(const H5O_msg_class_t *type, H5F_t *file_src,
+    void *mesg_src, H5F_t *file_dst, hbool_t *recompute_size,
+    unsigned *mesg_flags, H5O_copy_t *cpy_info, void *udata, hid_t dxpl_id);
+H5_DLL herr_t H5O_msg_iterate_real(H5F_t *f, H5O_t *oh, const H5O_msg_class_t *type,
+    const H5O_mesg_operator_t *op, void *op_data, hid_t dxpl_id);
+
+/* Object header chunk routines */
+H5_DLL herr_t H5O_chunk_add(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned idx);
+H5_DLL H5O_chunk_proxy_t *H5O_chunk_protect(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    unsigned idx);
+H5_DLL herr_t H5O_chunk_unprotect(H5F_t *f, hid_t dxpl_id,
+    H5O_chunk_proxy_t *chk_proxy, hbool_t chk_dirtied);
+H5_DLL herr_t H5O_chunk_update_idx(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned idx);
+H5_DLL herr_t H5O_chunk_resize(H5O_t *oh, H5O_chunk_proxy_t *chk_proxy);
+H5_DLL herr_t H5O_chunk_delete(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned idx);
+
+/* Collect storage info for btree and heap */
+H5_DLL herr_t H5O_attr_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    H5_ih_info_t *bh_info);
+
+/* Object header allocation routines */
+H5_DLL herr_t H5O_alloc_msgs(H5O_t *oh, size_t min_alloc);
+H5_DLL herr_t  H5O_alloc(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    const H5O_msg_class_t *type, const void *mesg, size_t *mesg_idx);
+H5_DLL herr_t H5O_condense_header(H5F_t *f, H5O_t *oh, hid_t dxpl_id);
+H5_DLL herr_t H5O_release_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    H5O_mesg_t *mesg, hbool_t adj_link);
+
+/* Shared object operators */
+H5_DLL void * H5O_shared_decode(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
+    unsigned *ioflags, const uint8_t *buf, const H5O_msg_class_t *type);
+H5_DLL herr_t H5O_shared_encode(const H5F_t *f, uint8_t *buf/*out*/, const H5O_shared_t *sh_mesg);
+H5_DLL size_t H5O_shared_size(const H5F_t *f, const H5O_shared_t *sh_mesg);
+H5_DLL herr_t H5O_shared_delete(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
+    const H5O_msg_class_t *mesg_type, H5O_shared_t *sh_mesg);
+H5_DLL herr_t H5O_shared_link(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
+    const H5O_msg_class_t *mesg_type, H5O_shared_t *sh_mesg);
+H5_DLL herr_t H5O_shared_copy_file(H5F_t *file_src, H5F_t *file_dst,
+    const H5O_msg_class_t *mesg_type, const void *_native_src, void *_native_dst,
+    hbool_t *recompute_size, unsigned *mesg_flags, H5O_copy_t *cpy_info,
+    void *udata, hid_t dxpl_id);
+H5_DLL herr_t H5O_shared_post_copy_file (H5F_t *f,
+    const H5O_msg_class_t *mesg_type, const H5O_shared_t *shared_src,
+    H5O_shared_t *shared_dst, unsigned *mesg_flags, hid_t dxpl_id,
+    H5O_copy_t *cpy_info);
+H5_DLL herr_t H5O_shared_debug(const H5O_shared_t *mesg, FILE *stream,
+    int indent, int fwidth);
+
+/* Attribute message operators */
+H5_DLL herr_t H5O_attr_reset(void *_mesg);
+H5_DLL herr_t H5O_attr_delete(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, void *_mesg);
+H5_DLL herr_t H5O_attr_link(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, void *_mesg);
+H5_DLL herr_t H5O_attr_count_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    hsize_t *nattrs);
+
+
+/* These functions operate on object locations */
+H5_DLL H5O_loc_t *H5O_get_loc(hid_t id);
+
+/* Testing functions */
+#ifdef H5O_TESTING
+H5_DLL htri_t H5O_is_attr_empty_test(hid_t oid);
+H5_DLL htri_t H5O_is_attr_dense_test(hid_t oid);
+H5_DLL herr_t H5O_num_attrs_test(hid_t oid, hsize_t *nattrs);
+H5_DLL herr_t H5O_attr_dense_info_test(hid_t oid, hsize_t *name_count, hsize_t *corder_count);
+H5_DLL herr_t H5O_check_msg_marked_test(hid_t oid, hbool_t flag_val);
+H5_DLL herr_t H5O_expunge_chunks_test(const H5O_loc_t *oloc, hid_t dxpl_id);
+H5_DLL herr_t H5O_get_rc(const H5O_loc_t *oloc, hid_t dxpl_id, unsigned *rc);
+#endif /* H5O_TESTING */
+
+/* Object header debugging routines */
+#ifdef H5O_DEBUG
+H5_DLL herr_t H5O_assert(const H5O_t *oh);
+#endif /* H5O_DEBUG */
+H5_DLL herr_t H5O_debug_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh, haddr_t addr, FILE *stream, int indent, int fwidth);
+
+#endif /* _H5Opkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Opublic.h b/Resources/windows-libs/HDF5/include/H5Opublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..32945e845ae81d3b7dae8fee424c250b1980ce7c
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Opublic.h
@@ -0,0 +1,212 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Opublic.h
+ *                      Aug  5 1997
+ *                      Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5O (object header)
+ *                      package.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Opublic_H
+#define _H5Opublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"		/* Generic Functions			*/
+#include "H5Ipublic.h"		/* IDs			  		*/
+#include "H5Lpublic.h"		/* Links		  		*/
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/* Flags for object copy (H5Ocopy) */
+#define H5O_COPY_SHALLOW_HIERARCHY_FLAG (0x0001u)   /* Copy only immediate members */
+#define H5O_COPY_EXPAND_SOFT_LINK_FLAG  (0x0002u)   /* Expand soft links into new objects */
+#define H5O_COPY_EXPAND_EXT_LINK_FLAG   (0x0004u)   /* Expand external links into new objects */
+#define H5O_COPY_EXPAND_REFERENCE_FLAG	(0x0008u)   /* Copy objects that are pointed by references */
+#define H5O_COPY_WITHOUT_ATTR_FLAG      (0x0010u)   /* Copy object without copying attributes */
+#define H5O_COPY_PRESERVE_NULL_FLAG     (0x0020u)   /* Copy NULL messages (empty space) */
+#define H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG (0x0040u)   /* Merge committed datatypes in dest file */
+#define H5O_COPY_ALL                    (0x007Fu)   /* All object copying flags (for internal checking) */
+
+/* Flags for shared message indexes.
+ * Pass these flags in using the mesg_type_flags parameter in
+ * H5P_set_shared_mesg_index.
+ * (Developers: These flags correspond to object header message type IDs,
+ * but we need to assign each kind of message to a different bit so that
+ * one index can hold multiple types.)
+ */
+#define H5O_SHMESG_NONE_FLAG    0x0000          /* No shared messages */
+#define H5O_SHMESG_SDSPACE_FLAG ((unsigned)1 << 0x0001) /* Simple Dataspace Message.  */
+#define H5O_SHMESG_DTYPE_FLAG   ((unsigned)1 << 0x0003) /* Datatype Message.  */
+#define H5O_SHMESG_FILL_FLAG    ((unsigned)1 << 0x0005) /* Fill Value Message. */
+#define H5O_SHMESG_PLINE_FLAG   ((unsigned)1 << 0x000b) /* Filter pipeline message.  */
+#define H5O_SHMESG_ATTR_FLAG    ((unsigned)1 << 0x000c) /* Attribute Message.  */
+#define H5O_SHMESG_ALL_FLAG     (H5O_SHMESG_SDSPACE_FLAG | H5O_SHMESG_DTYPE_FLAG | H5O_SHMESG_FILL_FLAG | H5O_SHMESG_PLINE_FLAG | H5O_SHMESG_ATTR_FLAG)
+
+/* Object header status flag definitions */
+#define H5O_HDR_CHUNK0_SIZE             0x03    /* 2-bit field indicating # of bytes to store the size of chunk 0's data */
+#define H5O_HDR_ATTR_CRT_ORDER_TRACKED  0x04    /* Attribute creation order is tracked */
+#define H5O_HDR_ATTR_CRT_ORDER_INDEXED  0x08    /* Attribute creation order has index */
+#define H5O_HDR_ATTR_STORE_PHASE_CHANGE 0x10    /* Non-default attribute storage phase change values stored */
+#define H5O_HDR_STORE_TIMES             0x20    /* Store access, modification, change & birth times for object */
+#define H5O_HDR_ALL_FLAGS       (H5O_HDR_CHUNK0_SIZE | H5O_HDR_ATTR_CRT_ORDER_TRACKED | H5O_HDR_ATTR_CRT_ORDER_INDEXED | H5O_HDR_ATTR_STORE_PHASE_CHANGE | H5O_HDR_STORE_TIMES)
+
+/* Maximum shared message values.  Number of indexes is 8 to allow room to add
+ * new types of messages.
+ */
+#define H5O_SHMESG_MAX_NINDEXES 8
+#define H5O_SHMESG_MAX_LIST_SIZE 5000
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Types of objects in file */
+typedef enum H5O_type_t {
+    H5O_TYPE_UNKNOWN = -1,	/* Unknown object type		*/
+    H5O_TYPE_GROUP,	        /* Object is a group		*/
+    H5O_TYPE_DATASET,		/* Object is a dataset		*/
+    H5O_TYPE_NAMED_DATATYPE, 	/* Object is a named data type	*/
+    H5O_TYPE_NTYPES             /* Number of different object types (must be last!) */
+} H5O_type_t;
+
+/* Information struct for object header metadata (for H5Oget_info/H5Oget_info_by_name/H5Oget_info_by_idx) */
+typedef struct H5O_hdr_info_t {
+    unsigned version;		/* Version number of header format in file */
+    unsigned nmesgs;		/* Number of object header messages */
+    unsigned nchunks;		/* Number of object header chunks */
+    unsigned flags;             /* Object header status flags */
+    struct {
+        hsize_t total;		/* Total space for storing object header in file */
+        hsize_t meta;		/* Space within header for object header metadata information */
+        hsize_t mesg;		/* Space within header for actual message information */
+        hsize_t free;		/* Free space within object header */
+    } space;
+    struct {
+        uint64_t present;	/* Flags to indicate presence of message type in header */
+        uint64_t shared;	/* Flags to indicate message type is shared in header */
+    } mesg;
+} H5O_hdr_info_t;
+
+/* Information struct for object (for H5Oget_info/H5Oget_info_by_name/H5Oget_info_by_idx) */
+typedef struct H5O_info_t {
+    unsigned long 	fileno;		/* File number that object is located in */
+    haddr_t 		addr;		/* Object address in file	*/
+    H5O_type_t 		type;		/* Basic object type (group, dataset, etc.) */
+    unsigned 		rc;		/* Reference count of object    */
+    time_t		atime;		/* Access time			*/
+    time_t		mtime;		/* Modification time		*/
+    time_t		ctime;		/* Change time			*/
+    time_t		btime;		/* Birth time			*/
+    hsize_t 		num_attrs;	/* # of attributes attached to object */
+    H5O_hdr_info_t      hdr;            /* Object header information */
+    /* Extra metadata storage for obj & attributes */
+    struct {
+        H5_ih_info_t   obj;             /* v1/v2 B-tree & local/fractal heap for groups, B-tree for chunked datasets */
+        H5_ih_info_t   attr;            /* v2 B-tree & heap for attributes */
+    } meta_size;
+} H5O_info_t;
+
+/* Typedef for message creation indexes */
+typedef uint32_t H5O_msg_crt_idx_t;
+
+/* Prototype for H5Ovisit/H5Ovisit_by_name() operator */
+typedef herr_t (*H5O_iterate_t)(hid_t obj, const char *name, const H5O_info_t *info,
+    void *op_data);
+
+typedef enum H5O_mcdt_search_ret_t {
+    H5O_MCDT_SEARCH_ERROR = -1,	/* Abort H5Ocopy */
+    H5O_MCDT_SEARCH_CONT,	/* Continue the global search of all committed datatypes in the destination file */
+    H5O_MCDT_SEARCH_STOP	/* Stop the search, but continue copying.  The committed datatype will be copied but not merged. */
+} H5O_mcdt_search_ret_t;
+
+/* Callback to invoke when completing the search for a matching committed datatype from the committed dtype list */
+typedef H5O_mcdt_search_ret_t (*H5O_mcdt_search_cb_t)(void *op_data);
+
+/********************/
+/* Public Variables */
+/********************/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************/
+/* Public Prototypes */
+/*********************/
+H5_DLL hid_t H5Oopen(hid_t loc_id, const char *name, hid_t lapl_id);
+H5_DLL hid_t H5Oopen_by_addr(hid_t loc_id, haddr_t addr);
+H5_DLL hid_t H5Oopen_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id);
+H5_DLL htri_t H5Oexists_by_name(hid_t loc_id, const char *name, hid_t lapl_id);
+H5_DLL herr_t H5Oget_info(hid_t loc_id, H5O_info_t *oinfo);
+H5_DLL herr_t H5Oget_info_by_name(hid_t loc_id, const char *name, H5O_info_t *oinfo,
+    hid_t lapl_id);
+H5_DLL herr_t H5Oget_info_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, H5O_info_t *oinfo,
+    hid_t lapl_id);
+H5_DLL herr_t H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name,
+    hid_t lcpl_id, hid_t lapl_id);
+H5_DLL herr_t H5Oincr_refcount(hid_t object_id);
+H5_DLL herr_t H5Odecr_refcount(hid_t object_id);
+H5_DLL herr_t H5Ocopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
+    const char *dst_name, hid_t ocpypl_id, hid_t lcpl_id);
+H5_DLL herr_t H5Oset_comment(hid_t obj_id, const char *comment);
+H5_DLL herr_t H5Oset_comment_by_name(hid_t loc_id, const char *name,
+    const char *comment, hid_t lapl_id);
+H5_DLL ssize_t H5Oget_comment(hid_t obj_id, char *comment, size_t bufsize);
+H5_DLL ssize_t H5Oget_comment_by_name(hid_t loc_id, const char *name,
+    char *comment, size_t bufsize, hid_t lapl_id);
+H5_DLL herr_t H5Ovisit(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
+    H5O_iterate_t op, void *op_data);
+H5_DLL herr_t H5Ovisit_by_name(hid_t loc_id, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, H5O_iterate_t op,
+    void *op_data, hid_t lapl_id);
+H5_DLL herr_t H5Oclose(hid_t object_id);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+/* Typedefs */
+
+/* A struct that's part of the H5G_stat_t routine (deprecated) */
+typedef struct H5O_stat_t {
+    hsize_t size;               /* Total size of object header in file */
+    hsize_t free;               /* Free space within object header */
+    unsigned nmesgs;            /* Number of object header messages */
+    unsigned nchunks;           /* Number of object header chunks */
+} H5O_stat_t;
+
+/* Function prototypes */
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Opublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Oshared.h b/Resources/windows-libs/HDF5/include/H5Oshared.h
new file mode 100644
index 0000000000000000000000000000000000000000..3ec570902013b28f167f2b6d4f5ef0b699e20416
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Oshared.h
@@ -0,0 +1,491 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@hdfgroup.org>
+ *		Friday, January 19, 2007
+ *
+ * Purpose:	This file contains inline definitions for "generic" routines
+ *		supporting a "shared message interface" (ala Java) for object
+ *		header messages that can be shared.  This interface is
+ *              dependent on a bunch of macros being defined which define
+ *              the name of the interface and "real" methods which need to
+ *              be implemented for each message class that supports the
+ *              shared message interface.
+ */
+
+#ifndef H5Oshared_H
+#define H5Oshared_H
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_SHARED_DECODE
+ *
+ * Purpose:     Decode an object header message that may be shared.
+ *
+ * Note:	The actual name of this routine can be different in each source
+ *		file that this header file is included in, and must be defined
+ *		prior to including this header file.
+ *
+ * Return:      Success:        Pointer to the new message in native form
+ *              Failure:        NULL
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, January 19, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline void *
+H5O_SHARED_DECODE(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, unsigned mesg_flags,
+    unsigned *ioflags, const uint8_t *p)
+{
+    void *ret_value;            /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+#ifndef H5O_SHARED_TYPE
+#error "Need to define H5O_SHARED_TYPE macro!"
+#endif /* H5O_SHARED_TYPE */
+#ifndef H5O_SHARED_DECODE
+#error "Need to define H5O_SHARED_DECODE macro!"
+#endif /* H5O_SHARED_DECODE */
+#ifndef H5O_SHARED_DECODE_REAL
+#error "Need to define H5O_SHARED_DECODE_REAL macro!"
+#endif /* H5O_SHARED_DECODE_REAL */
+
+    /* Check for shared message */
+    if(mesg_flags & H5O_MSG_FLAG_SHARED) {
+        /* Retrieve native message info indirectly through shared message */
+        if(NULL == (ret_value = H5O_shared_decode(f, dxpl_id, open_oh, ioflags, p, H5O_SHARED_TYPE)))
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, NULL, "unable to decode shared message")
+
+        /* We currently do not support automatically fixing shared messages */
+#ifdef H5_STRICT_FORMAT_CHECKS
+        if(*ioflags & H5O_DECODEIO_DIRTY)
+            HGOTO_ERROR(H5E_OHDR, H5E_UNSUPPORTED, NULL, "unable to mark shared message dirty")
+#else /* H5_STRICT_FORMAT_CHECKS */
+        *ioflags &= ~H5O_DECODEIO_DIRTY;
+#endif /* H5_STRICT_FORMAT_CHECKS */
+    } /* end if */
+    else {
+        /* Decode native message directly */
+        if(NULL == (ret_value = H5O_SHARED_DECODE_REAL(f, dxpl_id, open_oh, mesg_flags, ioflags, p)))
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, NULL, "unable to decode native message")
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_SHARED_DECODE() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_SHARED_ENCODE
+ *
+ * Purpose:     Encode an object header message that may be shared.
+ *
+ * Note:	The actual name of this routine can be different in each source
+ *		file that this header file is included in, and must be defined
+ *		prior to including this header file.
+ *
+ * Return:      Success:        Non-negative
+ *              Failure:        Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, January 19, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline herr_t
+H5O_SHARED_ENCODE(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg)
+{
+    const H5O_shared_t *sh_mesg = (const H5O_shared_t *)_mesg;     /* Pointer to shared message portion of actual message */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+#ifndef H5O_SHARED_TYPE
+#error "Need to define H5O_SHARED_TYPE macro!"
+#endif /* H5O_SHARED_TYPE */
+#ifndef H5O_SHARED_ENCODE
+#error "Need to define H5O_SHARED_ENCODE macro!"
+#endif /* H5O_SHARED_ENCODE */
+#ifndef H5O_SHARED_ENCODE_REAL
+#error "Need to define H5O_SHARED_ENCODE_REAL macro!"
+#endif /* H5O_SHARED_ENCODE_REAL */
+
+    /* Sanity check */
+    HDassert(sh_mesg->type == H5O_SHARE_TYPE_UNSHARED || sh_mesg->msg_type_id == H5O_SHARED_TYPE->id);
+
+    /* Check for message stored elsewhere */
+    if(H5O_IS_STORED_SHARED(sh_mesg->type) && !disable_shared) {
+        /* Encode shared message into buffer */
+        if(H5O_shared_encode(f, p, sh_mesg) < 0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTENCODE, FAIL, "unable to encode shared message")
+    } /* end if */
+    else {
+        /* Encode native message directly */
+        if(H5O_SHARED_ENCODE_REAL(f, p, _mesg) < 0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTENCODE, FAIL, "unable to encode native message")
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_SHARED_ENCODE() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_SHARED_SIZE
+ *
+ * Purpose:	Returns the length of an encoded message.
+ *
+ * Note:	The actual name of this routine can be different in each source
+ *		file that this header file is included in, and must be defined
+ *		prior to including this header file.
+ *
+ * Return:	Success:	Length
+ *		Failure:	0
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, January 19, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline size_t
+H5O_SHARED_SIZE(const H5F_t *f, hbool_t disable_shared, const void *_mesg)
+{
+    const H5O_shared_t *sh_mesg = (const H5O_shared_t *)_mesg;     /* Pointer to shared message portion of actual message */
+    size_t ret_value;           /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+#ifndef H5O_SHARED_TYPE
+#error "Need to define H5O_SHARED_TYPE macro!"
+#endif /* H5O_SHARED_TYPE */
+#ifndef H5O_SHARED_SIZE
+#error "Need to define H5O_SHARED_SIZE macro!"
+#endif /* H5O_SHARED_SIZE */
+#ifndef H5O_SHARED_SIZE_REAL
+#error "Need to define H5O_SHARED_SIZE_REAL macro!"
+#endif /* H5O_SHARED_SIZE_REAL */
+
+    /* Check for message stored elsewhere */
+    if(H5O_IS_STORED_SHARED(sh_mesg->type) && !disable_shared) {
+        /* Retrieve encoded size of shared message */
+        if(0 == (ret_value = H5O_shared_size(f, sh_mesg)))
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, 0, "unable to retrieve encoded size of shared message")
+    } /* end if */
+    else {
+        /* Retrieve size of native message directly */
+        if(0 == (ret_value = H5O_SHARED_SIZE_REAL(f, _mesg)))
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, 0, "unable to retrieve encoded size of native message")
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_SHARED_SIZE() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_SHARED_DELETE
+ *
+ * Purpose:     Decrement reference count on any objects referenced by
+ *              message
+ *
+ * Note:	The actual name of this routine can be different in each source
+ *		file that this header file is included in, and must be defined
+ *		prior to including this header file.
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, January 19, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline herr_t
+H5O_SHARED_DELETE(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, void *_mesg)
+{
+    H5O_shared_t *sh_mesg = (H5O_shared_t *)_mesg;     /* Pointer to shared message portion of actual message */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+#ifndef H5O_SHARED_TYPE
+#error "Need to define H5O_SHARED_TYPE macro!"
+#endif /* H5O_SHARED_TYPE */
+#ifndef H5O_SHARED_DELETE
+#error "Need to define H5O_SHARED_DELETE macro!"
+#endif /* H5O_SHARED_DELETE */
+
+    /* Check for message tracked elsewhere */
+    if(H5O_IS_TRACKED_SHARED(sh_mesg->type)) {
+        /* Decrement the reference count on the shared message/object */
+        if(H5O_shared_delete(f, dxpl_id, open_oh, H5O_SHARED_TYPE, sh_mesg) < 0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTDEC, FAIL, "unable to decrement ref count for shared message")
+    } /* end if */
+#ifdef H5O_SHARED_DELETE_REAL
+    else {
+        /* Decrement the reference count on the native message directly */
+        if(H5O_SHARED_DELETE_REAL(f, dxpl_id, open_oh, _mesg) < 0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTDEC, FAIL, "unable to decrement ref count for native message")
+    } /* end else */
+#endif /* H5O_SHARED_DELETE_REAL */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_SHARED_DELETE() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_SHARED_LINK
+ *
+ * Purpose:     Increment reference count on any objects referenced by
+ *              message
+ *
+ * Note:	The actual name of this routine can be different in each source
+ *		file that this header file is included in, and must be defined
+ *		prior to including this header file.
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, January 19, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline herr_t
+H5O_SHARED_LINK(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, void *_mesg)
+{
+    H5O_shared_t *sh_mesg = (H5O_shared_t *)_mesg;     /* Pointer to shared message portion of actual message */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+#ifndef H5O_SHARED_TYPE
+#error "Need to define H5O_SHARED_TYPE macro!"
+#endif /* H5O_SHARED_TYPE */
+#ifndef H5O_SHARED_LINK
+#error "Need to define H5O_SHARED_LINK macro!"
+#endif /* H5O_SHARED_LINK */
+
+    /* Check for message tracked elsewhere */
+    if(H5O_IS_TRACKED_SHARED(sh_mesg->type)) {
+        /* Increment the reference count on the shared message/object */
+        if(H5O_shared_link(f, dxpl_id, open_oh, H5O_SHARED_TYPE, sh_mesg) < 0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINC, FAIL, "unable to increment ref count for shared message")
+    } /* end if */
+#ifdef H5O_SHARED_LINK_REAL
+    else {
+        /* Increment the reference count on the native message directly */
+        if(H5O_SHARED_LINK_REAL(f, dxpl_id, open_oh, _mesg) < 0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINC, FAIL, "unable to increment ref count for native message")
+    } /* end else */
+#endif /* H5O_SHARED_LINK_REAL */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_SHARED_LINK() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_SHARED_COPY_FILE
+ *
+ * Purpose:     Copies a message from _SRC to _DEST in file
+ *
+ * Note:	The actual name of this routine can be different in each source
+ *		file that this header file is included in, and must be defined
+ *		prior to including this header file.
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, January 19, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline void *
+H5O_SHARED_COPY_FILE(H5F_t *file_src, void *_native_src, H5F_t *file_dst,
+    hbool_t *recompute_size, unsigned *mesg_flags, H5O_copy_t *cpy_info,
+    void *udata, hid_t dxpl_id)
+{
+    void *dst_mesg = NULL;      /* Destination message */
+    void *ret_value;            /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+#ifndef H5O_SHARED_TYPE
+#error "Need to define H5O_SHARED_TYPE macro!"
+#endif /* H5O_SHARED_TYPE */
+#ifndef H5O_SHARED_COPY_FILE
+#error "Need to define H5O_SHARED_COPY_FILE macro!"
+#endif /* H5O_SHARED_COPY_FILE */
+
+#ifdef H5O_SHARED_COPY_FILE_REAL
+    /* Call native message's copy file callback to copy the message */
+    if(NULL == (dst_mesg = H5O_SHARED_COPY_FILE_REAL(file_src, H5O_SHARED_TYPE, _native_src, file_dst, recompute_size, cpy_info, udata, dxpl_id)))
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy native message to another file")
+#else /* H5O_SHARED_COPY_FILE_REAL */
+    /* No copy file callback defined, just copy the message itself */
+    if(NULL == (dst_mesg = (H5O_SHARED_TYPE->copy)(_native_src, NULL)))
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy native message")
+#endif /* H5O_SHARED_COPY_FILE_REAL */
+
+    /* Reset shared message info for new message */
+    HDmemset(dst_mesg, 0, sizeof(H5O_shared_t));
+
+    /* Handle sharing destination message */
+    if(H5O_shared_copy_file(file_src, file_dst, H5O_SHARED_TYPE, _native_src,
+            dst_mesg, recompute_size, mesg_flags, cpy_info, udata, dxpl_id) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, NULL, "unable to determine if message should be shared")
+
+    /* Set return value */
+    ret_value = dst_mesg;
+
+done:
+    if(!ret_value)
+        if(dst_mesg)
+            H5O_msg_free(H5O_SHARED_TYPE->id, dst_mesg);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_SHARED_COPY_FILE() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_SHARED_POST_COPY_FILE
+ *
+ * Purpose:     Copies a message from _SRC to _DEST in file
+ *
+ * Note:        The actual name of this routine can be different in each source
+ *              file that this header file is included in, and must be defined
+ *              prior to including this header file.
+ *
+ * Return:      Success:        Non-negative
+ *              Failure:        Negative
+ *
+ * Programmer:  Peter Cao
+ *              May 25, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline herr_t
+H5O_SHARED_POST_COPY_FILE(const H5O_loc_t *oloc_src, const void *mesg_src,
+    H5O_loc_t *oloc_dst, void *mesg_dst, unsigned *mesg_flags, hid_t dxpl_id,
+    H5O_copy_t *cpy_info)
+{
+    const H5O_shared_t  *shared_src = (const H5O_shared_t *)mesg_src; /* Alias to shared info in native source */
+    H5O_shared_t        *shared_dst = (H5O_shared_t *)mesg_dst; /* Alias to shared info in native destination */
+    herr_t              ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+    HDassert(oloc_src->file);
+    HDassert(oloc_dst->file);
+    HDassert(mesg_src);
+    HDassert(mesg_dst);
+    HDassert(cpy_info);
+
+#ifndef H5O_SHARED_TYPE
+#error "Need to define H5O_SHARED_TYPE macro!"
+#endif /* H5O_SHARED_TYPE */
+#ifndef H5O_SHARED_POST_COPY_FILE
+#error "Need to define H5O_SHARED_POST_COPY_FILE macro!"
+#endif /* H5O_SHARED_POST_COPY_FILE */
+
+#ifdef H5O_SHARED_POST_COPY_FILE_REAL
+    /* Call native message's post copy file callback to copy the message */
+    if(H5O_SHARED_POST_COPY_FILE_REAL(oloc_src, mesg_src, oloc_dst, mesg_dst, dxpl_id, cpy_info) <0 )
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to copy native message to another file")
+#endif /* H5O_SHARED_POST_COPY_FILE_REAL */
+
+    /* Update shared message after the post copy - will short circuit in
+     * production if the DEFER pass determined it will not be shared; debug mode
+     * verifies that it is indeed the case */
+    if(H5O_shared_post_copy_file(oloc_dst->file, H5O_SHARED_TYPE,
+            shared_src, shared_dst, mesg_flags, dxpl_id, cpy_info) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to fix shared message in post copy")
+
+#ifdef H5O_SHARED_POST_COPY_FILE_UPD
+    /* Call native message's post copy file update callback to update the
+     * message */
+    if(H5O_SHARED_POST_COPY_FILE_UPD(oloc_src, mesg_src, oloc_dst, mesg_dst, dxpl_id, cpy_info) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to update native message")
+#endif /* H5O_SHARED_POST_COPY_FILE_UPD */
+
+    /* Make sure that if the the source or destination is committed, both are
+     * committed */
+    HDassert((shared_src->type == H5O_SHARE_TYPE_COMMITTED)
+            == (shared_dst->type == H5O_SHARE_TYPE_COMMITTED));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_SHARED_POST_COPY_FILE() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_SHARED_DEBUG
+ *
+ * Purpose:     Prints debugging info for a potentially shared message.
+ *
+ * Note:	The actual name of this routine can be different in each source
+ *		file that this header file is included in, and must be defined
+ *		prior to including this header file.
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Saturday, February  3, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline herr_t
+H5O_SHARED_DEBUG(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
+    int indent, int fwidth)
+{
+    const H5O_shared_t *sh_mesg = (const H5O_shared_t *)_mesg;     /* Pointer to shared message portion of actual message */
+    herr_t ret_value = SUCCEED;           /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+#ifndef H5O_SHARED_TYPE
+#error "Need to define H5O_SHARED_TYPE macro!"
+#endif /* H5O_SHARED_TYPE */
+#ifndef H5O_SHARED_DEBUG
+#error "Need to define H5O_SHARED_DEBUG macro!"
+#endif /* H5O_SHARED_DEBUG */
+#ifndef H5O_SHARED_DEBUG_REAL
+#error "Need to define H5O_SHARED_DEBUG_REAL macro!"
+#endif /* H5O_SHARED_DEBUG_REAL */
+
+    /* Check for message stored elsewhere */
+    if(H5O_IS_STORED_SHARED(sh_mesg->type)) {
+        /* Print shared message information */
+        if(H5O_shared_debug(sh_mesg, stream, indent, fwidth) < 0)
+            HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to display shared message info")
+    } /* end if */
+
+    /* Call native message's debug callback */
+    if(H5O_SHARED_DEBUG_REAL(f, dxpl_id, _mesg, stream, indent, fwidth) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to display native message info")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_SHARED_DEBUG() */
+
+#endif /* H5Oshared_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5PLextern.h b/Resources/windows-libs/HDF5/include/H5PLextern.h
new file mode 100644
index 0000000000000000000000000000000000000000..f94101d818a1cda5e73635651f6c5c98f5ccaff8
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5PLextern.h
@@ -0,0 +1,87 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5. The full HDF5 copyright notice, including      *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic document set and is     *
+ * linked from the top-level documents page.  It can also be found at        *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have access   *
+ * to either file, you may request a copy from help@hdfgroup.org.            *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Raymond Lu <songyulu@hdfgroup.org>
+ *              13 February 2013
+ */
+#ifndef _H5PLextern_H
+#define _H5PLextern_H
+
+/* Include HDF5 header */
+#include "hdf5.h"
+
+#ifndef H5_VMS
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Plugin type */
+typedef enum H5PL_type_t {
+    H5PL_TYPE_ERROR        = -1,  /*error                    */
+    H5PL_TYPE_FILTER       = 0,   /*filter                   */
+    H5PL_TYPE_NONE         = 1    /*this must be last!       */
+} H5PL_type_t;
+
+
+#ifdef H5_BUILT_AS_DYNAMIC_LIB
+
+  #if defined (hdf5_EXPORTS)
+    /* hdf5 library imports from plugin */
+    #if defined (_MSC_VER)  /* MSVC Compiler Case */
+      #define H5PLUGIN_DLL __declspec(dllimport)
+    #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+      #define H5PLUGIN_DLL __attribute__ ((visibility("default")))
+    #endif
+  #else
+    /* plugins always export */
+    #if defined (_MSC_VER)  /* MSVC Compiler Case */
+      #define H5PLUGIN_DLL __declspec(dllexport)
+    #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+      #define H5PLUGIN_DLL __attribute__ ((visibility("default")))
+    #endif
+  #endif
+
+#elif defined(H5_BUILT_AS_STATIC_LIB)
+  #define H5PLUGIN_DLL
+#else
+
+  #if defined(H5_HAVE_WIN32_API)
+    #if defined(_HDF5DLL_)
+      #pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+      #define H5PLUGIN_DLL __declspec(dllimport)
+    #elif defined(_HDF5USEDLL_)
+      #define H5PLUGIN_DLL __declspec(dllexport)
+    #endif /* _HDF5DLL_ */
+  #else /*H5_HAVE_WIN32_API*/
+    #define H5PLUGIN_DLL
+  #endif /*H5_HAVE_WIN32_API*/
+
+#endif /* H5_BUILT_AS_xxx_LIB */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5PLUGIN_DLL H5PL_type_t H5PLget_plugin_type(void);
+H5PLUGIN_DLL const void *H5PLget_plugin_info(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*H5_VMS*/
+
+#endif /* _H5PLextern_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5PTpublic.h b/Resources/windows-libs/HDF5/include/H5PTpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..f919010591917cb356bf08c99381368bc848d444
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5PTpublic.h
@@ -0,0 +1,127 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5PTpublic_H
+#define _H5PTpublic_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*-------------------------------------------------------------------------
+ *
+ * Create/Open/Close functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL hid_t H5PTcreate_fl ( hid_t loc_id,
+                      const char *dset_name,
+                      hid_t dtype_id,
+                      hsize_t chunk_size,
+                      int compression );
+
+#ifdef VLPT_REMOVED
+H5_HLDLL hid_t H5PTcreate_vl ( hid_t loc_id,
+                      const char *dset_name,
+                      hsize_t chunk_size );
+#endif /* VLPT_REMOVED */
+
+H5_HLDLL hid_t H5PTopen( hid_t loc_id,
+                const char *dset_name );
+
+H5_HLDLL herr_t  H5PTclose( hid_t table_id );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Write functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5PTappend( hid_t table_id,
+                   size_t nrecords,
+                   const void * data );
+
+/*-------------------------------------------------------------------------
+ *
+ * Read functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5PTget_next( hid_t table_id,
+                     size_t nrecords,
+                     void * data );
+
+H5_HLDLL herr_t  H5PTread_packets( hid_t table_id,
+                         hsize_t start,
+                         size_t nrecords,
+                         void *data );
+
+/*-------------------------------------------------------------------------
+ *
+ * Inquiry functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5PTget_num_packets( hid_t table_id,
+                            hsize_t *nrecords );
+
+H5_HLDLL herr_t  H5PTis_valid( hid_t table_id );
+
+#ifdef VLPT_REMOVED
+H5_HLDLL herr_t  H5PTis_varlen( hid_t table_id );
+#endif /* VLPT_REMOVED */
+
+/*-------------------------------------------------------------------------
+ *
+ * Packet Table "current index" functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5PTcreate_index( hid_t table_id );
+
+H5_HLDLL herr_t  H5PTset_index( hid_t table_id,
+                             hsize_t pt_index );
+
+H5_HLDLL herr_t  H5PTget_index( hid_t table_id,
+                             hsize_t *pt_index );
+
+/*-------------------------------------------------------------------------
+ *
+ * Memory Management functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef VLPT_REMOVED
+H5_HLDLL herr_t  H5PTfree_vlen_readbuff( hid_t table_id,
+                               size_t bufflen,
+                               void * buff );
+#endif /* VLPT_REMOVED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/Resources/windows-libs/HDF5/include/H5PacketTable.h b/Resources/windows-libs/HDF5/include/H5PacketTable.h
new file mode 100644
index 0000000000000000000000000000000000000000..5f9a21339f4bdf6b1211c139d37b45dcc215ab75
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5PacketTable.h
@@ -0,0 +1,244 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Packet Table wrapper classes
+ *
+ * Wraps the H5PT Packet Table C functions in C++ objects
+ *
+ * Nat Furrer and James Laird
+ * February 2004
+ */
+
+#ifndef H5PTWRAP_H
+#define H5PTWRAP_H
+
+/* Public HDF5 header */
+#include "hdf5.h"
+
+#include "H5PTpublic.h"
+#include "H5api_adpt.h"
+
+class H5_HLCPPDLL  PacketTable
+{
+public:
+    /* Null constructor
+     * Sets table_id to "invalid"
+     */
+    PacketTable() {table_id = H5I_BADID;}
+
+    /* "Open" Constructor
+     * Opens an existing packet table, which can contain either fixed-length or
+     * variable-length packets.
+     */
+    PacketTable(hid_t fileID, char* name);
+
+    /* Destructor
+     * Cleans up the packet table
+     */
+    ~PacketTable();
+
+    /* IsValid
+     * Returns true if this packet table is valid, false otherwise.
+     * Use this after the constructor to ensure HDF did not have
+     * any trouble making or opening the packet table.
+     */
+    bool IsValid();
+
+#ifdef VLPT_REMOVED
+    /* IsVariableLength
+     * Return 1 if this packet table is a Variable Length packet table,
+     * return 0 if it is Fixed Length.  Returns -1 if the table is
+     * invalid (not open).
+     */
+    int IsVariableLength();
+#endif /* VLPT_REMOVED */
+
+    /* ResetIndex
+     * Sets the "current packet" index to point to the first packet in the
+     * packet table
+     */
+    void ResetIndex();
+
+    /* SetIndex
+     * Sets the current packet to point to the packet specified by index.
+     * Returns 0 on success, negative on failure (if index is out of bounds)
+     */
+    int SetIndex(hsize_t index);
+
+    /* GetIndex
+     * Returns the position of the current packet.
+     * On failure, returns 0 and error is set to negative.
+     */
+    hsize_t GetIndex(int& error);
+
+    /* GetPacketCount
+     * Returns the number of packets in the packet table.  Error
+     * is set to 0 on success.  On failure, returns 0 and
+     * error is set to negative.
+     */
+    hsize_t GetPacketCount(int& error);
+
+    hsize_t GetPacketCount()
+    {
+        int ignoreError;
+        return GetPacketCount(ignoreError);
+    }
+
+protected:
+    hid_t table_id;
+};
+
+class H5_HLCPPDLL FL_PacketTable : virtual public PacketTable
+{
+public:
+    /* Constructor
+     * Creates a packet table in which to store fixed length packets.
+     * Takes the ID of the file the packet table will be created in, the name of
+     * the packet table, the ID of the datatype of the set, the size
+     * of a memory chunk used in chunking, and the desired compression level
+     * (0-9, or -1 for no compression).
+     */
+    FL_PacketTable(hid_t fileID, char* name, hid_t dtypeID, hsize_t chunkSize, int compression = -1);
+
+    /* "Open" Constructor
+     * Opens an existing fixed-length packet table.
+     * Fails if the packet table specified is variable-length.
+     */
+    FL_PacketTable(hid_t fileID, char* name);
+
+    /* AppendPacket
+     * Adds a single packet to the packet table.  Takes a pointer
+     * to the location of the data in memory.
+     * Returns 0 on success, negative on failure
+     */
+    int AppendPacket(void * data);
+
+    /* AppendPackets (multiple packets)
+     * Adds multiple packets to the packet table.  Takes the number of packets
+     * to be added and a pointer to their location in memory.
+     * Returns 0 on success, -1 on failure.
+     */
+    int AppendPackets(size_t numPackets, void * data);
+
+    /* GetPacket (indexed)
+     * Gets a single packet from the packet table.  Takes the index
+     * of the packet (with 0 being the first packet) and a pointer
+     * to memory where the data should be stored.
+     * Returns 0 on success, negative on failure
+     */
+    int GetPacket(hsize_t index, void * data);
+
+    /* GetPackets (multiple packets)
+     * Gets multiple packets at once, all packets between
+     * startIndex and endIndex inclusive.  Also takes a pointer to
+     * the memory where these packets should be stored.
+     * Returns 0 on success, negative on failure.
+     */
+    int GetPackets(hsize_t startIndex, hsize_t endIndex, void * data);
+
+    /* GetNextPacket (single packet)
+     * Gets the next packet in the packet table.  Takes a pointer to
+     * memory where the packet should be stored.
+     * Returns 0 on success, negative on failure.  Index
+     * is not advanced to the next packet on failure.
+     */
+    int GetNextPacket(void * data);
+
+    /* GetNextPackets (multiple packets)
+     * Gets the next numPackets packets in the packet table.  Takes a
+     * pointer to memory where these packets should be stored.
+     * Returns 0 on success, negative on failure.  Index
+     * is not advanced on failure.
+     */
+    int GetNextPackets(size_t numPackets, void * data);
+};
+
+#ifdef VLPT_REMOVED
+class H5_HLCPPDLL  VL_PacketTable : virtual public PacketTable
+{
+public:
+    /* Constructor
+     * Creates a packet table in which to store variable length packets.
+     * Takes the ID of the file the packet table will be created in, the name of
+     * the packet table, and the size of a memory chunk used in chunking.
+     */
+    VL_PacketTable(hid_t fileID, char* name, hsize_t chunkSize);
+
+    /* "Open" Constructor
+     * Opens an existing variable-length packet table.
+     * Fails if the packet table specified is fixed-length.
+     */
+    VL_PacketTable(hid_t fileID, char* name);
+
+    /* AppendPacket
+     * Adds a single packet of any length to the packet table.
+     * Takes a pointer to the location of the data in memory and the length of the data
+     * in bytes.
+     * Returns 0 on success, negative on failure.
+     */
+    int AppendPacket(void * data, size_t length);
+
+    /* AppendPackets (multiple packets)
+     * Adds multiple variable-length packets to the packet table.  Takes the
+     * number of packets to be added and a pointer to an array of
+     * hvl_t structs in memory.
+     * Returns 0 on success, negative on failure.
+     */
+    int AppendPackets(size_t numPackets, hvl_t * data);
+
+    /* GetPacket (indexed)
+     * Gets a single variable-length packet from the packet table.  Takes
+     * the index of the packet (with 0 being the first packet) and a pointer
+     * to a hvl_t struct in which to store the packet's size and location.
+     * Returns 0 on success, negative on failure.
+     */
+    int GetPacket(hsize_t index, hvl_t * data);
+
+    /* GetPackets (multiple packets)
+     * Gets multiple variable-length packets at once, all packets between
+     * startIndex and endIndex inclusive.  Takes a pointer to an array
+     * of hvl_t structs in memory in which to store pointers to the packets.
+     * Returns 0 on success, negative on failure.
+     */
+    int GetPackets(hsize_t startIndex, hsize_t endIndex, hvl_t * data);
+
+    /* GetNextPacket (single packet)
+     * Gets the next packet in the packet table.  Takes a pointer to
+     * an hvl_t struct where the packet should be stored.
+     * Returns 0 on success, negative on failure.  Index
+     * is not advanced to the next packet on failure.
+     */
+    int GetNextPacket(hvl_t * data);
+
+    /* GetNextPackets (multiple packets)
+     * Gets the next numPackets packets in the packet table.  Takes a
+     * pointer to an array of hvl_t structs where pointers to the packets
+     * should be stored.
+     * Returns 0 on success, negative on failure.  Index
+     * is not advanced on failure.
+     */
+    int GetNextPackets(size_t numPackets, hvl_t * data);
+
+    /* FreeReadbuff
+     * Frees the buffers created when variable-length packets are read.
+     * Takes the number of hvl_t structs to be freed and a pointer to their
+     * location in memory.
+     * Returns 0 on success, negative on error.
+     */
+    int FreeReadbuff(size_t numStructs, hvl_t * buffer);
+};
+#endif /* VLPT_REMOVED */
+
+#endif /* H5PTWRAP_H */
diff --git a/Resources/windows-libs/HDF5/include/H5Ppkg.h b/Resources/windows-libs/HDF5/include/H5Ppkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..293420ecb5bcf616446b205b78f200f3173a73d0
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Ppkg.h
@@ -0,0 +1,209 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *		Friday, November 16, 2001
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5P package.  Source files outside the H5P package should
+ *		include H5Pprivate.h instead.
+ */
+#ifndef H5P_PACKAGE
+#error "Do not include this file outside the H5P package!"
+#endif
+
+#ifndef _H5Ppkg_H
+#define _H5Ppkg_H
+
+/* Get package's private header */
+#include "H5Pprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5SLprivate.h"	/* Skip lists				*/
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/* Define enum for type of object that property is within */
+typedef enum {
+    H5P_PROP_WITHIN_UNKNOWN=0,  /* Property container is unknown */
+    H5P_PROP_WITHIN_LIST,       /* Property is within a list */
+    H5P_PROP_WITHIN_CLASS       /* Property is within a class */
+} H5P_prop_within_t;
+
+/* Define enum for modifications to class */
+typedef enum {
+    H5P_MOD_ERR=(-1),   /* Indicate an error */
+    H5P_MOD_INC_CLS,    /* Increment the dependant class count*/
+    H5P_MOD_DEC_CLS,    /* Decrement the dependant class count*/
+    H5P_MOD_INC_LST,    /* Increment the dependant list count*/
+    H5P_MOD_DEC_LST,    /* Decrement the dependant list count*/
+    H5P_MOD_INC_REF,    /* Increment the ID reference count*/
+    H5P_MOD_DEC_REF,    /* Decrement the ID reference count*/
+    H5P_MOD_MAX         /* Upper limit on class modifications */
+} H5P_class_mod_t;
+
+/* Define structure to hold property information */
+typedef struct H5P_genprop_t {
+    /* Values for this property */
+    char *name;         /* Name of property */
+    size_t size;        /* Size of property value */
+    void *value;        /* Pointer to property value */
+    H5P_prop_within_t type;     /* Type of object the property is within */
+    hbool_t shared_name;   /* Whether the name is shared or not */
+
+    /* Callback function pointers & info */
+    H5P_prp_create_func_t create;   /* Function to call when a property is created */
+    H5P_prp_set_func_t set; /* Function to call when a property value is set */
+    H5P_prp_get_func_t get; /* Function to call when a property value is retrieved */
+    H5P_prp_delete_func_t del; /* Function to call when a property is deleted */
+    H5P_prp_copy_func_t copy;  /* Function to call when a property is copied */
+    H5P_prp_compare_func_t cmp; /* Function to call when a property is compared */
+    H5P_prp_close_func_t close; /* Function to call when a property is closed */
+} H5P_genprop_t;
+
+/* Define structure to hold class information */
+struct H5P_genclass_t {
+    struct H5P_genclass_t *parent;     /* Pointer to parent class */
+    char      *name;       /* Name of property list class */
+    H5P_plist_type_t type; /* Type of property */
+    size_t     nprops;     /* Number of properties in class */
+    unsigned   plists;     /* Number of property lists that have been created since the last modification to the class */
+    unsigned   classes;    /* Number of classes that have been derived since the last modification to the class */
+    unsigned   ref_count;  /* Number of oustanding ID's open on this class object */
+    hbool_t    deleted;    /* Whether this class has been deleted and is waiting for dependent classes & proplists to close */
+    unsigned   revision;   /* Revision number of a particular class (global) */
+    H5SL_t    *props;      /* Skip list containing properties */
+
+    /* Callback function pointers & info */
+    H5P_cls_create_func_t create_func;  /* Function to call when a property list is created */
+    void *create_data;     /* Pointer to user data to pass along to create callback */
+    H5P_cls_copy_func_t copy_func;      /* Function to call when a property list is copied */
+    void *copy_data;       /* Pointer to user data to pass along to copy callback */
+    H5P_cls_close_func_t close_func;    /* Function to call when a property list is closed */
+    void *close_data;      /* Pointer to user data to pass along to close callback */
+};
+
+/* Define structure to hold property list information */
+struct H5P_genplist_t {
+    H5P_genclass_t *pclass; /* Pointer to class info */
+    hid_t   plist_id;   /* Copy of the property list ID (for use in close callback) */
+    size_t  nprops;     /* Number of properties in class */
+    hbool_t class_init; /* Whether the class initialization callback finished successfully */
+    H5SL_t *del;        /* Skip list containing names of deleted properties */
+    H5SL_t *props;      /* Skip list containing properties */
+};
+
+/* Function pointer for library classes with properties to register */
+typedef herr_t (*H5P_init_class_op_t)(H5P_genclass_t *pclass);
+typedef herr_t (*H5P_reg_prop_func_t)(H5P_genclass_t *pclass);
+
+/*
+ * Each library property list class has a variable of this type that contains
+ * class variables and methods used to initialize the class.
+ */
+typedef struct H5P_libclass_t {
+    const char	*name;		        /* Class name */
+    H5P_plist_type_t type;              /* Class type */
+
+    hid_t const * const par_class_id;   /* Pointer to global parent class property list class ID */
+    hid_t * const class_id;             /* Pointer to global property list class ID */
+    hid_t * const def_plist_id;         /* Pointer to global default property list ID */
+    H5P_reg_prop_func_t reg_prop_func;  /* Register class's properties */
+
+    /* Class callback function pointers & info */
+    H5P_cls_create_func_t create_func;  /* Function to call when a property list is created */
+    void *create_data;                  /* Pointer to user data to pass along to create callback */
+    H5P_cls_copy_func_t copy_func;      /* Function to call when a property list is copied */
+    void *copy_data;                    /* Pointer to user data to pass along to copy callback */
+    H5P_cls_close_func_t close_func;    /* Function to call when a property list is closed */
+    void *close_data;                   /* Pointer to user data to pass along to close callback */
+} H5P_libclass_t;
+
+/* Property list/class iterator callback function pointer */
+typedef int (*H5P_iterate_int_t)(H5P_genprop_t *prop, void *udata);
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+/* Private functions, not part of the publicly documented API */
+H5_DLL herr_t H5P__term_pub_interface(void);
+H5_DLL herr_t H5P__term_deprec_interface(void);
+H5_DLL H5P_genclass_t *H5P_create_class(H5P_genclass_t *par_class,
+    const char *name, H5P_plist_type_t type,
+    H5P_cls_create_func_t cls_create, void *create_data,
+    H5P_cls_copy_func_t cls_copy, void *copy_data,
+    H5P_cls_close_func_t cls_close, void *close_data);
+H5_DLL H5P_genclass_t *H5P_copy_pclass(H5P_genclass_t *pclass);
+H5_DLL herr_t H5P_register_real(H5P_genclass_t *pclass, const char *name, size_t size,
+    const void *def_value, H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
+    H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
+    H5P_prp_copy_func_t prp_copy, H5P_prp_compare_func_t prp_cmp,
+    H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5P_register(H5P_genclass_t **pclass, const char *name, size_t size,
+    const void *def_value, H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
+    H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
+    H5P_prp_copy_func_t prp_copy, H5P_prp_compare_func_t prp_cmp,
+    H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5P_add_prop(H5SL_t *props, H5P_genprop_t *prop);
+H5_DLL herr_t H5P_access_class(H5P_genclass_t *pclass, H5P_class_mod_t mod);
+H5_DLL htri_t H5P_exist_pclass(H5P_genclass_t *pclass, const char *name);
+H5_DLL herr_t H5P_get_size_plist(const H5P_genplist_t *plist, const char *name,
+    size_t *size);
+H5_DLL herr_t H5P_get_size_pclass(H5P_genclass_t *pclass, const char *name,
+    size_t *size);
+H5_DLL H5P_genclass_t *H5P_get_class(const H5P_genplist_t *plist);
+H5_DLL herr_t H5P_get_nprops_plist(const H5P_genplist_t *plist, size_t *nprops);
+H5_DLL int H5P_cmp_class(const H5P_genclass_t *pclass1, const H5P_genclass_t *pclass2);
+H5_DLL herr_t H5P_cmp_plist(const H5P_genplist_t *plist1, const H5P_genplist_t *plist2,
+    int *cmp_ret);
+H5_DLL int H5P_iterate_plist(const H5P_genplist_t *plist, hbool_t iter_all_prop,
+    int *idx, H5P_iterate_int_t iter_func, void *iter_data);
+H5_DLL int H5P_iterate_pclass(const H5P_genclass_t *pclass, int *idx,
+    H5P_iterate_int_t iter_func, void *iter_data);
+H5_DLL herr_t H5P_copy_prop_plist(hid_t dst_id, hid_t src_id, const char *name);
+H5_DLL herr_t H5P_copy_prop_pclass(hid_t dst_id, hid_t src_id, const char *name);
+H5_DLL herr_t H5P_unregister(H5P_genclass_t *pclass, const char *name);
+H5_DLL char *H5P_get_class_path(H5P_genclass_t *pclass);
+H5_DLL H5P_genclass_t *H5P_open_class_path(const char *path);
+H5_DLL H5P_genclass_t *H5P_get_class_parent(const H5P_genclass_t *pclass);
+H5_DLL herr_t H5P_close_class(void *_pclass);
+H5_DLL herr_t H5P_get_filter(const H5Z_filter_info_t *filter,
+    unsigned int *flags, size_t *cd_nelmts, unsigned cd_values[],
+    size_t namelen, char name[], unsigned *filter_config);
+H5_DLL H5P_genprop_t *H5P__find_prop_plist(const H5P_genplist_t *plist, const char *name);
+
+/* Testing functions */
+#ifdef H5P_TESTING
+H5_DLL char *H5P_get_class_path_test(hid_t pclass_id);
+H5_DLL hid_t H5P_open_class_path_test(const char *path);
+H5_DLL herr_t H5P_reset_external_file_test(hid_t dcpl_id);
+#endif /* H5P_TESTING */
+
+#endif /* _H5Ppkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Ppublic.h b/Resources/windows-libs/HDF5/include/H5Ppublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..1d8ced44c023d4c8b5ee6ddc1aa5af9e91b03667
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Ppublic.h
@@ -0,0 +1,495 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains function prototypes for each exported function in the
+ * H5P module.
+ */
+#ifndef _H5Ppublic_H
+#define _H5Ppublic_H
+
+/* System headers needed by this file */
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5ACpublic.h"
+#include "H5Dpublic.h"
+#include "H5Fpublic.h"
+#include "H5FDpublic.h"
+#include "H5Ipublic.h"
+#include "H5Lpublic.h"
+#include "H5Opublic.h"
+#include "H5MMpublic.h"
+#include "H5Tpublic.h"
+#include "H5Zpublic.h"
+
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/* When this header is included from a private HDF5 header, don't make calls to H5open() */
+#undef H5OPEN
+#ifndef _H5private_H
+#define H5OPEN        H5open(),
+#else   /* _H5private_H */
+#define H5OPEN
+#endif  /* _H5private_H */
+
+/*
+ * The library's property list classes
+ */
+
+#define H5P_ROOT		   	(H5OPEN H5P_CLS_ROOT_g)
+#define H5P_OBJECT_CREATE 		(H5OPEN H5P_CLS_OBJECT_CREATE_g)
+#define H5P_FILE_CREATE 		(H5OPEN H5P_CLS_FILE_CREATE_g)
+#define H5P_FILE_ACCESS 		(H5OPEN H5P_CLS_FILE_ACCESS_g)
+#define H5P_DATASET_CREATE     		(H5OPEN H5P_CLS_DATASET_CREATE_g)
+#define H5P_DATASET_ACCESS     		(H5OPEN H5P_CLS_DATASET_ACCESS_g)
+#define H5P_DATASET_XFER       		(H5OPEN H5P_CLS_DATASET_XFER_g)
+#define H5P_FILE_MOUNT       		(H5OPEN H5P_CLS_FILE_MOUNT_g)
+#define H5P_GROUP_CREATE 		(H5OPEN H5P_CLS_GROUP_CREATE_g)
+#define H5P_GROUP_ACCESS 		(H5OPEN H5P_CLS_GROUP_ACCESS_g)
+#define H5P_DATATYPE_CREATE 		(H5OPEN H5P_CLS_DATATYPE_CREATE_g)
+#define H5P_DATATYPE_ACCESS 		(H5OPEN H5P_CLS_DATATYPE_ACCESS_g)
+#define H5P_STRING_CREATE 		(H5OPEN H5P_CLS_STRING_CREATE_g)
+#define H5P_ATTRIBUTE_CREATE 		(H5OPEN H5P_CLS_ATTRIBUTE_CREATE_g)
+#define H5P_OBJECT_COPY	 		(H5OPEN H5P_CLS_OBJECT_COPY_g)
+#define H5P_LINK_CREATE 		(H5OPEN H5P_CLS_LINK_CREATE_g)
+#define H5P_LINK_ACCESS 		(H5OPEN H5P_CLS_LINK_ACCESS_g)
+
+/*
+ * The library's default property lists
+ */
+#define H5P_FILE_CREATE_DEFAULT		(H5OPEN H5P_LST_FILE_CREATE_g)
+#define H5P_FILE_ACCESS_DEFAULT 	(H5OPEN H5P_LST_FILE_ACCESS_g)
+#define H5P_DATASET_CREATE_DEFAULT  	(H5OPEN H5P_LST_DATASET_CREATE_g)
+#define H5P_DATASET_ACCESS_DEFAULT  	(H5OPEN H5P_LST_DATASET_ACCESS_g)
+#define H5P_DATASET_XFER_DEFAULT   	(H5OPEN H5P_LST_DATASET_XFER_g)
+#define H5P_FILE_MOUNT_DEFAULT       	(H5OPEN H5P_LST_FILE_MOUNT_g)
+#define H5P_GROUP_CREATE_DEFAULT	(H5OPEN H5P_LST_GROUP_CREATE_g)
+#define H5P_GROUP_ACCESS_DEFAULT 	(H5OPEN H5P_LST_GROUP_ACCESS_g)
+#define H5P_DATATYPE_CREATE_DEFAULT	(H5OPEN H5P_LST_DATATYPE_CREATE_g)
+#define H5P_DATATYPE_ACCESS_DEFAULT 	(H5OPEN H5P_LST_DATATYPE_ACCESS_g)
+#define H5P_ATTRIBUTE_CREATE_DEFAULT	(H5OPEN H5P_LST_ATTRIBUTE_CREATE_g)
+#define H5P_OBJECT_COPY_DEFAULT		(H5OPEN H5P_LST_OBJECT_COPY_g)
+#define H5P_LINK_CREATE_DEFAULT		(H5OPEN H5P_LST_LINK_CREATE_g)
+#define H5P_LINK_ACCESS_DEFAULT		(H5OPEN H5P_LST_LINK_ACCESS_g)
+
+/* Common creation order flags (for links in groups and attributes on objects) */
+#define H5P_CRT_ORDER_TRACKED           0x0001
+#define H5P_CRT_ORDER_INDEXED           0x0002
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+
+/* Define property list class callback function pointer types */
+typedef herr_t (*H5P_cls_create_func_t)(hid_t prop_id, void *create_data);
+typedef herr_t (*H5P_cls_copy_func_t)(hid_t new_prop_id, hid_t old_prop_id,
+                                      void *copy_data);
+typedef herr_t (*H5P_cls_close_func_t)(hid_t prop_id, void *close_data);
+
+/* Define property list callback function pointer types */
+typedef herr_t (*H5P_prp_cb1_t)(const char *name, size_t size, void *value);
+typedef herr_t (*H5P_prp_cb2_t)(hid_t prop_id, const char *name, size_t size, void *value);
+typedef H5P_prp_cb1_t H5P_prp_create_func_t;
+typedef H5P_prp_cb2_t H5P_prp_set_func_t;
+typedef H5P_prp_cb2_t H5P_prp_get_func_t;
+typedef H5P_prp_cb2_t H5P_prp_delete_func_t;
+typedef H5P_prp_cb1_t H5P_prp_copy_func_t;
+typedef int (*H5P_prp_compare_func_t)(const void *value1, const void *value2, size_t size);
+typedef H5P_prp_cb1_t H5P_prp_close_func_t;
+
+/* Define property list iteration function type */
+typedef herr_t (*H5P_iterate_t)(hid_t id, const char *name, void *iter_data);
+
+/* Actual IO mode property */
+typedef enum H5D_mpio_actual_chunk_opt_mode_t {
+    /* The default value, H5D_MPIO_NO_CHUNK_OPTIMIZATION, is used for all I/O
+     * operations that do not use chunk optimizations, including non-collective
+     * I/O and contiguous collective I/O.
+     */
+    H5D_MPIO_NO_CHUNK_OPTIMIZATION = 0,
+    H5D_MPIO_LINK_CHUNK,
+    H5D_MPIO_MULTI_CHUNK
+}  H5D_mpio_actual_chunk_opt_mode_t;
+
+typedef enum H5D_mpio_actual_io_mode_t {
+    /* The following four values are conveniently defined as a bit field so that
+     * we can switch from the default to indpendent or collective and then to
+     * mixed without having to check the original value. 
+     * 
+     * NO_COLLECTIVE means that either collective I/O wasn't requested or that 
+     * no I/O took place.
+     *
+     * CHUNK_INDEPENDENT means that collective I/O was requested, but the
+     * chunk optimization scheme chose independent I/O for each chunk.
+     */
+    H5D_MPIO_NO_COLLECTIVE = 0x0,
+    H5D_MPIO_CHUNK_INDEPENDENT = 0x1,
+    H5D_MPIO_CHUNK_COLLECTIVE = 0x2,
+    H5D_MPIO_CHUNK_MIXED = 0x1 | 0x2,
+
+    /* The contiguous case is separate from the bit field. */
+    H5D_MPIO_CONTIGUOUS_COLLECTIVE = 0x4
+} H5D_mpio_actual_io_mode_t; 
+
+/* Broken collective IO property */
+typedef enum H5D_mpio_no_collective_cause_t {
+    H5D_MPIO_COLLECTIVE = 0x00,
+    H5D_MPIO_SET_INDEPENDENT = 0x01,
+    H5D_MPIO_DATATYPE_CONVERSION = 0x02,
+    H5D_MPIO_DATA_TRANSFORMS = 0x04,
+    H5D_MPIO_MPI_OPT_TYPES_ENV_VAR_DISABLED = 0x08,
+    H5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES = 0x10,
+    H5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET = 0x20,
+    H5D_MPIO_FILTERS = 0x40
+} H5D_mpio_no_collective_cause_t;
+
+/********************/
+/* Public Variables */
+/********************/
+
+/* Property list class IDs */
+/* (Internal to library, do not use!  Use macros above) */
+H5_DLLVAR hid_t H5P_CLS_ROOT_g;
+H5_DLLVAR hid_t H5P_CLS_OBJECT_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_ACCESS_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_ACCESS_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_XFER_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_MOUNT_g;
+H5_DLLVAR hid_t H5P_CLS_GROUP_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_GROUP_ACCESS_g;
+H5_DLLVAR hid_t H5P_CLS_DATATYPE_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_DATATYPE_ACCESS_g;
+H5_DLLVAR hid_t H5P_CLS_STRING_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_ATTRIBUTE_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_OBJECT_COPY_g;
+H5_DLLVAR hid_t H5P_CLS_LINK_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_LINK_ACCESS_g;
+
+/* Default roperty list IDs */
+/* (Internal to library, do not use!  Use macros above) */
+H5_DLLVAR hid_t H5P_LST_FILE_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_FILE_ACCESS_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_ACCESS_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_XFER_g;
+H5_DLLVAR hid_t H5P_LST_FILE_MOUNT_g;
+H5_DLLVAR hid_t H5P_LST_GROUP_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_GROUP_ACCESS_g;
+H5_DLLVAR hid_t H5P_LST_DATATYPE_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_DATATYPE_ACCESS_g;
+H5_DLLVAR hid_t H5P_LST_ATTRIBUTE_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_OBJECT_COPY_g;
+H5_DLLVAR hid_t H5P_LST_LINK_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_LINK_ACCESS_g;
+
+/*********************/
+/* Public Prototypes */
+/*********************/
+
+/* Generic property list routines */
+H5_DLL hid_t H5Pcreate_class(hid_t parent, const char *name,
+    H5P_cls_create_func_t cls_create, void *create_data,
+    H5P_cls_copy_func_t cls_copy, void *copy_data,
+    H5P_cls_close_func_t cls_close, void *close_data);
+H5_DLL char *H5Pget_class_name(hid_t pclass_id);
+H5_DLL hid_t H5Pcreate(hid_t cls_id);
+H5_DLL herr_t H5Pregister2(hid_t cls_id, const char *name, size_t size,
+    void *def_value, H5P_prp_create_func_t prp_create,
+    H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_del, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5Pinsert2(hid_t plist_id, const char *name, size_t size,
+    void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5Pset(hid_t plist_id, const char *name, void *value);
+H5_DLL htri_t H5Pexist(hid_t plist_id, const char *name);
+H5_DLL herr_t H5Pget_size(hid_t id, const char *name, size_t *size);
+H5_DLL herr_t H5Pget_nprops(hid_t id, size_t *nprops);
+H5_DLL hid_t H5Pget_class(hid_t plist_id);
+H5_DLL hid_t H5Pget_class_parent(hid_t pclass_id);
+H5_DLL herr_t H5Pget(hid_t plist_id, const char *name, void * value);
+H5_DLL htri_t H5Pequal(hid_t id1, hid_t id2);
+H5_DLL htri_t H5Pisa_class(hid_t plist_id, hid_t pclass_id);
+H5_DLL int H5Piterate(hid_t id, int *idx, H5P_iterate_t iter_func,
+            void *iter_data);
+H5_DLL herr_t H5Pcopy_prop(hid_t dst_id, hid_t src_id, const char *name);
+H5_DLL herr_t H5Premove(hid_t plist_id, const char *name);
+H5_DLL herr_t H5Punregister(hid_t pclass_id, const char *name);
+H5_DLL herr_t H5Pclose_class(hid_t plist_id);
+H5_DLL herr_t H5Pclose(hid_t plist_id);
+H5_DLL hid_t H5Pcopy(hid_t plist_id);
+
+/* Object creation property list (OCPL) routines */
+H5_DLL herr_t H5Pset_attr_phase_change(hid_t plist_id, unsigned max_compact, unsigned min_dense);
+H5_DLL herr_t H5Pget_attr_phase_change(hid_t plist_id, unsigned *max_compact, unsigned *min_dense);
+H5_DLL herr_t H5Pset_attr_creation_order(hid_t plist_id, unsigned crt_order_flags);
+H5_DLL herr_t H5Pget_attr_creation_order(hid_t plist_id, unsigned *crt_order_flags);
+H5_DLL herr_t H5Pset_obj_track_times(hid_t plist_id, hbool_t track_times);
+H5_DLL herr_t H5Pget_obj_track_times(hid_t plist_id, hbool_t *track_times);
+H5_DLL herr_t H5Pmodify_filter(hid_t plist_id, H5Z_filter_t filter,
+        unsigned int flags, size_t cd_nelmts,
+        const unsigned int cd_values[/*cd_nelmts*/]);
+H5_DLL herr_t H5Pset_filter(hid_t plist_id, H5Z_filter_t filter,
+        unsigned int flags, size_t cd_nelmts,
+        const unsigned int c_values[]);
+H5_DLL int H5Pget_nfilters(hid_t plist_id);
+H5_DLL H5Z_filter_t H5Pget_filter2(hid_t plist_id, unsigned filter,
+       unsigned int *flags/*out*/,
+       size_t *cd_nelmts/*out*/,
+       unsigned cd_values[]/*out*/,
+       size_t namelen, char name[],
+       unsigned *filter_config /*out*/);
+H5_DLL herr_t H5Pget_filter_by_id2(hid_t plist_id, H5Z_filter_t id,
+       unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
+       unsigned cd_values[]/*out*/, size_t namelen, char name[]/*out*/,
+       unsigned *filter_config/*out*/);
+H5_DLL htri_t H5Pall_filters_avail(hid_t plist_id);
+H5_DLL herr_t H5Premove_filter(hid_t plist_id, H5Z_filter_t filter);
+H5_DLL herr_t H5Pset_deflate(hid_t plist_id, unsigned aggression);
+H5_DLL herr_t H5Pset_fletcher32(hid_t plist_id);
+
+/* File creation property list (FCPL) routines */
+H5_DLL herr_t H5Pget_version(hid_t plist_id, unsigned *boot/*out*/,
+         unsigned *freelist/*out*/, unsigned *stab/*out*/,
+         unsigned *shhdr/*out*/);
+H5_DLL herr_t H5Pset_userblock(hid_t plist_id, hsize_t size);
+H5_DLL herr_t H5Pget_userblock(hid_t plist_id, hsize_t *size);
+H5_DLL herr_t H5Pset_sizes(hid_t plist_id, size_t sizeof_addr,
+       size_t sizeof_size);
+H5_DLL herr_t H5Pget_sizes(hid_t plist_id, size_t *sizeof_addr/*out*/,
+       size_t *sizeof_size/*out*/);
+H5_DLL herr_t H5Pset_sym_k(hid_t plist_id, unsigned ik, unsigned lk);
+H5_DLL herr_t H5Pget_sym_k(hid_t plist_id, unsigned *ik/*out*/, unsigned *lk/*out*/);
+H5_DLL herr_t H5Pset_istore_k(hid_t plist_id, unsigned ik);
+H5_DLL herr_t H5Pget_istore_k(hid_t plist_id, unsigned *ik/*out*/);
+H5_DLL herr_t H5Pset_shared_mesg_nindexes(hid_t plist_id, unsigned nindexes);
+H5_DLL herr_t H5Pget_shared_mesg_nindexes(hid_t plist_id, unsigned *nindexes);
+H5_DLL herr_t H5Pset_shared_mesg_index(hid_t plist_id, unsigned index_num, unsigned mesg_type_flags, unsigned min_mesg_size);
+H5_DLL herr_t H5Pget_shared_mesg_index(hid_t plist_id, unsigned index_num, unsigned *mesg_type_flags, unsigned *min_mesg_size);
+H5_DLL herr_t H5Pset_shared_mesg_phase_change(hid_t plist_id, unsigned max_list, unsigned min_btree);
+H5_DLL herr_t H5Pget_shared_mesg_phase_change(hid_t plist_id, unsigned *max_list, unsigned *min_btree);
+
+/* File access property list (FAPL) routines */
+H5_DLL herr_t H5Pset_alignment(hid_t fapl_id, hsize_t threshold,
+    hsize_t alignment);
+H5_DLL herr_t H5Pget_alignment(hid_t fapl_id, hsize_t *threshold/*out*/,
+    hsize_t *alignment/*out*/);
+H5_DLL herr_t H5Pset_driver(hid_t plist_id, hid_t driver_id,
+        const void *driver_info);
+H5_DLL hid_t H5Pget_driver(hid_t plist_id);
+H5_DLL void *H5Pget_driver_info(hid_t plist_id);
+H5_DLL herr_t H5Pset_family_offset(hid_t fapl_id, hsize_t offset);
+H5_DLL herr_t H5Pget_family_offset(hid_t fapl_id, hsize_t *offset);
+H5_DLL herr_t H5Pset_multi_type(hid_t fapl_id, H5FD_mem_t type);
+H5_DLL herr_t H5Pget_multi_type(hid_t fapl_id, H5FD_mem_t *type);
+H5_DLL herr_t H5Pset_cache(hid_t plist_id, int mdc_nelmts,
+       size_t rdcc_nslots, size_t rdcc_nbytes,
+       double rdcc_w0);
+H5_DLL herr_t H5Pget_cache(hid_t plist_id,
+       int *mdc_nelmts, /* out */
+       size_t *rdcc_nslots/*out*/,
+       size_t *rdcc_nbytes/*out*/, double *rdcc_w0);
+H5_DLL herr_t H5Pset_mdc_config(hid_t    plist_id,
+       H5AC_cache_config_t * config_ptr);
+H5_DLL herr_t H5Pget_mdc_config(hid_t     plist_id,
+       H5AC_cache_config_t * config_ptr);	/* out */
+H5_DLL herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref);
+H5_DLL herr_t H5Pget_gc_references(hid_t fapl_id, unsigned *gc_ref/*out*/);
+H5_DLL herr_t H5Pset_fclose_degree(hid_t fapl_id, H5F_close_degree_t degree);
+H5_DLL herr_t H5Pget_fclose_degree(hid_t fapl_id, H5F_close_degree_t *degree);
+H5_DLL herr_t H5Pset_meta_block_size(hid_t fapl_id, hsize_t size);
+H5_DLL herr_t H5Pget_meta_block_size(hid_t fapl_id, hsize_t *size/*out*/);
+H5_DLL herr_t H5Pset_sieve_buf_size(hid_t fapl_id, size_t size);
+H5_DLL herr_t H5Pget_sieve_buf_size(hid_t fapl_id, size_t *size/*out*/);
+H5_DLL herr_t H5Pset_small_data_block_size(hid_t fapl_id, hsize_t size);
+H5_DLL herr_t H5Pget_small_data_block_size(hid_t fapl_id, hsize_t *size/*out*/);
+H5_DLL herr_t H5Pset_libver_bounds(hid_t plist_id, H5F_libver_t low,
+    H5F_libver_t high);
+H5_DLL herr_t H5Pget_libver_bounds(hid_t plist_id, H5F_libver_t *low,
+    H5F_libver_t *high);
+H5_DLL herr_t H5Pset_elink_file_cache_size(hid_t plist_id, unsigned efc_size);
+H5_DLL herr_t H5Pget_elink_file_cache_size(hid_t plist_id, unsigned *efc_size);
+H5_DLL herr_t H5Pset_file_image(hid_t fapl_id, void *buf_ptr, size_t buf_len);
+H5_DLL herr_t H5Pget_file_image(hid_t fapl_id, void **buf_ptr_ptr, size_t *buf_len_ptr);
+H5_DLL herr_t H5Pset_file_image_callbacks(hid_t fapl_id,
+       H5FD_file_image_callbacks_t *callbacks_ptr);
+H5_DLL herr_t H5Pget_file_image_callbacks(hid_t fapl_id,
+       H5FD_file_image_callbacks_t *callbacks_ptr);
+
+H5_DLL herr_t H5Pset_core_write_tracking(hid_t fapl_id, hbool_t is_enabled, size_t page_size);
+H5_DLL herr_t H5Pget_core_write_tracking(hid_t fapl_id, hbool_t *is_enabled, size_t *page_size);
+
+/* Dataset creation property list (DCPL) routines */
+H5_DLL herr_t H5Pset_layout(hid_t plist_id, H5D_layout_t layout);
+H5_DLL H5D_layout_t H5Pget_layout(hid_t plist_id);
+H5_DLL herr_t H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t dim[/*ndims*/]);
+H5_DLL int H5Pget_chunk(hid_t plist_id, int max_ndims, hsize_t dim[]/*out*/);
+H5_DLL herr_t H5Pset_external(hid_t plist_id, const char *name, off_t offset,
+          hsize_t size);
+H5_DLL int H5Pget_external_count(hid_t plist_id);
+H5_DLL herr_t H5Pget_external(hid_t plist_id, unsigned idx, size_t name_size,
+          char *name/*out*/, off_t *offset/*out*/,
+          hsize_t *size/*out*/);
+H5_DLL herr_t H5Pset_szip(hid_t plist_id, unsigned options_mask, unsigned pixels_per_block);
+H5_DLL herr_t H5Pset_shuffle(hid_t plist_id);
+H5_DLL herr_t H5Pset_nbit(hid_t plist_id);
+H5_DLL herr_t H5Pset_scaleoffset(hid_t plist_id, H5Z_SO_scale_type_t scale_type, int scale_factor);
+H5_DLL herr_t H5Pset_fill_value(hid_t plist_id, hid_t type_id,
+     const void *value);
+H5_DLL herr_t H5Pget_fill_value(hid_t plist_id, hid_t type_id,
+     void *value/*out*/);
+H5_DLL herr_t H5Pfill_value_defined(hid_t plist, H5D_fill_value_t *status);
+H5_DLL herr_t H5Pset_alloc_time(hid_t plist_id, H5D_alloc_time_t
+	alloc_time);
+H5_DLL herr_t H5Pget_alloc_time(hid_t plist_id, H5D_alloc_time_t
+	*alloc_time/*out*/);
+H5_DLL herr_t H5Pset_fill_time(hid_t plist_id, H5D_fill_time_t fill_time);
+H5_DLL herr_t H5Pget_fill_time(hid_t plist_id, H5D_fill_time_t
+	*fill_time/*out*/);
+
+/* Dataset access property list (DAPL) routines */
+H5_DLL herr_t H5Pset_chunk_cache(hid_t dapl_id, size_t rdcc_nslots,
+       size_t rdcc_nbytes, double rdcc_w0);
+H5_DLL herr_t H5Pget_chunk_cache(hid_t dapl_id,
+       size_t *rdcc_nslots/*out*/,
+       size_t *rdcc_nbytes/*out*/,
+       double *rdcc_w0/*out*/);
+
+/* Dataset xfer property list (DXPL) routines */
+H5_DLL herr_t H5Pset_data_transform(hid_t plist_id, const char* expression);
+H5_DLL ssize_t H5Pget_data_transform(hid_t plist_id, char* expression /*out*/, size_t size);
+H5_DLL herr_t H5Pset_buffer(hid_t plist_id, size_t size, void *tconv,
+        void *bkg);
+H5_DLL size_t H5Pget_buffer(hid_t plist_id, void **tconv/*out*/,
+        void **bkg/*out*/);
+H5_DLL herr_t H5Pset_preserve(hid_t plist_id, hbool_t status);
+H5_DLL int H5Pget_preserve(hid_t plist_id);
+H5_DLL herr_t H5Pset_edc_check(hid_t plist_id, H5Z_EDC_t check);
+H5_DLL H5Z_EDC_t H5Pget_edc_check(hid_t plist_id);
+H5_DLL herr_t H5Pset_filter_callback(hid_t plist_id, H5Z_filter_func_t func,
+                                     void* op_data);
+H5_DLL herr_t H5Pset_btree_ratios(hid_t plist_id, double left, double middle,
+       double right);
+H5_DLL herr_t H5Pget_btree_ratios(hid_t plist_id, double *left/*out*/,
+       double *middle/*out*/,
+       double *right/*out*/);
+H5_DLL herr_t H5Pset_vlen_mem_manager(hid_t plist_id,
+                                       H5MM_allocate_t alloc_func,
+                                       void *alloc_info, H5MM_free_t free_func,
+                                       void *free_info);
+H5_DLL herr_t H5Pget_vlen_mem_manager(hid_t plist_id,
+                                       H5MM_allocate_t *alloc_func,
+                                       void **alloc_info,
+                                       H5MM_free_t *free_func,
+                                       void **free_info);
+H5_DLL herr_t H5Pset_hyper_vector_size(hid_t fapl_id, size_t size);
+H5_DLL herr_t H5Pget_hyper_vector_size(hid_t fapl_id, size_t *size/*out*/);
+H5_DLL herr_t H5Pset_type_conv_cb(hid_t dxpl_id, H5T_conv_except_func_t op, void* operate_data);
+H5_DLL herr_t H5Pget_type_conv_cb(hid_t dxpl_id, H5T_conv_except_func_t *op, void** operate_data);
+#ifdef H5_HAVE_PARALLEL
+H5_DLL herr_t H5Pget_mpio_actual_chunk_opt_mode(hid_t plist_id, H5D_mpio_actual_chunk_opt_mode_t *actual_chunk_opt_mode);
+H5_DLL herr_t H5Pget_mpio_actual_io_mode(hid_t plist_id, H5D_mpio_actual_io_mode_t *actual_io_mode);
+H5_DLL herr_t H5Pget_mpio_no_collective_cause(hid_t plist_id, uint32_t *local_no_collective_cause, uint32_t *global_no_collective_cause);
+#endif /* H5_HAVE_PARALLEL */
+
+/* Link creation property list (LCPL) routines */
+H5_DLL herr_t H5Pset_create_intermediate_group(hid_t plist_id, unsigned crt_intmd);
+H5_DLL herr_t H5Pget_create_intermediate_group(hid_t plist_id, unsigned *crt_intmd /*out*/);
+
+/* Group creation property list (GCPL) routines */
+H5_DLL herr_t H5Pset_local_heap_size_hint(hid_t plist_id, size_t size_hint);
+H5_DLL herr_t H5Pget_local_heap_size_hint(hid_t plist_id, size_t *size_hint /*out*/);
+H5_DLL herr_t H5Pset_link_phase_change(hid_t plist_id, unsigned max_compact, unsigned min_dense);
+H5_DLL herr_t H5Pget_link_phase_change(hid_t plist_id, unsigned *max_compact /*out*/, unsigned *min_dense /*out*/);
+H5_DLL herr_t H5Pset_est_link_info(hid_t plist_id, unsigned est_num_entries, unsigned est_name_len);
+H5_DLL herr_t H5Pget_est_link_info(hid_t plist_id, unsigned *est_num_entries /* out */, unsigned *est_name_len /* out */);
+H5_DLL herr_t H5Pset_link_creation_order(hid_t plist_id, unsigned crt_order_flags);
+H5_DLL herr_t H5Pget_link_creation_order(hid_t plist_id, unsigned *crt_order_flags /* out */);
+
+/* String creation property list (STRCPL) routines */
+H5_DLL herr_t H5Pset_char_encoding(hid_t plist_id, H5T_cset_t encoding);
+H5_DLL herr_t H5Pget_char_encoding(hid_t plist_id, H5T_cset_t *encoding /*out*/);
+
+/* Link access property list (LAPL) routines */
+H5_DLL herr_t H5Pset_nlinks(hid_t plist_id, size_t nlinks);
+H5_DLL herr_t H5Pget_nlinks(hid_t plist_id, size_t *nlinks);
+H5_DLL herr_t H5Pset_elink_prefix(hid_t plist_id, const char *prefix);
+H5_DLL ssize_t H5Pget_elink_prefix(hid_t plist_id, char *prefix, size_t size);
+H5_DLL hid_t H5Pget_elink_fapl(hid_t lapl_id);
+H5_DLL herr_t H5Pset_elink_fapl(hid_t lapl_id, hid_t fapl_id);
+H5_DLL herr_t H5Pset_elink_acc_flags(hid_t lapl_id, unsigned flags);
+H5_DLL herr_t H5Pget_elink_acc_flags(hid_t lapl_id, unsigned *flags);
+H5_DLL herr_t H5Pset_elink_cb(hid_t lapl_id, H5L_elink_traverse_t func, void *op_data);
+H5_DLL herr_t H5Pget_elink_cb(hid_t lapl_id, H5L_elink_traverse_t *func, void **op_data);
+
+/* Object copy property list (OCPYPL) routines */
+H5_DLL herr_t H5Pset_copy_object(hid_t plist_id, unsigned crt_intmd);
+H5_DLL herr_t H5Pget_copy_object(hid_t plist_id, unsigned *crt_intmd /*out*/);
+H5_DLL herr_t H5Padd_merge_committed_dtype_path(hid_t plist_id, const char *path);
+H5_DLL herr_t H5Pfree_merge_committed_dtype_paths(hid_t plist_id);
+H5_DLL herr_t H5Pset_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t func, void *op_data);
+H5_DLL herr_t H5Pget_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t *func, void **op_data);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+/* We renamed the "root" of the property list class hierarchy */
+#define H5P_NO_CLASS            H5P_ROOT
+
+
+/* Typedefs */
+
+
+/* Function prototypes */
+H5_DLL herr_t H5Pregister1(hid_t cls_id, const char *name, size_t size,
+    void *def_value, H5P_prp_create_func_t prp_create,
+    H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_del, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5Pinsert1(hid_t plist_id, const char *name, size_t size,
+    void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_close_func_t prp_close);
+H5_DLL H5Z_filter_t H5Pget_filter1(hid_t plist_id, unsigned filter,
+    unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
+    unsigned cd_values[]/*out*/, size_t namelen, char name[]);
+H5_DLL herr_t H5Pget_filter_by_id1(hid_t plist_id, H5Z_filter_t id,
+    unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
+    unsigned cd_values[]/*out*/, size_t namelen, char name[]/*out*/);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Ppublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5PredType.h b/Resources/windows-libs/HDF5/include/H5PredType.h
new file mode 100644
index 0000000000000000000000000000000000000000..c929a7043b5e772242e2aedad62e190376377309
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5PredType.h
@@ -0,0 +1,266 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5PredType_H
+#define __H5PredType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+/* This constant is defined for a workaround to eliminate memory leaks due to
+   the library being re-initiated when PredType destructors are invoked.  A
+   PredType instant with H5CPP_EXITED as the value of its "id" is constructed
+   before the other PredType objects are created.  At exit, when this special
+   PredType object is to be destructed, no HDF5 library function will be called
+   and the library will be terminated.  -BMR, Mar 30, 2012 */
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define H5CPP_EXITED	-3  // -3 is less likely to be used elsewhere
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+/*! \class PredType
+    \brief Class PredType holds the definition of all the HDF5 predefined
+    datatypes.
+
+    These types can only be made copy of, not created by H5Tcreate or
+    closed by H5Tclose.  They are treated as constants.
+*/
+class H5_DLLCPP PredType : public AtomType {
+   public:
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("PredType"); }
+
+	// Makes a copy of the predefined type and stores the new
+	// id in the left hand side object.
+	PredType& operator=( const PredType& rhs );
+
+	// Copy constructor - makes copy of the original object
+	PredType( const PredType& original );
+
+	// Noop destructor
+	virtual ~PredType();
+
+	// Declaration of predefined types; their definition is in H5PredType.cpp
+	static const PredType STD_I8BE;
+	static const PredType STD_I8LE;
+	static const PredType STD_I16BE;
+	static const PredType STD_I16LE;
+	static const PredType STD_I32BE;
+	static const PredType STD_I32LE;
+	static const PredType STD_I64BE;
+	static const PredType STD_I64LE;
+	static const PredType STD_U8BE;
+	static const PredType STD_U8LE;
+	static const PredType STD_U16BE;
+	static const PredType STD_U16LE;
+	static const PredType STD_U32BE;
+	static const PredType STD_U32LE;
+	static const PredType STD_U64BE;
+	static const PredType STD_U64LE;
+	static const PredType STD_B8BE;
+	static const PredType STD_B8LE;
+	static const PredType STD_B16BE;
+	static const PredType STD_B16LE;
+	static const PredType STD_B32BE;
+	static const PredType STD_B32LE;
+	static const PredType STD_B64BE;
+	static const PredType STD_B64LE;
+	static const PredType STD_REF_OBJ;
+	static const PredType STD_REF_DSETREG;
+
+	static const PredType C_S1;
+	static const PredType FORTRAN_S1;
+
+	static const PredType IEEE_F32BE;
+	static const PredType IEEE_F32LE;
+	static const PredType IEEE_F64BE;
+	static const PredType IEEE_F64LE;
+
+	static const PredType UNIX_D32BE;
+	static const PredType UNIX_D32LE;
+	static const PredType UNIX_D64BE;
+	static const PredType UNIX_D64LE;
+
+	static const PredType INTEL_I8;
+	static const PredType INTEL_I16;
+	static const PredType INTEL_I32;
+	static const PredType INTEL_I64;
+	static const PredType INTEL_U8;
+	static const PredType INTEL_U16;
+	static const PredType INTEL_U32;
+	static const PredType INTEL_U64;
+	static const PredType INTEL_B8;
+	static const PredType INTEL_B16;
+	static const PredType INTEL_B32;
+	static const PredType INTEL_B64;
+	static const PredType INTEL_F32;
+	static const PredType INTEL_F64;
+
+	static const PredType ALPHA_I8;
+	static const PredType ALPHA_I16;
+	static const PredType ALPHA_I32;
+	static const PredType ALPHA_I64;
+	static const PredType ALPHA_U8;
+	static const PredType ALPHA_U16;
+	static const PredType ALPHA_U32;
+	static const PredType ALPHA_U64;
+	static const PredType ALPHA_B8;
+	static const PredType ALPHA_B16;
+	static const PredType ALPHA_B32;
+	static const PredType ALPHA_B64;
+	static const PredType ALPHA_F32;
+	static const PredType ALPHA_F64;
+
+	static const PredType MIPS_I8;
+	static const PredType MIPS_I16;
+	static const PredType MIPS_I32;
+	static const PredType MIPS_I64;
+	static const PredType MIPS_U8;
+	static const PredType MIPS_U16;
+	static const PredType MIPS_U32;
+	static const PredType MIPS_U64;
+	static const PredType MIPS_B8;
+	static const PredType MIPS_B16;
+	static const PredType MIPS_B32;
+	static const PredType MIPS_B64;
+	static const PredType MIPS_F32;
+	static const PredType MIPS_F64;
+
+	static const PredType NATIVE_CHAR;
+	static const PredType NATIVE_SCHAR;
+	static const PredType NATIVE_UCHAR;
+	static const PredType NATIVE_SHORT;
+	static const PredType NATIVE_USHORT;
+	static const PredType NATIVE_INT;
+	static const PredType NATIVE_UINT;
+	static const PredType NATIVE_LONG;
+	static const PredType NATIVE_ULONG;
+	static const PredType NATIVE_LLONG;
+	static const PredType NATIVE_ULLONG;
+	static const PredType NATIVE_FLOAT;
+	static const PredType NATIVE_DOUBLE;
+	static const PredType NATIVE_LDOUBLE;
+	static const PredType NATIVE_B8;
+	static const PredType NATIVE_B16;
+	static const PredType NATIVE_B32;
+	static const PredType NATIVE_B64;
+	static const PredType NATIVE_OPAQUE;
+	static const PredType NATIVE_HSIZE;
+	static const PredType NATIVE_HSSIZE;
+	static const PredType NATIVE_HERR;
+	static const PredType NATIVE_HBOOL;
+
+	static const PredType NATIVE_INT8;
+	static const PredType NATIVE_UINT8;
+	static const PredType NATIVE_INT16;
+	static const PredType NATIVE_UINT16;
+	static const PredType NATIVE_INT32;
+	static const PredType NATIVE_UINT32;
+	static const PredType NATIVE_INT64;
+	static const PredType NATIVE_UINT64;
+
+// LEAST types
+#if H5_SIZEOF_INT_LEAST8_T != 0
+	static const PredType NATIVE_INT_LEAST8;
+#endif /* H5_SIZEOF_INT_LEAST8_T */
+#if H5_SIZEOF_UINT_LEAST8_T != 0
+	static const PredType NATIVE_UINT_LEAST8;
+#endif /* H5_SIZEOF_UINT_LEAST8_T */
+
+#if H5_SIZEOF_INT_LEAST16_T != 0
+	static const PredType NATIVE_INT_LEAST16;
+#endif /* H5_SIZEOF_INT_LEAST16_T */
+#if H5_SIZEOF_UINT_LEAST16_T != 0
+	static const PredType NATIVE_UINT_LEAST16;
+#endif /* H5_SIZEOF_UINT_LEAST16_T */
+
+#if H5_SIZEOF_INT_LEAST32_T != 0
+	static const PredType NATIVE_INT_LEAST32;
+#endif /* H5_SIZEOF_INT_LEAST32_T */
+#if H5_SIZEOF_UINT_LEAST32_T != 0
+	static const PredType NATIVE_UINT_LEAST32;
+#endif /* H5_SIZEOF_UINT_LEAST32_T */
+
+#if H5_SIZEOF_INT_LEAST64_T != 0
+	static const PredType NATIVE_INT_LEAST64;
+#endif /* H5_SIZEOF_INT_LEAST64_T */
+#if H5_SIZEOF_UINT_LEAST64_T != 0
+	static const PredType NATIVE_UINT_LEAST64;
+#endif /* H5_SIZEOF_UINT_LEAST64_T */
+
+// FAST types
+#if H5_SIZEOF_INT_FAST8_T != 0
+	static const PredType NATIVE_INT_FAST8;
+#endif /* H5_SIZEOF_INT_FAST8_T */
+#if H5_SIZEOF_UINT_FAST8_T != 0
+	static const PredType NATIVE_UINT_FAST8;
+#endif /* H5_SIZEOF_UINT_FAST8_T */
+
+#if H5_SIZEOF_INT_FAST16_T != 0
+	static const PredType NATIVE_INT_FAST16;
+#endif /* H5_SIZEOF_INT_FAST16_T */
+#if H5_SIZEOF_UINT_FAST16_T != 0
+	static const PredType NATIVE_UINT_FAST16;
+#endif /* H5_SIZEOF_UINT_FAST16_T */
+
+#if H5_SIZEOF_INT_FAST32_T != 0
+	static const PredType NATIVE_INT_FAST32;
+#endif /* H5_SIZEOF_INT_FAST32_T */
+#if H5_SIZEOF_UINT_FAST32_T != 0
+	static const PredType NATIVE_UINT_FAST32;
+#endif /* H5_SIZEOF_UINT_FAST32_T */
+
+#if H5_SIZEOF_INT_FAST64_T != 0
+	static const PredType NATIVE_INT_FAST64;
+#endif /* H5_SIZEOF_INT_FAST64_T */
+#if H5_SIZEOF_UINT_FAST64_T != 0
+	static const PredType NATIVE_UINT_FAST64;
+#endif /* H5_SIZEOF_UINT_FAST64_T */
+
+	/*! \brief This dummy function do not inherit from DataType - it will
+	    throw a DataTypeIException if invoked.
+	*/
+	void commit(H5Location& loc, const H5std_string& name );
+	/*! \brief This dummy function do not inherit from DataType - it will
+	    throw a DataTypeIException if invoked.
+	*/
+	void commit(H5Location& loc, const char* name );
+	/*! \brief This dummy function do not inherit from DataType - it will
+	    throw a DataTypeIException if invoked.
+	*/
+	bool committed();
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+   private:
+	// Added this to work around the atexit/global destructor problem.
+	// It'll help to terminate the library after other PredType instances
+	// are closed.  -BMR, Mar 30, 2012
+	static const PredType AtExit;
+
+   protected:
+	// Default constructor
+	PredType();
+
+	// Creates a pre-defined type using an HDF5 pre-defined constant
+	PredType( const hid_t predtype_id );  // used by the library only
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5PredType_H
diff --git a/Resources/windows-libs/HDF5/include/H5PropList.h b/Resources/windows-libs/HDF5/include/H5PropList.h
new file mode 100644
index 0000000000000000000000000000000000000000..f26201dc4b67ecaa8202c7e2472b03fd33091c62
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5PropList.h
@@ -0,0 +1,125 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5PropList_H
+#define __H5PropList_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//! Class PropList provides operations for generic property lists.
+class H5_DLLCPP PropList : public IdComponent {
+   public:
+	// Default property list
+        static const PropList DEFAULT;
+
+	// Creates a property list of a given type or creates a copy of an
+	// existing property list giving the property list id.
+	PropList(const hid_t plist_id);
+
+	// Make a copy of the given property list using assignment statement
+	PropList& operator=( const PropList& rhs );
+
+	// Compares this property list or class against the given list or class.
+	bool operator==(const PropList& rhs) const;
+
+	// Close this property list.
+	virtual void close();
+
+	// Close a property list class.
+	void closeClass() const;
+
+	// Makes a copy of the given property list.
+	void copy( const PropList& like_plist );
+
+	// Copies a property from this property list or class to another
+	void copyProp( PropList& dest, const char* name) const;
+	void copyProp( PropList& dest, const H5std_string& name) const;
+
+	// Copies a property from one property list or property class to another
+	void copyProp( PropList& dest, PropList& src, const char* name) const;
+	void copyProp( PropList& dest, PropList& src, const H5std_string& name) const;
+
+	// Gets the class of this property list, i.e. H5P_FILE_CREATE,
+	// H5P_FILE_ACCESS, ...
+	hid_t getClass() const;
+
+	// Return the name of a generic property list class.
+	H5std_string getClassName() const;
+
+	// Returns the parent class of a generic property class.
+	PropList getClassParent() const;
+
+	// Returns the number of properties in this property list or class.
+	size_t getNumProps() const;
+
+	// Query the value of a property in a property list.
+	void getProperty(const char* name, void* value) const;
+	void getProperty(const H5std_string& name, void* value) const;
+	H5std_string getProperty(const char* name) const;
+	H5std_string getProperty(const H5std_string& name) const;
+
+	// Set a property's value in a property list.
+	void setProperty(const char* name, void* value) const;
+	void setProperty(const char* name, const char* charptr) const;
+	void setProperty(const char* name, H5std_string& strg) const;
+	void setProperty(const H5std_string& name, void* value) const;
+	void setProperty(const H5std_string& name, H5std_string& strg) const;
+
+	// Query the size of a property in a property list or class.
+	size_t getPropSize(const char *name) const;
+	size_t getPropSize(const H5std_string& name) const;
+
+	// Determines whether a property list is a certain class.
+	bool isAClass(const PropList& prop_class) const;
+
+	/// Query the existance of a property in a property object.
+	bool propExist(const char* name) const;
+	bool propExist(const H5std_string& name) const;
+
+	// Removes a property from a property list.
+	void removeProp(const char *name) const;
+	void removeProp(const H5std_string& name) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("PropList"); }
+
+	// Default constructor: creates a stub PropList object.
+	PropList();
+
+	// Copy constructor: creates a copy of a PropList object.
+	PropList(const PropList& original);
+
+	// Gets the property list id.
+	virtual hid_t getId() const;
+
+	// Destructor: properly terminates access to this property list.
+	virtual ~PropList();
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	hid_t id;	// HDF5 property list id
+
+	// Sets the property list id.
+	virtual void p_setId(const hid_t new_id);
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+};
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif  // __H5PropList_H
diff --git a/Resources/windows-libs/HDF5/include/H5Rpkg.h b/Resources/windows-libs/HDF5/include/H5Rpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..2ff1c2c1a9883fd8d0eb4b85922ec8ef0c2b423b
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Rpkg.h
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol <koziol@hdfgroup.org>
+ *             Thursday, September 13, 2007
+ *
+ * Purpose:     This file contains declarations which are visible
+ *              only within the H5R package. Source files outside the
+ *              H5R package should include H5Rprivate.h instead.
+ */
+#ifndef H5R_PACKAGE
+#error "Do not include this file outside the H5R package!"
+#endif
+
+#ifndef _H5Rpkg_H
+#define _H5Rpkg_H
+
+/* Get package's private header */
+#include "H5Rprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5Fprivate.h"         /* File access				*/
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+/* General functions */
+H5_DLL herr_t H5R_init(void);
+H5_DLL herr_t H5R__term_deprec_interface(void);
+H5_DLL herr_t H5R_get_obj_type(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type,
+    const void *_ref, H5O_type_t *obj_type);
+
+
+#endif /* _H5Rpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Rpublic.h b/Resources/windows-libs/HDF5/include/H5Rpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..04d319bebbbe7a5d5cc644d081c95d867063a886
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Rpublic.h
@@ -0,0 +1,92 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5S module.
+ */
+#ifndef _H5Rpublic_H
+#define _H5Rpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Gpublic.h"
+#include "H5Ipublic.h"
+
+/*
+ * Reference types allowed.
+ */
+typedef enum {
+    H5R_BADTYPE     =   (-1),   /*invalid Reference Type                     */
+    H5R_OBJECT,                 /*Object reference                           */
+    H5R_DATASET_REGION,         /*Dataset Region Reference                   */
+    H5R_MAXTYPE                 /*highest type (Invalid as true type)	     */
+} H5R_type_t;
+
+/* Note! Be careful with the sizes of the references because they should really
+ * depend on the run-time values in the file.  Unfortunately, the arrays need
+ * to be defined at compile-time, so we have to go with the worst case sizes for
+ * them.  -QAK
+ */
+#define H5R_OBJ_REF_BUF_SIZE    sizeof(haddr_t)
+/* Object reference structure for user's code */
+typedef haddr_t hobj_ref_t; /* Needs to be large enough to store largest haddr_t in a worst case machine (ie. 8 bytes currently) */
+
+#define H5R_DSET_REG_REF_BUF_SIZE    (sizeof(haddr_t)+4)
+/* 4 is used instead of sizeof(int) to permit portability between
+   the Crays and other machines (the heap ID is always encoded as an int32 anyway)
+*/
+/* Dataset Region reference structure for user's code */
+typedef unsigned char hdset_reg_ref_t[H5R_DSET_REG_REF_BUF_SIZE];/* Buffer to store heap ID and index */
+/* Needs to be large enough to store largest haddr_t in a worst case machine (ie. 8 bytes currently) plus an int */
+
+/* Publicly visible data structures */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Functions in H5R.c */
+H5_DLL herr_t H5Rcreate(void *ref, hid_t loc_id, const char *name,
+			 H5R_type_t ref_type, hid_t space_id);
+H5_DLL hid_t H5Rdereference(hid_t dataset, H5R_type_t ref_type, const void *ref);
+H5_DLL hid_t H5Rget_region(hid_t dataset, H5R_type_t ref_type, const void *ref);
+H5_DLL herr_t H5Rget_obj_type2(hid_t id, H5R_type_t ref_type, const void *_ref,
+    H5O_type_t *obj_type);
+H5_DLL ssize_t H5Rget_name(hid_t loc_id, H5R_type_t ref_type, const void *ref,
+    char *name/*out*/, size_t size);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+
+/* Typedefs */
+
+
+/* Function prototypes */
+H5_DLL H5G_obj_t H5Rget_obj_type1(hid_t id, H5R_type_t ref_type, const void *_ref);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* _H5Rpublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5SMpkg.h b/Resources/windows-libs/HDF5/include/H5SMpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..68dc484bf18ec44d024aa22ccb41c89d4f877c6f
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5SMpkg.h
@@ -0,0 +1,292 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  James Laird <jlaird@ncsa.uiuc.edu>
+ *              Thursday, March 30, 2006
+ *
+ * Purpose:     This file contains declarations which are visible only within
+ *              the H5SM shared object header messages package.  Source files
+ *              outside the H5SM package should	include H5SMprivate.h instead.
+ */
+#ifndef H5SM_PACKAGE
+#error "Do not include this file outside the H5SM package!"
+#endif
+
+#ifndef _H5SMpkg_H
+#define _H5SMpkg_H
+
+/* Get package's private header */
+#include "H5SMprivate.h"	/* Shared Object Header Messages	*/
+
+/* Other private headers needed by this file */
+#include "H5ACprivate.h"        /* Metadata Cache		  	*/
+#include "H5B2private.h"        /* B-trees                              */
+#include "H5HFprivate.h"        /* Fractal heaps		  	*/
+
+
+/****************************/
+/* Package Macros           */
+/****************************/
+
+/* Size of checksum information (on disk) */
+#define H5SM_SIZEOF_CHECKSUM 4
+
+#define H5SM_HEAP_LOC_SIZE (                                                  \
+        (unsigned)4                     /* Reference count */                 \
+        + sizeof(H5O_fheap_id_t)        /* size of heap ID on disk */         \
+    )
+
+#define H5SM_OH_LOC_SIZE(f) (                                                 \
+        (unsigned)1             /* reserved (possible flags?) */              \
+        + (unsigned)1           /* message type ID */			      \
+        + (unsigned)2           /* creation index of message in OH */         \
+        + H5F_SIZEOF_ADDR(f)    /* address of OH */                           \
+    )
+
+#define H5SM_SOHM_ENTRY_SIZE(f) (                                             \
+        (unsigned)1             /* Message location */                        \
+        + (unsigned)4           /* Hash value */                              \
+        + MAX(H5SM_HEAP_LOC_SIZE, H5SM_OH_LOC_SIZE(f))  /* Entry */           \
+    )
+
+#define H5SM_INDEX_HEADER_SIZE(f) (                                           \
+        (unsigned)1             /* Whether index is a list or B-tree */       \
+        + (unsigned)1           /* Version of index format */                 \
+        + (unsigned)2           /* Type of messages stored in the index */    \
+        + (unsigned)4           /* Minimum size of messages to share */       \
+        + (unsigned)(3 * 2)     /* B-tree cutoff, list cutoff, # of shared messages */ \
+        + H5F_SIZEOF_ADDR(f)    /* Location of list or B-tree */              \
+        + H5F_SIZEOF_ADDR(f)    /* Address of heap */                         \
+    )
+
+/* Format overhead for all SOHM tree metadata in the file */
+#define H5SM_METADATA_PREFIX_SIZE (                                           \
+    H5_SIZEOF_MAGIC             /* Signature */                               \
+    + H5SM_SIZEOF_CHECKSUM      /* Checksum */                                \
+    )
+
+#define H5SM_TABLE_SIZE(f) (                                                  \
+    /* General metadata fields */                                             \
+    H5SM_METADATA_PREFIX_SIZE                                                 \
+                                                                              \
+    /* Indices */                                                             \
+    + (H5F_SOHM_NINDEXES(f) * H5SM_INDEX_HEADER_SIZE(f))                      \
+    )
+
+#define H5SM_LIST_SIZE(f, num_mesg) (                                         \
+    /* General metadata fields */                                             \
+    H5SM_METADATA_PREFIX_SIZE                                                 \
+                                                                              \
+    /* Message entries */                                                     \
+    + (H5SM_SOHM_ENTRY_SIZE(f) * num_mesg)                                    \
+    )
+
+#define H5SM_B2_NODE_SIZE 512
+#define H5SM_B2_SPLIT_PERCENT 100
+#define H5SM_B2_MERGE_PERCENT 40
+
+#define H5SM_LIST_VERSION	0	/* Verion of Shared Object Header Message List Indexes */
+
+/****************************/
+/* Package Typedefs         */
+/****************************/
+
+/* There are a number of Shared Object Header Message-specific structs here.
+ *
+ * The H5SM_master_table_t is pointed to by the file superblock.  Since a file
+ * can have more than one SOHM index, this table collects all the indexes into
+ * one place.  It holds an array of H5SM_index_header_t structs.
+ *
+ * An H5SM_index_header_t is actually the for a given index.  It holds
+ * the number of messages in the index, the types of messages in the index,
+ * etc.  It also records whether the index is a list or a b-tree, and has
+ * the address of the list or b-tree.
+ *
+ * If the index is a list, the address in the index header should be given
+ * to the cache, which can load it into a H5SM_list_t struct.  This is mostly
+ * just a header for the cache information; it contains a pointer back to
+ * the index header and an unsorted array of messages.
+ *
+ * These messages are H5SM_sohm_t structs.  They hold the actual SOHM's
+ * address, hash value, and refcount.
+ *
+ * If the index is a b-tree, the H5SM_index_header_t struct holds the address
+ * of the b-tree instead of the address of a H5SM_list_t.  The B-tree's nodes
+ * are still 'H5SM_sohm_t's.
+ *
+ * H5SM_mesg_key_t structs are used to search lists and B-trees for a certain
+ * message.  They correspond to a message that hasn't yet been written to
+ * disk.
+ */
+
+/* Where a message is stored */
+typedef enum {
+    H5SM_NO_LOC = -1,
+    H5SM_IN_HEAP = 0,    	/* Message is stored in the heap */
+    H5SM_IN_OH    		/* Message is stored in an object header */
+} H5SM_storage_loc_t;
+
+/* Typedef for a record's location if it's stored in the heap */
+typedef struct {
+    hsize_t ref_count;		/* Number of times this message is used in the file */
+    H5O_fheap_id_t fheap_id;    /* ID of the OHM in the fractal heap */
+} H5SM_heap_loc_t;
+
+/* Typedef for a SOHM index node */
+typedef struct {
+    H5SM_storage_loc_t location;        /* Type of message location */
+    uint32_t hash;		        /* Hash value for encoded OHM */
+    unsigned msg_type_id;               /* Message's type ID */
+    union {
+        H5O_mesg_loc_t mesg_loc;        /* Location of message in object header */
+        H5SM_heap_loc_t heap_loc;       /* Heap ID for message in SOHM heap */
+    } u;
+} H5SM_sohm_t;
+
+/* Types of message indices */
+typedef enum {
+    H5SM_BADTYPE = -1,
+    H5SM_LIST,    		/* Index is an unsorted list */
+    H5SM_BTREE    		/* Index is a sorted B-tree */
+} H5SM_index_type_t;
+
+/* Typedef for a SOHM index header */
+typedef struct {
+/* Stored */
+    unsigned mesg_types;	/* Bit flag vector of message types */
+    size_t min_mesg_size;	/* number of messages being tracked */
+    size_t list_max;		/* >= this many messages, index with a B-tree */
+    size_t btree_min;		/* <= this many messages, index with a list again */
+    size_t num_messages;	/* number of messages being tracked */
+    H5SM_index_type_t index_type; /* Is the index a list or a B-tree? */
+    haddr_t index_addr;		/* Address of the actual index (list or B-tree) */
+    haddr_t heap_addr;		/* Address of the fheap used to store shared messages */
+
+/* Not stored */
+    size_t list_size;           /* Size of list index on disk */
+} H5SM_index_header_t;
+
+/* Typedef for a SOHM list */
+typedef struct {
+    /* Information for H5AC cache functions, _must_ be first field in structure */
+    H5AC_info_t cache_info;
+
+    H5SM_index_header_t *header;    /* Pointer to the corresponding index header */
+    H5SM_sohm_t *messages;          /* Actual list, stored as an array */
+} H5SM_list_t;
+
+/* Typedef for shared object header message master table */
+struct H5SM_master_table_t {
+    /* Information for H5AC cache functions, _must_ be first field in structure */
+    H5AC_info_t cache_info;
+
+    size_t table_size;              /* Size of table on disk */
+    unsigned num_indexes;           /* Number of indexes */
+    H5SM_index_header_t *indexes;   /* Array of num_indexes indexes */
+};
+
+/* Typedef for searching an index (list or B-tree) */
+typedef struct {
+    H5F_t *file;                        /* File in which sharing is happening */
+    hid_t dxpl_id;                      /* DXPL for sharing messages in heap */
+    H5HF_t *fheap;    			/* The heap for this message type, open. */
+    void *encoding; 		        /* The message encoded, or NULL */
+    size_t encoding_size; 		/* Size of the encoding, or 0 */
+    H5SM_sohm_t message;                /* The message to find/insert.
+                                         * If the message doesn't yet have a
+                                         * heap ID, the heap ID will be 0. */
+} H5SM_mesg_key_t;
+
+/*
+ * Data exchange structure to pass through the fractal heap layer for the
+ * H5HF_op function when computing a hash value for a message.
+ */
+typedef struct {
+    /* downward (internal) */
+    unsigned    type_id;                /* Message type */
+
+    /* upward */
+    uint32_t    hash;                   /* Hash value */
+} H5SM_fh_ud_gh_t;
+
+/* Typedef to increment a reference count in the B-tree */
+typedef struct {
+    H5SM_mesg_key_t *key;       /* IN: key for message being incremented */
+    H5O_fheap_id_t fheap_id;    /* OUT: fheap ID of record */
+    hid_t dxpl_id;
+} H5SM_incr_ref_opdata;
+
+/* v2 B-tree client callback context */
+typedef struct H5SM_bt2_ctx_t {
+    uint8_t     sizeof_addr;    /* Size of file addresses */
+} H5SM_bt2_ctx_t;
+
+/* Callback info for loading a shared message table index into the cache */
+typedef struct H5SM_table_cache_ud_t {
+    H5F_t *f;                   /* File that shared message index stored as a table is in */
+} H5SM_table_cache_ud_t;
+
+/* Callback info for loading a shared message list index into the cache */
+typedef struct H5SM_list_cache_ud_t {
+    H5F_t *f;                   /* File that shared message index stored as a table is in */
+    H5SM_index_header_t *header; /* Index header for this list */
+} H5SM_list_cache_ud_t;
+
+
+/****************************/
+/* Package Variables        */
+/****************************/
+
+/* Declare free lists to manage H5SM structs */
+H5FL_EXTERN(H5SM_master_table_t);
+H5FL_ARR_EXTERN(H5SM_index_header_t);
+H5FL_EXTERN(H5SM_list_t);
+H5FL_ARR_EXTERN(H5SM_sohm_t);
+
+H5_DLLVAR const H5AC_class_t H5AC_SOHM_TABLE[1];
+H5_DLLVAR const H5AC_class_t H5AC_SOHM_LIST[1];
+H5_DLLVAR const H5B2_class_t H5SM_INDEX[1];
+
+/****************************/
+/* Package Prototypes       */
+/****************************/
+
+/* General routines */
+H5_DLL ssize_t H5SM_get_index(const H5SM_master_table_t *table, unsigned type_id);
+
+/* Encode and decode routines, used for B-tree and cache encoding/decoding */
+H5_DLL herr_t H5SM_message_compare(const void *rec1, const void *rec2);
+H5_DLL herr_t H5SM_message_encode(uint8_t *raw, const void *native, void *ctx);
+H5_DLL herr_t H5SM_message_decode(const uint8_t *raw, void *native, void *ctx);
+
+/* H5B2_remove_t callback to add messages to a list index */
+H5_DLL herr_t H5SM_bt2_convert_to_list_op(const void * record, void *op_data);
+
+/* Fractal heap 'op' callback to compute hash value for message "in place" */
+H5_DLL herr_t H5SM_get_hash_fh_cb(const void *obj, size_t obj_len, void *_udata);
+
+/* Routines to release data structures */
+herr_t H5SM_table_free(H5SM_master_table_t *table);
+herr_t H5SM_list_free(H5SM_list_t *list);
+
+/* Testing functions */
+#ifdef H5SM_TESTING
+H5_DLL herr_t H5SM_get_mesg_count_test(H5F_t *f, hid_t dxpl_id, unsigned type_id,
+    size_t *mesg_count);
+#endif /* H5SM_TESTING */
+
+#endif /* _H5SMpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Spkg.h b/Resources/windows-libs/HDF5/include/H5Spkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..0a9df6971fc217fbe85b7697d96a6b249ada61b1
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Spkg.h
@@ -0,0 +1,260 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *		Thursday, September 28, 2000
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5S package.  Source files outside the H5S package should
+ *		include H5Sprivate.h instead.
+ */
+#ifndef H5S_PACKAGE
+#error "Do not include this file outside the H5S package!"
+#endif
+
+#ifndef _H5Spkg_H
+#define _H5Spkg_H
+
+#include "H5Sprivate.h"
+
+/* Flags to indicate special dataspace features are active */
+#define H5S_VALID_MAX	0x01
+#define H5S_VALID_PERM	0x02
+
+
+/* Initial version of the dataspace information */
+#define H5O_SDSPACE_VERSION_1	1
+
+/* This version adds support for "null" dataspaces, encodes the type of the
+ *      dataspace in the message and eliminated the rest of the "reserved"
+ *      bytes.
+ */
+#define H5O_SDSPACE_VERSION_2	2
+
+/* The latest version of the format.  Look through the 'encode'
+ *      and 'size' callbacks for places to change when updating this. */
+#define H5O_SDSPACE_VERSION_LATEST H5O_SDSPACE_VERSION_2
+
+
+/*
+ * Dataspace extent information
+ */
+/* Extent container */
+struct H5S_extent_t {
+    H5O_shared_t sh_loc;        /* Shared message info (must be first) */
+
+    H5S_class_t	type;           /* Type of extent */
+    unsigned version;           /* Version of object header message to encode this object with */
+    hsize_t nelem;              /* Number of elements in extent */
+
+    unsigned rank;              /* Number of dimensions */
+    hsize_t *size;              /* Current size of the dimensions */
+    hsize_t *max;               /* Maximum size of the dimensions */
+};
+
+/*
+ * Dataspace selection information
+ */
+/* Node in point selection list (typedef'd in H5Sprivate.h) */
+struct H5S_pnt_node_t {
+    hsize_t *pnt;          /* Pointer to a selected point */
+    struct H5S_pnt_node_t *next;  /* pointer to next point in list */
+};
+
+/* Information about point selection list */
+typedef struct {
+    H5S_pnt_node_t *head;   /* Pointer to head of point list */
+} H5S_pnt_list_t;
+
+/* Information about new-style hyperslab spans */
+
+/* Information a particular hyperslab span */
+struct H5S_hyper_span_t {
+    hsize_t low, high;          /* Low & high bounds of span */
+    hsize_t nelem;              /* Number of elements in span (only needed during I/O) */
+    hsize_t pstride;            /* Pseudo-stride from start of previous span (only used during I/O) */
+    struct H5S_hyper_span_info_t *down;     /* Pointer to list of spans in next dimension down */
+    struct H5S_hyper_span_t *next;     /* Pointer to next span in list */
+};
+
+/* Information about a list of hyperslab spans */
+struct H5S_hyper_span_info_t {
+    unsigned count;                    /* Ref. count of number of spans which share this span */
+    struct H5S_hyper_span_info_t *scratch;  /* Scratch pointer
+                                             * (used during copies, as mark
+                                             * during precomputes for I/O &
+                                             * to point to the last span in a
+                                             * list during single element adds)
+                                             */
+    struct H5S_hyper_span_t *head;  /* Pointer to list of spans in next dimension down */
+};
+
+/* Information about new-style hyperslab selection */
+typedef struct {
+    hbool_t diminfo_valid;                      /* Whether the dataset has valid diminfo */
+    H5S_hyper_dim_t opt_diminfo[H5S_MAX_RANK];  /* per-dim selection info */
+    H5S_hyper_dim_t app_diminfo[H5S_MAX_RANK];  /* per-dim selection info */
+	/* 'opt_diminfo' points to a [potentially] optimized version of the user's
+         * hyperslab information.  'app_diminfo' points to the actual parameters
+         * that the application used for setting the hyperslab selection.  These
+         * are only used for re-gurgitating the original values used to set the
+         * hyperslab to the application when it queries the hyperslab selection
+         * information. */
+    H5S_hyper_span_info_t *span_lst; /* List of hyperslab span information */
+} H5S_hyper_sel_t;
+
+/* Selection information methods */
+/* Method to copy a selection */
+typedef herr_t (*H5S_sel_copy_func_t)(H5S_t *dst, const H5S_t *src, hbool_t share_selection);
+/* Method to retrieve a list of offset/length sequences for selection */
+typedef herr_t (*H5S_sel_get_seq_list_func_t)(const H5S_t *space, unsigned flags,
+    H5S_sel_iter_t *iter, size_t maxseq, size_t maxbytes,
+    size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
+/* Method to release current selection */
+typedef herr_t (*H5S_sel_release_func_t)(H5S_t *space);
+/* Method to determine if current selection is valid for dataspace */
+typedef htri_t (*H5S_sel_is_valid_func_t)(const H5S_t *space);
+/* Method to determine number of bytes required to store current selection */
+typedef hssize_t (*H5S_sel_serial_size_func_t)(const H5S_t *space);
+/* Method to store current selection in "serialized" form (a byte sequence suitable for storing on disk) */
+typedef herr_t (*H5S_sel_serialize_func_t)(const H5S_t *space, uint8_t *buf);
+/* Method to store create selection from "serialized" form (a byte sequence suitable for storing on disk) */
+typedef herr_t (*H5S_sel_deserialize_func_t)(H5S_t *space, const uint8_t *buf);
+/* Method to determine smallest n-D bounding box containing the current selection */
+typedef herr_t (*H5S_sel_bounds_func_t)(const H5S_t *space, hsize_t *start, hsize_t *end);
+/* Method to determine linear offset of initial element in selection within dataspace */
+typedef herr_t (*H5S_sel_offset_func_t)(const H5S_t *space, hsize_t *offset);
+/* Method to determine if current selection is contiguous */
+typedef htri_t (*H5S_sel_is_contiguous_func_t)(const H5S_t *space);
+/* Method to determine if current selection is a single block */
+typedef htri_t (*H5S_sel_is_single_func_t)(const H5S_t *space);
+/* Method to determine if current selection is "regular" */
+typedef htri_t (*H5S_sel_is_regular_func_t)(const H5S_t *space);
+/* Method to adjust a selection by an offset */
+typedef herr_t (*H5S_sel_adjust_u_func_t)(H5S_t *space, const hsize_t *offset);
+/* Method to construct single element projection onto scalar dataspace */
+typedef herr_t (*H5S_sel_project_scalar)(const H5S_t *space, hsize_t *offset);
+/* Method to construct selection projection onto/into simple dataspace */
+typedef herr_t (*H5S_sel_project_simple)(const H5S_t *space, H5S_t *new_space, hsize_t *offset);
+/* Method to initialize iterator for current selection */
+typedef herr_t (*H5S_sel_iter_init_func_t)(H5S_sel_iter_t *sel_iter, const H5S_t *space);
+
+/* Selection class information */
+typedef struct {
+    H5S_sel_type type;                          /* Type of selection (all, none, points or hyperslab) */
+
+    /* Methods */
+    H5S_sel_copy_func_t copy;                   /* Method to make a copy of a selection */
+    H5S_sel_get_seq_list_func_t get_seq_list;   /* Method to retrieve a list of offset/length sequences for selection */
+    H5S_sel_release_func_t release;             /* Method to release current selection */
+    H5S_sel_is_valid_func_t is_valid;           /* Method to determine if current selection is valid for dataspace */
+    H5S_sel_serial_size_func_t serial_size;     /* Method to determine number of bytes required to store current selection */
+    H5S_sel_serialize_func_t serialize;         /* Method to store current selection in "serialized" form (a byte sequence suitable for storing on disk) */
+    H5S_sel_deserialize_func_t deserialize;     /* Method to store create selection from "serialized" form (a byte sequence suitable for storing on disk) */
+    H5S_sel_bounds_func_t bounds;               /* Method to determine to smallest n-D bounding box containing the current selection */
+    H5S_sel_offset_func_t offset;               /* Method to determine linear offset of initial element in selection within dataspace */
+    H5S_sel_is_contiguous_func_t is_contiguous; /* Method to determine if current selection is contiguous */
+    H5S_sel_is_single_func_t is_single;         /* Method to determine if current selection is a single block */
+    H5S_sel_is_regular_func_t is_regular;       /* Method to determine if current selection is "regular" */
+    H5S_sel_adjust_u_func_t adjust_u;           /* Method to adjust a selection by an offset */
+    H5S_sel_project_scalar project_scalar;      /* Method to construct scalar dataspace projection */
+    H5S_sel_project_simple project_simple;      /* Method to construct simple dataspace projection */
+    H5S_sel_iter_init_func_t iter_init;         /* Method to initialize iterator for current selection */
+} H5S_select_class_t;
+
+/* Selection information object */
+typedef struct {
+    const H5S_select_class_t *type;     /* Pointer to selection's class info */
+    hbool_t offset_changed;             /* Indicate that the offset for the selection has been changed */
+    hssize_t offset[H5S_MAX_RANK];      /* Offset within the extent */
+    hsize_t num_elem;   /* Number of elements in selection */
+    union {
+        H5S_pnt_list_t *pnt_lst; /* List of selected points (order is important) */
+        H5S_hyper_sel_t *hslab;  /* Info about hyperslab selections */
+    } sel_info;
+} H5S_select_t;
+
+/* Main dataspace structure (typedef'd in H5Sprivate.h) */
+struct H5S_t {
+    H5S_extent_t extent;                /* Dataspace extent (must stay first) */
+    H5S_select_t select;		/* Dataspace selection */
+};
+
+/* Selection iteration methods */
+/* Method to retrieve the current coordinates of iterator for current selection */
+typedef herr_t (*H5S_sel_iter_coords_func_t)(const H5S_sel_iter_t *iter, hsize_t *coords);
+/* Method to retrieve the current block of iterator for current selection */
+typedef herr_t (*H5S_sel_iter_block_func_t)(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
+/* Method to determine number of elements left in iterator for current selection */
+typedef hsize_t (*H5S_sel_iter_nelmts_func_t)(const H5S_sel_iter_t *iter);
+/* Method to determine if there are more blocks left in the current selection */
+typedef htri_t (*H5S_sel_iter_has_next_block_func_t)(const H5S_sel_iter_t *iter);
+/* Method to move selection iterator to the next element in the selection */
+typedef herr_t (*H5S_sel_iter_next_func_t)(H5S_sel_iter_t *iter, size_t nelem);
+/* Method to move selection iterator to the next block in the selection */
+typedef herr_t (*H5S_sel_iter_next_block_func_t)(H5S_sel_iter_t *iter);
+/* Method to release iterator for current selection */
+typedef herr_t (*H5S_sel_iter_release_func_t)(H5S_sel_iter_t *iter);
+
+/* Selection iteration class */
+typedef struct H5S_sel_iter_class_t {
+    H5S_sel_type type;                          /* Type of selection (all, none, points or hyperslab) */
+
+    /* Methods on selections */
+    H5S_sel_iter_coords_func_t iter_coords;     /* Method to retrieve the current coordinates of iterator for current selection */
+    H5S_sel_iter_block_func_t iter_block;       /* Method to retrieve the current block of iterator for current selection */
+    H5S_sel_iter_nelmts_func_t iter_nelmts;     /* Method to determine number of elements left in iterator for current selection */
+    H5S_sel_iter_has_next_block_func_t iter_has_next_block;         /* Method to query if there is another block left in the selection */
+    H5S_sel_iter_next_func_t iter_next;         /* Method to move selection iterator to the next element in the selection */
+    H5S_sel_iter_next_block_func_t iter_next_block;     /* Method to move selection iterator to the next block in the selection */
+    H5S_sel_iter_release_func_t iter_release;   /* Method to release iterator for current selection */
+} H5S_sel_iter_class_t;
+
+/*
+ * All selection class methods.
+ */
+H5_DLLVAR const H5S_select_class_t H5S_sel_all[1];
+
+/*
+ * Hyperslab selection class methods.
+ */
+H5_DLLVAR const H5S_select_class_t H5S_sel_hyper[1];
+
+/*
+ * None selection class methods.
+ */
+H5_DLLVAR const H5S_select_class_t H5S_sel_none[1];
+
+/*
+ * Pointer selection class methods.
+ */
+H5_DLLVAR const H5S_select_class_t H5S_sel_point[1];
+
+/* Extent functions */
+H5_DLL herr_t H5S_extent_release(H5S_extent_t *extent);
+H5_DLL herr_t H5S_extent_copy(H5S_extent_t *dst, const H5S_extent_t *src,
+    hbool_t copy_max);
+
+/* Operations on selections */
+
+/* Testing functions */
+#ifdef H5S_TESTING
+H5_DLL htri_t H5S_select_shape_same_test(hid_t sid1, hid_t sid2);
+H5_DLL htri_t H5S_get_rebuild_status_test(hid_t space_id);
+#endif /* H5S_TESTING */
+
+#endif /*_H5Spkg_H*/
+
diff --git a/Resources/windows-libs/HDF5/include/H5Spublic.h b/Resources/windows-libs/HDF5/include/H5Spublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..c62a7b7648332f90700ffd56ab81a0187a441817
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Spublic.h
@@ -0,0 +1,152 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5S module.
+ */
+#ifndef _H5Spublic_H
+#define _H5Spublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+/* Define atomic datatypes */
+#define H5S_ALL         0
+#define H5S_UNLIMITED	((hsize_t)(hssize_t)(-1))
+
+/* Define user-level maximum number of dimensions */
+#define H5S_MAX_RANK    32
+
+/* Different types of dataspaces */
+typedef enum H5S_class_t {
+    H5S_NO_CLASS         = -1,  /*error                                      */
+    H5S_SCALAR           = 0,   /*scalar variable                            */
+    H5S_SIMPLE           = 1,   /*simple data space                          */
+    H5S_NULL             = 2    /*null data space                            */
+} H5S_class_t;
+
+/* Different ways of combining selections */
+typedef enum H5S_seloper_t {
+    H5S_SELECT_NOOP      = -1,  /* error                                     */
+    H5S_SELECT_SET       = 0,   /* Select "set" operation 		     */
+    H5S_SELECT_OR,              /* Binary "or" operation for hyperslabs
+                                 * (add new selection to existing selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A or B:           CCCCCCCCCCCCCCCC
+                                 */
+    H5S_SELECT_AND,             /* Binary "and" operation for hyperslabs
+                                 * (only leave overlapped regions in selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A and B:                CCCC
+                                 */
+    H5S_SELECT_XOR,             /* Binary "xor" operation for hyperslabs
+                                 * (only leave non-overlapped regions in selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A xor B:          CCCCCC    CCCCCC
+                                 */
+    H5S_SELECT_NOTB,            /* Binary "not" operation for hyperslabs
+                                 * (only leave non-overlapped regions in original selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A not B:          CCCCCC
+                                 */
+    H5S_SELECT_NOTA,            /* Binary "not" operation for hyperslabs
+                                 * (only leave non-overlapped regions in new selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * B not A:                    CCCCCC
+                                 */
+    H5S_SELECT_APPEND,          /* Append elements to end of point selection */
+    H5S_SELECT_PREPEND,         /* Prepend elements to beginning of point selection */
+    H5S_SELECT_INVALID          /* Invalid upper bound on selection operations */
+} H5S_seloper_t;
+
+/* Enumerated type for the type of selection */
+typedef enum {
+    H5S_SEL_ERROR	= -1, 	/* Error			*/
+    H5S_SEL_NONE	= 0,    /* Nothing selected 		*/
+    H5S_SEL_POINTS	= 1,    /* Sequence of points selected	*/
+    H5S_SEL_HYPERSLABS  = 2,    /* "New-style" hyperslab selection defined	*/
+    H5S_SEL_ALL		= 3,    /* Entire extent selected	*/
+    H5S_SEL_N			/*THIS MUST BE LAST		*/
+}H5S_sel_type;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Functions in H5S.c */
+H5_DLL hid_t H5Screate(H5S_class_t type);
+H5_DLL hid_t H5Screate_simple(int rank, const hsize_t dims[],
+			       const hsize_t maxdims[]);
+H5_DLL herr_t H5Sset_extent_simple(hid_t space_id, int rank,
+				    const hsize_t dims[],
+				    const hsize_t max[]);
+H5_DLL hid_t H5Scopy(hid_t space_id);
+H5_DLL herr_t H5Sclose(hid_t space_id);
+H5_DLL herr_t H5Sencode(hid_t obj_id, void *buf, size_t *nalloc);
+H5_DLL hid_t H5Sdecode(const void *buf);
+H5_DLL hssize_t H5Sget_simple_extent_npoints(hid_t space_id);
+H5_DLL int H5Sget_simple_extent_ndims(hid_t space_id);
+H5_DLL int H5Sget_simple_extent_dims(hid_t space_id, hsize_t dims[],
+				      hsize_t maxdims[]);
+H5_DLL htri_t H5Sis_simple(hid_t space_id);
+H5_DLL hssize_t H5Sget_select_npoints(hid_t spaceid);
+H5_DLL herr_t H5Sselect_hyperslab(hid_t space_id, H5S_seloper_t op,
+				   const hsize_t start[],
+				   const hsize_t _stride[],
+				   const hsize_t count[],
+				   const hsize_t _block[]);
+/* #define NEW_HYPERSLAB_API */
+#ifdef NEW_HYPERSLAB_API
+H5_DLL hid_t H5Scombine_hyperslab(hid_t space_id, H5S_seloper_t op,
+				   const hsize_t start[],
+				   const hsize_t _stride[],
+				   const hsize_t count[],
+				   const hsize_t _block[]);
+H5_DLL herr_t H5Sselect_select(hid_t space1_id, H5S_seloper_t op,
+                                  hid_t space2_id);
+H5_DLL hid_t H5Scombine_select(hid_t space1_id, H5S_seloper_t op,
+                                  hid_t space2_id);
+#endif /* NEW_HYPERSLAB_API */
+H5_DLL herr_t H5Sselect_elements(hid_t space_id, H5S_seloper_t op,
+    size_t num_elem, const hsize_t *coord);
+H5_DLL H5S_class_t H5Sget_simple_extent_type(hid_t space_id);
+H5_DLL herr_t H5Sset_extent_none(hid_t space_id);
+H5_DLL herr_t H5Sextent_copy(hid_t dst_id,hid_t src_id);
+H5_DLL htri_t H5Sextent_equal(hid_t sid1, hid_t sid2);
+H5_DLL herr_t H5Sselect_all(hid_t spaceid);
+H5_DLL herr_t H5Sselect_none(hid_t spaceid);
+H5_DLL herr_t H5Soffset_simple(hid_t space_id, const hssize_t *offset);
+H5_DLL htri_t H5Sselect_valid(hid_t spaceid);
+H5_DLL hssize_t H5Sget_select_hyper_nblocks(hid_t spaceid);
+H5_DLL hssize_t H5Sget_select_elem_npoints(hid_t spaceid);
+H5_DLL herr_t H5Sget_select_hyper_blocklist(hid_t spaceid, hsize_t startblock,
+    hsize_t numblocks, hsize_t buf[/*numblocks*/]);
+H5_DLL herr_t H5Sget_select_elem_pointlist(hid_t spaceid, hsize_t startpoint,
+    hsize_t numpoints, hsize_t buf[/*numpoints*/]);
+H5_DLL herr_t H5Sget_select_bounds(hid_t spaceid, hsize_t start[],
+    hsize_t end[]);
+H5_DLL H5S_sel_type H5Sget_select_type(hid_t spaceid);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Spublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5StrType.h b/Resources/windows-libs/HDF5/include/H5StrType.h
new file mode 100644
index 0000000000000000000000000000000000000000..8b3a773d5a578fc6900a4e84977abc4c0b9276d6
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5StrType.h
@@ -0,0 +1,69 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef __H5StrType_H
+#define __H5StrType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//! Class StrType operates on HDF5 string datatypes.
+class H5_DLLCPP StrType : public AtomType {
+   public:
+	// Creates a string type using a predefined type
+	StrType(const PredType& pred_type);
+
+	// Creates a string type with specified length - may be obsolete
+	StrType(const PredType& pred_type, const size_t& size);
+
+	// Creates a string type with specified length
+	StrType(const int dummy, const size_t& size);
+
+        // Gets the string datatype of the specified dataset
+	StrType(const DataSet& dataset);
+
+	// Retrieves the character set type of this string datatype.
+	H5T_cset_t getCset() const;
+
+	// Sets character set to be used.
+	void setCset(H5T_cset_t cset) const;
+
+	// Retrieves the string padding method for this string datatype.
+	H5T_str_t getStrpad() const;
+
+	// Defines the storage mechanism for character strings.
+	void setStrpad(H5T_str_t strpad) const;
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("StrType"); }
+
+	// default constructor
+	StrType();
+
+	// Creates a string datatype using an existing id
+	StrType(const hid_t existing_id);
+
+	// Copy constructor - makes a copy of the original object
+	StrType(const StrType& original);
+
+	// Noop destructor.
+	virtual ~StrType();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5StrType_H
diff --git a/Resources/windows-libs/HDF5/include/H5TBpublic.h b/Resources/windows-libs/HDF5/include/H5TBpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..874ef2077c9521b8a4f4493a0c6157cec4c9f300
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5TBpublic.h
@@ -0,0 +1,233 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5TBpublic_H
+#define _H5TBpublic_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Create functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5TBmake_table( const char *table_title,
+                       hid_t loc_id,
+                       const char *dset_name,
+                       hsize_t nfields,
+                       hsize_t nrecords,
+                       size_t type_size,
+                       const char *field_names[],
+                       const size_t *field_offset,
+                       const hid_t *field_types,
+                       hsize_t chunk_size,
+                       void *fill_data,
+                       int compress,
+                       const void *buf );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Write functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5TBappend_records( hid_t loc_id,
+                           const char *dset_name,
+                           hsize_t nrecords,
+                           size_t type_size,
+                           const size_t *field_offset,
+                           const size_t *dst_sizes,
+                           const void *buf );
+
+H5_HLDLL herr_t  H5TBwrite_records( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords,
+                          size_t type_size,
+                          const size_t *field_offset,
+                          const size_t *dst_sizes,
+                          const void *buf );
+
+
+H5_HLDLL herr_t  H5TBwrite_fields_name( hid_t loc_id,
+                              const char *dset_name,
+                              const char *field_names,
+                              hsize_t start,
+                              hsize_t nrecords,
+                              size_t type_size,
+                              const size_t *field_offset,
+                              const size_t *dst_sizes,
+                              const void *buf );
+
+H5_HLDLL herr_t  H5TBwrite_fields_index( hid_t loc_id,
+                               const char *dset_name,
+                               hsize_t nfields,
+                               const int *field_index,
+                               hsize_t start,
+                               hsize_t nrecords,
+                               size_t type_size,
+                               const size_t *field_offset,
+                               const size_t *dst_sizes,
+                               const void *buf );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Read functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+
+H5_HLDLL herr_t  H5TBread_table( hid_t loc_id,
+                       const char *dset_name,
+                       size_t dst_size,
+                       const size_t *dst_offset,
+                       const size_t *dst_sizes,
+                       void *dst_buf );
+
+
+H5_HLDLL herr_t  H5TBread_fields_name( hid_t loc_id,
+                             const char *dset_name,
+                             const char *field_names,
+                             hsize_t start,
+                             hsize_t nrecords,
+                             size_t type_size,
+                             const size_t *field_offset,
+                             const size_t *dst_sizes,
+                             void *buf );
+
+H5_HLDLL herr_t  H5TBread_fields_index( hid_t loc_id,
+                              const char *dset_name,
+                              hsize_t nfields,
+                              const int *field_index,
+                              hsize_t start,
+                              hsize_t nrecords,
+                              size_t type_size,
+                              const size_t *field_offset,
+                              const size_t *dst_sizes,
+                              void *buf );
+
+
+H5_HLDLL herr_t  H5TBread_records( hid_t loc_id,
+                         const char *dset_name,
+                         hsize_t start,
+                         hsize_t nrecords,
+                         size_t type_size,
+                         const size_t *dst_offset,
+                         const size_t *dst_sizes,
+                         void *buf );
+
+/*-------------------------------------------------------------------------
+ *
+ * Inquiry functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5TBget_table_info ( hid_t loc_id,
+                            const char *dset_name,
+                            hsize_t *nfields,
+                            hsize_t *nrecords );
+
+H5_HLDLL herr_t  H5TBget_field_info( hid_t loc_id,
+                           const char *dset_name,
+                           char *field_names[],
+                           size_t *field_sizes,
+                           size_t *field_offsets,
+                           size_t *type_size );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Manipulation functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5TBdelete_record( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords );
+
+
+H5_HLDLL herr_t  H5TBinsert_record( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords,
+                          size_t dst_size,
+                          const size_t *dst_offset,
+                          const size_t *dst_sizes,
+                          void *buf );
+
+H5_HLDLL herr_t  H5TBadd_records_from( hid_t loc_id,
+                             const char *dset_name1,
+                             hsize_t start1,
+                             hsize_t nrecords,
+                             const char *dset_name2,
+                             hsize_t start2 );
+
+H5_HLDLL herr_t  H5TBcombine_tables( hid_t loc_id1,
+                           const char *dset_name1,
+                           hid_t loc_id2,
+                           const char *dset_name2,
+                           const char *dset_name3 );
+
+H5_HLDLL herr_t  H5TBinsert_field( hid_t loc_id,
+                         const char *dset_name,
+                         const char *field_name,
+                         hid_t field_type,
+                         hsize_t position,
+                         const void *fill_data,
+                         const void *buf );
+
+H5_HLDLL herr_t  H5TBdelete_field( hid_t loc_id,
+                         const char *dset_name,
+                         const char *field_name );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Table attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5TBAget_title( hid_t loc_id,
+                       char *table_title );
+
+H5_HLDLL htri_t  H5TBAget_fill(hid_t loc_id,
+                      const char *dset_name,
+                      hid_t dset_id,
+                      unsigned char *dst_buf);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
+
diff --git a/Resources/windows-libs/HDF5/include/H5Tpkg.h b/Resources/windows-libs/HDF5/include/H5Tpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..bd37829680c8dfd1f854bedf0eefd08aa502931a
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Tpkg.h
@@ -0,0 +1,1409 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Robb Matzke <matzke@llnl.gov>
+ *		Monday, December  8, 1997
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5T package.  Source files outside the H5T package should
+ *		include H5Tprivate.h instead.
+ */
+#ifndef H5T_PACKAGE
+#error "Do not include this file outside the H5T package!"
+#endif
+
+#ifndef _H5Tpkg_H
+#define _H5Tpkg_H
+
+/*
+ * Define this to enable debugging.
+ */
+#ifdef NDEBUG
+#  undef H5T_DEBUG
+#endif
+
+/* Get package's private header */
+#include "H5Tprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5Fprivate.h"		/* Files				*/
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+
+/* Other public headers needed by this file */
+#include "H5Spublic.h"		/* Dataspace functions			*/
+
+/* Length of debugging name buffer */
+#define H5T_NAMELEN		32
+
+/* Macro to ease detecting "complex" datatypes (i.e. those with base types or fields) */
+#define H5T_IS_COMPLEX(t)       ((t) == H5T_COMPOUND || (t) == H5T_ENUM || (t) == H5T_VLEN || (t) == H5T_ARRAY)
+
+/* Macro to ease detecting fixed "string" datatypes */
+#define H5T_IS_FIXED_STRING(dt) (H5T_STRING == (dt)->type)
+
+/* Macro to ease detecting variable-length "string" datatypes */
+#define H5T_IS_VL_STRING(dt)    (H5T_VLEN == (dt)->type && H5T_VLEN_STRING == (dt)->u.vlen.type)
+
+/* Macro to ease detecting fixed or variable-length "string" datatypes */
+#define H5T_IS_STRING(dt)       (H5T_IS_FIXED_STRING(dt) || H5T_IS_VL_STRING(dt))
+
+/* Macro to ease detecting atomic datatypes */
+#define H5T_IS_ATOMIC(dt)       (!(H5T_IS_COMPLEX((dt)->type) || (dt)->type == H5T_OPAQUE))
+
+/* Macro to ease retrieving class of shared datatype */
+/* (Externally, a VL string is a string; internally, a VL string is a VL.  Lie
+ *      to the user if they have a VL string and tell them it's in the string
+ *      class)
+ */
+#define H5T_GET_CLASS(shared, internal) ((internal) ? (shared)->type : (H5T_IS_VL_STRING(shared) ?  H5T_STRING : (shared)->type))
+
+
+/*
+ * Datatype encoding versions
+ */
+
+/* This is the version to create all datatypes which don't contain
+ * array datatypes (atomic types, compound datatypes without array fields,
+ * vlen sequences of objects which aren't arrays, etc.) or VAX byte-ordered
+ * objects.
+ */
+#define H5O_DTYPE_VERSION_1	1
+
+/* This is the version to create all datatypes which contain H5T_ARRAY
+ * class objects (array definitely, potentially compound & vlen sequences also),
+ * but not VAX byte-ordered objects.
+ */
+#define H5O_DTYPE_VERSION_2	2
+
+/* This is the version to create all datatypes which contain VAX byte-ordered
+ * objects (floating-point types, currently).
+ */
+/* This version also packs compound & enum field names without padding */
+/* This version also encodes the member offset of compound fields more efficiently */
+/* This version also encodes array types more efficiently */
+#define H5O_DTYPE_VERSION_3	3
+
+/* The latest version of the format.  Look through the 'encode helper' routine
+ *      and 'size' callback for places to change when updating this. */
+#define H5O_DTYPE_VERSION_LATEST H5O_DTYPE_VERSION_3
+
+
+/* Flags for visiting datatype */
+#define H5T_VISIT_COMPLEX_FIRST 0x01            /* Visit complex datatype before visiting member/parent datatypes */
+#define H5T_VISIT_COMPLEX_LAST  0x02            /* Visit complex datatype after visiting member/parent datatypes */
+                                                /* (setting both flags will mean visiting complex type twice) */
+#define H5T_VISIT_SIMPLE        0x04            /* Visit simple datatypes (at all) */
+                                                /* (setting H5T_VISIT_SIMPLE and _not_ setting either H5T_VISIT_COMPLEX_FIRST or H5T_VISIT_COMPLEX_LAST will mean visiting _only_ "simple" "leafs" in the "tree" */
+                                                /* (_not_ setting H5T_VISIT_SIMPLE and setting either H5T_VISIT_COMPLEX_FIRST or H5T_VISIT_COMPLEX_LAST will mean visiting all nodes _except_ "simple" "leafs" in the "tree" */
+
+
+/* Define an internal macro for converting between floating number(float and double) and floating number.
+ * All Cray compilers don't support denormalized floating values generating exception(?). */
+#if H5_CONVERT_DENORMAL_FLOAT
+#define H5T_CONV_INTERNAL_FP_FP           1
+#endif /*H5_CONVERT_DENORMAL_FLOAT*/
+
+/* Define an internal macro for converting between floating number(float and double) and long double.
+ * All Cray compilers don't support denormalized floating values generating exception(?).  NEC doesn't
+ * support long double. */
+#if H5_SIZEOF_LONG_DOUBLE && H5_CONVERT_DENORMAL_FLOAT
+#define H5T_CONV_INTERNAL_FP_LDOUBLE      1
+#endif /*H5_SIZEOF_LONG_DOUBLE && H5_CONVERT_DENORMAL_FLOAT*/
+
+/* Define an internal macro for converting all integers to long double.  SGI compilers give some
+ * incorrect conversions. */
+#if (H5_WANT_DATA_ACCURACY && H5_INTEGER_TO_LDOUBLE_ACCURATE) || (!H5_WANT_DATA_ACCURACY)
+#define H5T_CONV_INTERNAL_INTEGER_LDOUBLE         1
+#endif
+
+/* Define an internal macro for converting unsigned long to float.
+ * Pathscale compiler on Sandia's Linux machine has some problem.
+ * 64-bit Solaris does different rounding. */
+#if (H5_WANT_DATA_ACCURACY && H5_ULONG_TO_FLOAT_ACCURATE && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE) || \
+    (!H5_WANT_DATA_ACCURACY)
+#define H5T_CONV_INTERNAL_ULONG_FLT         1
+#endif
+
+/* Define an internal macro for converting unsigned (long) long to double.
+ * 64-bit Solaris does different rounding. */
+#if (H5_WANT_DATA_ACCURACY && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE) || (!H5_WANT_DATA_ACCURACY)
+#define H5T_CONV_INTERNAL_ULONG_DBL         1
+#endif
+
+/* Define an internal macro for converting unsigned long to long double.  SGI compilers give some
+ * incorrect conversions. 64-bit Solaris does different rounding. */
+#if (H5_WANT_DATA_ACCURACY && H5_INTEGER_TO_LDOUBLE_ACCURATE && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE) || \
+    (!H5_WANT_DATA_ACCURACY)
+#define H5T_CONV_INTERNAL_ULONG_LDOUBLE       1
+#endif
+
+/* Define an internal macro for converting long long to long double.  Mac OS 10.4 gives some
+ * incorrect conversions. */
+#if (H5_WANT_DATA_ACCURACY && H5_INTEGER_TO_LDOUBLE_ACCURATE && defined(H5_LLONG_TO_LDOUBLE_CORRECT)) || \
+    (!H5_WANT_DATA_ACCURACY)
+#define H5T_CONV_INTERNAL_LLONG_LDOUBLE       1
+#endif
+
+/* Define an internal macro for converting unsigned long long to floating numbers.  SGI compilers give
+ * some incorect conversion.  64-bit Solaris does different rounding.   Windows Visual Studio 6 does
+ * not support unsigned long long. */
+#if (H5_WANT_DATA_ACCURACY && H5_ULLONG_TO_FP_CAST_WORKS && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE) || \
+    (!H5_WANT_DATA_ACCURACY && H5_ULLONG_TO_FP_CAST_WORKS)
+#define H5T_CONV_INTERNAL_ULLONG_FP         1
+#endif
+
+/* Define an internal macro for converting unsigned long long to long double.  SGI compilers give
+ * some incorect conversion.  64-bit Solaris does different rounding.   Windows Visual Studio 6 does
+ * not support unsigned long long.  For FreeBSD(sleipnir), the last 2 bytes of mantissa are lost when
+ * compiler tries to do the conversion.  For Cygwin, compiler doesn't do rounding correctly.
+ * Mac OS 10.4 gives some incorrect result. */
+#if (H5_WANT_DATA_ACCURACY && H5_ULLONG_TO_FP_CAST_WORKS && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE && \
+    defined(H5_ULLONG_TO_LDOUBLE_PRECISION) && defined(H5_LLONG_TO_LDOUBLE_CORRECT)) || (!H5_WANT_DATA_ACCURACY && \
+    H5_ULLONG_TO_FP_CAST_WORKS)
+#define H5T_CONV_INTERNAL_ULLONG_LDOUBLE         1
+#endif
+
+/* Define an internal macro for converting long double to all integers.  SGI compilers give some incorrect
+ * conversions.  HP-UX 11.00 compiler generates floating exception. */
+#if (H5_WANT_DATA_ACCURACY && H5_LDOUBLE_TO_INTEGER_ACCURATE && H5_LDOUBLE_TO_INTEGER_WORKS) || \
+    (!H5_WANT_DATA_ACCURACY && H5_LDOUBLE_TO_INTEGER_WORKS)
+#define H5T_CONV_INTERNAL_LDOUBLE_INTEGER         1
+#endif
+
+/* Define an internal macro for converting long double to unsigned int.  SGI compilers give some incorrect
+ * conversions.  HP-UX 11.00 compiler generates floating exception.  Some Intel compilers on some Linux
+ * give incorrect values. */
+#if (H5_WANT_DATA_ACCURACY && H5_LDOUBLE_TO_INTEGER_ACCURATE && H5_LDOUBLE_TO_UINT_ACCURATE && \
+    H5_LDOUBLE_TO_INTEGER_WORKS) || (!H5_WANT_DATA_ACCURACY && H5_LDOUBLE_TO_INTEGER_WORKS)
+#define H5T_CONV_INTERNAL_LDOUBLE_UINT         1
+#endif
+
+/* Define an internal macro for converting floating numbers to long long.  The hard conversion on Windows
+ * .NET 2003 has a bug and gives wrong exception value. */
+#if (H5_WANT_DATA_ACCURACY && !defined(H5_HW_FP_TO_LLONG_NOT_WORKS)) || (!H5_WANT_DATA_ACCURACY)
+#define H5T_CONV_INTERNAL_FP_LLONG         1
+#endif
+
+/* Define an internal macro for converting long double to long long.  SGI compilers give some incorrect
+ * conversions. Mac OS 10.4 gives incorrect conversions. HP-UX 11.00 compiler generates floating exception.
+ * The hard conversion on Windows .NET 2003 has a bug and gives wrong exception value. */
+#if (H5_WANT_DATA_ACCURACY && !defined(H5_HW_FP_TO_LLONG_NOT_WORKS) && H5_LDOUBLE_TO_INTEGER_ACCURATE && \
+    H5_LDOUBLE_TO_INTEGER_WORKS && defined(H5_LDOUBLE_TO_LLONG_ACCURATE)) || \
+    (!H5_WANT_DATA_ACCURACY && !defined(H5_HW_FP_TO_LLONG_NOT_WORKS) && H5_LDOUBLE_TO_INTEGER_WORKS)
+#define H5T_CONV_INTERNAL_LDOUBLE_LLONG         1
+#endif
+
+/* Define an internal macro for converting floating numbers to unsigned long long.  PGI compiler does
+ * roundup when the source fraction part is greater than 0.5.  HP-UX compilers set the maximal number
+ * for unsigned long long as 0x7fffffffffffffff during conversion. */
+#if (H5_WANT_DATA_ACCURACY && H5_FP_TO_ULLONG_ACCURATE && defined(H5_FP_TO_ULLONG_RIGHT_MAXIMUM)) || \
+    (!H5_WANT_DATA_ACCURACY)
+#define H5T_CONV_INTERNAL_FP_ULLONG         1
+#else
+#define H5T_CONV_INTERNAL_FP_ULLONG         0
+#endif
+
+/* Define an internal macro for converting long double to unsigned long long.  SGI compilers give some
+ * incorrect conversions.  Mac OS 10.4 gives incorrect conversions. HP-UX 11.00 compiler generates
+ * floating exception. */
+#if (H5_WANT_DATA_ACCURACY && H5_LDOUBLE_TO_INTEGER_ACCURATE && H5_LDOUBLE_TO_INTEGER_WORKS && \
+    H5_FP_TO_ULLONG_ACCURATE && defined(H5_FP_TO_ULLONG_RIGHT_MAXIMUM) && defined(H5_LDOUBLE_TO_LLONG_ACCURATE)) || \
+    (!H5_WANT_DATA_ACCURACY && H5_LDOUBLE_TO_INTEGER_WORKS)
+#define H5T_CONV_INTERNAL_LDOUBLE_ULLONG         1
+#else
+#define H5T_CONV_INTERNAL_LDOUBLE_ULLONG         0
+#endif
+
+/* Statistics about a conversion function */
+struct H5T_stats_t {
+    unsigned	ncalls;			/*num calls to conversion function   */
+    hsize_t	nelmts;			/*total data points converted	     */
+    H5_timer_t	timer;			/*total time for conversion	     */
+};
+
+/* The datatype conversion database */
+struct H5T_path_t {
+    char	name[H5T_NAMELEN];	/*name for debugging only	     */
+    H5T_t	*src;			/*source datatype 		     */
+    H5T_t	*dst;			/*destination datatype		     */
+    H5T_conv_t	func;			/*data conversion function	     */
+    hbool_t	is_hard;		/*is it a hard function?	     */
+    hbool_t	is_noop;		/*is it the noop conversion?	     */
+    hbool_t	are_compounds;		/*are source and dest both compounds?*/
+    H5T_stats_t	stats;			/*statistics for the conversion	     */
+    H5T_cdata_t	cdata;			/*data for this function	     */
+};
+
+typedef struct H5T_atomic_t {
+    H5T_order_t		order;	/*byte order				     */
+    size_t		prec;	/*precision in bits			     */
+    size_t		offset; /*bit position of lsb of value		     */
+    H5T_pad_t	        lsb_pad;/*type of lsb padding			     */
+    H5T_pad_t		msb_pad;/*type of msb padding			     */
+    union {
+	struct {
+	    H5T_sign_t	sign;	/*type of integer sign			     */
+	} i;			/*integer; integer types		     */
+
+	struct {
+	    size_t	sign;	/*bit position of sign bit		     */
+	    size_t	epos;	/*position of lsb of exponent		     */
+	    size_t	esize;	/*size of exponent in bits		     */
+	    uint64_t	ebias;	/*exponent bias				     */
+	    size_t	mpos;	/*position of lsb of mantissa		     */
+	    size_t	msize;	/*size of mantissa			     */
+	    H5T_norm_t	norm;	/*normalization				     */
+	    H5T_pad_t	pad;	/*type of padding for internal bits	     */
+	} f;			/*floating-point types			     */
+
+	struct {
+	    H5T_cset_t	cset;	/*character set				     */
+	    H5T_str_t	pad;	/*space or null padding of extra bytes	     */
+	} s;			/*string types				     */
+
+	struct {
+	    H5R_type_t	rtype;	/*type of reference stored		     */
+            H5T_loc_t   loc;    /* Location of data in buffer		     */
+	} r;			/*reference types			     */
+    } u;
+} H5T_atomic_t;
+
+/* How members are sorted for compound or enum datatypes */
+typedef enum H5T_sort_t {
+    H5T_SORT_NONE	= 0,		/*not sorted			     */
+    H5T_SORT_NAME	= 1,		/*sorted by member name		     */
+    H5T_SORT_VALUE	= 2 		/*sorted by memb offset or enum value*/
+} H5T_sort_t;
+
+/* A compound datatype member */
+typedef struct H5T_cmemb_t {
+    char		*name;		/*name of this member		     */
+    size_t		offset;		/*offset from beginning of struct    */
+    size_t		size;		/*size of this member		     */
+    struct H5T_t	*type;		/*type of this member		     */
+} H5T_cmemb_t;
+
+/* A compound datatype */
+typedef struct H5T_compnd_t {
+    unsigned	nalloc;		/*num entries allocated in MEMB array*/
+    unsigned	nmembs;		/*number of members defined in struct*/
+    H5T_sort_t	sorted;		/*how are members sorted?	     */
+    hbool_t     packed;		/*are members packed together?       */
+    H5T_cmemb_t	*memb;		/*array of struct members	     */
+    size_t      memb_size;	/*total of all member sizes          */
+} H5T_compnd_t;
+
+/* An enumeration datatype */
+typedef struct H5T_enum_t {
+    unsigned	nalloc;		/*num entries allocated		     */
+    unsigned	nmembs;		/*number of members defined in enum  */
+    H5T_sort_t	sorted;		/*how are members sorted?	     */
+    uint8_t	*value;		/*array of values		     */
+    char	**name;		/*array of symbol names		     */
+} H5T_enum_t;
+
+/* VL function pointers */
+typedef ssize_t (*H5T_vlen_getlenfunc_t)(const void *vl_addr);
+typedef void * (*H5T_vlen_getptrfunc_t)(void *vl_addr);
+typedef htri_t (*H5T_vlen_isnullfunc_t)(const H5F_t *f, void *vl_addr);
+typedef herr_t (*H5T_vlen_readfunc_t)(H5F_t *f, hid_t dxpl_id, void *_vl, void *buf, size_t len);
+typedef herr_t (*H5T_vlen_writefunc_t)(H5F_t *f, hid_t dxpl_id, const H5T_vlen_alloc_info_t *vl_alloc_info, void *_vl, void *buf, void *_bg, size_t seq_len, size_t base_size);
+typedef herr_t (*H5T_vlen_setnullfunc_t)(H5F_t *f, hid_t dxpl_id, void *_vl, void *_bg);
+
+/* VL types */
+typedef enum {
+    H5T_VLEN_BADTYPE =  -1, /* invalid VL Type */
+    H5T_VLEN_SEQUENCE = 0,  /* VL sequence */
+    H5T_VLEN_STRING,        /* VL string */
+    H5T_VLEN_MAXTYPE        /* highest type (Invalid as true type) */
+} H5T_vlen_type_t;
+
+/* A VL datatype */
+typedef struct H5T_vlen_t {
+    H5T_vlen_type_t     type;   /* Type of VL data in buffer */
+    H5T_loc_t		loc;    /* Location of VL data in buffer */
+    H5T_cset_t          cset;   /* For VL string. character set */
+    H5T_str_t           pad;    /* For VL string.  space or null padding of
+                                 * extra bytes */
+    H5F_t *f;                   /* File ID (if VL data is on disk) */
+    H5T_vlen_getptrfunc_t getptr;   /* Function to get VL sequence pointer */
+    H5T_vlen_getlenfunc_t getlen;   /* Function to get VL sequence size (in element units, not bytes) */
+    H5T_vlen_isnullfunc_t isnull;   /* Function to check if VL value is NIL */
+    H5T_vlen_readfunc_t read;   /* Function to read VL sequence into buffer */
+    H5T_vlen_writefunc_t write; /* Function to write VL sequence from buffer */
+    H5T_vlen_setnullfunc_t setnull; /* Function to set a VL value to NIL */
+} H5T_vlen_t;
+
+/* An opaque datatype */
+typedef struct H5T_opaque_t {
+    char		*tag;		/*short type description string	     */
+} H5T_opaque_t;
+
+/* An array datatype */
+typedef struct H5T_array_t {
+    size_t	nelem;		/* total number of elements in array */
+    unsigned	ndims;		/* member dimensionality        */
+    size_t	dim[H5S_MAX_RANK];  /* size in each dimension       */
+} H5T_array_t;
+
+typedef enum H5T_state_t {
+    H5T_STATE_TRANSIENT, 		/*type is a modifiable, closable transient */
+    H5T_STATE_RDONLY,			/*transient, not modifiable, closable */
+    H5T_STATE_IMMUTABLE,		/*transient, not modifiable, not closable */
+    H5T_STATE_NAMED,			/*named constant, not open	     */
+    H5T_STATE_OPEN			/*named constant, open object header */
+} H5T_state_t;
+
+    /* This struct is shared between all occurances of an open named type */
+typedef struct H5T_shared_t {
+    hsize_t		fo_count; /* number of references to this file object */
+    H5T_state_t		state;	/*current state of the type		     */
+    H5T_class_t		type;	/*which class of type is this?		     */
+    size_t		size;	/*total size of an instance of this type     */
+    unsigned            version;        /* Version of object header message to encode this object with */
+    hbool_t		force_conv;/* Set if this type always needs to be converted and H5T__conv_noop cannot be called */
+    struct H5T_t	*parent;/*parent type for derived datatypes	     */
+    union {
+        H5T_atomic_t	atomic; /* an atomic datatype              */
+        H5T_compnd_t	compnd; /* a compound datatype (struct)    */
+        H5T_enum_t	enumer; /* an enumeration type (enum)       */
+        H5T_vlen_t	vlen;   /* a variable-length datatype       */
+        H5T_opaque_t	opaque; /* an opaque datatype              */
+        H5T_array_t	array;  /* an array datatype                */
+    } u;
+} H5T_shared_t;
+
+struct H5T_t {
+    H5O_shared_t    sh_loc;     /* Shared message info (must be first) */
+
+    H5T_shared_t   *shared;     /* all other information */
+    H5O_loc_t       oloc;       /* Object location, if the type is a named type */
+    H5G_name_t      path;       /* group hier. path if the type is a named type */
+};
+
+/* The master list of soft conversion functions */
+typedef struct H5T_soft_t {
+    char	name[H5T_NAMELEN];	/*name for debugging only	     */
+    H5T_class_t src;			/*source datatype class	     */
+    H5T_class_t dst;			/*destination datatype class	     */
+    H5T_conv_t	func;			/*the conversion function	     */
+} H5T_soft_t;
+
+/* Bit search direction */
+typedef enum H5T_sdir_t {
+    H5T_BIT_LSB,			/*search lsb toward msb		     */
+    H5T_BIT_MSB				/*search msb toward lsb		     */
+} H5T_sdir_t;
+
+/* Typedef for named datatype creation operation */
+typedef struct {
+    H5T_t *dt;                  /* Datatype to commit */
+    hid_t tcpl_id;              /* Named datatype creation property list */
+} H5T_obj_create_t;
+
+/* Typedef for datatype iteration operations */
+typedef herr_t (*H5T_operator_t)(H5T_t *dt, void *op_data/*in,out*/);
+
+/*
+ * Alignment information for native types. A value of N indicates that the
+ * data must be aligned on an address ADDR such that 0 == ADDR mod N. When
+ * N=1 no alignment is required; N=0 implies that alignment constraints were
+ * not calculated.  These alignment info is only for H5Tget_native_type.
+ * These values are used for structure alignment.
+ */
+H5_DLLVAR size_t	H5T_NATIVE_SCHAR_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_SHORT_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_LONG_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_LLONG_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_FLOAT_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_DOUBLE_COMP_ALIGN_g;
+#if H5_SIZEOF_LONG_DOUBLE !=0
+H5_DLLVAR size_t	H5T_NATIVE_LDOUBLE_COMP_ALIGN_g;
+#endif
+
+H5_DLLVAR size_t H5T_POINTER_COMP_ALIGN_g;
+H5_DLLVAR size_t H5T_HVL_COMP_ALIGN_g;
+H5_DLLVAR size_t H5T_HOBJREF_COMP_ALIGN_g;
+H5_DLLVAR size_t H5T_HDSETREGREF_COMP_ALIGN_g;
+
+/*
+ * Alignment information for native types. A value of N indicates that the
+ * data must be aligned on an address ADDR such that 0 == ADDR mod N. When
+ * N=1 no alignment is required; N=0 implies that alignment constraints were
+ * not calculated.
+ */
+H5_DLLVAR size_t	H5T_NATIVE_SCHAR_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UCHAR_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_SHORT_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_USHORT_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_LONG_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_ULONG_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_LLONG_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_ULLONG_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_FLOAT_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_DOUBLE_ALIGN_g;
+#if H5_SIZEOF_LONG_DOUBLE !=0
+H5_DLLVAR size_t	H5T_NATIVE_LDOUBLE_ALIGN_g;
+#endif
+
+/* C9x alignment constraints */
+H5_DLLVAR size_t	H5T_NATIVE_INT8_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT8_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_LEAST8_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_LEAST8_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_FAST8_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_FAST8_ALIGN_g;
+
+H5_DLLVAR size_t	H5T_NATIVE_INT16_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT16_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_LEAST16_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_LEAST16_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_FAST16_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_FAST16_ALIGN_g;
+
+H5_DLLVAR size_t	H5T_NATIVE_INT32_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT32_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_LEAST32_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_LEAST32_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_FAST32_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_FAST32_ALIGN_g;
+
+H5_DLLVAR size_t	H5T_NATIVE_INT64_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT64_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_LEAST64_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_LEAST64_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_FAST64_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_FAST64_ALIGN_g;
+
+/* Useful floating-point values for conversion routines */
+/* (+/- Inf for all floating-point types) */
+H5_DLLVAR float H5T_NATIVE_FLOAT_POS_INF_g;
+H5_DLLVAR float H5T_NATIVE_FLOAT_NEG_INF_g;
+H5_DLLVAR double H5T_NATIVE_DOUBLE_POS_INF_g;
+H5_DLLVAR double H5T_NATIVE_DOUBLE_NEG_INF_g;
+#if H5_SIZEOF_LONG_DOUBLE !=0
+H5_DLLVAR double H5T_NATIVE_LDOUBLE_POS_INF_g;
+H5_DLLVAR double H5T_NATIVE_LDOUBLE_NEG_INF_g;
+#endif
+
+/* Declare extern the free lists for H5T_t's and H5T_shared_t's */
+H5FL_EXTERN(H5T_t);
+H5FL_EXTERN(H5T_shared_t);
+
+/* Common functions */
+H5_DLL herr_t H5T__term_deprec_interface(void);
+H5_DLL H5T_t *H5T__create(H5T_class_t type, size_t size);
+H5_DLL herr_t H5T__commit(H5F_t *file, H5T_t *type, hid_t tcpl_id, hid_t dxpl_id);
+H5_DLL herr_t H5T__commit_named(const H5G_loc_t *loc, const char *name,
+    H5T_t *dt, hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id, hid_t dxpl_id);
+H5_DLL H5T_t *H5T__alloc(void);
+H5_DLL herr_t H5T__free(H5T_t *dt);
+H5_DLL herr_t H5T__visit(H5T_t *dt, unsigned visit_flags, H5T_operator_t op,
+    void *op_value);
+H5_DLL herr_t H5T__upgrade_version(H5T_t *dt, unsigned new_version);
+
+/* Conversion functions */
+H5_DLL herr_t H5T__conv_noop(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T__conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_order_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_enum_numeric(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_array(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_i_i(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_f_f(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_f_i(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_i_f(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_s_s(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_b_b(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T__conv_schar_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_int(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_uint(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_int(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_uint(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_long(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_ulong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_long(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_ulong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_llong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_llong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T__conv_short_schar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_uchar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_schar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_uchar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_ushort(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_short(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_int(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_uint(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_int(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_uint(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_long(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_ulong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_long(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_ulong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_llong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_llong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_ullong(hid_t src_id, hid_t dst_id,
+				      H5T_cdata_t *cdata, size_t nelmts,
+				      size_t buf_stride, size_t bkg_stride,
+                                      void *buf, void *bkg,
+                                      hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T__conv_int_schar(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_uchar(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_schar(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_uchar(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_short(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_ushort(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_short(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_ushort(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_uint(hid_t src_id, hid_t dst_id,
+				 H5T_cdata_t *cdata, size_t nelmts,
+				 size_t buf_stride, size_t bkg_stride,
+                                 void *buf, void *bkg,
+                                 hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_int(hid_t src_id, hid_t dst_id,
+				 H5T_cdata_t *cdata, size_t nelmts,
+				 size_t buf_stride, size_t bkg_stride,
+                                 void *buf, void *bkg,
+                                 hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_long(hid_t src_id, hid_t dst_id,
+				 H5T_cdata_t *cdata, size_t nelmts,
+				 size_t buf_stride, size_t bkg_stride,
+                                 void *buf, void *bkg,
+                                 hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_ulong(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_long(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_ulong(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_llong(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_ullong(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_llong(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_ullong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T__conv_long_schar(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_uchar(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_schar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_uchar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_short(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_ushort(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_short(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_ushort(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_int(hid_t src_id, hid_t dst_id,
+				 H5T_cdata_t *cdata, size_t nelmts,
+				 size_t buf_stride, size_t bkg_stride,
+                                 void *buf, void *bkg,
+                                 hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_uint(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_int(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_uint(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_ulong(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_long(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_llong(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_ullong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_llong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T__conv_llong_schar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_uchar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_schar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_uchar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_short(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_ushort(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_short(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_ushort(hid_t src_id, hid_t dst_id,
+				      H5T_cdata_t *cdata, size_t nelmts,
+				      size_t buf_stride, size_t bkg_stride,
+                                      void *buf, void *bkg,
+                                      hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_int(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_uint(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_int(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_uint(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_long(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_ulong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_long(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_ulong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_llong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_schar_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uchar_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_short_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ushort_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_int_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_uint_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_long_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ulong_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_llong_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ullong_ldouble(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_schar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_uchar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_short(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_ushort(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_int(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_uint(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_long(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_ulong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_llong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_float_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_schar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_uchar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_short(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_ushort(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_int(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_uint(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_long(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_ulong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_llong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_double_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_schar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_uchar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_short(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_ushort(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_int(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_uint(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_long(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_ulong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_llong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T__conv_ldouble_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+
+/* Bit twiddling functions */
+H5_DLL void H5T__bit_copy(uint8_t *dst, size_t dst_offset, const uint8_t *src,
+			  size_t src_offset, size_t size);
+H5_DLL herr_t H5T__bit_shift(uint8_t *buf, ssize_t shift_dist, size_t offset, size_t size);
+H5_DLL void H5T__bit_set(uint8_t *buf, size_t offset, size_t size,
+			 hbool_t value);
+H5_DLL uint64_t H5T__bit_get_d(uint8_t *buf, size_t offset, size_t size);
+H5_DLL void H5T__bit_set_d(uint8_t *buf, size_t offset, size_t size,
+			   uint64_t val);
+H5_DLL ssize_t H5T__bit_find(uint8_t *buf, size_t offset, size_t size,
+			     H5T_sdir_t direction, hbool_t value);
+H5_DLL htri_t H5T__bit_inc(uint8_t *buf, size_t start, size_t size);
+H5_DLL htri_t H5T__bit_dec(uint8_t *buf, size_t start, size_t size);
+H5_DLL void H5T__bit_neg(uint8_t *buf, size_t start, size_t size);
+
+/* VL functions */
+H5_DLL H5T_t * H5T__vlen_create(const H5T_t *base);
+H5_DLL htri_t H5T__vlen_set_loc(const H5T_t *dt, H5F_t *f, H5T_loc_t loc);
+
+/* Array functions */
+H5_DLL H5T_t *H5T__array_create(H5T_t *base, unsigned ndims, const hsize_t dim[/* ndims */]);
+H5_DLL int    H5T__get_array_ndims(const H5T_t *dt);
+H5_DLL int    H5T__get_array_dims(const H5T_t *dt, hsize_t dims[]);
+
+/* Compound functions */
+H5_DLL herr_t H5T__insert(H5T_t *parent, const char *name, size_t offset,
+        const H5T_t *member);
+H5_DLL size_t H5T__get_member_size(const H5T_t *dt, unsigned membno);
+H5_DLL void H5T__update_packed(const H5T_t *dt);
+H5_DLL H5T_subset_info_t *H5T__conv_struct_subset(const H5T_cdata_t *cdata);
+
+/* Enumerated type functions */
+H5_DLL H5T_t *H5T__enum_create(const H5T_t *parent);
+H5_DLL herr_t H5T__enum_insert(const H5T_t *dt, const char *name, const void *value);
+H5_DLL herr_t H5T__get_member_value(const H5T_t *dt, unsigned membno, void *value);
+
+/* Field functions (for both compound & enumerated types) */
+H5_DLL char  *H5T__get_member_name(H5T_t const *dt, unsigned membno);
+H5_DLL herr_t H5T__sort_value(const H5T_t *dt, int *map);
+H5_DLL herr_t H5T__sort_name(const H5T_t *dt, int *map);
+
+/* Debugging functions */
+H5_DLL herr_t H5T__print_stats(H5T_path_t *path, int *nprint/*in,out*/);
+
+#endif /* _H5Tpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Tpublic.h b/Resources/windows-libs/HDF5/include/H5Tpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..d646ef1e887e048fdf6a5de709e2bd6db4f45519
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Tpublic.h
@@ -0,0 +1,621 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5T module.
+ */
+#ifndef _H5Tpublic_H
+#define _H5Tpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+#define HOFFSET(S,M)    (offsetof(S,M))
+
+/* These are the various classes of datatypes */
+/* If this goes over 16 types (0-15), the file format will need to change) */
+typedef enum H5T_class_t {
+    H5T_NO_CLASS         = -1,  /*error                                      */
+    H5T_INTEGER          = 0,   /*integer types                              */
+    H5T_FLOAT            = 1,   /*floating-point types                       */
+    H5T_TIME             = 2,   /*date and time types                        */
+    H5T_STRING           = 3,   /*character string types                     */
+    H5T_BITFIELD         = 4,   /*bit field types                            */
+    H5T_OPAQUE           = 5,   /*opaque types                               */
+    H5T_COMPOUND         = 6,   /*compound types                             */
+    H5T_REFERENCE        = 7,   /*reference types                            */
+    H5T_ENUM		 = 8,	/*enumeration types                          */
+    H5T_VLEN		 = 9,	/*Variable-Length types                      */
+    H5T_ARRAY	         = 10,	/*Array types                                */
+
+    H5T_NCLASSES                /*this must be last                          */
+} H5T_class_t;
+
+/* Byte orders */
+typedef enum H5T_order_t {
+    H5T_ORDER_ERROR      = -1,  /*error                                      */
+    H5T_ORDER_LE         = 0,   /*little endian                              */
+    H5T_ORDER_BE         = 1,   /*bit endian                                 */
+    H5T_ORDER_VAX        = 2,   /*VAX mixed endian                           */
+    H5T_ORDER_MIXED      = 3,   /*Compound type with mixed member orders     */
+    H5T_ORDER_NONE       = 4    /*no particular order (strings, bits,..)     */
+    /*H5T_ORDER_NONE must be last */
+} H5T_order_t;
+
+/* Types of integer sign schemes */
+typedef enum H5T_sign_t {
+    H5T_SGN_ERROR        = -1,  /*error                                      */
+    H5T_SGN_NONE         = 0,   /*this is an unsigned type                   */
+    H5T_SGN_2            = 1,   /*two's complement                           */
+
+    H5T_NSGN             = 2    /*this must be last!                         */
+} H5T_sign_t;
+
+/* Floating-point normalization schemes */
+typedef enum H5T_norm_t {
+    H5T_NORM_ERROR       = -1,  /*error                                      */
+    H5T_NORM_IMPLIED     = 0,   /*msb of mantissa isn't stored, always 1     */
+    H5T_NORM_MSBSET      = 1,   /*msb of mantissa is always 1                */
+    H5T_NORM_NONE        = 2    /*not normalized                             */
+    /*H5T_NORM_NONE must be last */
+} H5T_norm_t;
+
+/*
+ * Character set to use for text strings.  Do not change these values since
+ * they appear in HDF5 files!
+ */
+typedef enum H5T_cset_t {
+    H5T_CSET_ERROR       = -1,  /*error                                      */
+    H5T_CSET_ASCII       = 0,   /*US ASCII                                   */
+    H5T_CSET_UTF8        = 1,   /*UTF-8 Unicode encoding		     */
+    H5T_CSET_RESERVED_2  = 2,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_3  = 3,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_4  = 4,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_5  = 5,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_6  = 6,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_7  = 7,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_8  = 8,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_9  = 9,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_10 = 10,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_11 = 11,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_12 = 12,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_13 = 13,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_14 = 14,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_15 = 15   /*reserved for later use		     */
+} H5T_cset_t;
+#define H5T_NCSET H5T_CSET_RESERVED_2    		/*Number of character sets actually defined  */
+
+/*
+ * Type of padding to use in character strings.  Do not change these values
+ * since they appear in HDF5 files!
+ */
+typedef enum H5T_str_t {
+    H5T_STR_ERROR        = -1,  /*error                                      */
+    H5T_STR_NULLTERM     = 0,   /*null terminate like in C                   */
+    H5T_STR_NULLPAD      = 1,   /*pad with nulls                             */
+    H5T_STR_SPACEPAD     = 2,   /*pad with spaces like in Fortran            */
+    H5T_STR_RESERVED_3   = 3,   /*reserved for later use		     */
+    H5T_STR_RESERVED_4   = 4,   /*reserved for later use		     */
+    H5T_STR_RESERVED_5   = 5,   /*reserved for later use		     */
+    H5T_STR_RESERVED_6   = 6,   /*reserved for later use		     */
+    H5T_STR_RESERVED_7   = 7,   /*reserved for later use		     */
+    H5T_STR_RESERVED_8   = 8,   /*reserved for later use		     */
+    H5T_STR_RESERVED_9   = 9,   /*reserved for later use		     */
+    H5T_STR_RESERVED_10  = 10,  /*reserved for later use		     */
+    H5T_STR_RESERVED_11  = 11,  /*reserved for later use		     */
+    H5T_STR_RESERVED_12  = 12,  /*reserved for later use		     */
+    H5T_STR_RESERVED_13  = 13,  /*reserved for later use		     */
+    H5T_STR_RESERVED_14  = 14,  /*reserved for later use		     */
+    H5T_STR_RESERVED_15  = 15   /*reserved for later use		     */
+} H5T_str_t;
+#define H5T_NSTR H5T_STR_RESERVED_3		/*num H5T_str_t types actually defined	     */
+
+/* Type of padding to use in other atomic types */
+typedef enum H5T_pad_t {
+    H5T_PAD_ERROR        = -1,  /*error                                      */
+    H5T_PAD_ZERO         = 0,   /*always set to zero                         */
+    H5T_PAD_ONE          = 1,   /*always set to one                          */
+    H5T_PAD_BACKGROUND   = 2,   /*set to background value                    */
+
+    H5T_NPAD             = 3    /*THIS MUST BE LAST                          */
+} H5T_pad_t;
+
+/* Commands sent to conversion functions */
+typedef enum H5T_cmd_t {
+    H5T_CONV_INIT	= 0,	/*query and/or initialize private data	     */
+    H5T_CONV_CONV	= 1, 	/*convert data from source to dest datatype */
+    H5T_CONV_FREE	= 2	/*function is being removed from path	     */
+} H5T_cmd_t;
+
+/* How is the `bkg' buffer used by the conversion function? */
+typedef enum H5T_bkg_t {
+    H5T_BKG_NO		= 0, 	/*background buffer is not needed, send NULL */
+    H5T_BKG_TEMP	= 1,	/*bkg buffer used as temp storage only       */
+    H5T_BKG_YES		= 2	/*init bkg buf with data before conversion   */
+} H5T_bkg_t;
+
+/* Type conversion client data */
+typedef struct H5T_cdata_t {
+    H5T_cmd_t		command;/*what should the conversion function do?    */
+    H5T_bkg_t		need_bkg;/*is the background buffer needed?	     */
+    hbool_t		recalc;	/*recalculate private data		     */
+    void		*priv;	/*private data				     */
+} H5T_cdata_t;
+
+/* Conversion function persistence */
+typedef enum H5T_pers_t {
+    H5T_PERS_DONTCARE	= -1, 	/*wild card				     */
+    H5T_PERS_HARD	= 0,	/*hard conversion function		     */
+    H5T_PERS_SOFT	= 1 	/*soft conversion function		     */
+} H5T_pers_t;
+
+/* The order to retrieve atomic native datatype */
+typedef enum H5T_direction_t {
+    H5T_DIR_DEFAULT     = 0,    /*default direction is inscendent            */
+    H5T_DIR_ASCEND      = 1,    /*in inscendent order                        */
+    H5T_DIR_DESCEND     = 2     /*in descendent order                        */
+} H5T_direction_t;
+
+/* The exception type passed into the conversion callback function */
+typedef enum H5T_conv_except_t {
+    H5T_CONV_EXCEPT_RANGE_HI       = 0,   /*source value is greater than destination's range */
+    H5T_CONV_EXCEPT_RANGE_LOW      = 1,   /*source value is less than destination's range    */
+    H5T_CONV_EXCEPT_PRECISION      = 2,   /*source value loses precision in destination      */
+    H5T_CONV_EXCEPT_TRUNCATE       = 3,   /*source value is truncated in destination         */
+    H5T_CONV_EXCEPT_PINF           = 4,   /*source value is positive infinity(floating number) */
+    H5T_CONV_EXCEPT_NINF           = 5,   /*source value is negative infinity(floating number) */
+    H5T_CONV_EXCEPT_NAN            = 6    /*source value is NaN(floating number)             */
+} H5T_conv_except_t;
+
+/* The return value from conversion callback function H5T_conv_except_func_t */
+typedef enum H5T_conv_ret_t {
+    H5T_CONV_ABORT      = -1,   /*abort conversion                           */
+    H5T_CONV_UNHANDLED  = 0,    /*callback function failed to handle the exception      */
+    H5T_CONV_HANDLED    = 1     /*callback function handled the exception successfully  */
+} H5T_conv_ret_t;
+
+/* Variable Length Datatype struct in memory */
+/* (This is only used for VL sequences, not VL strings, which are stored in char *'s) */
+typedef struct {
+    size_t len; /* Length of VL data (in base type units) */
+    void *p;    /* Pointer to VL data */
+} hvl_t;
+
+/* Variable Length String information */
+#define H5T_VARIABLE    ((size_t)(-1))  /* Indicate that a string is variable length (null-terminated in C, instead of fixed length) */
+
+/* Opaque information */
+#define H5T_OPAQUE_TAG_MAX      256     /* Maximum length of an opaque tag */
+                                        /* This could be raised without too much difficulty */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* All datatype conversion functions are... */
+typedef herr_t (*H5T_conv_t) (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+      size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf,
+      void *bkg, hid_t dset_xfer_plist);
+
+/* Exception handler.  If an exception like overflow happenes during conversion,
+ * this function is called if it's registered through H5Pset_type_conv_cb.
+ */
+typedef H5T_conv_ret_t (*H5T_conv_except_func_t)(H5T_conv_except_t except_type,
+    hid_t src_id, hid_t dst_id, void *src_buf, void *dst_buf, void *user_data);
+
+/* When this header is included from a private header, don't make calls to H5open() */
+#undef H5OPEN
+#ifndef _H5private_H
+#define H5OPEN          H5open(),
+#else   /* _H5private_H */
+#define H5OPEN
+#endif  /* _H5private_H */
+
+/*
+ * The IEEE floating point types in various byte orders.
+ */
+#define H5T_IEEE_F32BE		(H5OPEN H5T_IEEE_F32BE_g)
+#define H5T_IEEE_F32LE		(H5OPEN H5T_IEEE_F32LE_g)
+#define H5T_IEEE_F64BE		(H5OPEN H5T_IEEE_F64BE_g)
+#define H5T_IEEE_F64LE		(H5OPEN H5T_IEEE_F64LE_g)
+H5_DLLVAR hid_t H5T_IEEE_F32BE_g;
+H5_DLLVAR hid_t H5T_IEEE_F32LE_g;
+H5_DLLVAR hid_t H5T_IEEE_F64BE_g;
+H5_DLLVAR hid_t H5T_IEEE_F64LE_g;
+
+/*
+ * These are "standard" types.  For instance, signed (2's complement) and
+ * unsigned integers of various sizes and byte orders.
+ */
+#define H5T_STD_I8BE		(H5OPEN H5T_STD_I8BE_g)
+#define H5T_STD_I8LE		(H5OPEN H5T_STD_I8LE_g)
+#define H5T_STD_I16BE		(H5OPEN H5T_STD_I16BE_g)
+#define H5T_STD_I16LE		(H5OPEN H5T_STD_I16LE_g)
+#define H5T_STD_I32BE		(H5OPEN H5T_STD_I32BE_g)
+#define H5T_STD_I32LE		(H5OPEN H5T_STD_I32LE_g)
+#define H5T_STD_I64BE		(H5OPEN H5T_STD_I64BE_g)
+#define H5T_STD_I64LE		(H5OPEN H5T_STD_I64LE_g)
+#define H5T_STD_U8BE		(H5OPEN H5T_STD_U8BE_g)
+#define H5T_STD_U8LE		(H5OPEN H5T_STD_U8LE_g)
+#define H5T_STD_U16BE		(H5OPEN H5T_STD_U16BE_g)
+#define H5T_STD_U16LE		(H5OPEN H5T_STD_U16LE_g)
+#define H5T_STD_U32BE		(H5OPEN H5T_STD_U32BE_g)
+#define H5T_STD_U32LE		(H5OPEN H5T_STD_U32LE_g)
+#define H5T_STD_U64BE		(H5OPEN H5T_STD_U64BE_g)
+#define H5T_STD_U64LE		(H5OPEN H5T_STD_U64LE_g)
+#define H5T_STD_B8BE		(H5OPEN H5T_STD_B8BE_g)
+#define H5T_STD_B8LE		(H5OPEN H5T_STD_B8LE_g)
+#define H5T_STD_B16BE		(H5OPEN H5T_STD_B16BE_g)
+#define H5T_STD_B16LE		(H5OPEN H5T_STD_B16LE_g)
+#define H5T_STD_B32BE		(H5OPEN H5T_STD_B32BE_g)
+#define H5T_STD_B32LE		(H5OPEN H5T_STD_B32LE_g)
+#define H5T_STD_B64BE		(H5OPEN H5T_STD_B64BE_g)
+#define H5T_STD_B64LE		(H5OPEN H5T_STD_B64LE_g)
+#define H5T_STD_REF_OBJ	        (H5OPEN H5T_STD_REF_OBJ_g)
+#define H5T_STD_REF_DSETREG     (H5OPEN H5T_STD_REF_DSETREG_g)
+H5_DLLVAR hid_t H5T_STD_I8BE_g;
+H5_DLLVAR hid_t H5T_STD_I8LE_g;
+H5_DLLVAR hid_t H5T_STD_I16BE_g;
+H5_DLLVAR hid_t H5T_STD_I16LE_g;
+H5_DLLVAR hid_t H5T_STD_I32BE_g;
+H5_DLLVAR hid_t H5T_STD_I32LE_g;
+H5_DLLVAR hid_t H5T_STD_I64BE_g;
+H5_DLLVAR hid_t H5T_STD_I64LE_g;
+H5_DLLVAR hid_t H5T_STD_U8BE_g;
+H5_DLLVAR hid_t H5T_STD_U8LE_g;
+H5_DLLVAR hid_t H5T_STD_U16BE_g;
+H5_DLLVAR hid_t H5T_STD_U16LE_g;
+H5_DLLVAR hid_t H5T_STD_U32BE_g;
+H5_DLLVAR hid_t H5T_STD_U32LE_g;
+H5_DLLVAR hid_t H5T_STD_U64BE_g;
+H5_DLLVAR hid_t H5T_STD_U64LE_g;
+H5_DLLVAR hid_t H5T_STD_B8BE_g;
+H5_DLLVAR hid_t H5T_STD_B8LE_g;
+H5_DLLVAR hid_t H5T_STD_B16BE_g;
+H5_DLLVAR hid_t H5T_STD_B16LE_g;
+H5_DLLVAR hid_t H5T_STD_B32BE_g;
+H5_DLLVAR hid_t H5T_STD_B32LE_g;
+H5_DLLVAR hid_t H5T_STD_B64BE_g;
+H5_DLLVAR hid_t H5T_STD_B64LE_g;
+H5_DLLVAR hid_t H5T_STD_REF_OBJ_g;
+H5_DLLVAR hid_t H5T_STD_REF_DSETREG_g;
+
+/*
+ * Types which are particular to Unix.
+ */
+#define H5T_UNIX_D32BE		(H5OPEN H5T_UNIX_D32BE_g)
+#define H5T_UNIX_D32LE		(H5OPEN H5T_UNIX_D32LE_g)
+#define H5T_UNIX_D64BE		(H5OPEN H5T_UNIX_D64BE_g)
+#define H5T_UNIX_D64LE		(H5OPEN H5T_UNIX_D64LE_g)
+H5_DLLVAR hid_t H5T_UNIX_D32BE_g;
+H5_DLLVAR hid_t H5T_UNIX_D32LE_g;
+H5_DLLVAR hid_t H5T_UNIX_D64BE_g;
+H5_DLLVAR hid_t H5T_UNIX_D64LE_g;
+
+/*
+ * Types particular to the C language.  String types use `bytes' instead
+ * of `bits' as their size.
+ */
+#define H5T_C_S1		(H5OPEN H5T_C_S1_g)
+H5_DLLVAR hid_t H5T_C_S1_g;
+
+/*
+ * Types particular to Fortran.
+ */
+#define H5T_FORTRAN_S1		(H5OPEN H5T_FORTRAN_S1_g)
+H5_DLLVAR hid_t H5T_FORTRAN_S1_g;
+
+/*
+ * These types are for Intel CPU's.  They are little endian with IEEE
+ * floating point.
+ */
+#define H5T_INTEL_I8		H5T_STD_I8LE
+#define H5T_INTEL_I16		H5T_STD_I16LE
+#define H5T_INTEL_I32		H5T_STD_I32LE
+#define H5T_INTEL_I64		H5T_STD_I64LE
+#define H5T_INTEL_U8		H5T_STD_U8LE
+#define H5T_INTEL_U16		H5T_STD_U16LE
+#define H5T_INTEL_U32		H5T_STD_U32LE
+#define H5T_INTEL_U64		H5T_STD_U64LE
+#define H5T_INTEL_B8		H5T_STD_B8LE
+#define H5T_INTEL_B16		H5T_STD_B16LE
+#define H5T_INTEL_B32		H5T_STD_B32LE
+#define H5T_INTEL_B64		H5T_STD_B64LE
+#define H5T_INTEL_F32		H5T_IEEE_F32LE
+#define H5T_INTEL_F64		H5T_IEEE_F64LE
+
+/*
+ * These types are for DEC Alpha CPU's.  They are little endian with IEEE
+ * floating point.
+ */
+#define H5T_ALPHA_I8		H5T_STD_I8LE
+#define H5T_ALPHA_I16		H5T_STD_I16LE
+#define H5T_ALPHA_I32		H5T_STD_I32LE
+#define H5T_ALPHA_I64		H5T_STD_I64LE
+#define H5T_ALPHA_U8		H5T_STD_U8LE
+#define H5T_ALPHA_U16		H5T_STD_U16LE
+#define H5T_ALPHA_U32		H5T_STD_U32LE
+#define H5T_ALPHA_U64		H5T_STD_U64LE
+#define H5T_ALPHA_B8		H5T_STD_B8LE
+#define H5T_ALPHA_B16		H5T_STD_B16LE
+#define H5T_ALPHA_B32		H5T_STD_B32LE
+#define H5T_ALPHA_B64		H5T_STD_B64LE
+#define H5T_ALPHA_F32		H5T_IEEE_F32LE
+#define H5T_ALPHA_F64		H5T_IEEE_F64LE
+
+/*
+ * These types are for MIPS cpu's commonly used in SGI systems. They are big
+ * endian with IEEE floating point.
+ */
+#define H5T_MIPS_I8		H5T_STD_I8BE
+#define H5T_MIPS_I16		H5T_STD_I16BE
+#define H5T_MIPS_I32		H5T_STD_I32BE
+#define H5T_MIPS_I64		H5T_STD_I64BE
+#define H5T_MIPS_U8		H5T_STD_U8BE
+#define H5T_MIPS_U16		H5T_STD_U16BE
+#define H5T_MIPS_U32		H5T_STD_U32BE
+#define H5T_MIPS_U64		H5T_STD_U64BE
+#define H5T_MIPS_B8		H5T_STD_B8BE
+#define H5T_MIPS_B16		H5T_STD_B16BE
+#define H5T_MIPS_B32		H5T_STD_B32BE
+#define H5T_MIPS_B64		H5T_STD_B64BE
+#define H5T_MIPS_F32		H5T_IEEE_F32BE
+#define H5T_MIPS_F64		H5T_IEEE_F64BE
+
+/*
+ * The VAX floating point types (i.e. in VAX byte order)
+ */
+#define H5T_VAX_F32		(H5OPEN H5T_VAX_F32_g)
+#define H5T_VAX_F64		(H5OPEN H5T_VAX_F64_g)
+H5_DLLVAR hid_t H5T_VAX_F32_g;
+H5_DLLVAR hid_t H5T_VAX_F64_g;
+
+/*
+ * The predefined native types. These are the types detected by H5detect and
+ * they violate the naming scheme a little.  Instead of a class name,
+ * precision and byte order as the last component, they have a C-like type
+ * name.  If the type begins with `U' then it is the unsigned version of the
+ * integer type; other integer types are signed.  The type LLONG corresponds
+ * to C's `long long' and LDOUBLE is `long double' (these types might be the
+ * same as `LONG' and `DOUBLE' respectively).
+ */
+#define H5T_NATIVE_CHAR		(CHAR_MIN?H5T_NATIVE_SCHAR:H5T_NATIVE_UCHAR)
+#define H5T_NATIVE_SCHAR        (H5OPEN H5T_NATIVE_SCHAR_g)
+#define H5T_NATIVE_UCHAR        (H5OPEN H5T_NATIVE_UCHAR_g)
+#define H5T_NATIVE_SHORT        (H5OPEN H5T_NATIVE_SHORT_g)
+#define H5T_NATIVE_USHORT       (H5OPEN H5T_NATIVE_USHORT_g)
+#define H5T_NATIVE_INT          (H5OPEN H5T_NATIVE_INT_g)
+#define H5T_NATIVE_UINT         (H5OPEN H5T_NATIVE_UINT_g)
+#define H5T_NATIVE_LONG         (H5OPEN H5T_NATIVE_LONG_g)
+#define H5T_NATIVE_ULONG        (H5OPEN H5T_NATIVE_ULONG_g)
+#define H5T_NATIVE_LLONG        (H5OPEN H5T_NATIVE_LLONG_g)
+#define H5T_NATIVE_ULLONG       (H5OPEN H5T_NATIVE_ULLONG_g)
+#define H5T_NATIVE_FLOAT        (H5OPEN H5T_NATIVE_FLOAT_g)
+#define H5T_NATIVE_DOUBLE       (H5OPEN H5T_NATIVE_DOUBLE_g)
+#if H5_SIZEOF_LONG_DOUBLE !=0
+#define H5T_NATIVE_LDOUBLE	(H5OPEN H5T_NATIVE_LDOUBLE_g)
+#endif
+#define H5T_NATIVE_B8		(H5OPEN H5T_NATIVE_B8_g)
+#define H5T_NATIVE_B16		(H5OPEN H5T_NATIVE_B16_g)
+#define H5T_NATIVE_B32		(H5OPEN H5T_NATIVE_B32_g)
+#define H5T_NATIVE_B64		(H5OPEN H5T_NATIVE_B64_g)
+#define H5T_NATIVE_OPAQUE       (H5OPEN H5T_NATIVE_OPAQUE_g)
+#define H5T_NATIVE_HADDR	(H5OPEN H5T_NATIVE_HADDR_g)
+#define H5T_NATIVE_HSIZE	(H5OPEN H5T_NATIVE_HSIZE_g)
+#define H5T_NATIVE_HSSIZE	(H5OPEN H5T_NATIVE_HSSIZE_g)
+#define H5T_NATIVE_HERR		(H5OPEN H5T_NATIVE_HERR_g)
+#define H5T_NATIVE_HBOOL	(H5OPEN H5T_NATIVE_HBOOL_g)
+H5_DLLVAR hid_t H5T_NATIVE_SCHAR_g;
+H5_DLLVAR hid_t H5T_NATIVE_UCHAR_g;
+H5_DLLVAR hid_t H5T_NATIVE_SHORT_g;
+H5_DLLVAR hid_t H5T_NATIVE_USHORT_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_g;
+H5_DLLVAR hid_t H5T_NATIVE_LONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_ULONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_LLONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_ULLONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_FLOAT_g;
+H5_DLLVAR hid_t H5T_NATIVE_DOUBLE_g;
+#if H5_SIZEOF_LONG_DOUBLE !=0
+H5_DLLVAR hid_t H5T_NATIVE_LDOUBLE_g;
+#endif
+H5_DLLVAR hid_t H5T_NATIVE_B8_g;
+H5_DLLVAR hid_t H5T_NATIVE_B16_g;
+H5_DLLVAR hid_t H5T_NATIVE_B32_g;
+H5_DLLVAR hid_t H5T_NATIVE_B64_g;
+H5_DLLVAR hid_t H5T_NATIVE_OPAQUE_g;
+H5_DLLVAR hid_t H5T_NATIVE_HADDR_g;
+H5_DLLVAR hid_t H5T_NATIVE_HSIZE_g;
+H5_DLLVAR hid_t H5T_NATIVE_HSSIZE_g;
+H5_DLLVAR hid_t H5T_NATIVE_HERR_g;
+H5_DLLVAR hid_t H5T_NATIVE_HBOOL_g;
+
+/* C9x integer types */
+#define H5T_NATIVE_INT8			(H5OPEN H5T_NATIVE_INT8_g)
+#define H5T_NATIVE_UINT8		(H5OPEN H5T_NATIVE_UINT8_g)
+#define H5T_NATIVE_INT_LEAST8		(H5OPEN H5T_NATIVE_INT_LEAST8_g)
+#define H5T_NATIVE_UINT_LEAST8		(H5OPEN H5T_NATIVE_UINT_LEAST8_g)
+#define H5T_NATIVE_INT_FAST8 		(H5OPEN H5T_NATIVE_INT_FAST8_g)
+#define H5T_NATIVE_UINT_FAST8		(H5OPEN H5T_NATIVE_UINT_FAST8_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT8_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT8_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST8_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST8_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST8_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST8_g;
+
+#define H5T_NATIVE_INT16		(H5OPEN H5T_NATIVE_INT16_g)
+#define H5T_NATIVE_UINT16		(H5OPEN H5T_NATIVE_UINT16_g)
+#define H5T_NATIVE_INT_LEAST16		(H5OPEN H5T_NATIVE_INT_LEAST16_g)
+#define H5T_NATIVE_UINT_LEAST16		(H5OPEN H5T_NATIVE_UINT_LEAST16_g)
+#define H5T_NATIVE_INT_FAST16		(H5OPEN H5T_NATIVE_INT_FAST16_g)
+#define H5T_NATIVE_UINT_FAST16		(H5OPEN H5T_NATIVE_UINT_FAST16_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT16_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT16_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST16_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST16_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST16_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST16_g;
+
+#define H5T_NATIVE_INT32		(H5OPEN H5T_NATIVE_INT32_g)
+#define H5T_NATIVE_UINT32		(H5OPEN H5T_NATIVE_UINT32_g)
+#define H5T_NATIVE_INT_LEAST32		(H5OPEN H5T_NATIVE_INT_LEAST32_g)
+#define H5T_NATIVE_UINT_LEAST32		(H5OPEN H5T_NATIVE_UINT_LEAST32_g)
+#define H5T_NATIVE_INT_FAST32		(H5OPEN H5T_NATIVE_INT_FAST32_g)
+#define H5T_NATIVE_UINT_FAST32		(H5OPEN H5T_NATIVE_UINT_FAST32_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT32_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT32_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST32_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST32_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST32_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST32_g;
+
+#define H5T_NATIVE_INT64		(H5OPEN H5T_NATIVE_INT64_g)
+#define H5T_NATIVE_UINT64		(H5OPEN H5T_NATIVE_UINT64_g)
+#define H5T_NATIVE_INT_LEAST64		(H5OPEN H5T_NATIVE_INT_LEAST64_g)
+#define H5T_NATIVE_UINT_LEAST64 	(H5OPEN H5T_NATIVE_UINT_LEAST64_g)
+#define H5T_NATIVE_INT_FAST64		(H5OPEN H5T_NATIVE_INT_FAST64_g)
+#define H5T_NATIVE_UINT_FAST64		(H5OPEN H5T_NATIVE_UINT_FAST64_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT64_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT64_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST64_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST64_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST64_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST64_g;
+
+/* Operations defined on all datatypes */
+H5_DLL hid_t H5Tcreate(H5T_class_t type, size_t size);
+H5_DLL hid_t H5Tcopy(hid_t type_id);
+H5_DLL herr_t H5Tclose(hid_t type_id);
+H5_DLL htri_t H5Tequal(hid_t type1_id, hid_t type2_id);
+H5_DLL herr_t H5Tlock(hid_t type_id);
+H5_DLL herr_t H5Tcommit2(hid_t loc_id, const char *name, hid_t type_id,
+    hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id);
+H5_DLL hid_t H5Topen2(hid_t loc_id, const char *name, hid_t tapl_id);
+H5_DLL herr_t H5Tcommit_anon(hid_t loc_id, hid_t type_id, hid_t tcpl_id, hid_t tapl_id);
+H5_DLL hid_t H5Tget_create_plist(hid_t type_id);
+H5_DLL htri_t H5Tcommitted(hid_t type_id);
+H5_DLL herr_t H5Tencode(hid_t obj_id, void *buf, size_t *nalloc);
+H5_DLL hid_t H5Tdecode(const void *buf);
+
+/* Operations defined on compound datatypes */
+H5_DLL herr_t H5Tinsert(hid_t parent_id, const char *name, size_t offset,
+			 hid_t member_id);
+H5_DLL herr_t H5Tpack(hid_t type_id);
+
+/* Operations defined on enumeration datatypes */
+H5_DLL hid_t H5Tenum_create(hid_t base_id);
+H5_DLL herr_t H5Tenum_insert(hid_t type, const char *name, const void *value);
+H5_DLL herr_t H5Tenum_nameof(hid_t type, const void *value, char *name/*out*/,
+			     size_t size);
+H5_DLL herr_t H5Tenum_valueof(hid_t type, const char *name,
+			      void *value/*out*/);
+
+/* Operations defined on variable-length datatypes */
+H5_DLL hid_t H5Tvlen_create(hid_t base_id);
+
+/* Operations defined on array datatypes */
+H5_DLL hid_t H5Tarray_create2(hid_t base_id, unsigned ndims,
+            const hsize_t dim[/* ndims */]);
+H5_DLL int H5Tget_array_ndims(hid_t type_id);
+H5_DLL int H5Tget_array_dims2(hid_t type_id, hsize_t dims[]);
+
+/* Operations defined on opaque datatypes */
+H5_DLL herr_t H5Tset_tag(hid_t type, const char *tag);
+H5_DLL char *H5Tget_tag(hid_t type);
+
+/* Querying property values */
+H5_DLL hid_t H5Tget_super(hid_t type);
+H5_DLL H5T_class_t H5Tget_class(hid_t type_id);
+H5_DLL htri_t H5Tdetect_class(hid_t type_id, H5T_class_t cls);
+H5_DLL size_t H5Tget_size(hid_t type_id);
+H5_DLL H5T_order_t H5Tget_order(hid_t type_id);
+H5_DLL size_t H5Tget_precision(hid_t type_id);
+H5_DLL int H5Tget_offset(hid_t type_id);
+H5_DLL herr_t H5Tget_pad(hid_t type_id, H5T_pad_t *lsb/*out*/,
+			  H5T_pad_t *msb/*out*/);
+H5_DLL H5T_sign_t H5Tget_sign(hid_t type_id);
+H5_DLL herr_t H5Tget_fields(hid_t type_id, size_t *spos/*out*/,
+			     size_t *epos/*out*/, size_t *esize/*out*/,
+			     size_t *mpos/*out*/, size_t *msize/*out*/);
+H5_DLL size_t H5Tget_ebias(hid_t type_id);
+H5_DLL H5T_norm_t H5Tget_norm(hid_t type_id);
+H5_DLL H5T_pad_t H5Tget_inpad(hid_t type_id);
+H5_DLL H5T_str_t H5Tget_strpad(hid_t type_id);
+H5_DLL int H5Tget_nmembers(hid_t type_id);
+H5_DLL char *H5Tget_member_name(hid_t type_id, unsigned membno);
+H5_DLL int H5Tget_member_index(hid_t type_id, const char *name);
+H5_DLL size_t H5Tget_member_offset(hid_t type_id, unsigned membno);
+H5_DLL H5T_class_t H5Tget_member_class(hid_t type_id, unsigned membno);
+H5_DLL hid_t H5Tget_member_type(hid_t type_id, unsigned membno);
+H5_DLL herr_t H5Tget_member_value(hid_t type_id, unsigned membno, void *value/*out*/);
+H5_DLL H5T_cset_t H5Tget_cset(hid_t type_id);
+H5_DLL htri_t H5Tis_variable_str(hid_t type_id);
+H5_DLL hid_t H5Tget_native_type(hid_t type_id, H5T_direction_t direction);
+
+/* Setting property values */
+H5_DLL herr_t H5Tset_size(hid_t type_id, size_t size);
+H5_DLL herr_t H5Tset_order(hid_t type_id, H5T_order_t order);
+H5_DLL herr_t H5Tset_precision(hid_t type_id, size_t prec);
+H5_DLL herr_t H5Tset_offset(hid_t type_id, size_t offset);
+H5_DLL herr_t H5Tset_pad(hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb);
+H5_DLL herr_t H5Tset_sign(hid_t type_id, H5T_sign_t sign);
+H5_DLL herr_t H5Tset_fields(hid_t type_id, size_t spos, size_t epos,
+			     size_t esize, size_t mpos, size_t msize);
+H5_DLL herr_t H5Tset_ebias(hid_t type_id, size_t ebias);
+H5_DLL herr_t H5Tset_norm(hid_t type_id, H5T_norm_t norm);
+H5_DLL herr_t H5Tset_inpad(hid_t type_id, H5T_pad_t pad);
+H5_DLL herr_t H5Tset_cset(hid_t type_id, H5T_cset_t cset);
+H5_DLL herr_t H5Tset_strpad(hid_t type_id, H5T_str_t strpad);
+
+/* Type conversion database */
+H5_DLL herr_t H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id,
+			   hid_t dst_id, H5T_conv_t func);
+H5_DLL herr_t H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id,
+			     hid_t dst_id, H5T_conv_t func);
+H5_DLL H5T_conv_t H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata);
+H5_DLL htri_t H5Tcompiler_conv(hid_t src_id, hid_t dst_id);
+H5_DLL herr_t H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts,
+			  void *buf, void *background, hid_t plist_id);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+
+/* Typedefs */
+
+
+/* Function prototypes */
+H5_DLL herr_t H5Tcommit1(hid_t loc_id, const char *name, hid_t type_id);
+H5_DLL hid_t H5Topen1(hid_t loc_id, const char *name);
+H5_DLL hid_t H5Tarray_create1(hid_t base_id, int ndims,
+            const hsize_t dim[/* ndims */],
+            const int perm[/* ndims */]);
+H5_DLL int H5Tget_array_dims1(hid_t type_id, hsize_t dims[], int perm[]);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Tpublic_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5VarLenType.h b/Resources/windows-libs/HDF5/include/H5VarLenType.h
new file mode 100644
index 0000000000000000000000000000000000000000..9ad2b40c64c86930f4466bc229f67c53bd7d425b
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5VarLenType.h
@@ -0,0 +1,53 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class VarLenType inherits from DataType and provides wrappers for
+// the HDF5 C's Variable-length Datatypes.
+
+#ifndef __H5VarLenType_H
+#define __H5VarLenType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//! VarLenType operates on the HDF5 C's Variable-length Datatypes.
+class H5_DLLCPP VarLenType : public DataType {
+   public:
+	// Constructor that creates a variable-length datatype based
+	// on the specified base type.
+	VarLenType(const DataType* base_type);
+
+	///\brief Returns this class name.
+	virtual H5std_string fromClass () const { return("VarLenType"); }
+
+	// Copy constructor: makes copy of the original object.
+	VarLenType( const VarLenType& original );
+
+	// Constructor that takes an existing id
+	VarLenType( const hid_t existing_id );
+
+	// Noop destructor
+	virtual ~VarLenType();
+
+   protected:
+	// Default constructor
+	VarLenType();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // __H5VarLenType_H
diff --git a/Resources/windows-libs/HDF5/include/H5Zpkg.h b/Resources/windows-libs/HDF5/include/H5Zpkg.h
new file mode 100644
index 0000000000000000000000000000000000000000..b0df8561d7d9bd1f7da350ee8e347aa20d55b5e4
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Zpkg.h
@@ -0,0 +1,70 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5Z_PACKAGE
+#error "Do not include this file outside the H5Z package!"
+#endif
+
+#ifndef _H5Zpkg_H
+#define _H5Zpkg_H
+
+/* Include private header file */
+#include "H5Zprivate.h"          /* Filter functions                */
+
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+/*
+ * Deflate filter
+ */
+H5_DLLVAR const H5Z_class2_t H5Z_DEFLATE[1];
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+/*
+ * Shuffle filter
+ */
+H5_DLLVAR const H5Z_class2_t H5Z_SHUFFLE[1];
+#endif /* H5_HAVE_FILTER_SHUFFLE */
+
+#ifdef H5_HAVE_FILTER_FLETCHER32
+/*
+ * Fletcher32 filter
+ */
+H5_DLLVAR const H5Z_class2_t H5Z_FLETCHER32[1];
+#endif /* H5_HAVE_FILTER_FLETCHER32 */
+
+#ifdef H5_HAVE_FILTER_SZIP
+/*
+ * szip filter
+ */
+H5_DLLVAR H5Z_class2_t H5Z_SZIP[1];
+#endif /* H5_HAVE_FILTER_SZIP */
+
+#ifdef H5_HAVE_FILTER_NBIT
+/*
+ * nbit filter
+ */
+H5_DLLVAR H5Z_class2_t H5Z_NBIT[1];
+#endif /* H5_HAVE_FILTER_NBIT */
+
+#ifdef H5_HAVE_FILTER_SCALEOFFSET
+/*
+ * scaleoffset filter
+ */
+H5_DLLVAR H5Z_class2_t H5Z_SCALEOFFSET[1];
+#endif /* H5_HAVE_FILTER_SCALEOFFSET */
+
+#endif /* _H5Zpkg_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5Zpublic.h b/Resources/windows-libs/HDF5/include/H5Zpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..8daa5f490d32fb8af75f11fbb07d9e08008f16ea
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5Zpublic.h
@@ -0,0 +1,250 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Thursday, April 16, 1998
+ */
+
+#ifndef _H5Zpublic_H
+#define _H5Zpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/*
+ * Filter identifiers.  Values 0 through 255 are for filters defined by the
+ * HDF5 library.  Values 256 through 511 are available for testing new
+ * filters. Subsequent values should be obtained from the HDF5 development
+ * team at hdf5dev@ncsa.uiuc.edu.  These values will never change because they
+ * appear in the HDF5 files.
+ */
+typedef int H5Z_filter_t;
+
+/* Filter IDs */
+#define H5Z_FILTER_ERROR	(-1)	/*no filter			*/
+#define H5Z_FILTER_NONE		0	/*reserved indefinitely		*/
+#define H5Z_FILTER_DEFLATE	1 	/*deflation like gzip	     	*/
+#define H5Z_FILTER_SHUFFLE      2       /*shuffle the data              */
+#define H5Z_FILTER_FLETCHER32   3       /*fletcher32 checksum of EDC    */
+#define H5Z_FILTER_SZIP         4       /*szip compression              */
+#define H5Z_FILTER_NBIT         5       /*nbit compression              */
+#define H5Z_FILTER_SCALEOFFSET  6       /*scale+offset compression      */
+#define H5Z_FILTER_RESERVED     256	/*filter ids below this value are reserved for library use */
+
+#define H5Z_FILTER_MAX		65535	/*maximum filter id		*/
+
+/* General macros */
+#define H5Z_FILTER_ALL	 	0	/* Symbol to remove all filters in H5Premove_filter */
+#define H5Z_MAX_NFILTERS        32      /* Maximum number of filters allowed in a pipeline */
+                                        /* (should probably be allowed to be an
+                                         * unlimited amount, but currently each
+                                         * filter uses a bit in a 32-bit field,
+                                         * so the format would have to be
+                                         * changed to accomodate that)
+                                         */
+
+/* Flags for filter definition (stored) */
+#define H5Z_FLAG_DEFMASK	0x00ff	/*definition flag mask		*/
+#define H5Z_FLAG_MANDATORY      0x0000  /*filter is mandatory		*/
+#define H5Z_FLAG_OPTIONAL	0x0001	/*filter is optional		*/
+
+/* Additional flags for filter invocation (not stored) */
+#define H5Z_FLAG_INVMASK	0xff00	/*invocation flag mask		*/
+#define H5Z_FLAG_REVERSE	0x0100	/*reverse direction; read	*/
+#define H5Z_FLAG_SKIP_EDC	0x0200	/*skip EDC filters for read	*/
+
+/* Special parameters for szip compression */
+/* [These are aliases for the similar definitions in szlib.h, which we can't
+ * include directly due to the duplication of various symbols with the zlib.h
+ * header file] */
+#define H5_SZIP_ALLOW_K13_OPTION_MASK   1
+#define H5_SZIP_CHIP_OPTION_MASK        2
+#define H5_SZIP_EC_OPTION_MASK          4
+#define H5_SZIP_NN_OPTION_MASK          32
+#define H5_SZIP_MAX_PIXELS_PER_BLOCK    32
+
+/* Macros for the shuffle filter */
+#define H5Z_SHUFFLE_USER_NPARMS    0    /* Number of parameters that users can set */
+#define H5Z_SHUFFLE_TOTAL_NPARMS   1    /* Total number of parameters for filter */
+
+/* Macros for the szip filter */
+#define H5Z_SZIP_USER_NPARMS    2       /* Number of parameters that users can set */
+#define H5Z_SZIP_TOTAL_NPARMS   4       /* Total number of parameters for filter */
+#define H5Z_SZIP_PARM_MASK      0       /* "User" parameter for option mask */
+#define H5Z_SZIP_PARM_PPB       1       /* "User" parameter for pixels-per-block */
+#define H5Z_SZIP_PARM_BPP       2       /* "Local" parameter for bits-per-pixel */
+#define H5Z_SZIP_PARM_PPS       3       /* "Local" parameter for pixels-per-scanline */
+
+/* Macros for the nbit filter */
+#define H5Z_NBIT_USER_NPARMS     0     /* Number of parameters that users can set */
+
+/* Macros for the scale offset filter */
+#define H5Z_SCALEOFFSET_USER_NPARMS      2    /* Number of parameters that users can set */
+
+
+/* Special parameters for ScaleOffset filter*/
+#define H5Z_SO_INT_MINBITS_DEFAULT 0
+typedef enum H5Z_SO_scale_type_t {
+    H5Z_SO_FLOAT_DSCALE = 0,
+    H5Z_SO_FLOAT_ESCALE = 1,
+    H5Z_SO_INT          = 2
+} H5Z_SO_scale_type_t;
+
+/* Current version of the H5Z_class_t struct */
+#define H5Z_CLASS_T_VERS (1)
+
+/* Values to decide if EDC is enabled for reading data */
+typedef enum H5Z_EDC_t {
+    H5Z_ERROR_EDC       = -1,   /* error value */
+    H5Z_DISABLE_EDC     = 0,
+    H5Z_ENABLE_EDC      = 1,
+    H5Z_NO_EDC          = 2     /* must be the last */
+} H5Z_EDC_t;
+
+/* Bit flags for H5Zget_filter_info */
+#define H5Z_FILTER_CONFIG_ENCODE_ENABLED (0x0001)
+#define H5Z_FILTER_CONFIG_DECODE_ENABLED (0x0002)
+
+/* Return values for filter callback function */
+typedef enum H5Z_cb_return_t {
+    H5Z_CB_ERROR  = -1,
+    H5Z_CB_FAIL   = 0,    /* I/O should fail if filter fails. */
+    H5Z_CB_CONT   = 1,    /* I/O continues if filter fails.   */
+    H5Z_CB_NO     = 2
+} H5Z_cb_return_t;
+
+/* Filter callback function definition */
+typedef H5Z_cb_return_t (*H5Z_filter_func_t)(H5Z_filter_t filter, void* buf,
+                                size_t buf_size, void* op_data);
+
+/* Structure for filter callback property */
+typedef struct H5Z_cb_t {
+    H5Z_filter_func_t func;
+    void*              op_data;
+} H5Z_cb_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Before a dataset gets created, the "can_apply" callbacks for any filters used
+ * in the dataset creation property list are called
+ * with the dataset's dataset creation property list, the dataset's datatype and
+ * a dataspace describing a chunk (for chunked dataset storage).
+ *
+ * The "can_apply" callback must determine if the combination of the dataset
+ * creation property list setting, the datatype and the dataspace represent a
+ * valid combination to apply this filter to.  For example, some cases of
+ * invalid combinations may involve the filter not operating correctly on
+ * certain datatypes (or certain datatype sizes), or certain sizes of the chunk
+ * dataspace.
+ *
+ * The "can_apply" callback can be the NULL pointer, in which case, the library
+ * will assume that it can apply to any combination of dataset creation
+ * property list values, datatypes and dataspaces.
+ *
+ * The "can_apply" callback returns positive a valid combination, zero for an
+ * invalid combination and negative for an error.
+ */
+typedef htri_t (*H5Z_can_apply_func_t)(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+
+/*
+ * After the "can_apply" callbacks are checked for new datasets, the "set_local"
+ * callbacks for any filters used in the dataset creation property list are
+ * called.  These callbacks receive the dataset's private copy of the dataset
+ * creation property list passed in to H5Dcreate (i.e. not the actual property
+ * list passed in to H5Dcreate) and the datatype ID passed in to H5Dcreate
+ * (which is not copied and should not be modified) and a dataspace describing
+ * the chunk (for chunked dataset storage) (which should also not be modified).
+ *
+ * The "set_local" callback must set any parameters that are specific to this
+ * dataset, based on the combination of the dataset creation property list
+ * values, the datatype and the dataspace.  For example, some filters perform
+ * different actions based on different datatypes (or datatype sizes) or
+ * different number of dimensions or dataspace sizes.
+ *
+ * The "set_local" callback can be the NULL pointer, in which case, the library
+ * will assume that there are no dataset-specific settings for this filter.
+ *
+ * The "set_local" callback must return non-negative on success and negative
+ * for an error.
+ */
+typedef herr_t (*H5Z_set_local_func_t)(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+
+/*
+ * A filter gets definition flags and invocation flags (defined above), the
+ * client data array and size defined when the filter was added to the
+ * pipeline, the size in bytes of the data on which to operate, and pointers
+ * to a buffer and its allocated size.
+ *
+ * The filter should store the result in the supplied buffer if possible,
+ * otherwise it can allocate a new buffer, freeing the original.  The
+ * allocated size of the new buffer should be returned through the BUF_SIZE
+ * pointer and the new buffer through the BUF pointer.
+ *
+ * The return value from the filter is the number of bytes in the output
+ * buffer. If an error occurs then the function should return zero and leave
+ * all pointer arguments unchanged.
+ */
+typedef size_t (*H5Z_func_t)(unsigned int flags, size_t cd_nelmts,
+			     const unsigned int cd_values[], size_t nbytes,
+			     size_t *buf_size, void **buf);
+
+/*
+ * The filter table maps filter identification numbers to structs that
+ * contain a pointers to the filter function and timing statistics.
+ */
+typedef struct H5Z_class2_t {
+    int version;                /* Version number of the H5Z_class_t struct */
+    H5Z_filter_t id;		/* Filter ID number			     */
+    unsigned encoder_present;   /* Does this filter have an encoder? */
+    unsigned decoder_present;   /* Does this filter have a decoder? */
+    const char	*name;		/* Comment for debugging		     */
+    H5Z_can_apply_func_t can_apply; /* The "can apply" callback for a filter */
+    H5Z_set_local_func_t set_local; /* The "set local" callback for a filter */
+    H5Z_func_t filter;		/* The actual filter function		     */
+} H5Z_class2_t;
+
+H5_DLL herr_t H5Zregister(const void *cls);
+H5_DLL herr_t H5Zunregister(H5Z_filter_t id);
+H5_DLL htri_t H5Zfilter_avail(H5Z_filter_t id);
+H5_DLL herr_t H5Zget_filter_info(H5Z_filter_t filter, unsigned int *filter_config_flags);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/*
+ * The filter table maps filter identification numbers to structs that
+ * contain a pointers to the filter function and timing statistics.
+ */
+typedef struct H5Z_class1_t {
+    H5Z_filter_t id;		/* Filter ID number			     */
+    const char	*name;		/* Comment for debugging		     */
+    H5Z_can_apply_func_t can_apply; /* The "can apply" callback for a filter */
+    H5Z_set_local_func_t set_local; /* The "set local" callback for a filter */
+    H5Z_func_t filter;		/* The actual filter function		     */
+} H5Z_class1_t;
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
diff --git a/Resources/windows-libs/HDF5/include/H5api_adpt.h b/Resources/windows-libs/HDF5/include/H5api_adpt.h
new file mode 100644
index 0000000000000000000000000000000000000000..845a9a0c9753f1451afb45018bc18d21e66dfebc
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5api_adpt.h
@@ -0,0 +1,424 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * H5api_adpt.h
+ * Used for the HDF5 dll project
+ * Created by Patrick Lu on 1/12/99
+ */
+#ifndef H5API_ADPT_H
+#define H5API_ADPT_H
+
+/* This will only be defined if HDF5 was built with CMake */
+#ifdef H5_BUILT_AS_DYNAMIC_LIB
+
+#if defined (hdf5_EXPORTS)
+  #define _HDF5DLL_
+#else
+  #define _HDF5USEDLL_
+#endif
+
+#if defined (hdf5_test_EXPORTS)
+  #define _HDF5TESTDLL_
+#else
+  #define _HDF5TESTUSEDLL_
+#endif
+
+#if defined (hdf5_tools_EXPORTS)
+  #define _HDF5TOOLSDLL_
+#else
+  #define _HDF5TOOLSUSEDLL_
+#endif
+
+#if defined (hdf5_cpp_EXPORTS)
+  #define HDF5_CPPDLL_EXPORTS
+#else
+  #define HDF5CPP_USEDLL
+#endif
+
+#if defined (hdf5_hl_EXPORTS)
+  #define _HDF5_HLDLL_EXPORTS_
+#else
+  #define _HDF5USEHLDLL_
+#endif
+
+#if defined (hdf5_hl_cpp_EXPORTS)
+  #define HDF5_HL_CPPDLL_EXPORTS
+#else
+  #define HDF5USE_HLCPPDLL
+#endif
+
+#if defined (hdf5_f90cstub_EXPORTS)
+  #define HDF5FORT_CSTUB_DLL_EXPORTS
+#else
+  #define HDF5FORT_CSTUB_USEDLL
+#endif
+
+#if defined (hdf5_test_f90cstub_EXPORTS)
+  #define HDF5FORTTEST_CSTUB_DLL_EXPORTS
+#endif
+
+#if defined (hdf5_hl_f90cstub_EXPORTS)
+  #define HDF5_HL_F90CSTUBDLL_EXPORTS
+#endif
+
+#if defined(hdf5_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_DLL __declspec(dllexport)
+    #define H5_DLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_DLL __attribute__ ((visibility("default")))
+    #define H5_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_DLL __declspec(dllimport)
+    #define H5_DLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_DLL __attribute__ ((visibility("default")))
+    #define H5_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_DLL
+  #define H5_DLL
+  #define H5_DLLVAR extern
+#endif /* _HDF5DLL_ */
+
+#if defined(hdf5_test_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5TEST_DLL __declspec(dllexport)
+    #define H5TEST_DLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5TEST_DLL __attribute__ ((visibility("default")))
+    #define H5TEST_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5TEST_DLL __declspec(dllimport)
+    #define H5TEST_DLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5TEST_DLL __attribute__ ((visibility("default")))
+    #define H5TEST_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5TEST_DLL
+  #define H5TEST_DLL
+  #define H5TEST_DLLVAR extern
+#endif /* H5TEST_DLL */
+
+#if defined(hdf5_tools_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5TOOLS_DLL __declspec(dllexport)
+    #define H5TOOLS_DLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5TOOLS_DLL __attribute__ ((visibility("default")))
+    #define H5TOOLS_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5TOOLS_DLL __declspec(dllimport)
+    #define H5TOOLS_DLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5TOOLS_DLL __attribute__ ((visibility("default")))
+    #define H5TOOLS_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5TOOLS_DLL
+  #define H5TOOLS_DLL
+  #define H5TOOLS_DLLVAR extern
+#endif /* H5TOOLS_DLL */
+
+#if defined(hdf5_cpp_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_DLLCPP __declspec(dllexport)
+    #define H5_DLLCPPVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_DLLCPP __attribute__ ((visibility("default")))
+    #define H5_DLLCPPVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_DLLCPP __declspec(dllimport)
+    #define H5_DLLCPPVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_DLLCPP __attribute__ ((visibility("default")))
+    #define H5_DLLCPPVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_DLLCPP
+  #define H5_DLLCPP
+  #define H5_DLLCPPVAR extern
+#endif /* H5_DLLCPP */
+
+#if defined(hdf5_hl_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_HLDLL __declspec(dllexport)
+    #define H5_HLDLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_HLDLL __attribute__ ((visibility("default")))
+    #define H5_HLDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_HLDLL __declspec(dllimport)
+    #define H5_HLDLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_HLDLL __attribute__ ((visibility("default")))
+    #define H5_HLDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_HLDLL
+  #define H5_HLDLL
+  #define H5_HLDLLVAR extern
+#endif /* H5_HLDLL */
+
+#if defined(hdf5_hl_cpp_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_HLCPPDLL __declspec(dllexport)
+    #define H5_HLCPPDLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_HLCPPDLL __attribute__ ((visibility("default")))
+    #define H5_HLCPPDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_HLCPPDLL __declspec(dllimport)
+    #define H5_HLCPPDLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_HLCPPDLL __attribute__ ((visibility("default")))
+    #define H5_HLCPPDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_HLCPPDLL
+  #define H5_HLCPPDLL
+  #define H5_HLCPPDLLVAR extern
+#endif /* H5_HLCPPDLL */
+
+#if defined(hdf5_f90cstub_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_FCDLL __declspec(dllexport)
+    #define H5_FCDLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_FCDLL __attribute__ ((visibility("default")))
+    #define H5_FCDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_FCDLL __declspec(dllimport)
+    #define H5_FCDLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_FCDLL __attribute__ ((visibility("default")))
+    #define H5_FCDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_FCDLL
+  #define H5_FCDLL
+  #define H5_FCDLLVAR extern
+#endif /* H5_FCDLL */
+
+#if defined(hdf5_test_f90cstub_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_FCTESTDLL __declspec(dllexport)
+    #define H5_FCTESTDLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_FCTESTDLL __attribute__ ((visibility("default")))
+    #define H5_FCTESTDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_FCTESTDLL __declspec(dllimport)
+    #define H5_FCTESTDLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_FCTESTDLL __attribute__ ((visibility("default")))
+    #define H5_FCTESTDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_FCTESTDLL
+  #define H5_FCTESTDLL
+  #define H5_FCTESTDLLVAR extern
+#endif /* H5_FCTESTDLL */
+
+#if defined(hdf5_hl_f90cstub_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define HDF5_HL_F90CSTUBDLL __declspec(dllexport)
+    #define HDF5_HL_F90CSTUBDLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define HDF5_HL_F90CSTUBDLL __attribute__ ((visibility("default")))
+    #define HDF5_HL_F90CSTUBDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define HDF5_HL_F90CSTUBDLL __declspec(dllimport)
+    #define HDF5_HL_F90CSTUBDLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define HDF5_HL_F90CSTUBDLL __attribute__ ((visibility("default")))
+    #define HDF5_HL_F90CSTUBDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef HDF5_HL_F90CSTUBDLL
+  #define HDF5_HL_F90CSTUBDLL
+  #define HDF5_HL_F90CSTUBDLLVAR extern
+#endif /* HDF5_HL_F90CSTUBDLL */
+
+#elif defined(H5_BUILT_AS_STATIC_LIB)
+  #define H5_DLL
+  #define H5_HLDLL
+  #define H5_HLCPPDLL
+  #define HDF5_HL_F90CSTUBDLL
+  #define H5_DLLVAR extern
+  #define H5_DLLCPP
+  #define H5TEST_DLL
+  #define H5TEST_DLLVAR extern
+  #define H5TOOLS_DLL
+  #define H5TOOLS_DLLVAR extern
+  #define H5_FCDLL
+  #define H5_FCDLLVAR extern
+  #define H5_FCTESTDLL
+  #define H5_FCTESTDLLVAR extern
+
+#else
+/* This is the original HDFGroup defined preprocessor code which should still work
+ * with the VS projects that are maintained by "The HDF Group"
+ * The Visual Studio project files will not be supported in the next major release of 1.10.
+ */
+
+#if defined(H5_HAVE_WIN32_API)
+
+#if defined(_HDF5DLL_)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5_DLL __declspec(dllexport)
+#define H5_DLLVAR extern __declspec(dllexport)
+#elif defined(_HDF5USEDLL_)
+#define H5_DLL __declspec(dllimport)
+#define H5_DLLVAR __declspec(dllimport)
+#else
+#define H5_DLL
+#define H5_DLLVAR extern
+#endif /* _HDF5DLL_ */
+
+#if defined(_HDF5TESTDLL_)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5TEST_DLL __declspec(dllexport)
+#define H5TEST_DLLVAR extern __declspec(dllexport)
+#elif defined(_HDF5TESTUSEDLL_)
+#define H5TEST_DLL __declspec(dllimport)
+#define H5TEST_DLLVAR __declspec(dllimport)
+#else
+#define H5TEST_DLL
+#define H5TEST_DLLVAR extern
+#endif /* _HDF5TESTDLL_ */
+
+#if defined(_HDF5TOOLSDLL_)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5TOOLS_DLL __declspec(dllexport)
+#define H5TOOLS_DLLVAR extern __declspec(dllexport)
+#elif defined(_HDF5TOOLSUSEDLL_)
+#define H5TOOLS_DLL __declspec(dllimport)
+#define H5TOOLS_DLLVAR __declspec(dllimport)
+#else
+#define H5TOOLS_DLL
+#define H5TOOLS_DLLVAR extern
+#endif /* _HDF5TOOLSDLL_ */
+
+#if defined(_HDF5_HLDLL_EXPORTS_)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5_HLDLL __declspec(dllexport)
+#elif defined(_HDF5USEHLDLL_)
+#define H5_HLDLL __declspec(dllimport)
+#else
+#define H5_HLDLL
+#endif /* _HDF5_HLDLL_EXPORTS */
+
+#if defined(HDF5_HL_CPPDLL_EXPORTS)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5_HLCPPDLL __declspec(dllexport)
+#elif defined(HDF5USE_HLCPPDLL)
+#define H5_HLCPPDLL __declspec(dllimport)
+#else
+#define H5_HLCPPDLL
+#endif /*HDF5_HL_CPPDLL_EXPORTS*/
+
+#if defined(HDF5_HL_F90CSTUBDLL_EXPORTS)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define HDF5_HL_F90CSTUBDLL __declspec(dllexport)
+#elif defined(HDF5USE_HLF90CSTUBDLL)
+#define HDF5_HL_F90CSTUBDLL __declspec(dllimport)
+#else
+#define HDF5_HL_F90CSTUBDLL
+#endif /*HDF5_HL_F90CSTUBDLL_EXPORTS*/
+
+
+#if defined(HDF5FORT_CSTUB_DLL_EXPORTS)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5_FCDLL __declspec(dllexport)
+#define H5_FCDLLVAR extern __declspec(dllexport)
+#elif defined(HDF5FORT_CSTUB_USEDLL)
+#define H5_FCDLL __declspec(dllimport)
+#define H5_FCDLLVAR __declspec(dllimport)
+#else
+#define H5_FCDLL
+#define H5_FCDLLVAR extern
+#endif /* _HDF5_FORTRANDLL_EXPORTS_ */
+
+#if defined(HDF5FORTTEST_CSTUB_DLL_EXPORTS)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5_FCTESTDLL __declspec(dllexport)
+#define H5_FCTESTDLLVAR extern __declspec(dllexport)
+#elif defined(HDF5FORTTEST_CSTUB_USEDLL)
+#define H5_FCTESTDLL __declspec(dllimport)
+#define H5_FCTESTDLLVAR __declspec(dllimport)
+#else
+#define H5_FCTESTDLL
+#define H5_FCTESTDLLVAR extern
+#endif /* _HDF5_FORTRANDLL_EXPORTS_ */
+
+/* Added to export or to import C++ APIs - BMR (02-15-2002) */
+#if defined(HDF5_CPPDLL_EXPORTS) /* this name is generated at creation */
+#define H5_DLLCPP __declspec(dllexport)
+#elif defined(HDF5CPP_USEDLL)
+#define H5_DLLCPP __declspec(dllimport)
+#else
+#define H5_DLLCPP
+#endif /* HDF5_CPPDLL_EXPORTS */
+
+#else /*H5_HAVE_WIN32_API*/
+#define H5_DLL
+#define H5_HLDLL
+#define H5_HLCPPDLL
+#define HDF5_HL_F90CSTUBDLL
+#define H5_DLLVAR extern
+#define H5_DLLCPP
+#define H5TEST_DLL
+#define H5TEST_DLLVAR extern
+#define H5TOOLS_DLL
+#define H5TOOLS_DLLVAR extern
+#define H5_FCDLL
+#define H5_FCDLLVAR extern
+#define H5_FCTESTDLL
+#define H5_FCTESTDLLVAR extern
+#endif /*H5_HAVE_WIN32_API*/
+
+#endif /* H5API_ADPT_H */
+
+#endif /*  */
diff --git a/Resources/windows-libs/HDF5/include/H5f90.h b/Resources/windows-libs/HDF5/include/H5f90.h
new file mode 100644
index 0000000000000000000000000000000000000000..c45cfcbf043f4e5289b11b3c11108fb8e3c4c04b
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5f90.h
@@ -0,0 +1,31 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#ifndef _H5f90_H
+#define _H5f90_H
+
+#include "hdf5.h"
+#include "H5private.h"
+#include "H5f90i.h"
+#include "H5f90proto.h"
+
+/* Constants used in H5Rff.f90 and H5Rf.c files */
+#define REF_REG_BUF_LEN_F    3
+
+/* Constants used in H5Gf.c files */
+#define OBJECT_NAMELEN_DEFAULT_F -1
+#define H5_MAX(a,b)            (((a)>(b)) ? (a) : (b))
+#endif /* _H5f90_H */
diff --git a/Resources/windows-libs/HDF5/include/H5f90i.h b/Resources/windows-libs/HDF5/include/H5f90i.h
new file mode 100644
index 0000000000000000000000000000000000000000..f3c0160d384ac37e1fe3b13833247988b60fd0a1
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5f90i.h
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#ifndef _H5f90i_H
+#define _H5f90i_H
+
+/*
+ * Include generated header.  This header defines integer types,
+ * so this file only needs to define _fcd.
+ */
+#include "H5f90i_gen.h"
+
+/* Define _fcd.  These are the same on every system
+ * but UNICOS.
+ */
+#define _fcdtocp(desc) (desc)
+
+#if (defined (UNICOS) || defined (_UNICOS)) && !defined(__crayx1)
+
+#include <fortran.h>
+
+/*typedef char*              _fcd;*/
+
+#else
+
+typedef char              *_fcd;
+
+#endif
+
+#endif /* _H5f90i_H */
diff --git a/Resources/windows-libs/HDF5/include/H5f90i_gen.h b/Resources/windows-libs/HDF5/include/H5f90i_gen.h
new file mode 100644
index 0000000000000000000000000000000000000000..07b46f97b57e06472ebf68129dc458faad932628
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5f90i_gen.h
@@ -0,0 +1,48 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#ifndef _H5f90i_gen_H
+#define _H5f90i_gen_H
+
+/* This file is automatically generated by H5match_types.c at build time. */
+
+#include "H5public.h"
+
+#define c_int_1 char
+#define c_int_2 short
+#define c_int_4 long
+#define c_int_8 long long
+#define c_float_4 float
+#define c_float_8 long double
+
+typedef c_int_8 haddr_t_f;
+typedef c_int_8 hsize_t_f;
+typedef c_int_8 hssize_t_f;
+typedef c_int_4 off_t_f;
+typedef c_int_8 size_t_f;
+typedef c_int_4 int_f;
+typedef c_int_1 int_1_f;
+typedef c_int_2 int_2_f;
+typedef c_int_4 int_4_f;
+typedef c_int_8 int_8_f;
+typedef c_float_4 real_4_f;
+typedef c_float_8 real_8_f;
+typedef c_float_8 real_16_f;
+typedef c_int_4 hid_t_f;
+typedef c_float_4 real_f;
+typedef c_float_8 double_f;
+
+#endif /* _H5f90i_gen_H */
diff --git a/Resources/windows-libs/HDF5/include/H5f90proto.h b/Resources/windows-libs/HDF5/include/H5f90proto.h
new file mode 100644
index 0000000000000000000000000000000000000000..a0a4f64ccf59cd7a30150575ed38b47f70dbd760
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5f90proto.h
@@ -0,0 +1,1346 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#ifndef _H5f90proto_H
+#define _H5f90proto_H
+
+#include "H5public.h"
+
+H5_FCDLL char * HD5f2cstring (_fcd fdesc, size_t len);
+H5_FCDLL void HD5packFstring(char *src, char *dest, size_t len);
+
+#ifdef H5_VMS
+#define H5_FC_FUNC_(name, NAME) NAME
+#endif /*H5_VMS*/
+
+/*
+ * Storage info struct used by H5O_info_t and H5F_info_t 
+ * interoperable with Fortran.
+ */
+typedef struct H5_ih_info_t_f {
+    hsize_t     index_size;     /* btree and/or list */
+    hsize_t     heap_size;
+} H5_ih_info_t_f;
+
+/* Information struct for object header metadata (for H5Oget_info/H5Oget_info_by_name/H5Oget_info_by_idx) 
+ *  interoperable with Fortran.
+ */
+typedef struct H5O_hdr_info_t_f {
+    int_f version;		/* Version number of header format in file */
+    int_f nmesgs;		/* Number of object header messages */
+    int_f nchunks;		/* Number of object header chunks */
+    int_f flags;                /* Object header status flags */
+    struct {
+        hsize_t total;		/* Total space for storing object header in file */
+        hsize_t meta;		/* Space within header for object header metadata information */
+        hsize_t mesg;		/* Space within header for actual message information */
+        hsize_t free;		/* Free space within object header */
+    } space;
+    struct {
+        uint64_t present;	/* Flags to indicate presence of message type in header */
+        uint64_t shared;	/* Flags to indicate message type is shared in header */
+    } mesg;
+} H5O_hdr_info_t_f;
+
+/* Information struct for object (for H5Oget_info/H5Oget_info_by_name/H5Oget_info_by_idx) 
+ *  interoperable with Fortran.
+ */
+typedef struct H5O_info_t_f {
+    unsigned long 	fileno;		/* File number that object is located in */
+    haddr_t_f 		addr;		/* Object address in file	*/
+    int 		type;		/* Basic object type (group, dataset, etc.) */
+    int_f 		rc;		/* Reference count of object    */
+    int_f	        atime[8];	/* Access time			*/
+    int_f		mtime[8];	/* Modification time		*/
+    int_f		ctime[8];	/* Change time			*/
+    int_f		btime[8];	/* Birth time			*/
+    hsize_t 		num_attrs;	/* # of attributes attached to object */
+    H5O_hdr_info_t_f    hdr;            /* Object header information */
+    /* Extra metadata storage for obj & attributes */
+    struct {
+        H5_ih_info_t_f   obj;             /* v1/v2 B-tree & local/fractal heap for groups, B-tree for chunked datasets */
+        H5_ih_info_t_f   attr;            /* v2 B-tree & heap for attributes */
+    } meta_size;
+} H5O_info_t_f;
+
+
+/*
+ *  Functions from H5Ff.c
+ */
+#define nh5fcreate_c              H5_FC_FUNC_(h5fcreate_c, H5FCREATE_C)
+#define nh5fflush_c               H5_FC_FUNC_(h5fflush_c, H5FFLUSH_C)
+#define nh5fclose_c               H5_FC_FUNC_(h5fclose_c, H5FCLOSE_C)
+#define nh5fopen_c                H5_FC_FUNC_(h5fopen_c, H5FOPEN_C)
+#define nh5fis_hdf5_c             H5_FC_FUNC_(h5fis_hdf5_c, H5FIS_HDF5_C)
+#define nh5fmount_c               H5_FC_FUNC_(h5fmount_c, H5FMOUNT_C)
+#define nh5funmount_c             H5_FC_FUNC_(h5funmount_c, H5FUNMOUNT_C)
+#define nh5freopen_c              H5_FC_FUNC_(h5freopen_c, H5FREOPEN_C)
+#define nh5fget_create_plist_c    H5_FC_FUNC_(h5fget_create_plist_c, H5FGET_CREATE_PLIST_C)
+#define nh5fget_access_plist_c    H5_FC_FUNC_(h5fget_access_plist_c, H5FGET_ACCESS_PLIST_C)
+#define nh5fget_obj_count_c       H5_FC_FUNC_(h5fget_obj_count_c, H5FGET_OBJ_COUNT_C)
+#define nh5fget_obj_ids_c         H5_FC_FUNC_(h5fget_obj_ids_c, H5FGET_OBJ_IDS_C)
+#define nh5fget_freespace_c       H5_FC_FUNC_(h5fget_freespace_c, H5FGET_FREESPACE_C)
+#define nh5fget_file_image_c      H5_FC_FUNC_(h5fget_file_image_c, H5FGET_FILE_IMAGE_C)
+#define nh5fget_name_c            H5_FC_FUNC_(h5fget_name_c, H5FGET_NAME_C)
+#define nh5fget_filesize_c        H5_FC_FUNC_(h5fget_filesize_c, H5FGET_FILESIZE_C)
+
+H5_FCDLL int_f nh5fcreate_c (_fcd name, int_f *namelen, int_f *access_flags, hid_t_f *crt_prp, hid_t_f *acc_prp, hid_t_f *file_id);
+H5_FCDLL int_f nh5fopen_c (_fcd name, int_f *namelen, int_f *access_flags, hid_t_f *acc_prp, hid_t_f *file_id);
+H5_FCDLL int_f nh5fis_hdf5_c (_fcd name, int_f *namelen, int_f *flag);
+H5_FCDLL int_f nh5fclose_c (hid_t_f *file_id);
+H5_FCDLL int_f nh5fmount_c (hid_t_f *loc_id, _fcd dsetname, int_f *namelen, hid_t_f *file_id, hid_t_f *acc_prp);
+H5_FCDLL int_f nh5funmount_c (hid_t_f *loc_id, _fcd dsetname, int_f *namelen);
+H5_FCDLL int_f nh5freopen_c (hid_t_f *file_id1, hid_t_f *file_id2);
+H5_FCDLL int_f nh5fget_create_plist_c (hid_t_f *file_id, hid_t_f *prop_id);
+H5_FCDLL int_f nh5fget_access_plist_c (hid_t_f *file_id, hid_t_f *access_id);
+H5_FCDLL int_f nh5fget_obj_count_c (hid_t_f *file_id, int_f *obj_type, size_t_f *obj_count);
+H5_FCDLL int_f nh5fget_obj_ids_c (hid_t_f *file_id, int_f *obj_type, size_t_f *max_objs, hid_t_f *obj_ids, size_t_f *num_objs);
+H5_FCDLL int_f nh5fget_freespace_c (hid_t_f *file_id, hssize_t_f *free_space);
+H5_FCDLL int_f nh5fget_file_image_c(hid_t_f *file_id, void *buf_ptr, size_t_f *buf_len, size_t_f *buf_req);
+H5_FCDLL int_f nh5fflush_c (hid_t_f *obj_id, int_f *scope);
+H5_FCDLL int_f nh5fget_name_c(hid_t_f *obj_id, size_t_f *size, _fcd buf, size_t_f *buflen);
+H5_FCDLL int_f nh5fget_filesize_c(hid_t_f *file_id, hsize_t_f *size);
+
+/*
+ * Functions from H5Sf.c
+ */
+#define nh5screate_simple_c      H5_FC_FUNC_(h5screate_simple_c, H5SCREATE_SIMPLE_C)
+#define nh5sclose_c              H5_FC_FUNC_(h5sclose_c, H5SCLOSE_C)
+#define nh5screate_c             H5_FC_FUNC_(h5screate_c, H5SCREATE_C)
+#define nh5scopy_c               H5_FC_FUNC_(h5scopy_c, H5SCOPY_C)
+#define nh5sget_select_hyper_nblocks_c H5_FC_FUNC_(h5sget_select_hyper_nblocks_c, H5SGET_SELECT_HYPER_NBLOCKS_C)
+#define nh5sget_select_hyper_blocklist_c H5_FC_FUNC_(h5sget_select_hyper_blocklist_c, H5SGET_SELECT_HYPER_BLOCKLIST_C)
+#define nh5sget_select_elem_npoints_c H5_FC_FUNC_(h5sget_select_elem_npoints_c, H5SGET_SELECT_ELEM_NPOINTS_C)
+#define nh5sget_select_elem_pointlist_c H5_FC_FUNC_(h5sget_select_elem_pointlist_c, H5SGET_SELECT_ELEM_POINTLIST_C)
+#define nh5sget_select_bounds_c  H5_FC_FUNC_(h5sget_select_bounds_c, H5SGET_SELECT_BOUNDS_C)
+#define nh5sselect_all_c         H5_FC_FUNC_(h5sselect_all_c, H5SSELECT_ALL_C)
+#define nh5sselect_none_c        H5_FC_FUNC_(h5sselect_none_c, H5SSELECT_NONE_C)
+#define nh5sselect_valid_c       H5_FC_FUNC_(h5sselect_valid_c, H5SSELECT_VALID_C)
+#define nh5sget_simple_extent_npoints_c H5_FC_FUNC_(h5sget_simple_extent_npoints_c, H5SGET_SIMPLE_EXTENT_NPOINTS_C)
+#define nh5sget_select_npoints_c H5_FC_FUNC_(h5sget_select_npoints_c, H5SGET_SELECT_NPOINTS_C)
+#define nh5sget_simple_extent_ndims_c H5_FC_FUNC_(h5sget_simple_extent_ndims_c, H5SGET_SIMPLE_EXTENT_NDIMS_C)
+#define nh5sget_simple_extent_type_c  H5_FC_FUNC_(h5sget_simple_extent_type_c, H5SGET_SIMPLE_EXTENT_TYPE_C)
+#define nh5soffset_simple_c      H5_FC_FUNC_(h5soffset_simple_c, H5SOFFSET_SIMPLE_C)
+#define nh5sset_extent_simple_c  H5_FC_FUNC_(h5sset_extent_simple_c, H5SSET_EXTENT_SIMPLE_C)
+#define nh5sis_simple_c          H5_FC_FUNC_(h5sis_simple_c, H5SIS_SIMPLE_C)
+#define nh5sextent_class_c       H5_FC_FUNC_(h5sextent_class_c, H5SEXTENT_CLASS_C)
+#define nh5sget_simple_extent_dims_c H5_FC_FUNC_(h5sget_simple_extent_dims_c, H5SGET_SIMPLE_EXTENT_DIMS_C)
+#define nh5sextent_copy_c        H5_FC_FUNC_(h5sextent_copy_c, H5SEXTENT_COPY_C)
+#define nh5sset_extent_none_c    H5_FC_FUNC_(h5sset_extent_none_c, H5SSET_EXTENT_NONE_C)
+#define nh5sselect_hyperslab_c   H5_FC_FUNC_(h5sselect_hyperslab_c, H5SSELECT_HYPERSLAB_C)
+#define nh5scombine_hyperslab_c   H5_FC_FUNC_(h5scombine_hyperslab_c, H5SCOMBINE_HYPERSLAB_C)
+#define nh5scombine_select_c   H5_FC_FUNC_(h5scombine_select_c, H5SCOMBINE_SELECT_C)
+#define nh5sselect_select_c   H5_FC_FUNC_(h5sselect_select_c, H5SSELECT_SELECT_C)
+#define nh5sget_select_type_c   H5_FC_FUNC_(h5sget_select_type_c, H5SGET_SELECT_TYPE_C)
+#define nh5sselect_elements_c    H5_FC_FUNC_(h5sselect_elements_c, H5SSELECT_ELEMENTS_C)
+#define nh5sdecode_c    H5_FC_FUNC_(h5sdecode_c, H5SDECODE_C)
+#define nh5sencode_c    H5_FC_FUNC_(h5sencode_c, H5SENCODE_C)
+#define nh5sextent_equal_c    H5_FC_FUNC_(h5sextent_equal_c, H5SEXTENT_EQUAL_C)
+
+H5_FCDLL int_f nh5screate_simple_c ( int_f *rank, hsize_t_f *dims, hsize_t_f *maxdims, hid_t_f *space_id );
+H5_FCDLL int_f nh5sclose_c ( hid_t_f *space_id );
+H5_FCDLL int_f nh5screate_c ( int_f *classtype, hid_t_f *space_id );
+H5_FCDLL int_f nh5scopy_c ( hid_t_f *space_id , hid_t_f *new_space_id);
+H5_FCDLL int_f nh5sget_select_hyper_nblocks_c( hid_t_f *space_id , hssize_t_f * num_blocks);
+H5_FCDLL int_f nh5sget_select_hyper_blocklist_c( hid_t_f *space_id ,hsize_t_f * startblock, hsize_t_f * num_blocks, hsize_t_f * buf);
+H5_FCDLL int_f nh5sget_select_bounds_c( hid_t_f *space_id , hsize_t_f * start, hsize_t_f * end);
+H5_FCDLL int_f nh5sget_select_elem_npoints_c( hid_t_f *space_id , hssize_t_f * num_points);
+H5_FCDLL int_f nh5sget_select_elem_pointlist_c( hid_t_f *space_id ,hsize_t_f * startpoint, hsize_t_f * numpoints, hsize_t_f * buf);
+H5_FCDLL int_f nh5sselect_all_c ( hid_t_f *space_id );
+H5_FCDLL int_f nh5sselect_none_c ( hid_t_f *space_id );
+H5_FCDLL int_f nh5sselect_valid_c ( hid_t_f *space_id , int_f *flag );
+H5_FCDLL int_f nh5sget_simple_extent_npoints_c ( hid_t_f *space_id , hsize_t_f *npoints );
+H5_FCDLL int_f nh5sget_select_npoints_c ( hid_t_f *space_id , hssize_t_f *npoints );
+H5_FCDLL int_f nh5sget_simple_extent_ndims_c ( hid_t_f *space_id , int_f *ndims );
+H5_FCDLL int_f nh5sget_simple_extent_type_c ( hid_t_f *space_id , int_f *classtype);
+H5_FCDLL int_f nh5soffset_simple_c ( hid_t_f *space_id , hssize_t_f *offset);
+H5_FCDLL int_f nh5sset_extent_simple_c ( hid_t_f *space_id , int_f *rank, hsize_t_f * current_size, hsize_t_f *maximum_size);
+H5_FCDLL int_f nh5sis_simple_c ( hid_t_f *space_id , int_f *flag );
+H5_FCDLL int_f nh5sextent_class_c ( hid_t_f *space_id , int_f *classtype);
+H5_FCDLL int_f nh5sget_simple_extent_dims_c ( hid_t_f *space_id , hsize_t_f *dims, hsize_t_f *maxdims);
+H5_FCDLL int_f nh5sextent_copy_c ( hid_t_f *dest_space_id , hid_t_f *source_space_id);
+H5_FCDLL int_f nh5sset_extent_none_c ( hid_t_f *space_id );
+H5_FCDLL int_f nh5sselect_hyperslab_c ( hid_t_f *space_id , int_f *op, hsize_t_f *start, hsize_t_f *count, hsize_t_f *stride, hsize_t_f *block);
+H5_FCDLL int_f nh5sget_select_type_c ( hid_t_f *space_id , int_f *op);
+H5_FCDLL int_f nh5sselect_elements_c ( hid_t_f *space_id , int_f *op, size_t_f *nelements, hsize_t_f *coord);
+H5_FCDLL int_f nh5scombine_hyperslab_c ( hid_t_f *space_id , int_f *op, hsize_t_f *start, hsize_t_f *count, hsize_t_f *stride, hsize_t_f *block, hid_t_f *hyper_id);
+H5_FCDLL int_f nh5scombine_select_c ( hid_t_f *space1_id , int_f *op, hid_t_f *space2_id, hid_t_f *ds_id);
+H5_FCDLL int_f nh5sselect_select_c ( hid_t_f *space1_id , int_f *op, hid_t_f *space2_id);
+H5_FCDLL int_f nh5sdecode_c ( _fcd buf, hid_t_f *obj_id );
+H5_FCDLL int_f nh5sencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc );
+H5_FCDLL int_f nh5sextent_equal_c ( hid_t_f * space1_id, hid_t_f *space2_id, hid_t_f *c_equal);
+
+/*
+ * Functions from H5Df.c
+ */
+#define nh5dcreate_c                H5_FC_FUNC_(h5dcreate_c, H5DCREATE_C)
+#define nh5dclose_c                 H5_FC_FUNC_(h5dclose_c, H5DCLOSE_C)
+#define nh5dopen_c                  H5_FC_FUNC_(h5dopen_c, H5DOPEN_C)
+#define nh5dwrite_c                 H5_FC_FUNC_(h5dwrite_c, H5DWRITE_C)
+#define nh5dwrite_integer_s_c       H5_FC_FUNC_(h5dwrite_integer_s_c, H5DWRITE_INTEGER_S_C)
+#define nh5dwrite_integer_1_c       H5_FC_FUNC_(h5dwrite_integer_1_c, H5DWRITE_INTEGER_1_C)
+#define nh5dwrite_integer_2_c       H5_FC_FUNC_(h5dwrite_integer_2_c, H5DWRITE_INTEGER_2_C)
+#define nh5dwrite_integer_3_c       H5_FC_FUNC_(h5dwrite_integer_3_c, H5DWRITE_INTEGER_3_C)
+#define nh5dwrite_integer_4_c       H5_FC_FUNC_(h5dwrite_integer_4_c, H5DWRITE_INTEGER_4_C)
+#define nh5dwrite_integer_5_c       H5_FC_FUNC_(h5dwrite_integer_5_c, H5DWRITE_INTEGER_5_C)
+#define nh5dwrite_integer_6_c       H5_FC_FUNC_(h5dwrite_integer_6_c, H5DWRITE_INTEGER_6_C)
+#define nh5dwrite_integer_7_c       H5_FC_FUNC_(h5dwrite_integer_7_c, H5DWRITE_INTEGER_7_C)
+#define nh5dwrite_real_s_c          H5_FC_FUNC_(h5dwrite_real_s_c, H5DWRITE_REAL_S_C)
+#define nh5dwrite_real_1_c          H5_FC_FUNC_(h5dwrite_real_1_c, H5DWRITE_REAL_1_C)
+#define nh5dwrite_real_2_c          H5_FC_FUNC_(h5dwrite_real_2_c, H5DWRITE_REAL_2_C)
+#define nh5dwrite_real_3_c          H5_FC_FUNC_(h5dwrite_real_3_c, H5DWRITE_REAL_3_C)
+#define nh5dwrite_real_4_c          H5_FC_FUNC_(h5dwrite_real_4_c, H5DWRITE_REAL_4_C)
+#define nh5dwrite_real_5_c          H5_FC_FUNC_(h5dwrite_real_5_c, H5DWRITE_REAL_5_C)
+#define nh5dwrite_real_6_c          H5_FC_FUNC_(h5dwrite_real_6_c, H5DWRITE_REAL_6_C)
+#define nh5dwrite_real_7_c          H5_FC_FUNC_(h5dwrite_real_7_c, H5DWRITE_REAL_7_C)
+#define nh5dwrite_double_s_c        H5_FC_FUNC_(h5dwrite_double_s_c, H5DWRITE_DOUBLE_S_C)
+#define nh5dwrite_double_1_c        H5_FC_FUNC_(h5dwrite_double_1_c, H5DWRITE_DOUBLE_1_C)
+#define nh5dwrite_double_2_c        H5_FC_FUNC_(h5dwrite_double_2_c, H5DWRITE_DOUBLE_2_C)
+#define nh5dwrite_double_3_c        H5_FC_FUNC_(h5dwrite_double_3_c, H5DWRITE_DOUBLE_3_C)
+#define nh5dwrite_double_4_c        H5_FC_FUNC_(h5dwrite_double_4_c, H5DWRITE_DOUBLE_4_C)
+#define nh5dwrite_double_5_c        H5_FC_FUNC_(h5dwrite_double_5_c, H5DWRITE_DOUBLE_5_C)
+#define nh5dwrite_double_6_c        H5_FC_FUNC_(h5dwrite_double_6_c, H5DWRITE_DOUBLE_6_C)
+#define nh5dwrite_double_7_c        H5_FC_FUNC_(h5dwrite_double_7_c, H5DWRITE_DOUBLE_7_C)
+#define nh5dwrite_ref_obj_c         H5_FC_FUNC_(h5dwrite_ref_obj_c, H5DWRITE_REF_OBJ_C)
+#define nh5dwrite_ref_reg_c         H5_FC_FUNC_(h5dwrite_ref_reg_c, H5DWRITE_REF_REG_C)
+#define nh5dwritec_c                H5_FC_FUNC_(h5dwritec_c, H5DWRITEC_C)
+#define nh5dwritec_s_c                H5_FC_FUNC_(h5dwritec_s_c, H5DWRITEC_S_C)
+#define nh5dwritec_1_c                H5_FC_FUNC_(h5dwritec_1_c, H5DWRITEC_1_C)
+#define nh5dwritec_2_c                H5_FC_FUNC_(h5dwritec_2_c, H5DWRITEC_2_C)
+#define nh5dwritec_3_c                H5_FC_FUNC_(h5dwritec_3_c, H5DWRITEC_3_C)
+#define nh5dwritec_4_c                H5_FC_FUNC_(h5dwritec_4_c, H5DWRITEC_4_C)
+#define nh5dwritec_5_c                H5_FC_FUNC_(h5dwritec_5_c, H5DWRITEC_5_C)
+#define nh5dwritec_6_c                H5_FC_FUNC_(h5dwritec_6_c, H5DWRITEC_6_C)
+#define nh5dwritec_7_c                H5_FC_FUNC_(h5dwritec_7_c, H5DWRITEC_7_C)
+#define nh5dread_c                  H5_FC_FUNC_(h5dread_c, H5DREAD_C)
+#define nh5dread_integer_s_c                 H5_FC_FUNC_(h5dread_integer_s_c, H5DREAD_INTEGER_S_C)
+#define nh5dread_integer_1_c                 H5_FC_FUNC_(h5dread_integer_1_c, H5DREAD_INTEGER_1_C)
+#define nh5dread_integer_2_c                 H5_FC_FUNC_(h5dread_integer_2_c, H5DREAD_INTEGER_2_C)
+#define nh5dread_integer_3_c                 H5_FC_FUNC_(h5dread_integer_3_c, H5DREAD_INTEGER_3_C)
+#define nh5dread_integer_4_c                 H5_FC_FUNC_(h5dread_integer_4_c, H5DREAD_INTEGER_4_C)
+#define nh5dread_integer_5_c                 H5_FC_FUNC_(h5dread_integer_5_c, H5DREAD_INTEGER_5_C)
+#define nh5dread_integer_6_c                 H5_FC_FUNC_(h5dread_integer_6_c, H5DREAD_INTEGER_6_C)
+#define nh5dread_integer_7_c                 H5_FC_FUNC_(h5dread_integer_7_c, H5DREAD_INTEGER_7_C)
+#define nh5dread_real_s_c                 H5_FC_FUNC_(h5dread_real_s_c, H5DREAD_REAL_S_C)
+#define nh5dread_real_1_c                 H5_FC_FUNC_(h5dread_real_1_c, H5DREAD_REAL_1_C)
+#define nh5dread_real_2_c                 H5_FC_FUNC_(h5dread_real_2_c, H5DREAD_REAL_2_C)
+#define nh5dread_real_3_c                 H5_FC_FUNC_(h5dread_real_3_c, H5DREAD_REAL_3_C)
+#define nh5dread_real_4_c                 H5_FC_FUNC_(h5dread_real_4_c, H5DREAD_REAL_4_C)
+#define nh5dread_real_5_c                 H5_FC_FUNC_(h5dread_real_5_c, H5DREAD_REAL_5_C)
+#define nh5dread_real_6_c                 H5_FC_FUNC_(h5dread_real_6_c, H5DREAD_REAL_6_C)
+#define nh5dread_real_7_c                 H5_FC_FUNC_(h5dread_real_7_c, H5DREAD_REAL_7_C)
+#define nh5dread_double_s_c                 H5_FC_FUNC_(h5dread_double_s_c, H5DREAD_DOUBLE_S_C)
+#define nh5dread_double_1_c                 H5_FC_FUNC_(h5dread_double_1_c, H5DREAD_DOUBLE_1_C)
+#define nh5dread_double_2_c                 H5_FC_FUNC_(h5dread_double_2_c, H5DREAD_DOUBLE_2_C)
+#define nh5dread_double_3_c                 H5_FC_FUNC_(h5dread_double_3_c, H5DREAD_DOUBLE_3_C)
+#define nh5dread_double_4_c                 H5_FC_FUNC_(h5dread_double_4_c, H5DREAD_DOUBLE_4_C)
+#define nh5dread_double_5_c                 H5_FC_FUNC_(h5dread_double_5_c, H5DREAD_DOUBLE_5_C)
+#define nh5dread_double_6_c                 H5_FC_FUNC_(h5dread_double_6_c, H5DREAD_DOUBLE_6_C)
+#define nh5dread_double_7_c                 H5_FC_FUNC_(h5dread_double_7_c, H5DREAD_DOUBLE_7_C)
+#define nh5dread_c_b                H5_FC_FUNC_(h5dread_c_b, H5DREAD_C_B)
+#define nh5dread_ref_reg_c          H5_FC_FUNC_(h5dread_ref_reg_c, H5DREAD_REF_REG_C)
+#define nh5dread_ref_obj_c          H5_FC_FUNC_(h5dread_ref_obj_c, H5DREAD_REF_OBJ_C)
+#define nh5dreadc_c                 H5_FC_FUNC_(h5dreadc_c, H5DREADC_C)
+#define nh5dreadc_s_c                 H5_FC_FUNC_(h5dreadc_s_c, H5DREADC_S_C)
+#define nh5dreadc_1_c                 H5_FC_FUNC_(h5dreadc_1_c, H5DREADC_1_C)
+#define nh5dreadc_2_c                 H5_FC_FUNC_(h5dreadc_2_c, H5DREADC_2_C)
+#define nh5dreadc_3_c                 H5_FC_FUNC_(h5dreadc_3_c, H5DREADC_3_C)
+#define nh5dreadc_4_c                 H5_FC_FUNC_(h5dreadc_4_c, H5DREADC_4_C)
+#define nh5dreadc_5_c                 H5_FC_FUNC_(h5dreadc_5_c, H5DREADC_5_C)
+#define nh5dreadc_6_c                 H5_FC_FUNC_(h5dreadc_6_c, H5DREADC_6_C)
+#define nh5dreadc_7_c                 H5_FC_FUNC_(h5dreadc_7_c, H5DREADC_7_C)
+#define nh5dreadc_c_b               H5_FC_FUNC_(h5dreadc_c_b, H5DREADC_C_B)
+#define nh5dget_space_c             H5_FC_FUNC_(h5dget_space_c, H5DGET_SPACE_C)
+#define nh5dget_type_c              H5_FC_FUNC_(h5dget_type_c, H5DGET_TYPE_C)
+#define nh5dget_create_plist_c      H5_FC_FUNC_(h5dget_create_plist_c, H5DGET_CREATE_PLIST_C)
+#define nh5dset_extent_c            H5_FC_FUNC_(h5dset_extent_c, H5DSET_EXTENT_C)
+#define nh5dget_storage_size_c      H5_FC_FUNC_(h5dget_storage_size_c, H5DGET_STORAGE_SIZE_C)
+#define nh5dvlen_get_max_len_c      H5_FC_FUNC_(h5dvlen_get_max_len_c, H5DVLEN_GET_MAX_LEN_C)
+#define nh5dwrite_vl_integer_c      H5_FC_FUNC_(h5dwrite_vl_integer_c, H5DWRITE_VL_INTEGER_C)
+#define nh5dread_vl_integer_c       H5_FC_FUNC_(h5dread_vl_integer_c, H5DREAD_VL_INTEGER_C)
+#define nh5dwrite_vl_real_c         H5_FC_FUNC_(h5dwrite_vl_real_c, H5DWRITE_VL_REAL_C)
+#define nh5dread_vl_real_c          H5_FC_FUNC_(h5dread_vl_real_c, H5DREAD_VL_REAL_C)
+#define nh5dwrite_vl_string_c       H5_FC_FUNC_(h5dwrite_vl_string_c, H5DWRITE_VL_STRING_C)
+#define nh5dread_vl_string_c        H5_FC_FUNC_(h5dread_vl_string_c, H5DREAD_VL_STRING_C)
+#define nh5dfillc_c                 H5_FC_FUNC_(h5dfillc_c, H5DFILLC_C)
+#define nh5dfill_c                  H5_FC_FUNC_(h5dfill_c, H5DFILL_C)
+#define nh5dfill_integer_c                  H5_FC_FUNC_(h5dfill_integer_c, H5DFILL_INTEGER_C)
+#define nh5dfill_real_c                  H5_FC_FUNC_(h5dfill_real_c, H5DFILL_REAL_C)
+#define nh5dfill_double_c                  H5_FC_FUNC_(h5dfill_double_c, H5DFILL_DOUBLE_C)
+#define nh5dget_space_status_c    H5_FC_FUNC_(h5dget_space_status_c, H5DGET_SPACE_STATUS_C)
+#define nh5dcreate_anon_c         H5_FC_FUNC_(h5dcreate_anon_c, H5DCREATE_ANON_C)
+#define nh5dwrite_f_c             H5_FC_FUNC_(h5dwrite_f_c, H5DWRITE_F_C)
+#define nh5dread_f_c              H5_FC_FUNC_(h5dread_f_c, H5DREAD_F_C)
+#define nh5dget_access_plist_c    H5_FC_FUNC_(h5dget_access_plist_c, H5DGET_ACCESS_PLIST_C)
+#define nh5dvlen_reclaim_c        H5_FC_FUNC_(h5dvlen_reclaim_c, H5DVLEN_RECLAIM_C)
+
+
+H5_FCDLL int_f nh5dcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *space_id,
+			     hid_t_f *lcpl_id, hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id);
+H5_FCDLL int_f nh5dopen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *dapl_id, hid_t_f *dset_id);
+H5_FCDLL int_f nh5dclose_c ( hid_t_f *dset_id );
+H5_FCDLL int_f nh5dwrite_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_integer_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_integer_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_integer_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_integer_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_integer_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_integer_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dwrite_real_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_real_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_real_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_real_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_real_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_real_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_real_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_real_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dwrite_double_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_double_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_double_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_double_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_double_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_double_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_double_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_double_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dwrite_vl_integer_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f *buf, hsize_t_f *dims, size_t_f *len);
+H5_FCDLL int_f nh5dwrite_vl_real_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, real_f *buf, hsize_t_f *dims, size_t_f *len);
+H5_FCDLL int_f nh5dwrite_vl_string_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims, size_t_f *len);
+H5_FCDLL int_f nh5dwrite_ref_obj_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, haddr_t_f *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwrite_ref_reg_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f *buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dwritec_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dwritec_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwritec_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwritec_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwritec_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwritec_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwritec_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwritec_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dwritec_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dread_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dread_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_integer_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_integer_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_integer_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_integer_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_integer_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_integer_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dread_real_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_real_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_real_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_real_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_real_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_real_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_real_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_real_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dread_double_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_double_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_double_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_double_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_double_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_double_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_double_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_double_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dread_vl_integer_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f *buf, hsize_t_f *dims, size_t_f *len);
+H5_FCDLL int_f nh5dread_vl_real_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, real_f *buf, hsize_t_f *dims, size_t_f *len);
+H5_FCDLL int_f nh5dread_vl_string_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims, size_t_f *len);
+H5_FCDLL int_f nh5dread_ref_obj_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, haddr_t_f * buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dread_ref_reg_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f * buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dreadc_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+
+H5_FCDLL int_f nh5dreadc_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dreadc_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dreadc_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dreadc_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dreadc_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dreadc_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dreadc_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dreadc_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims);
+H5_FCDLL int_f nh5dget_access_plist_c (hid_t_f *dset_id, hid_t_f *plist_id);
+
+
+H5_FCDLL int_f nh5dget_space_c ( hid_t_f *dset_id , hid_t_f *space_id);
+H5_FCDLL int_f nh5dget_type_c ( hid_t_f *dset_id , hid_t_f *type_id);
+H5_FCDLL int_f nh5dget_create_plist_c ( hid_t_f *dset_id , hid_t_f *plist_id);
+H5_FCDLL int_f nh5dset_extent_c ( hid_t_f *dset_id , hsize_t_f *dims);
+H5_FCDLL int_f nh5dvlen_get_max_len_c(hid_t_f *dataset_id, hid_t_f *type_id, hid_t_f *space_id, size_t_f *len);
+H5_FCDLL int_f nh5dget_storage_size_c(hid_t_f *dataset_id, hsize_t_f *size);
+H5_FCDLL int_f nh5dfillc_c(_fcd fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, _fcd buf, hid_t_f *mem_type_id);
+H5_FCDLL int_f nh5dfill_c(void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, void * buf, hid_t_f *mem_type_id);
+H5_FCDLL int_f nh5dfill_integer_c(void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, void * buf, hid_t_f *mem_type_id);
+H5_FCDLL int_f nh5dfill_real_c(void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, void * buf, hid_t_f *mem_type_id);
+H5_FCDLL int_f nh5dfill_double_c(void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, void * buf, hid_t_f *mem_type_id);
+H5_FCDLL int_f nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag);
+H5_FCDLL int_f nh5dcreate_anon_c (hid_t_f *loc_id, hid_t_f *type_id, hid_t_f *space_id,
+				  hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id);
+H5_FCDLL int_f nh5dwrite_f_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, 
+				   hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf);
+H5_FCDLL int_f nh5dread_f_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, 
+				   hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf);
+H5_FCDLL int_f nh5dvlen_reclaim_c (hid_t_f *type_id ,  hid_t_f *space_id, hid_t_f *plist_id, void *buf);
+/*
+ * Functions from H5Gf.c
+ */
+#define nh5gcreate_c      H5_FC_FUNC_(h5gcreate_c, H5GCREATE_C)
+#define nh5gclose_c       H5_FC_FUNC_(h5gclose_c, H5GCLOSE_C)
+#define nh5gopen_c        H5_FC_FUNC_(h5gopen_c, H5GOPEN_C)
+#define nh5gget_obj_info_idx_c H5_FC_FUNC_(h5gget_obj_info_idx_c, H5GGET_OBJ_INFO_IDX_C)
+#define nh5gn_members_c   H5_FC_FUNC_(h5gn_members_c, H5GN_MEMBERS_C)
+#define nh5glink_c        H5_FC_FUNC_(h5glink_c, H5GLINK_C)
+#define nh5glink2_c        H5_FC_FUNC_(h5glink2_c, H5GLINK2_C)
+#define nh5gunlink_c      H5_FC_FUNC_(h5gunlink_c, H5GUNLINK_C)
+#define nh5gmove_c        H5_FC_FUNC_(h5gmove_c, H5GMOVE_C)
+#define nh5gmove2_c        H5_FC_FUNC_(h5gmove2_c, H5GMOVE2_C)
+#define nh5gget_linkval_c   H5_FC_FUNC_(h5gget_linkval_c, H5GGET_LINKVAL_C)
+#define nh5gset_comment_c   H5_FC_FUNC_(h5gset_comment_c, H5GSET_COMMENT_C)
+#define nh5gget_comment_c   H5_FC_FUNC_(h5gget_comment_c, H5GGET_COMMENT_C)
+#define nh5gcreate_anon_c      H5_FC_FUNC_(h5gcreate_anon_c, H5GCREATE_ANON_C)
+#define nh5gget_create_plist_c H5_FC_FUNC_(h5gget_create_plist_c, H5GGET_CREATE_PLIST_C)
+#define nh5gget_info_c  H5_FC_FUNC_(h5gget_info_c, H5GGET_INFO_C)
+#define nh5gget_info_by_idx_c  H5_FC_FUNC_(h5gget_info_by_idx_c, H5GGET_INFO_BY_IDX_C)
+#define nh5gget_info_by_name_c  H5_FC_FUNC_(h5gget_info_by_name_c, H5GGET_INFO_BY_NAME_C)
+
+
+H5_FCDLL int_f nh5gcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size_hint,  hid_t_f *grp_id,
+			     hid_t_f *lcpl_id, hid_t_f *gcpl_id, hid_t_f *gapl_id);
+H5_FCDLL int_f nh5gopen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *gapl_id, hid_t_f *grp_id);
+H5_FCDLL int_f nh5gclose_c ( hid_t_f *grp_id );
+H5_FCDLL int_f nh5gget_obj_info_idx_c (hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *idx, _fcd obj_name, int_f *obj_namelen, int_f *obj_type);
+H5_FCDLL int_f nh5gn_members_c (hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *nmembers);
+H5_FCDLL int_f nh5glink_c (hid_t_f *loc_id, int_f *link_type, _fcd current_name, int_f *current_namelen, _fcd new_name, int_f *new_namelen);
+H5_FCDLL int_f nh5glink2_c (hid_t_f *cur_loc_id, _fcd cur_name, int_f *cur_namelen, int_f *link_type, hid_t_f *new_loc_id, _fcd new_name, int_f *new_namelen);
+H5_FCDLL int_f nh5gunlink_c (hid_t_f *loc_id, _fcd name, int_f *namelen);
+H5_FCDLL int_f nh5gmove_c (hid_t_f *loc_id, _fcd src_name, int_f *src_namelen, _fcd dst_name, int_f *dst_namelen);
+H5_FCDLL int_f nh5gmove2_c (hid_t_f *src_loc_id, _fcd src_name, int_f *src_namelen, hid_t_f *dst_loc_id,_fcd dst_name, int_f *dst_namelen);
+H5_FCDLL int_f nh5gget_linkval_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size, _fcd value );
+H5_FCDLL int_f nh5gset_comment_c (hid_t_f *loc_id, _fcd name, int_f *namelen, _fcd comment, int_f *commentlen);
+H5_FCDLL int_f nh5gget_comment_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *bufsize, _fcd comment);
+H5_FCDLL int_f nh5gcreate_anon_c (hid_t_f *loc_id, hid_t_f *gcpl_id, hid_t_f *gapl_id, hid_t_f *grp_id);
+H5_FCDLL int_f nh5gget_create_plist_c(hid_t_f *grp_id, hid_t_f *gcpl_id );
+H5_FCDLL int_f nh5gget_info_c (hid_t_f *group_id, int_f *storage_type, int_f *nlinks, int_f *max_corder, int_f *mounted);
+H5_FCDLL int_f nh5gget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
+				     int_f *index_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id,
+				     int_f *storage_type, int_f *nlinks, int_f *max_corder, int_f *mounted);
+H5_FCDLL int_f nh5gget_info_by_name_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, hid_t_f *lapl_id,
+				      int_f *storage_type, int_f *nlinks, int_f *max_corder, int_f *mounted);
+
+/*
+ * Functions from H5Af.c
+ */
+#define nh5acreate_c      H5_FC_FUNC_(h5acreate_c, H5ACREATE_C)
+#define nh5aclose_c       H5_FC_FUNC_(h5aclose_c, H5ACLOSE_C)
+#define nh5aopen_name_c   H5_FC_FUNC_(h5aopen_name_c, H5AOPEN_NAME_C)
+#define nh5awrite_c       H5_FC_FUNC_(h5awrite_c, H5AWRITE_C)
+#define nh5awrite_integer_s_c       H5_FC_FUNC_(h5awrite_integer_s_c, H5AWRITE_INTEGER_S_C)
+#define nh5awrite_integer_1_c       H5_FC_FUNC_(h5awrite_integer_1_c, H5AWRITE_INTEGER_1_C)
+#define nh5awrite_integer_2_c       H5_FC_FUNC_(h5awrite_integer_2_c, H5AWRITE_INTEGER_2_C)
+#define nh5awrite_integer_3_c       H5_FC_FUNC_(h5awrite_integer_3_c, H5AWRITE_INTEGER_3_C)
+#define nh5awrite_integer_4_c       H5_FC_FUNC_(h5awrite_integer_4_c, H5AWRITE_INTEGER_4_C)
+#define nh5awrite_integer_5_c       H5_FC_FUNC_(h5awrite_integer_5_c, H5AWRITE_INTEGER_5_C)
+#define nh5awrite_integer_6_c       H5_FC_FUNC_(h5awrite_integer_6_c, H5AWRITE_INTEGER_6_C)
+#define nh5awrite_integer_7_c       H5_FC_FUNC_(h5awrite_integer_7_c, H5AWRITE_INTEGER_7_C)
+#define nh5awrite_real_s_c       H5_FC_FUNC_(h5awrite_real_s_c, H5AWRITE_REAL_S_C)
+#define nh5awrite_real_1_c       H5_FC_FUNC_(h5awrite_real_1_c, H5AWRITE_REAL_1_C)
+#define nh5awrite_real_2_c       H5_FC_FUNC_(h5awrite_real_2_c, H5AWRITE_REAL_2_C)
+#define nh5awrite_real_3_c       H5_FC_FUNC_(h5awrite_real_3_c, H5AWRITE_REAL_3_C)
+#define nh5awrite_real_4_c       H5_FC_FUNC_(h5awrite_real_4_c, H5AWRITE_REAL_4_C)
+#define nh5awrite_real_5_c       H5_FC_FUNC_(h5awrite_real_5_c, H5AWRITE_REAL_5_C)
+#define nh5awrite_real_6_c       H5_FC_FUNC_(h5awrite_real_6_c, H5AWRITE_REAL_6_C)
+#define nh5awrite_real_7_c       H5_FC_FUNC_(h5awrite_real_7_c, H5AWRITE_REAL_7_C)
+#define nh5awrite_double_s_c       H5_FC_FUNC_(h5awrite_double_s_c, H5AWRITE_DOUBLE_S_C)
+#define nh5awrite_double_1_c       H5_FC_FUNC_(h5awrite_double_1_c, H5AWRITE_DOUBLE_1_C)
+#define nh5awrite_double_2_c       H5_FC_FUNC_(h5awrite_double_2_c, H5AWRITE_DOUBLE_2_C)
+#define nh5awrite_double_3_c       H5_FC_FUNC_(h5awrite_double_3_c, H5AWRITE_DOUBLE_3_C)
+#define nh5awrite_double_4_c       H5_FC_FUNC_(h5awrite_double_4_c, H5AWRITE_DOUBLE_4_C)
+#define nh5awrite_double_5_c       H5_FC_FUNC_(h5awrite_double_5_c, H5AWRITE_DOUBLE_5_C)
+#define nh5awrite_double_6_c       H5_FC_FUNC_(h5awrite_double_6_c, H5AWRITE_DOUBLE_6_C)
+#define nh5awrite_double_7_c       H5_FC_FUNC_(h5awrite_double_7_c, H5AWRITE_DOUBLE_7_C)
+#define nh5awritec_c        H5_FC_FUNC_(h5awritec_c, H5AWRITEC_C)
+#define nh5awritec_s_c      H5_FC_FUNC_(h5awritec_s_c, H5AWRITEC_S_C)
+#define nh5awritec_1_c      H5_FC_FUNC_(h5awritec_1_c, H5AWRITEC_1_C)
+#define nh5awritec_2_c      H5_FC_FUNC_(h5awritec_2_c, H5AWRITEC_2_C)
+#define nh5awritec_3_c      H5_FC_FUNC_(h5awritec_3_c, H5AWRITEC_3_C)
+#define nh5awritec_4_c      H5_FC_FUNC_(h5awritec_4_c, H5AWRITEC_4_C)
+#define nh5awritec_5_c      H5_FC_FUNC_(h5awritec_5_c, H5AWRITEC_5_C)
+#define nh5awritec_6_c      H5_FC_FUNC_(h5awritec_6_c, H5AWRITEC_6_C)
+#define nh5awritec_7_c      H5_FC_FUNC_(h5awritec_7_c, H5AWRITEC_7_C)
+#define nh5awrite_f_c       H5_FC_FUNC_(h5awrite_f_c, H5AWRITE_F_C)
+#define nh5aread_c                 H5_FC_FUNC_(h5aread_c, H5AREAD_C)
+#define nh5aread_integer_s_c        H5_FC_FUNC_(h5aread_integer_s_c, H5AREAD_INTEGER_S_C)
+#define nh5aread_integer_1_c        H5_FC_FUNC_(h5aread_integer_1_c, H5AREAD_INTEGER_1_C)
+#define nh5aread_integer_2_c        H5_FC_FUNC_(h5aread_integer_2_c, H5AREAD_INTEGER_2_C)
+#define nh5aread_integer_3_c        H5_FC_FUNC_(h5aread_integer_3_c, H5AREAD_INTEGER_3_C)
+#define nh5aread_integer_4_c        H5_FC_FUNC_(h5aread_integer_4_c, H5AREAD_INTEGER_4_C)
+#define nh5aread_integer_5_c        H5_FC_FUNC_(h5aread_integer_5_c, H5AREAD_INTEGER_5_C)
+#define nh5aread_integer_6_c        H5_FC_FUNC_(h5aread_integer_6_c, H5AREAD_INTEGER_6_C)
+#define nh5aread_integer_7_c        H5_FC_FUNC_(h5aread_integer_7_c, H5AREAD_INTEGER_7_C)
+#define nh5aread_real_s_c        H5_FC_FUNC_(h5aread_real_s_c, H5AREAD_REAL_S_C)
+#define nh5aread_real_1_c        H5_FC_FUNC_(h5aread_real_1_c, H5AREAD_REAL_1_C)
+#define nh5aread_real_2_c        H5_FC_FUNC_(h5aread_real_2_c, H5AREAD_REAL_2_C)
+#define nh5aread_real_3_c        H5_FC_FUNC_(h5aread_real_3_c, H5AREAD_REAL_3_C)
+#define nh5aread_real_4_c        H5_FC_FUNC_(h5aread_real_4_c, H5AREAD_REAL_4_C)
+#define nh5aread_real_5_c        H5_FC_FUNC_(h5aread_real_5_c, H5AREAD_REAL_5_C)
+#define nh5aread_real_6_c        H5_FC_FUNC_(h5aread_real_6_c, H5AREAD_REAL_6_C)
+#define nh5aread_real_7_c        H5_FC_FUNC_(h5aread_real_7_c, H5AREAD_REAL_7_C)
+#define nh5aread_double_s_c        H5_FC_FUNC_(h5aread_double_s_c, H5AREAD_DOUBLE_S_C)
+#define nh5aread_double_1_c        H5_FC_FUNC_(h5aread_double_1_c, H5AREAD_DOUBLE_1_C)
+#define nh5aread_double_2_c        H5_FC_FUNC_(h5aread_double_2_c, H5AREAD_DOUBLE_2_C)
+#define nh5aread_double_3_c        H5_FC_FUNC_(h5aread_double_3_c, H5AREAD_DOUBLE_3_C)
+#define nh5aread_double_4_c        H5_FC_FUNC_(h5aread_double_4_c, H5AREAD_DOUBLE_4_C)
+#define nh5aread_double_5_c        H5_FC_FUNC_(h5aread_double_5_c, H5AREAD_DOUBLE_5_C)
+#define nh5aread_double_6_c        H5_FC_FUNC_(h5aread_double_6_c, H5AREAD_DOUBLE_6_C)
+#define nh5aread_double_7_c        H5_FC_FUNC_(h5aread_double_7_c, H5AREAD_DOUBLE_7_C)
+#define nh5areadc_c       H5_FC_FUNC_(h5areadc_c, H5AREADC_C)
+#define nh5areadc_s_c       H5_FC_FUNC_(h5areadc_s_c, H5AREADC_S_C)
+#define nh5areadc_1_c       H5_FC_FUNC_(h5areadc_1_c, H5AREADC_1_C)
+#define nh5areadc_2_c       H5_FC_FUNC_(h5areadc_2_c, H5AREADC_2_C)
+#define nh5areadc_3_c       H5_FC_FUNC_(h5areadc_3_c, H5AREADC_3_C)
+#define nh5areadc_4_c       H5_FC_FUNC_(h5areadc_4_c, H5AREADC_4_C)
+#define nh5areadc_5_c       H5_FC_FUNC_(h5areadc_5_c, H5AREADC_5_C)
+#define nh5areadc_6_c       H5_FC_FUNC_(h5areadc_6_c, H5AREADC_6_C)
+#define nh5areadc_7_c       H5_FC_FUNC_(h5areadc_7_c, H5AREADC_7_C)
+#define nh5aread_f_c        H5_FC_FUNC_(h5aread_f_c, H5AREAD_F_C)
+#define nh5aget_name_c    H5_FC_FUNC_(h5aget_name_c, H5AGET_NAME_C)
+#define nh5aopen_idx_c    H5_FC_FUNC_(h5aopen_idx_c, H5AOPEN_IDX_C)
+#define nh5aget_space_c   H5_FC_FUNC_(h5aget_space_c, H5AGET_SPACE_C)
+#define nh5aget_type_c    H5_FC_FUNC_(h5aget_type_c, H5AGET_TYPE_C)
+#define nh5aget_num_attrs_c H5_FC_FUNC_(h5aget_num_attrs_c, H5AGET_NUM_ATTRS_C)
+#define nh5adelete_c      H5_FC_FUNC_(h5adelete_c, H5ADELETE_C)
+#define nh5aget_storage_size_c H5_FC_FUNC_(h5aget_storage_size_c, H5AGET_STORAGE_SIZE_C)
+#define nh5arename_by_name_c H5_FC_FUNC_(h5arename_by_name_c, H5ARENAME_BY_NAME_C)
+#define nh5aopen_c H5_FC_FUNC_(h5aopen_c, H5AOPEN_C)
+#define nh5adelete_by_name_c H5_FC_FUNC_(h5adelete_by_name_c,H5ADELETE_BY_NAME_C)
+#define nh5adelete_by_idx_c H5_FC_FUNC_(h5adelete_by_idx_c,H5ADELETE_BY_IDX_C)
+#define nh5aget_name_by_idx_c H5_FC_FUNC_(h5aget_name_by_idx_c,H5AGET_NAME_BY_IDX_C)
+#define nh5aget_create_plist_c H5_FC_FUNC_(h5aget_create_plist_c,H5AGET_CREATE_PLIST_C)
+#define nh5aopen_by_idx_c H5_FC_FUNC_(h5aopen_by_idx_c,H5AOPEN_BY_IDX_C)
+#define nh5aget_info_c H5_FC_FUNC_(h5aget_info_c,H5AGET_INFO_C)
+#define nh5aget_info_by_idx_c H5_FC_FUNC_(h5aget_info_by_idx_c,H5AGET_INFO_BY_IDX_C)
+#define nh5aget_info_by_name_c H5_FC_FUNC_(h5aget_info_by_name_c,H5AGET_INFO_BY_NAME_C)
+#define nh5aget_info_by_name_c H5_FC_FUNC_(h5aget_info_by_name_c,H5AGET_INFO_BY_NAME_C)
+#define nh5acreate_by_name_c H5_FC_FUNC_(h5acreate_by_name_c,H5ACREATE_BY_NAME_C)
+#define nh5aexists_c H5_FC_FUNC_(h5aexists_c,H5AEXISTS_C)
+#define nh5aexists_by_name_c H5_FC_FUNC_(h5aexists_by_name_c,H5AEXISTS_BY_NAME_C)
+#define nh5aopen_by_name_c H5_FC_FUNC_(h5aopen_by_name_c,H5AOPEN_BY_NAME_C)
+#define nh5arename_c H5_FC_FUNC_(h5arename_c,H5ARENAME_C)
+
+H5_FCDLL int_f nh5acreate_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *type_id, hid_t_f *space_id, hid_t_f *crt_prp, hid_t_f *aapl,  hid_t_f *attr_id);
+H5_FCDLL int_f nh5aopen_name_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_id);
+H5_FCDLL int_f nh5awritec_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5awritec_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5awritec_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5awritec_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5awritec_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5awritec_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5awritec_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5awritec_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5awritec_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5awrite_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_integer_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_integer_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_integer_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_integer_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_integer_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_integer_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_integer_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_integer_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_real_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_real_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_real_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_real_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_real_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_real_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_real_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_real_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_double_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_double_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_double_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_double_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_f_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf);
+H5_FCDLL int_f nh5areadc_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5areadc_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5areadc_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5areadc_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5areadc_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5areadc_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5areadc_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5areadc_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5areadc_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5aread_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_integer_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_integer_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_integer_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_integer_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_integer_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_integer_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_integer_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_integer_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_real_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_real_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_real_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_real_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_real_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_real_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_real_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_real_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_double_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_double_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_double_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_double_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_f_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf);
+H5_FCDLL int_f nh5aclose_c ( hid_t_f *attr_id );
+H5_FCDLL int_f nh5adelete_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen);
+H5_FCDLL int_f nh5aopen_idx_c (hid_t_f *obj_id, int_f *idx, hid_t_f *attr_id);
+H5_FCDLL int_f nh5aget_space_c (hid_t_f *attr_id, hid_t_f *space_id);
+H5_FCDLL int_f nh5aget_type_c (hid_t_f *attr_id, hid_t_f *type_id);
+H5_FCDLL int_f nh5aget_num_attrs_c (hid_t_f *obj_id, int_f *attr_num);
+H5_FCDLL int_f nh5aget_name_c(hid_t_f *attr_id, size_t_f *size, _fcd buf);
+H5_FCDLL int_f nh5aget_storage_size_c ( hid_t_f *attr_id, hsize_t_f *size );
+H5_FCDLL int_f nh5arename_by_name_c ( hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
+				      _fcd old_attr_name, size_t_f *old_attr_namelen,
+				      _fcd new_attr_name, size_t_f *new_attr_namelen,
+				      hid_t_f *lapl_id );
+H5_FCDLL int_f nh5aopen_c ( hid_t_f *obj_id, _fcd attr_name, size_t_f *attr_namelen,
+			    hid_t_f *aapl_id, hid_t_f *attr_id);
+H5_FCDLL int_f nh5adelete_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
+				     _fcd attr_name, size_t_f *attr_namelen, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5adelete_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
+				    int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5aget_name_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
+				      int_f *idx_type, int_f *order, hsize_t_f *n, _fcd name,
+				      size_t_f *size, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5aget_create_plist_c ( hid_t_f *attr_id, hid_t_f *creation_prop_id );
+H5_FCDLL int_f nh5aopen_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
+		     int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *aapl_id, hid_t_f *lapl_id, hid_t_f *attr_id);
+H5_FCDLL int_f nh5aget_info_c (hid_t_f *loc_id, int_f *corder_valid, int_f *corder,
+			       int_f *cset, hsize_t_f *data_size );
+H5_FCDLL int_f nh5aget_info_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
+				      int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id,
+				      int_f *corder_valid, int_f *corder,
+				      int_f *cset, hsize_t_f *data_size );
+H5_FCDLL int_f nh5aget_info_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
+				       _fcd attr_name, size_t_f *attr_namelen, hid_t_f *lapl_id,
+				       int_f *corder_valid, int_f *corder,
+				       int_f *cset, hsize_t_f *data_size );
+H5_FCDLL int_f nh5acreate_by_name_c(hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
+				    _fcd attr_name, size_t_f *attr_namelen,  hid_t_f *type_id,
+				    hid_t_f *space_id, hid_t_f *acpl_id, hid_t_f *aapl_id,
+				    hid_t_f *lapl_id, hid_t_f *attr_id );
+H5_FCDLL int_f nh5aexists_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_exists);
+H5_FCDLL int_f nh5aexists_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen,
+		      hid_t_f *lapl_id, int_f *attr_exists);
+H5_FCDLL int_f nh5aopen_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen,
+				   hid_t_f *aapl_id, hid_t_f *lapl_id, hid_t_f *attr_id);
+H5_FCDLL int_f nh5arename_c( hid_t_f *loc_id,
+		      _fcd old_attr_name, size_t_f *old_attr_namelen,
+		      _fcd new_attr_name, size_t_f *new_attr_namelen);
+
+/*
+ * Functions form H5Tf.c file
+ */
+#define nh5topen_c         H5_FC_FUNC_(h5topen_c, H5TOPEN_C)
+#define nh5tcommit_c       H5_FC_FUNC_(h5tcommit_c, H5TCOMMIT_C)
+#define nh5tcommitted_c    H5_FC_FUNC_(h5tcommitted_c, H5TCOMMITTED_C)
+#define nh5tconvert_c      H5_FC_FUNC_(h5tconvert_c, H5TCONVERT_C)
+#define nh5tclose_c        H5_FC_FUNC_(h5tclose_c, H5TCLOSE_C)
+#define nh5tcopy_c         H5_FC_FUNC_(h5tcopy_c, H5TCOPY_C)
+#define nh5tequal_c        H5_FC_FUNC_(h5tequal_c, H5TEQUAL_C)
+#define nh5tget_class_c    H5_FC_FUNC_(h5tget_class_c, H5TGET_CLASS_C)
+#define nh5tget_order_c    H5_FC_FUNC_(h5tget_order_c, H5TGET_ORDER_C)
+#define nh5tset_order_c    H5_FC_FUNC_(h5tset_order_c, H5TSET_ORDER_C)
+#define nh5tget_size_c     H5_FC_FUNC_(h5tget_size_c, H5TGET_SIZE_C)
+#define nh5tset_size_c     H5_FC_FUNC_(h5tset_size_c, H5TSET_SIZE_C)
+#define nh5tget_precision_c     H5_FC_FUNC_(h5tget_precision_c, H5TGET_PRECISION_C)
+#define nh5tset_precision_c     H5_FC_FUNC_(h5tset_precision_c, H5TSET_PRECISION_C)
+#define nh5tget_offset_c        H5_FC_FUNC_(h5tget_offset_c, H5TGET_OFFSET_C)
+#define nh5tset_offset_c        H5_FC_FUNC_(h5tset_offset_c, H5TSET_OFFSET_C)
+#define nh5tget_pad_c        H5_FC_FUNC_(h5tget_pad_c, H5TGET_PAD_C)
+#define nh5tset_pad_c        H5_FC_FUNC_(h5tset_pad_c, H5TSET_PAD_C)
+#define nh5tget_sign_c       H5_FC_FUNC_(h5tget_sign_c, H5TGET_SIGN_C)
+#define nh5tset_sign_c       H5_FC_FUNC_(h5tset_sign_c, H5TSET_SIGN_C)
+#define nh5tget_fields_c       H5_FC_FUNC_(h5tget_fields_c, H5TGET_FIELDS_C)
+#define nh5tset_fields_c       H5_FC_FUNC_(h5tset_fields_c, H5TSET_FIELDS_C)
+#define nh5tget_ebias_c     H5_FC_FUNC_(h5tget_ebias_c, H5TGET_EBIAS_C)
+#define nh5tset_ebias_c     H5_FC_FUNC_(h5tset_ebias_c, H5TSET_EBIAS_C)
+#define nh5tget_norm_c     H5_FC_FUNC_(h5tget_norm_c, H5TGET_NORM_C)
+#define nh5tset_norm_c     H5_FC_FUNC_(h5tset_norm_c, H5TSET_NORM_C)
+#define nh5tget_inpad_c        H5_FC_FUNC_(h5tget_inpad_c, H5TGET_INPAD_C)
+#define nh5tset_inpad_c        H5_FC_FUNC_(h5tset_inpad_c, H5TSET_INPAD_C)
+#define nh5tget_cset_c        H5_FC_FUNC_(h5tget_cset_c, H5TGET_CSET_C)
+#define nh5tset_cset_c        H5_FC_FUNC_(h5tset_cset_c, H5TSET_CSET_C)
+#define nh5tget_strpad_c        H5_FC_FUNC_(h5tget_strpad_c, H5TGET_STRPAD_C)
+#define nh5tset_strpad_c        H5_FC_FUNC_(h5tset_strpad_c, H5TSET_STRPAD_C)
+#define nh5tget_nmembers_c        H5_FC_FUNC_(h5tget_nmembers_c, H5TGET_NMEMBERS_C)
+#define nh5tget_member_name_c        H5_FC_FUNC_(h5tget_member_name_c, H5TGET_MEMBER_NAME_C)
+#define nh5tget_member_offset_c        H5_FC_FUNC_(h5tget_member_offset_c, H5TGET_MEMBER_OFFSET_C)
+#define nh5tget_member_dims_c        H5_FC_FUNC_(h5tget_member_dims_c, H5TGET_MEMBER_DIMS_C)
+#define nh5tget_member_type_c        H5_FC_FUNC_(h5tget_member_type_c, H5TGET_MEMBER_TYPE_C)
+#define nh5tget_member_index_c        H5_FC_FUNC_(h5tget_member_index_c, H5TGET_MEMBER_INDEX_C)
+#define nh5tinsert_c        H5_FC_FUNC_(h5tinsert_c, H5TINSERT_C)
+#define nh5tcreate_c        H5_FC_FUNC_(h5tcreate_c, H5TCREATE_C)
+#define nh5tpack_c                   H5_FC_FUNC_(h5tpack_c, H5TPACK_C)
+#define nh5tinsert_array_c           H5_FC_FUNC_(h5tinsert_array_c, H5TINSERT_ARRAY_C)
+#define nh5tinsert_array_c2           H5_FC_FUNC_(h5tinsert_array_c2, H5TINSERT_ARRAY_C2)
+#define nh5tenum_create_c             H5_FC_FUNC_(h5tenum_create_c, H5TENUM_CREATE_C)
+#define nh5tenum_insert_c             H5_FC_FUNC_(h5tenum_insert_c, H5TENUM_INSERT_C)
+#define nh5tenum_nameof_c             H5_FC_FUNC_(h5tenum_nameof_c, H5TENUM_NAMEOF_C)
+#define nh5tenum_valueof_c             H5_FC_FUNC_(h5tenum_valueof_c, H5TENUM_VALUEOF_C)
+#define nh5tget_member_value_c         H5_FC_FUNC_(h5tget_member_value_c, H5TGET_MEMBER_VALUE_C)
+#define nh5tset_tag_c                  H5_FC_FUNC_(h5tset_tag_c, H5TSET_TAG_C)
+#define nh5tget_tag_c                  H5_FC_FUNC_(h5tget_tag_c, H5TGET_TAG_C)
+#define nh5tarray_create_c             H5_FC_FUNC_(h5tarray_create_c, H5TARRAY_CREATE_C)
+#define nh5tget_array_ndims_c          H5_FC_FUNC_(h5tget_array_ndims_c, H5TGET_ARRAY_NDIMS_C)
+#define nh5tget_array_dims_c          H5_FC_FUNC_(h5tget_array_dims_c, H5TGET_ARRAY_DIMS_C)
+#define nh5tget_super_c               H5_FC_FUNC_(h5tget_super_c, H5TGET_SUPER_C)
+#define nh5tvlen_create_c               H5_FC_FUNC_(h5tvlen_create_c, H5TVLEN_CREATE_C)
+#define nh5tis_variable_str_c         H5_FC_FUNC_(h5tis_variable_str_c, H5TIS_VARIABLE_STR_C)
+#define nh5tget_member_class_c         H5_FC_FUNC_(h5tget_member_class_c, H5TGET_MEMBER_CLASS_C)
+#define nh5tcommit_anon_c       H5_FC_FUNC_(h5tcommit_anon_c, H5TCOMMIT_ANON_C)
+#define nh5tdecode_c    H5_FC_FUNC_(h5tdecode_c, H5TDECODE_C)
+#define nh5tencode_c    H5_FC_FUNC_(h5tencode_c, H5TENCODE_C)
+#define nh5tget_create_plist_c H5_FC_FUNC_(h5tget_create_plist_c, H5TGET_CREATE_PLIST_C)
+#define nh5tcompiler_conv_c H5_FC_FUNC_(h5tcompiler_conv_c, H5TCOMPILER_CONV_C)
+#define nh5tget_native_type_c H5_FC_FUNC_(h5tget_native_type_c, H5TGET_NATIVE_TYPE_C )
+
+H5_FCDLL int_f nh5tcreate_c(int_f *cls, size_t_f *size, hid_t_f *type_id);
+H5_FCDLL int_f nh5topen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *tapl_id );
+H5_FCDLL int_f nh5tcommit_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *lcpl_id, hid_t_f *tcpl_id, hid_t_f *tapl_id);
+H5_FCDLL int_f nh5tclose_c ( hid_t_f *type_id );
+H5_FCDLL int_f nh5tequal_c ( hid_t_f *type1_id , hid_t_f *type2_id, int_f *c_flag);
+H5_FCDLL int_f nh5tcopy_c ( hid_t_f *type_id , hid_t_f *new_type_id);
+H5_FCDLL int_f nh5tget_class_c ( hid_t_f *type_id , int_f *classtype);
+H5_FCDLL int_f nh5tget_order_c ( hid_t_f *type_id , int_f *order);
+H5_FCDLL int_f nh5tset_order_c ( hid_t_f *type_id , int_f *order);
+H5_FCDLL int_f nh5tget_size_c ( hid_t_f *type_id , size_t_f *size);
+H5_FCDLL int_f nh5tset_size_c ( hid_t_f *type_id , size_t_f *size);
+H5_FCDLL int_f nh5tcommitted_c (hid_t_f *dtype_id);
+H5_FCDLL int_f nh5tget_precision_c ( hid_t_f *type_id , size_t_f *precision);
+H5_FCDLL int_f nh5tset_precision_c ( hid_t_f *type_id , size_t_f *precision);
+H5_FCDLL int_f nh5tget_offset_c ( hid_t_f *type_id , size_t_f *offset);
+H5_FCDLL int_f nh5tset_offset_c ( hid_t_f *type_id , size_t_f *offset);
+H5_FCDLL int_f nh5tget_pad_c ( hid_t_f *type_id , int_f * lsbpad, int_f * msbpad);
+H5_FCDLL int_f nh5tset_pad_c ( hid_t_f *type_id, int_f * lsbpad, int_f * msbpad );
+H5_FCDLL int_f nh5tget_sign_c ( hid_t_f *type_id , int_f* sign);
+H5_FCDLL int_f nh5tset_sign_c ( hid_t_f *type_id , int_f *sign);
+H5_FCDLL int_f nh5tget_fields_c ( hid_t_f *type_id, size_t_f *spos, size_t_f *epos, size_t_f* esize, size_t_f* mpos, size_t_f* msize);
+H5_FCDLL int_f nh5tset_fields_c ( hid_t_f *type_id, size_t_f *spos, size_t_f *epos, size_t_f* esize, size_t_f* mpos, size_t_f* msize);
+H5_FCDLL int_f nh5tget_ebias_c ( hid_t_f *type_id , size_t_f *ebias);
+H5_FCDLL int_f nh5tset_ebias_c ( hid_t_f *type_id , size_t_f *ebias);
+H5_FCDLL int_f nh5tget_norm_c ( hid_t_f *type_id , int_f *norm);
+H5_FCDLL int_f nh5tset_norm_c ( hid_t_f *type_id , int_f *norm);
+H5_FCDLL int_f nh5tget_inpad_c ( hid_t_f *type_id, int_f * padtype);
+H5_FCDLL int_f nh5tset_inpad_c ( hid_t_f *type_id, int_f * padtype);
+H5_FCDLL int_f nh5tget_cset_c ( hid_t_f *type_id, int_f * cset);
+H5_FCDLL int_f nh5tset_cset_c ( hid_t_f *type_id, int_f * cset);
+H5_FCDLL int_f nh5tget_strpad_c ( hid_t_f *type_id, int_f * strpad);
+H5_FCDLL int_f nh5tset_strpad_c ( hid_t_f *type_id, int_f * strpad);
+H5_FCDLL int_f nh5tget_nmembers_c ( hid_t_f *type_id , int_f * num_members);
+H5_FCDLL int_f nh5tget_member_name_c ( hid_t_f *type_id ,int_f* idx, _fcd member_name, int_f *namelen);
+H5_FCDLL int_f nh5tget_member_dims_c ( hid_t_f *type_id ,int_f* field_idx, int_f * dims, size_t_f * field_dims, int_f * perm );
+H5_FCDLL int_f nh5tget_member_offset_c ( hid_t_f *type_id ,int_f* member_no, size_t_f* offset);
+H5_FCDLL int_f nh5tget_member_type_c ( hid_t_f *type_id ,int_f* field_idx, hid_t_f * datatype);
+H5_FCDLL int_f nh5tget_member_index_c ( hid_t_f *type_id ,_fcd name, int_f* namelen, int_f *idx);
+H5_FCDLL int_f nh5tinsert_c(hid_t_f *type_id, _fcd name, int_f* namelen, size_t_f *offset, hid_t_f * field_id);
+H5_FCDLL int_f nh5tpack_c(hid_t_f * type_id);
+H5_FCDLL int_f nh5tinsert_array_c(hid_t_f * parent_id, _fcd name, int_f* namelen, size_t_f* offset, int_f* ndims, size_t_f* dims, hid_t_f* member_id, int_f* perm );
+H5_FCDLL int_f nh5tinsert_array_c2(hid_t_f * parent_id, _fcd name, int_f* namelen, size_t_f* offset, int_f* ndims, size_t_f* dims, hid_t_f* member_id);
+H5_FCDLL int_f nh5tenum_create_c ( hid_t_f *parent_id , hid_t_f *new_type_id);
+H5_FCDLL int_f nh5tenum_insert_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value);
+H5_FCDLL int_f nh5tenum_nameof_c(hid_t_f *type_id, int_f* value, _fcd name, size_t_f* namelen);
+H5_FCDLL int_f nh5tenum_valueof_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value);
+H5_FCDLL int_f nh5tget_member_value_c(hid_t_f *type_id, int_f* member_no, int_f* value);
+H5_FCDLL int_f nh5tset_tag_c(hid_t_f* type_id, _fcd tag, int_f* namelen);
+H5_FCDLL int_f nh5tget_tag_c(hid_t_f* type_id, _fcd tag, size_t_f* tag_size, int_f* namelen);
+H5_FCDLL int_f nh5tarray_create_c(hid_t_f * base_id, int_f *rank, hsize_t_f* dims, hid_t_f* type_id);
+H5_FCDLL int_f nh5tget_array_dims_c ( hid_t_f *type_id , hsize_t_f * dims);
+H5_FCDLL int_f nh5tget_array_ndims_c ( hid_t_f *type_id , int_f * ndims);
+H5_FCDLL int_f nh5tget_super_c ( hid_t_f *type_id , hid_t_f *base_type_id);
+H5_FCDLL int_f nh5tvlen_create_c ( hid_t_f *type_id , hid_t_f *vltype_id);
+H5_FCDLL int_f nh5tis_variable_str_c ( hid_t_f *type_id , int_f *flag );
+H5_FCDLL int_f nh5tget_member_class_c ( hid_t_f *type_id ,  int_f *member_no, int_f *cls );
+H5_FCDLL int_f nh5tcommit_anon_c(hid_t_f *loc_id, hid_t_f *dtype_id, hid_t_f *tcpl_id, hid_t_f *tapl_id);
+H5_FCDLL int_f nh5tdecode_c ( _fcd buf, hid_t_f *obj_id );
+H5_FCDLL int_f nh5tencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc );
+H5_FCDLL int_f nh5tget_create_plist_c ( hid_t_f *dtype_id,  hid_t_f *dtpl_id);
+H5_FCDLL int_f nh5tcompiler_conv_c ( hid_t_f *src_id, hid_t_f *dst_id, int_f *c_flag);
+H5_FCDLL int_f nh5tget_native_type_c(hid_t_f *dtype_id, int_f *direction, hid_t_f *native_dtype_id);
+H5_FCDLL int_f nh5tconvert_c(hid_t_f *src_id, hid_t_f *dst_id, size_t_f *nelmts, void *buf, void *background, hid_t_f *plist_id);
+
+
+/*
+ * Functions from H5Of.c
+ */
+
+#define nh5olink_c       H5_FC_FUNC_(h5olink_c, H5OLINK_C)
+#define nh5oopen_c       H5_FC_FUNC_(h5oopen_c, H5OOPEN_C)
+#define nh5oclose_c      H5_FC_FUNC_(h5oclose_c, H5OCLOSE_C)
+#define nh5ovisit_c      H5_FC_FUNC_(h5ovisit_c, H5OVISIT_C)
+#define nh5ovisit_by_name_c H5_FC_FUNC_(h5ovisit_by_name_c, H5OVISIT_BY_NAME_C)
+#define nh5oget_info_c   H5_FC_FUNC_(h5oget_info_c, H5OGET_INFO_C)
+#define nh5oget_info_by_idx_c H5_FC_FUNC_(h5oget_info_by_idx_c ,H5OGET_INFO_BY_IDX_C)
+#define nh5oget_info_by_name_c H5_FC_FUNC_(h5oget_info_by_name_c ,H5OGET_INFO_BY_NAME_C)
+#define nh5oopen_by_addr_c H5_FC_FUNC_(h5oopen_by_addr_c, H5OOPEN_BY_ADDR_C)
+#define nh5ocopy_c         H5_FC_FUNC_(h5ocopy_c, H5OCOPY_C)
+#define nh5odecr_refcount_c H5_FC_FUNC_(h5odecr_refcount_c, H5ODECR_REFCOUNT_C)
+#define nh5oincr_refcount_c H5_FC_FUNC_(h5oincr_refcount_c, H5OINCR_REFCOUNT_C)
+#define nh5oexists_by_name_c H5_FC_FUNC_(h5oexists_by_name_c, H5OEXISTS_BY_NAME_C)
+#define nh5oset_comment_c H5_FC_FUNC_(h5oset_comment_c, H5OSET_COMMENT_C)
+#define nh5oset_comment_by_name_c H5_FC_FUNC_(h5oset_comment_by_name_c, H5OSET_COMMENT_BY_NAME_C)
+#define nh5oopen_by_idx_c H5_FC_FUNC_(h5oopen_by_idx_c, H5OOPEN_BY_IDX_C)
+#define nh5oget_comment_c H5_FC_FUNC_(h5oget_comment_c, H5OGET_COMMENT_C)
+#define nh5oget_comment_by_name_c H5_FC_FUNC_(h5oget_comment_by_name_c, H5OGET_COMMENT_BY_NAME_C)
+
+H5_FCDLL int_f nh5oopen_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, hid_t_f *obj_id);
+H5_FCDLL int_f nh5oclose_c (hid_t_f *object_id );
+H5_FCDLL int_f nh5oopen_by_addr_c (hid_t_f *loc_id, haddr_t_f *addr, hid_t_f *obj_id);
+H5_FCDLL int_f nh5olink_c (hid_t_f *object_id, hid_t_f *new_loc_id, _fcd name, size_t_f *namelen,
+			   hid_t_f *lcpl_id, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5ovisit_c (hid_t_f *group_id, int_f *index_type, int_f *order, H5O_iterate_t op, void *op_data);
+H5_FCDLL int_f nh5ovisit_by_name_c(hid_t_f *loc_id,  _fcd object_name, size_t_f *namelen, int_f *index_type, int_f *order,
+				   H5O_iterate_t op, void *op_data, hid_t_f *lapl_id );
+H5_FCDLL int_f nh5oget_info_c (hid_t_f *object_id, H5O_info_t_f *object_info);
+H5_FCDLL int_f nh5oget_info_by_idx_c (hid_t_f *loc_id, _fcd  group_name, size_t_f *namelen, 
+				      int_f *index_field, int_f *order, hsize_t_f *n, hid_t_f *lapl_id, H5O_info_t_f *object_info);
+H5_FCDLL int_f nh5oget_info_by_name_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id,
+				       H5O_info_t_f *object_info);
+H5_FCDLL int_f nh5ocopy_c (hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_name_len,
+			   hid_t_f *dst_loc_id, _fcd dst_name, size_t_f *dst_name_len, 
+			   hid_t_f *ocpypl_id, hid_t_f *lcpl_id );
+H5_FCDLL int_f nh5odecr_refcount_c (hid_t_f *object_id);
+H5_FCDLL int_f nh5oincr_refcount_c (hid_t_f *object_id);
+H5_FCDLL int_f nh5oexists_by_name_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5oset_comment_c (hid_t_f *object_id, _fcd comment, size_t_f *commentlen);
+H5_FCDLL int_f nh5oset_comment_by_name_c (hid_t_f *object_id, _fcd name, size_t_f *namelen,  _fcd comment, size_t_f *commentlen, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5oopen_by_idx_c (hid_t_f *loc_id, _fcd  group_name, size_t_f *group_namelen, 
+				      int_f *index_type, int_f *order, hsize_t_f *n, hid_t_f *obj_id, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5oget_comment_c (hid_t_f *object_id, _fcd comment, size_t_f *commentsize, hssize_t_f *bufsize);
+H5_FCDLL int_f nh5oget_comment_by_name_c (hid_t_f *loc_id, _fcd name, size_t_f *name_size, 
+					  _fcd comment, size_t_f *commentsize, size_t_f *bufsize, hid_t_f *lapl_id);
+/*
+ * Functions from H5Pf.c
+ */
+#define nh5pcreate_c       H5_FC_FUNC_(h5pcreate_c, H5PCREATE_C)
+#define nh5pclose_c        H5_FC_FUNC_(h5pclose_c, H5PCLOSE_C)
+#define nh5pcopy_c         H5_FC_FUNC_(h5pcopy_c, H5PCOPY_C)
+#define nh5pequal_c         H5_FC_FUNC_(h5pequal_c, H5PEQUAL_C)
+#define nh5pget_class_c    H5_FC_FUNC_(h5pget_class_c, H5PGET_CLASS_C)
+#define nh5pset_deflate_c  H5_FC_FUNC_(h5pset_deflate_c, H5PSET_DEFLATE_C)
+#define nh5pset_preserve_c  H5_FC_FUNC_(h5pset_preserve_c, H5PSET_PRESERVE_C)
+#define nh5pget_preserve_c  H5_FC_FUNC_(h5pget_preserve_c, H5PGET_PRESERVE_C)
+#define nh5pset_chunk_c    H5_FC_FUNC_(h5pset_chunk_c, H5PSET_CHUNK_C)
+#define nh5pget_chunk_c    H5_FC_FUNC_(h5pget_chunk_c, H5PGET_CHUNK_C)
+#define nh5pset_file_image_c H5_FC_FUNC_(h5pset_file_image_c,H5PSET_FILE_IMAGE_C)
+#define nh5pset_fill_valuec_c        H5_FC_FUNC_(h5pset_fill_valuec_c, H5PSET_FILL_VALUEC_C)
+#define nh5pset_fill_value_c         H5_FC_FUNC_(h5pset_fill_value_c, H5PSET_FILL_VALUE_C)
+#define nh5pset_fill_value_integer_c H5_FC_FUNC_(h5pset_fill_value_integer_c, H5PSET_FILL_VALUE_INTEGER_C)
+#define nh5pset_fill_value_real_c    H5_FC_FUNC_(h5pset_fill_value_real_c, H5PSET_FILL_VALUE_REAL_C)
+#define nh5pset_fill_value_double_c  H5_FC_FUNC_(h5pset_fill_value_double_c, H5PSET_FILL_VALUE_DOUBLE_C)
+#define nh5pget_file_image_c H5_FC_FUNC_(h5pget_file_image_c,H5PGET_FILE_IMAGE_C)
+#define nh5pget_fill_valuec_c        H5_FC_FUNC_(h5pget_fill_valuec_c, H5PGET_FILL_VALUEC_C)
+#define nh5pget_fill_value_c         H5_FC_FUNC_(h5pget_fill_value_c, H5PGET_FILL_VALUE_C)
+#define nh5pget_fill_value_integer_c H5_FC_FUNC_(h5pget_fill_value_integer_c, H5PGET_FILL_VALUE_INTEGER_C)
+#define nh5pget_fill_value_real_c    H5_FC_FUNC_(h5pget_fill_value_real_c, H5PGET_FILL_VALUE_REAL_C)
+#define nh5pget_fill_value_double_c  H5_FC_FUNC_(h5pget_fill_value_double_c, H5PGET_FILL_VALUE_DOUBLE_C)
+#define nh5pget_version_c    H5_FC_FUNC_(h5pget_version_c, H5PGET_VERSION_C)
+#define nh5pget_userblock_c    H5_FC_FUNC_(h5pget_userblock_c, H5PGET_USERBLOCK_C)
+#define nh5pset_userblock_c    H5_FC_FUNC_(h5pset_userblock_c, H5PSET_USERBLOCK_C)
+#define nh5pset_sizes_c        H5_FC_FUNC_(h5pset_sizes_c, H5PSET_SIZES_C)
+#define nh5pget_sizes_c         H5_FC_FUNC_(h5pget_sizes_c, H5PGET_SIZES_C)
+#define nh5pget_sym_k_c         H5_FC_FUNC_(h5pget_sym_k_c, H5PGET_SYM_K_C)
+#define nh5pset_sym_k_c         H5_FC_FUNC_(h5pset_sym_k_c, H5PSET_SYM_K_C)
+#define nh5pget_istore_k_c         H5_FC_FUNC_(h5pget_istore_k_c, H5PGET_ISTORE_K_C)
+#define nh5pset_istore_k_c         H5_FC_FUNC_(h5pset_istore_k_c, H5PSET_ISTORE_K_C)
+#define nh5pget_driver_c         H5_FC_FUNC_(h5pget_driver_c, H5PGET_DRIVER_C)
+#define nh5pset_fapl_stdio_c         H5_FC_FUNC_(h5pset_fapl_stdio_c, H5PSET_FAPL_STDIO_C)
+#define nh5pget_fapl_stdio_c         H5_FC_FUNC_(h5pget_fapl_stdio_c, H5PGET_FAPL_STDIO_C)
+#define nh5pset_fapl_sec2_c         H5_FC_FUNC_(h5pset_fapl_sec2_c, H5PSET_FAPL_SEC2_C)
+#define nh5pget_fapl_sec2_c         H5_FC_FUNC_(h5pget_fapl_sec2_c, H5PGET_FAPL_SEC2_C)
+#define nh5pset_alignment_c         H5_FC_FUNC_(h5pset_alignment_c, H5PSET_ALIGNMENT_C)
+#define nh5pget_alignment_c         H5_FC_FUNC_(h5pget_alignment_c, H5PGET_ALIGNMENT_C)
+#define nh5pset_fapl_core_c         H5_FC_FUNC_(h5pset_fapl_core_c, H5PSET_FAPL_CORE_C)
+#define nh5pget_fapl_core_c         H5_FC_FUNC_(h5pget_fapl_core_c, H5PGET_FAPL_CORE_C)
+#define nh5pset_fapl_family_c         H5_FC_FUNC_(h5pset_fapl_family_c, H5PSET_FAPL_FAMILY_C)
+#define nh5pget_fapl_family_c         H5_FC_FUNC_(h5pget_fapl_family_c, H5PGET_FAPL_FAMILY_C)
+#define nh5pset_cache_c         H5_FC_FUNC_(h5pset_cache_c, H5PSET_CACHE_C)
+#define nh5pget_cache_c         H5_FC_FUNC_(h5pget_cache_c, H5PGET_CACHE_C)
+#define nh5pset_fapl_split_c         H5_FC_FUNC_(h5pset_fapl_split_c, H5PSET_FAPL_SPLIT_C)
+#define nh5pget_fapl_split_c         H5_FC_FUNC_(h5pget_fapl_split_c, H5PGET_FAPL_SPLIT_C)
+#define nh5pset_gc_references_c         H5_FC_FUNC_(h5pset_gc_references_c, H5PSET_GC_REFERENCES_C)
+#define nh5pget_gc_references_c         H5_FC_FUNC_(h5pget_gc_references_c, H5PGET_GC_REFERENCES_C)
+#define nh5pset_layout_c         H5_FC_FUNC_(h5pset_layout_c, H5PSET_LAYOUT_C)
+#define nh5pget_layout_c         H5_FC_FUNC_(h5pget_layout_c, H5PGET_LAYOUT_C)
+#define nh5pset_filter_c         H5_FC_FUNC_(h5pset_filter_c, H5PSET_FILTER_C)
+#define nh5premove_filter_c         H5_FC_FUNC_(h5premove_filter_c, H5PREMOVE_FILTER_C)
+#define nh5pmodify_filter_c         H5_FC_FUNC_(h5pmodify_filter_c, H5PMODIFY_FILTER_C)
+#define nh5pget_nfilters_c         H5_FC_FUNC_(h5pget_nfilters_c, H5PGET_NFILTERS_C)
+#define nh5pget_filter_c         H5_FC_FUNC_(h5pget_filter_c, H5PGET_FILTER_C)
+#define nh5pget_filter_by_id_c         H5_FC_FUNC_(h5pget_filter_by_id_c, H5PGET_FILTER_BY_ID_C)
+#define nh5pset_external_c         H5_FC_FUNC_(h5pset_external_c, H5PSET_EXTERNAL_C)
+#define nh5pget_external_count_c         H5_FC_FUNC_(h5pget_external_count_c, H5PGET_EXTERNAL_COUNT_C)
+#define nh5pget_external_c         H5_FC_FUNC_(h5pget_external_c, H5PGET_EXTERNAL_C)
+#define nh5pget_btree_ratios_c         H5_FC_FUNC_(h5pget_btree_ratios_c, H5PGET_BTREE_RATIOS_C)
+#define nh5pset_btree_ratios_c         H5_FC_FUNC_(h5pset_btree_ratios_c, H5PSET_BTREE_RATIOS_C)
+#define nh5pset_fapl_mpio_c         H5_FC_FUNC_(h5pset_fapl_mpio_c, H5PSET_FAPL_MPIO_C)
+#define nh5pget_fapl_mpio_c         H5_FC_FUNC_(h5pget_fapl_mpio_c, H5PGET_FAPL_MPIO_C)
+#define nh5pset_dxpl_mpio_c        H5_FC_FUNC_(h5pset_dxpl_mpio_c, H5PSET_DXPL_MPIO_C)
+#define nh5pget_dxpl_mpio_c        H5_FC_FUNC_(h5pget_dxpl_mpio_c, H5PGET_DXPL_MPIO_C)
+#define nh5pget_fclose_degree_c    H5_FC_FUNC_(h5pget_fclose_degree_c, H5PGET_FCLOSE_DEGREE_C)
+#define nh5pset_fclose_degree_c    H5_FC_FUNC_(h5pset_fclose_degree_c, H5PSET_FCLOSE_DEGREE_C)
+#define nh5pset_buffer_c    H5_FC_FUNC_(h5pset_buffer_c, H5PSET_BUFFER_C)
+#define nh5pget_buffer_c    H5_FC_FUNC_(h5pget_buffer_c, H5PGET_BUFFER_C)
+#define nh5pfill_value_defined_c    H5_FC_FUNC_(h5pfill_value_defined_c, H5PFILL_VALUE_DEFINED_C)
+#define nh5pset_alloc_time_c    H5_FC_FUNC_(h5pset_alloc_time_c, H5PSET_ALLOC_TIME_C)
+#define nh5pget_alloc_time_c    H5_FC_FUNC_(h5pget_alloc_time_c, H5PGET_ALLOC_TIME_C)
+#define nh5pset_fill_time_c    H5_FC_FUNC_(h5pset_fill_time_c, H5PSET_FILL_TIME_C)
+#define nh5pget_fill_time_c    H5_FC_FUNC_(h5pget_fill_time_c, H5PGET_FILL_TIME_C)
+#define nh5pset_meta_block_size_c    H5_FC_FUNC_(h5pset_meta_block_size_c, H5PSET_META_BLOCK_SIZE_C)
+#define nh5pget_meta_block_size_c    H5_FC_FUNC_(h5pget_meta_block_size_c, H5PGET_META_BLOCK_SIZE_C)
+#define nh5pset_sieve_buf_size_c    H5_FC_FUNC_(h5pset_sieve_buf_size_c, H5PSET_SIEVE_BUF_SIZE_C)
+#define nh5pget_sieve_buf_size_c    H5_FC_FUNC_(h5pget_sieve_buf_size_c, H5PGET_SIEVE_BUF_SIZE_C)
+#define nh5pset_hyper_vector_size_c    H5_FC_FUNC_(h5pset_hyper_vector_size_c, H5PSET_HYPER_VECTOR_SIZE_C)
+#define nh5pget_hyper_vector_size_c    H5_FC_FUNC_(h5pget_hyper_vector_size_c, H5PGET_HYPER_VECTOR_SIZE_C)
+#define nh5pset_small_data_block_size_c    H5_FC_FUNC_(h5pset_small_data_block_size_c, H5PSET_SMALL_DATA_BLOCK_SIZE_C)
+#define nh5pget_small_data_block_size_c    H5_FC_FUNC_(h5pget_small_data_block_size_c, H5PGET_SMALL_DATA_BLOCK_SIZE_C)
+#define nh5pcreate_class_c             H5_FC_FUNC_(h5pcreate_class_c, H5PCREATE_CLASS_C)
+#define nh5pregister_c                 H5_FC_FUNC_(h5pregister_c, H5PREGISTER_C)
+#define nh5pregister_integer_c                 H5_FC_FUNC_(h5pregister_integer_c, H5PREGISTER_INTEGER_C)
+#define nh5pregister_real_c                    H5_FC_FUNC_(h5pregister_real_c, H5PREGISTER_REAL_C)
+#define nh5pregister_double_c                  H5_FC_FUNC_(h5pregister_double_c, H5PREGISTER_DOUBLE_C)
+#define nh5pregisterc_c                H5_FC_FUNC_(h5pregisterc_c, H5PREGISTERC_C)
+#define nh5pinsert_c                   H5_FC_FUNC_(h5pinsert_c, H5PINSERT_C)
+#define nh5pinsert_integer_c                   H5_FC_FUNC_(h5pinsert_integer_c, H5PINSERT_INTEGER_C)
+#define nh5pinsert_real_c                   H5_FC_FUNC_(h5pinsert_real_c, H5PINSERT_REAL_C)
+#define nh5pinsert_double_c                   H5_FC_FUNC_(h5pinsert_double_c, H5PINSERT_DOUBLE_C)
+#define nh5pinsertc_c                  H5_FC_FUNC_(h5pinsertc_c, H5PINSERTC_C)
+#define nh5pset_c                      H5_FC_FUNC_(h5pset_c, H5PSET_C)
+#define nh5pset_integer_c                      H5_FC_FUNC_(h5pset_integer_c, H5PSET_INTEGER_C)
+#define nh5pset_real_c                         H5_FC_FUNC_(h5pset_real_c, H5PSET_REAL_C)
+#define nh5pset_double_c                       H5_FC_FUNC_(h5pset_double_c, H5PSET_DOUBLE_C)
+#define nh5psetc_c                     H5_FC_FUNC_(h5psetc_c, H5PSETC_C)
+#define nh5pget_c                      H5_FC_FUNC_(h5pget_c, H5PGET_C)
+#define nh5pget_integer_c                      H5_FC_FUNC_(h5pget_integer_c, H5PGET_INTEGER_C)
+#define nh5pget_real_c                         H5_FC_FUNC_(h5pget_real_c, H5PGET_REAL_C)
+#define nh5pget_double_c                       H5_FC_FUNC_(h5pget_double_c, H5PGET_DOUBLE_C)
+#define nh5pgetc_c                     H5_FC_FUNC_(h5pgetc_c, H5PGETC_C)
+#define nh5pexist_c                    H5_FC_FUNC_(h5pexist_c, H5PEXIST_C)
+#define nh5pget_size_c                 H5_FC_FUNC_(h5pget_size_c, H5PGET_SIZE_C)
+#define nh5pget_nprops_c               H5_FC_FUNC_(h5pget_nprops_c, H5PGET_NPROPS_C)
+#define nh5pget_class_parent_c         H5_FC_FUNC_(h5pget_class_parent_c, H5PGET_CLASS_PARENT_C)
+#define nh5pisa_class_c                H5_FC_FUNC_(h5pisa_class_c, H5PISA_CLASS_C)
+#define nh5pcopy_prop_c                H5_FC_FUNC_(h5pcopy_prop_c, H5PCOPY_PROP_C)
+#define nh5premove_c                   H5_FC_FUNC_(h5premove_c, H5PREMOVE_C)
+#define nh5punregister_c               H5_FC_FUNC_(h5punregister_c, H5PUNREGISTER_C)
+#define nh5pclose_class_c              H5_FC_FUNC_(h5pclose_class_c, H5PCLOSE_CLASS_C)
+#define nh5pget_class_name_c           H5_FC_FUNC_(h5pget_class_name_c, H5PGET_CLASS_NAME_C)
+#define nh5pset_shuffle_c               H5_FC_FUNC_(h5pset_shuffle_c, H5PSET_SHUFFLE_C)
+#define nh5pset_fletcher32_c           H5_FC_FUNC_(h5pset_fletcher32_c, H5PSET_FLETCHER32_C)
+#define nh5pset_edc_check_c            H5_FC_FUNC_(h5pset_edc_check_c, H5PSET_EDC_CHECK_C)
+#define nh5pget_edc_check_c            H5_FC_FUNC_(h5pget_edc_check_c, H5PGET_EDC_CHECK_C)
+#define nh5pset_family_offset_c       H5_FC_FUNC_(h5pset_family_offset_c, H5PSET_FAMILY_OFFSET_C)
+#define nh5pget_fapl_multi_c          H5_FC_FUNC_(h5pget_fapl_multi_c, H5PGET_FAPL_MULTI_C)
+#define nh5pset_fapl_multi_c          H5_FC_FUNC_(h5pset_fapl_multi_c, H5PSET_FAPL_MULTI_C)
+#define nh5pset_fapl_multi_sc          H5_FC_FUNC_(h5pset_fapl_multi_sc, H5PSET_FAPL_MULTI_SC)
+#define nh5pset_szip_c                 H5_FC_FUNC_(h5pset_szip_c, H5PSET_SZIP_C)
+#define nh5pall_filters_avail_c        H5_FC_FUNC_(h5pall_filters_avail_c, H5PALL_FILTERS_AVAIL_C)
+#define nh5pget_attr_phase_change_c    H5_FC_FUNC_(h5pget_attr_phase_change_c, H5PGET_ATTR_PHASE_CHANGE_C)
+#define nh5pset_attr_creation_order_c  H5_FC_FUNC_(h5pset_attr_creation_order_c, H5PSET_ATTR_CREATION_ORDER_C)
+#define nh5pset_shared_mesg_nindexes_c  H5_FC_FUNC_(h5pset_shared_mesg_nindexes_c, H5PSET_SHARED_MESG_NINDEXES_C)
+#define nh5pset_shared_mesg_index_c  H5_FC_FUNC_(h5pset_shared_mesg_index_c,H5PSET_SHARED_MESG_INDEX_C)
+#define nh5pget_attr_creation_order_c  H5_FC_FUNC_(h5pget_attr_creation_order_c,H5PGET_ATTR_CREATION_ORDER_C)
+#define nh5pset_libver_bounds_c H5_FC_FUNC_(h5pset_libver_bounds_c,H5PSET_LIBVER_BOUNDS_C)
+#define nh5pset_link_creation_order_c H5_FC_FUNC_(h5pset_link_creation_order_c, H5PSET_LINK_CREATION_ORDER_C)
+#define nh5pget_link_phase_change_c H5_FC_FUNC_(h5pget_link_phase_change_c, H5PGET_LINK_PHASE_CHANGE_C)
+#define nh5pget_obj_track_times_c H5_FC_FUNC_(h5pget_obj_track_times_c, H5PGET_OBJ_TRACK_TIMES_C)
+#define nh5pset_obj_track_times_c H5_FC_FUNC_(h5pset_obj_track_times_c, H5PSET_OBJ_TRACK_TIMES_C)
+#define nh5pset_create_inter_group_c H5_FC_FUNC_(h5pset_create_inter_group_c,H5PSET_CREATE_INTER_GROUP_C)
+#define nh5pget_create_inter_group_c H5_FC_FUNC_(h5pget_create_inter_group_c,H5PGET_CREATE_INTER_GROUP_C)
+#define nh5pget_link_creation_order_c H5_FC_FUNC_(h5pget_link_creation_order_c,H5PGET_LINK_CREATION_ORDER_C)
+#define nh5pset_char_encoding_c H5_FC_FUNC_(h5pset_char_encoding_c, H5PSET_CHAR_ENCODING_C)
+#define nh5pget_char_encoding_c H5_FC_FUNC_(h5pget_char_encoding_c, H5PGET_CHAR_ENCODING_C)
+#define nh5pset_copy_object_c H5_FC_FUNC_(h5pset_copy_object_c, H5PSET_COPY_OBJECT_C)
+#define nh5pget_copy_object_c H5_FC_FUNC_(h5pget_copy_object_c, H5PGET_COPY_OBJECT_C)
+#define nh5pget_data_transform_c H5_FC_FUNC_(h5pget_data_transform_c, H5PGET_DATA_TRANSFORM_C)
+#define nh5pset_data_transform_c H5_FC_FUNC_(h5pset_data_transform_c, H5PSET_DATA_TRANSFORM_C)
+#define nh5pget_local_heap_size_hint_c H5_FC_FUNC_(h5pget_local_heap_size_hint_c, H5PGET_LOCAL_HEAP_SIZE_HINT_C)
+#define nh5pget_est_link_info_c H5_FC_FUNC_(h5pget_est_link_info_c,H5PGET_EST_LINK_INFO_C)
+#define nh5pset_est_link_info_c H5_FC_FUNC_(h5pset_est_link_info_c,H5PSET_EST_LINK_INFO_C)
+#define nh5pset_local_heap_size_hint_c H5_FC_FUNC_(h5pset_local_heap_size_hint_c, H5PSET_LOCAL_HEAP_SIZE_HINT_C)
+#define nh5pset_link_phase_change_c H5_FC_FUNC_(h5pset_link_phase_change_c, H5PSET_LINK_PHASE_CHANGE_C)
+#define nh5pset_fapl_direct_c H5_FC_FUNC_(h5pset_fapl_direct_c, H5PSET_FAPL_DIRECT_C)
+#define nh5pget_fapl_direct_c H5_FC_FUNC_(h5pget_fapl_direct_c, H5PGET_FAPL_DIRECT_C)
+#define nh5pset_attr_phase_change_c H5_FC_FUNC_(h5pset_attr_phase_change_c, H5PSET_ATTR_PHASE_CHANGE_C)
+#define nh5pset_nbit_c H5_FC_FUNC_(h5pset_nbit_c, H5PSET_NBIT_C)
+#define nh5pset_scaleoffset_c H5_FC_FUNC_(h5pset_scaleoffset_c, H5PSET_SCALEOFFSET_C)
+#define nh5pset_nlinks_c H5_FC_FUNC_(h5pset_nlinks_c, H5PSET_NLINKS_C)
+#define nh5pget_nlinks_c H5_FC_FUNC_(h5pget_nlinks_c, H5PGET_NLINKS_C)
+#define nh5pset_chunk_cache_c H5_FC_FUNC_(h5pset_chunk_cache_c, H5PSET_CHUNK_CACHE_C)
+#define nh5pget_chunk_cache_c H5_FC_FUNC_(h5pget_chunk_cache_c, H5PGET_CHUNK_CACHE_C)
+#define nh5pget_mpio_actual_io_mode_c H5_FC_FUNC_(h5pget_mpio_actual_io_mode_c, H5PGET_MPIO_ACTUAL_IO_MODE_C)
+
+H5_FCDLL int_f nh5pcreate_c ( hid_t_f *cls, hid_t_f *prp_id );
+H5_FCDLL int_f nh5pclose_c ( hid_t_f *prp_id );
+H5_FCDLL int_f nh5pcopy_c ( hid_t_f *prp_id , hid_t_f *new_prp_id);
+H5_FCDLL int_f nh5pequal_c ( hid_t_f *plist1_id , hid_t_f *plist2_id, int_f *c_flag);
+H5_FCDLL int_f nh5pget_class_c ( hid_t_f *prp_id , int_f *classtype);
+H5_FCDLL int_f nh5pset_deflate_c ( hid_t_f *prp_id , int_f *level);
+H5_FCDLL int_f nh5pset_chunk_c ( hid_t_f *prp_id, int_f *rank, hsize_t_f *dims );
+H5_FCDLL int_f nh5pget_chunk_c ( hid_t_f *prp_id, int_f *max_rank, hsize_t_f *dims );
+H5_FCDLL int_f nh5pset_file_image_c (hid_t_f *fapl_id, void *buf_ptr, size_t_f *buf_len);
+H5_FCDLL int_f nh5pset_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue);
+H5_FCDLL int_f nh5pset_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue);
+H5_FCDLL int_f nh5pset_fill_value_integer_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue);
+H5_FCDLL int_f nh5pset_fill_value_real_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue);
+H5_FCDLL int_f nh5pset_fill_value_double_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue);
+H5_FCDLL int_f nh5pget_file_image_c (hid_t_f *fapl_id, void **buf_ptr, size_t_f *buf_len);
+H5_FCDLL int_f nh5pget_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue);
+H5_FCDLL int_f nh5pget_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue);
+H5_FCDLL int_f nh5pget_fill_value_integer_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue);
+H5_FCDLL int_f nh5pget_fill_value_real_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue);
+H5_FCDLL int_f nh5pget_fill_value_double_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue);
+H5_FCDLL int_f nh5pset_preserve_c ( hid_t_f *prp_id , int_f *flag);
+H5_FCDLL int_f nh5pget_preserve_c ( hid_t_f *prp_id , int_f *flag);
+H5_FCDLL int_f nh5pget_version_c (hid_t_f *prp_id, int_f * boot,int_f * freelist, int_f * stab, int_f *shhdr);
+H5_FCDLL int_f nh5pset_userblock_c (hid_t_f *prp_id, hsize_t_f * size);
+H5_FCDLL int_f nh5pget_userblock_c (hid_t_f *prp_id, hsize_t_f * size);
+H5_FCDLL int_f nh5pget_sizes_c (hid_t_f *prp_id, size_t_f * sizeof_addr, size_t_f * sizeof_size);
+H5_FCDLL int_f nh5pset_sizes_c (hid_t_f *prp_id, size_t_f * sizeof_addr, size_t_f * sizeof_size);
+H5_FCDLL int_f nh5pset_sym_k_c (hid_t_f *prp_id, int_f* ik, int_f* lk);
+H5_FCDLL int_f nh5pget_sym_k_c (hid_t_f *prp_id, int_f* ik, int_f* lk);
+H5_FCDLL int_f nh5pset_istore_k_c (hid_t_f *prp_id, int_f* ik);
+H5_FCDLL int_f nh5pget_istore_k_c (hid_t_f *prp_id, int_f* ik);
+H5_FCDLL int_f nh5pget_driver_c (hid_t_f *prp_id, hid_t_f*driver);
+H5_FCDLL int_f nh5pset_fapl_stdio_c (hid_t_f *prp_id);
+H5_FCDLL int_f nh5pget_fapl_stdio_c (hid_t_f *prp_id, int_f* io);
+H5_FCDLL int_f nh5pset_fapl_sec2_c (hid_t_f *prp_id);
+H5_FCDLL int_f nh5pget_fapl_sec2_c (hid_t_f *prp_id, int_f* sec2);
+H5_FCDLL int_f nh5pset_alignment_c(hid_t_f *prp_id, hsize_t_f* threshold, hsize_t_f* alignment);
+H5_FCDLL int_f nh5pget_alignment_c(hid_t_f *prp_id, hsize_t_f* threshold, hsize_t_f* alignment);
+H5_FCDLL int_f nh5pget_fapl_core_c (hid_t_f *prp_id, size_t_f* increment, int_f *flag);
+H5_FCDLL int_f nh5pset_fapl_core_c (hid_t_f *prp_id, size_t_f* increment, int_f *flag);
+H5_FCDLL int_f nh5pset_fapl_family_c (hid_t_f *prp_id, hsize_t_f* memb_size, hid_t_f* memb_plist );
+H5_FCDLL int_f nh5pget_fapl_family_c (hid_t_f *prp_id, hsize_t_f* memb_size, hid_t_f* memb_plist );
+H5_FCDLL int_f nh5pset_cache_c(hid_t_f *prp_id, int_f* mdc_nelmts, size_t_f* rdcc_nelmts, size_t_f* rdcc_nbytes, real_f* rdcc_w0);
+H5_FCDLL int_f nh5pget_cache_c(hid_t_f *prp_id, int_f* mdc_nelmts, size_t_f* rdcc_nelmts, size_t_f* rdcc_nbytes, real_f* rdcc_w0);
+H5_FCDLL int_f nh5pget_fapl_split_c(hid_t_f *prp_id, size_t_f* meta_ext_size , _fcd meta_ext, hid_t_f* meta_plist, size_t_f* raw_ext_size, _fcd raw_ext, hid_t_f * raw_plist);
+H5_FCDLL int_f nh5pset_fapl_split_c(hid_t_f *prp_id, int_f* meta_len, _fcd meta_ext, hid_t_f* meta_plist, int_f* raw_len, _fcd raw_ext, hid_t_f * raw_plist);
+H5_FCDLL int_f nh5pset_gc_references_c(hid_t_f *prp_id, int_f* gc_references);
+H5_FCDLL int_f nh5pget_gc_references_c(hid_t_f *prp_id, int_f* gc_references);
+H5_FCDLL int_f nh5pset_layout_c (hid_t_f *prp_id, int_f* layout);
+H5_FCDLL int_f nh5pget_layout_c (hid_t_f *prp_id, int_f* layout);
+H5_FCDLL int_f nh5pset_filter_c (hid_t_f *prp_id, int_f* filter, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values );
+H5_FCDLL int_f nh5premove_filter_c (hid_t_f *prp_id, int_f* filter);
+H5_FCDLL int_f nh5pmodify_filter_c (hid_t_f *prp_id, int_f* filter, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values );
+H5_FCDLL int_f nh5pget_nfilters_c (hid_t_f *prp_id, int_f* nfilters);
+H5_FCDLL int_f nh5pget_filter_c(hid_t_f *prp_id, int_f* filter_number, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values, size_t_f *namelen, _fcd name, int_f* filter_id);
+H5_FCDLL int_f nh5pget_filter_by_id_c(hid_t_f *prp_id, int_f* filter_id, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values, size_t_f *namelen, _fcd name);
+H5_FCDLL int_f nh5pset_external_c (hid_t_f *prp_id, _fcd name, int_f* namelen, off_t_f* offset, hsize_t_f*bytes);
+H5_FCDLL int_f nh5pget_external_count_c (hid_t_f *prp_id, int_f* count);
+H5_FCDLL int_f nh5pget_external_c(hid_t_f *prp_id, int_f *idx, size_t_f* name_size, _fcd name, off_t_f* offset, hsize_t_f*bytes);
+H5_FCDLL int_f nh5pget_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* right);
+H5_FCDLL int_f nh5pset_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* right);
+H5_FCDLL int_f nh5pget_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info);
+H5_FCDLL int_f nh5pset_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info);
+H5_FCDLL int_f nh5pget_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode);
+H5_FCDLL int_f nh5pset_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode);
+H5_FCDLL int_f nh5pset_fclose_degree_c(hid_t_f *fapl, int_f *degree);
+H5_FCDLL int_f nh5pget_fclose_degree_c(hid_t_f *fapl, int_f *degree);
+H5_FCDLL int_f nh5pget_buffer_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pset_buffer_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pset_alloc_time_c(hid_t_f *plist, int_f *flag);
+H5_FCDLL int_f nh5pget_alloc_time_c(hid_t_f *plist, int_f *flag);
+H5_FCDLL int_f nh5pset_fill_time_c(hid_t_f *plist, int_f *flag);
+H5_FCDLL int_f nh5pget_fill_time_c(hid_t_f *plist, int_f *flag);
+H5_FCDLL int_f nh5pset_meta_block_size_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pget_meta_block_size_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pset_sieve_buf_size_c(hid_t_f *plist, size_t_f *size);
+H5_FCDLL int_f nh5pget_sieve_buf_size_c(hid_t_f *plist, size_t_f *size);
+H5_FCDLL int_f nh5pset_small_data_block_size_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pget_small_data_block_size_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pset_hyper_vector_size_c(hid_t_f *plist, size_t_f *size);
+H5_FCDLL int_f nh5pget_hyper_vector_size_c(hid_t_f *plist, size_t_f *size);
+H5_FCDLL int_f nh5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *cls,
+				  H5P_cls_create_func_t create, void *create_data,
+				  H5P_cls_copy_func_t copy, void *copy_data,
+				  H5P_cls_close_func_t close, void *close_data);
+H5_FCDLL int_f nh5pregister_c(hid_t_f *cls, _fcd name, int_f * name_len, size_t_f *size, void *value);
+H5_FCDLL int_f nh5pregister_integer_c(hid_t_f *cls, _fcd name, int_f * name_len, size_t_f *size, void *value);
+H5_FCDLL int_f nh5pregister_real_c(hid_t_f *cls, _fcd name, int_f * name_len, size_t_f *size, void *value);
+H5_FCDLL int_f nh5pregister_double_c(hid_t_f *cls, _fcd name, int_f * name_len, size_t_f *size, void *value);
+H5_FCDLL int_f nh5pregisterc_c(hid_t_f *cls, _fcd name, int_f * name_len, size_t_f *size, _fcd value, int_f *value_len);
+H5_FCDLL int_f nh5pinsert_c(hid_t_f  *plist, _fcd name, int_f *name_len, size_t_f *size, void *value);
+H5_FCDLL int_f nh5pinsert_integer_c(hid_t_f  *plist, _fcd name, int_f *name_len, size_t_f *size, void *value);
+H5_FCDLL int_f nh5pinsert_real_c(hid_t_f  *plist, _fcd name, int_f *name_len, size_t_f *size, void *value);
+H5_FCDLL int_f nh5pinsert_double_c(hid_t_f  *plist, _fcd name, int_f *name_len, size_t_f *size, void *value);
+H5_FCDLL int_f nh5pinsertc_c(hid_t_f  *plist, _fcd name, int_f *name_len, size_t_f *size, _fcd value, int_f *value_len);
+H5_FCDLL int_f nh5pset_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
+H5_FCDLL int_f nh5pset_integer_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
+H5_FCDLL int_f nh5pset_real_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
+H5_FCDLL int_f nh5pset_double_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
+H5_FCDLL int_f nh5psetc_c(hid_t_f *prp_id, _fcd name, int_f *name_len, _fcd value, int_f *value_len);
+H5_FCDLL int_f nh5pget_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
+H5_FCDLL int_f nh5pget_double_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
+H5_FCDLL int_f nh5pget_integer_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
+H5_FCDLL int_f nh5pget_real_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
+H5_FCDLL int_f nh5pgetc_c(hid_t_f *prp_id, _fcd name, int_f *name_len, _fcd value, int_f *value_len);
+H5_FCDLL int_f nh5pexist_c(hid_t_f *prp_id, _fcd name, int_f *name_len);
+H5_FCDLL int_f nh5pget_size_c(hid_t_f *prp_id, _fcd name, int_f *name_len, size_t_f *size);
+H5_FCDLL int_f nh5pget_nprops_c(hid_t_f *prp_id, size_t_f *nprops);
+H5_FCDLL int_f nh5pget_class_parent_c(hid_t_f *prp_id, hid_t_f *parent_id);
+H5_FCDLL int_f nh5pisa_class_c(hid_t_f *plist, hid_t_f *pclass);
+H5_FCDLL int_f nh5pcopy_prop_c(hid_t_f *dst_id, hid_t_f *src_id, _fcd name, int_f *name_len);
+H5_FCDLL int_f nh5premove_c(hid_t_f *plid, _fcd name, int_f *name_len);
+H5_FCDLL int_f nh5punregister_c(hid_t_f *cls, _fcd name, int_f *name_len);
+H5_FCDLL int_f nh5pclose_class_c(hid_t_f * cls);
+H5_FCDLL int_f nh5pget_class_name_c(hid_t_f *prp_id, _fcd name, int_f *name_len);
+H5_FCDLL int_f nh5pset_shuffle_c ( hid_t_f *prp_id);
+H5_FCDLL int_f nh5pset_fletcher32_c ( hid_t_f *prp_id );
+H5_FCDLL int_f nh5pset_edc_check_c ( hid_t_f *prp_id, int_f *flag );
+H5_FCDLL int_f nh5pget_edc_check_c ( hid_t_f *prp_id, int_f *flag );
+H5_FCDLL int_f nh5pset_family_offset_c ( hid_t_f *prp_id , hsize_t_f *offset);
+H5_FCDLL int_f nh5pget_fapl_multi_c ( hid_t_f *prp_id , int_f *mem_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag, int_f *maxlen_out);
+H5_FCDLL int_f nh5pset_fapl_multi_c ( hid_t_f *prp_id , int_f *mem_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag);
+H5_FCDLL int_f nh5pset_fapl_multi_sc ( hid_t_f *prp_id , int_f *flag);
+H5_FCDLL int_f nh5pset_szip_c ( hid_t_f *prp_id , int_f *options_mask, int_f *pixels_per_block);
+H5_FCDLL int_f nh5pall_filters_avail_c ( hid_t_f *prp_id , int_f *status);
+H5_FCDLL int_f nh5pfill_value_defined_c ( hid_t_f *prp_id , int_f *flag);
+H5_FCDLL int_f nh5pget_attr_phase_change_c (hid_t_f *ocpl_id, int_f *max_compact, int_f *min_dense );
+H5_FCDLL int_f nh5pset_attr_creation_order_c(hid_t_f *ocpl_id, int_f *crt_order_flags );
+H5_FCDLL int_f nh5pset_shared_mesg_nindexes_c(hid_t_f *plist_id, int_f *nindexes );
+H5_FCDLL int_f nh5pset_shared_mesg_index_c(hid_t_f *fcpl_id, int_f *index_num, int_f *mesg_type_flags, int_f *min_mesg_size);
+H5_FCDLL int_f nh5pget_attr_creation_order_c(hid_t_f *ocpl_id, int_f *crt_order_flags);
+H5_FCDLL int_f nh5pset_libver_bounds_c(hid_t_f *fapl_id, int_f *low, int_f *high);
+H5_FCDLL int_f nh5pset_link_creation_order_c(hid_t_f *gcpl_id, int_f *crt_order_flags);
+H5_FCDLL int_f nh5pget_link_phase_change_c(hid_t_f *gcpl_id, int_f *max_compact, int_f *min_dense );
+H5_FCDLL int_f nh5pget_obj_track_times_c(hid_t_f *plist_id, int_f *flag);
+H5_FCDLL int_f nh5pset_obj_track_times_c(hid_t_f *plist_id, int_f *flag);
+H5_FCDLL int_f nh5pset_create_inter_group_c(hid_t_f *lcpl_id, int_f *crt_intermed_group);
+H5_FCDLL int_f nh5pget_create_inter_group_c(hid_t_f *lcpl_id, int_f *crt_intermed_group);
+H5_FCDLL int_f nh5pget_link_creation_order_c(hid_t_f *gcpl_id, int_f *crt_order_flags);
+H5_FCDLL int_f nh5pset_char_encoding_c(hid_t_f *plist_id, int_f *encoding);
+H5_FCDLL int_f nh5pget_char_encoding_c(hid_t_f *plist_id, int_f *encoding);
+H5_FCDLL int_f nh5pset_copy_object_c(hid_t_f *ocp_plist_id, int_f *copy_options);
+H5_FCDLL int_f nh5pget_copy_object_c(hid_t_f *ocp_plist_id, int_f *copy_options);
+H5_FCDLL int_f nh5pget_data_transform_c(hid_t_f *plist_id, _fcd expression, int_f *expression_len, size_t_f *size);
+H5_FCDLL int_f nh5pset_data_transform_c(hid_t_f *plist_id, _fcd expression, int_f *expression_len);
+H5_FCDLL int_f nh5pget_local_heap_size_hint_c(hid_t_f *gcpl_id, size_t_f *size_hint);
+H5_FCDLL int_f nh5pget_est_link_info_c(hid_t_f *gcpl_id, int_f *est_num_entries, int_f *est_name_len);
+H5_FCDLL int_f nh5pset_local_heap_size_hint_c(hid_t_f *gcpl_id, size_t_f *size_hint);
+H5_FCDLL int_f nh5pset_est_link_info_c(hid_t_f *gcpl_id, int_f *est_num_entries, int_f *est_name_len);
+H5_FCDLL int_f nh5pset_link_phase_change_c(hid_t_f *gcpl_id, int_f *max_compact, int_f *min_dense );
+H5_FCDLL int_f nh5pset_fapl_direct_c(hid_t_f *fapl_id, size_t_f *alignment, size_t_f *block_size, size_t_f *cbuf_size );
+H5_FCDLL int_f nh5pget_fapl_direct_c(hid_t_f *fapl_id, size_t_f *alignment, size_t_f *block_size, size_t_f *cbuf_size );
+H5_FCDLL int_f nh5pset_attr_phase_change_c (hid_t_f *ocpl_id, int_f *max_compact, int_f *min_dense );
+H5_FCDLL int_f nh5pset_nbit_c(hid_t_f *plist_id );
+H5_FCDLL int_f nh5pset_scaleoffset_c(hid_t_f *plist_id, int_f *scale_type, int_f *scale_factor );
+H5_FCDLL int_f nh5pset_nlinks_c(hid_t_f *lapl_id, size_t_f *nlinks);
+H5_FCDLL int_f nh5pget_nlinks_c(hid_t_f *lapl_id, size_t_f *nlinks);
+H5_FCDLL int_f nh5pset_chunk_cache_c(hid_t_f *dapl_id, size_t_f *rdcc_nslots, size_t_f *rdcc_nbytes, real_f *rdcc_w0);
+H5_FCDLL int_f nh5pget_chunk_cache_c(hid_t_f *dapl_id, size_t_f *rdcc_nslots, size_t_f *rdcc_nbytes, real_f *rdcc_w0);
+H5_FCDLL int_f nh5pget_mpio_actual_io_mode_c(hid_t_f *dxpl_id, int_f *actual_io_mode);
+/*
+ * Functions frome H5Rf.c
+ */
+#define nh5rcreate_object_c     H5_FC_FUNC_(h5rcreate_object_c, H5RCREATE_OBJECT_C)
+#define nh5rcreate_region_c     H5_FC_FUNC_(h5rcreate_region_c, H5RCREATE_REGION_C)
+#define nh5rcreate_ptr_c     H5_FC_FUNC_(h5rcreate_ptr_c, H5RCREATE_PTR_C)
+#define nh5rdereference_region_c H5_FC_FUNC_(h5rdereference_region_c, H5RDEREFERENCE_REGION_C)
+#define nh5rdereference_object_c H5_FC_FUNC_(h5rdereference_object_c, H5RDEREFERENCE_OBJECT_C)
+#define nh5rdereference_ptr_c H5_FC_FUNC_(h5rdereference_ptr_c, H5RDEREFERENCE_PTR_C)
+#define nh5rget_region_region_c H5_FC_FUNC_(h5rget_region_region_c, H5RGET_REGION_REGION_C)
+#define nh5rget_region_ptr_c H5_FC_FUNC_(h5rget_region_ptr_c, H5RGET_REGION_PTR_C)
+#define nh5rget_object_type_obj_c H5_FC_FUNC_(h5rget_object_type_obj_c, H5RGET_OBJECT_TYPE_OBJ_C)
+#define nh5rget_name_object_c H5_FC_FUNC_(h5rget_name_object_c, H5RGET_NAME_OBJECT_C)
+#define nh5rget_name_region_c H5_FC_FUNC_(h5rget_name_region_c, H5RGET_NAME_REGION_C)
+#define nh5rget_name_ptr_c H5_FC_FUNC_(h5rget_name_ptr_c, H5RGET_NAME_PTR_C)
+#define nh5rget_obj_type_c H5_FC_FUNC_(h5rget_obj_type_c, H5RGET_OBJ_TYPE_C)
+
+
+H5_FCDLL int_f nh5rcreate_object_c (haddr_t_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen);
+H5_FCDLL int_f nh5rcreate_region_c (int_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *space_id);
+H5_FCDLL int_f nh5rcreate_ptr_c (void *ref, hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *ref_type, hid_t_f *space_id);
+H5_FCDLL int_f nh5rdereference_region_c (hid_t_f *dset_id, int_f *ref, hid_t_f *obj_id);
+H5_FCDLL int_f nh5rdereference_object_c (hid_t_f *dset_id, haddr_t_f *ref, hid_t_f *obj_id);
+H5_FCDLL int_f nh5rdereference_ptr_c (hid_t_f *obj_id, int_f *ref_type, void *ref, hid_t_f *ref_obj_id);
+H5_FCDLL int_f nh5rget_region_region_c (hid_t_f *dset_id, int_f *ref, hid_t_f *space_id);
+H5_FCDLL int_f nh5rget_region_ptr_c(hid_t_f *dset_id, void *ref, hid_t_f *space_id);
+H5_FCDLL int_f nh5rget_object_type_obj_c (hid_t_f *dset_id, haddr_t_f *ref, int_f *obj_type);
+H5_FCDLL int_f nh5rget_name_object_c (hid_t_f *loc_id, haddr_t_f *ref, _fcd name, size_t_f *name_len, size_t_f *size_default);
+H5_FCDLL int_f nh5rget_name_region_c (hid_t_f *loc_id, int_f *ref, _fcd name, size_t_f *name_len, size_t_f *size_default);
+H5_FCDLL int_f nh5rget_name_ptr_c (hid_t_f *loc_id, int_f *ref_type, void *ref, _fcd name, size_t_f *name_len, size_t_f *size_default);
+H5_FCDLL int_f nh5rget_obj_type_c (hid_t_f *loc_id, int_f *ref_type, void *ref, int_f *obj_type);
+/*
+ * Functions from H5If.c
+ */
+#define nh5iget_type_c    H5_FC_FUNC_(h5iget_type_c, H5IGET_TYPE_C)
+#define nh5iget_name_c    H5_FC_FUNC_(h5iget_name_c, H5IGET_NAME_C)
+#define nh5iinc_ref_c     H5_FC_FUNC_(h5iinc_ref_c, H5IINC_REF_C)
+#define nh5idec_ref_c     H5_FC_FUNC_(h5idec_ref_c, H5IDEC_REF_C)
+#define nh5iget_ref_c     H5_FC_FUNC_(h5iget_ref_c, H5IGET_REF_C)
+#define nh5iget_file_id_c H5_FC_FUNC_(h5iget_file_id_c, H5IGET_FILE_ID_C)
+#define nh5iis_valid_c    H5_FC_FUNC_(h5iis_valid_c, H5IIS_VALID_C)
+
+H5_FCDLL int_f nh5iget_type_c(hid_t_f *obj_id, int_f *type);
+H5_FCDLL int_f nh5iget_name_c(hid_t_f *obj_id, _fcd buf, size_t_f *buf_size, size_t_f *name_size);
+H5_FCDLL int_f nh5iinc_ref_c(hid_t_f *obj_id, int_f *ref_count);
+H5_FCDLL int_f nh5idec_ref_c(hid_t_f *obj_id, int_f *ref_count);
+H5_FCDLL int_f nh5iget_ref_c(hid_t_f *obj_id, int_f *ref_count);
+H5_FCDLL int_f nh5iget_file_id_c(hid_t_f *obj_id, hid_t_f *file_id);
+H5_FCDLL int_f nh5iis_valid_c(hid_t_f *obj_id, int_f *c_valid);
+
+/*
+ * Functions from H5Ef.c
+ */
+#define nh5eclear_c     H5_FC_FUNC_(h5eclear_c, H5ECLEAR_C)
+#define nh5eprint_c1    H5_FC_FUNC_(h5eprint_c1, H5EPRINT_C1)
+#define nh5eprint_c2    H5_FC_FUNC_(h5eprint_c2, H5EPRINT_C2)
+#define nh5eget_major_c H5_FC_FUNC_(h5eget_major_c, H5EGET_MAJOR_C)
+#define nh5eget_minor_c H5_FC_FUNC_(h5eget_minor_c, H5EGET_MINOR_C)
+#define nh5eset_auto_c  H5_FC_FUNC_(h5eset_auto_c, H5ESET_AUTO_C)
+#define nh5eset_auto2_c  H5_FC_FUNC_(h5eset_auto2_c, H5ESET_AUTO2_C)
+#define nprocess_buffer  H5_FC_FUNC_(process_buffer, PROCESS_BUFFER)
+
+
+H5_FCDLL int_f nh5eclear_c(hid_t_f *estack_id);
+H5_FCDLL int_f nh5eprint_c1(_fcd name, int_f* namelen);
+H5_FCDLL int_f nh5eprint_c2(void);
+H5_FCDLL int_f nh5eget_major_c(int_f* error_no, _fcd name, size_t_f* namelen);
+H5_FCDLL int_f nh5eget_minor_c(int_f* error_no, _fcd name, size_t_f* namelen);
+H5_FCDLL int_f nh5eset_auto_c(int_f* printflag);
+H5_FCDLL int_f nh5eset_auto2_c(int_f* printflag, hid_t_f *estack_id, H5E_auto2_t func, void *client_data);
+H5_FCDLL int_f nprocess_buffer(hid_t_f *estack_id,void **buffer);
+
+/*
+ * Functions from H5f.c
+ */
+#define nh5open_c            H5_FC_FUNC_(h5open_c, H5OPEN_C)
+#define nh5close_c           H5_FC_FUNC_(h5close_c, H5CLOSE_C)
+#define nh5init_types_c      H5_FC_FUNC_(h5init_types_c, H5INIT_TYPES_C)
+#define nh5close_types_c     H5_FC_FUNC_(h5close_types_c, H5CLOSE_TYPES_C)
+#define nh5init_flags_c      H5_FC_FUNC_(h5init_flags_c, H5INIT_FLAGS_C)
+#define nh5init1_flags_c     H5_FC_FUNC_(h5init1_flags_c, H5INIT1_FLAGS_C)
+#define nh5get_libversion_c  H5_FC_FUNC_(h5get_libversion_c, H5GET_LIBVERSION_C)
+#define nh5check_version_c   H5_FC_FUNC_(h5check_version_c, H5CHECK_VERSION_C)
+#define nh5garbage_collect_c H5_FC_FUNC_(h5garbage_collect_c, H5GARBAGE_COLLECT_C)
+#define nh5dont_atexit_c     H5_FC_FUNC_(h5dont_atexit_c, H5DONT_ATEXIT_C)
+
+
+H5_FCDLL int_f nh5open_c(void);
+H5_FCDLL int_f nh5close_c(void);
+H5_FCDLL int_f nh5init_types_c(hid_t_f *types, hid_t_f *floatingtypes, hid_t_f *integertypes);
+H5_FCDLL int_f nh5close_types_c(hid_t_f *types, int_f *lentypes, hid_t_f *floatingtypes, int_f *floatinglen, hid_t_f *integertypes, int_f *integerlen);
+H5_FCDLL int_f nh5init_flags_c(int_f *h5d_flags, size_t_f *h5d_size_flags, int_f *h5e_flags, hid_t_f *h5e_hid_flags, int_f *h5f_flags,
+			       int_f *h5fd_flags, hid_t_f *h5fd_hid_flags,
+			       int_f *h5g_flags, int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags,
+			       hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, int_f *h5s_flags,
+			       hsize_t_f *h5s_hsize_flags, int_f *h5t_flags, int_f *h5z_flags, int_f *h5_generic_flags);
+H5_FCDLL int_f nh5init1_flags_c(int_f *h5lib_flags);
+H5_FCDLL int_f nh5get_libversion_c(int_f *majnum, int_f *minnum, int_f *relnum);
+H5_FCDLL int_f nh5check_version_c(int_f *majnum, int_f *minnum, int_f *relnum);
+H5_FCDLL int_f nh5garbage_collect_c(void);
+H5_FCDLL int_f nh5dont_atexit_c(void);
+
+/*
+ * Functions from H5Zf.c
+ */
+#define nh5zunregister_c    H5_FC_FUNC_(h5zunregister_c, H5ZUNREGISTER_C)
+#define nh5zfilter_avail_c  H5_FC_FUNC_(h5zfilter_avail_c, H5ZFILTER_AVAIL_C)
+#define nh5zget_filter_info_c H5_FC_FUNC_(h5zget_filter_info_c, H5ZGET_FILTER_INFO_C)
+
+
+H5_FCDLL int_f nh5zunregister_c (int_f *filter);
+H5_FCDLL int_f nh5zfilter_avail_c (int_f *filter, int_f *flag);
+H5_FCDLL int_f nh5zget_filter_info_c (int_f *filter, int_f *flag);
+
+
+/*
+ * Functions from H5Lf.c
+ */
+#define nh5lcopy_c H5_FC_FUNC_(h5lcopy_c, H5LCOPY_C)
+#define nh5lcreate_external_c H5_FC_FUNC_(h5lcreate_external_c, H5LCREATE_EXTERNAL_C)
+#define nh5lcreate_hard_c H5_FC_FUNC_(h5lcreate_hard_c, H5LCREATE_HARD_C)
+#define nh5lcreate_soft_c H5_FC_FUNC_(h5lcreate_soft_c, H5LCREATE_SOFT_C)
+#define nh5ldelete_c H5_FC_FUNC_(h5ldelete_c, H5LDELETE_C)
+#define nh5ldelete_by_idx_c H5_FC_FUNC_(h5ldelete_by_idx_c, H5LDELETE_BY_IDX_C)
+#define nh5lexists_c H5_FC_FUNC_(h5lexists_c, H5LEXISTS_C)
+#define nh5lget_info_c H5_FC_FUNC_(h5lget_info_c, H5LGET_INFO_C)
+#define nh5lget_info_by_idx_c H5_FC_FUNC_(h5lget_info_by_idx_c, H5LGET_INFO_BY_IDX_C)
+#define nh5lis_registered_c H5_FC_FUNC_(h5lis_registered_c, H5LIS_REGISTERED_C)
+#define nh5lmove_c H5_FC_FUNC_(h5lmove_c, H5LMOVE_C)
+#define nh5lget_name_by_idx_c H5_FC_FUNC_(h5lget_name_by_idx_c, H5LGET_NAME_BY_IDX_C)
+#define nh5lget_val_c H5_FC_FUNC_(h5lget_val_c, H5LGET_VAL_C) 
+#define nh5literate_c H5_FC_FUNC_(h5literate_c, H5LITERATE_C) 
+#define nh5literate_by_name_c H5_FC_FUNC_(h5literate_by_name_c, H5LITERATE_BY_NAME_C)
+
+H5_FCDLL int_f nh5lcopy_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id,
+			  _fcd dest_name, size_t_f *dest_namelen,
+			  hid_t_f *lcpl_id, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5lcreate_external_c(_fcd file_name, size_t_f *file_namelen, _fcd obj_name, size_t_f *obj_namelen,
+				     hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen,
+				     hid_t_f *lcpl_id, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5lcreate_hard_c(hid_t_f *obj_loc_id, _fcd obj_name, size_t_f *obj_namelen,
+				 hid_t_f *link_loc_id,
+				 _fcd link_name, size_t_f *link_namelen,
+				 hid_t_f *lcpl_id, hid_t_f *lapl_id );
+H5_FCDLL int_f nh5lcreate_soft_c(_fcd target_path, size_t_f *target_path_len,
+				 hid_t_f *link_loc_id,
+				 _fcd link_name, size_t_f *link_name_len,
+				 hid_t_f *lcpl_id, hid_t_f *lapl_id );
+H5_FCDLL int_f nh5ldelete_c( hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id );
+H5_FCDLL int_f nh5ldelete_by_idx_c (hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
+				    int_f *index_field, int_f *order, hsize_t_f *n, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5lexists_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, int_f *link_exists);
+H5_FCDLL int_f nh5lget_info_c (hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen,
+			       int_f *cset, int_f *corder, int_f *corder_valid, int_f *link_type,
+			       haddr_t_f *address, size_t_f *val_size,
+			       hid_t_f *lapl_id);
+H5_FCDLL int_f nh5lget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
+		      int_f *index_field, int_f *order, hsize_t_f *n,
+		      int_f *link_type, int_f *corder_valid, int_f *corder, int_f *cset, haddr_t_f *address, size_t_f *val_size, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5lis_registered_c(int_f *link_cls_id);
+H5_FCDLL int_f nh5lmove_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id,
+			  _fcd dest_name, size_t_f *dest_namelen, hid_t_f *lcpl_id, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5lget_name_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
+				     int_f *index_field, int_f *order, hsize_t_f *n,
+				     size_t_f *size, _fcd name, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5lget_val_c(hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, size_t_f *size,
+			     void *linkval_buff, hid_t_f *lapl_id) ;
+
+H5_FCDLL int_f nh5literate_c(hid_t_f *group_id, int_f *index_type, int_f *order, hsize_t_f *idx, H5L_iterate_t op, void *op_data );
+H5_FCDLL int_f nh5literate_by_name_c(hid_t_f *loc_id, _fcd name, size_t_f *namelen, int_f *index_type, int_f *order, hsize_t_f *idx, H5L_iterate_t op, void *op_data, hid_t_f *lapl_id);
+
+
+#endif /* _H5f90proto_H */
diff --git a/Resources/windows-libs/HDF5/include/H5fortran_types.f90 b/Resources/windows-libs/HDF5/include/H5fortran_types.f90
new file mode 100644
index 0000000000000000000000000000000000000000..ac24534ae6f8f2a53a10263550be2355d9ba8231
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5fortran_types.f90
@@ -0,0 +1,43 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help@hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!
+! This file is automatically generated and contains HDF5 Fortran90 type definitions.
+!
+       MODULE H5FORTRAN_TYPES
+         !
+         !  HDF5 integers
+         !
+        INTEGER, PARAMETER :: HADDR_T = 8
+        INTEGER, PARAMETER :: HSIZE_T = 8
+        INTEGER, PARAMETER :: HSSIZE_T = 8
+        INTEGER, PARAMETER :: OFF_T = 4
+        INTEGER, PARAMETER :: SIZE_T = 8
+        INTEGER, PARAMETER :: Fortran_INTEGER = 4
+        INTEGER, PARAMETER :: Fortran_INTEGER_1 = 1
+        INTEGER, PARAMETER :: Fortran_INTEGER_2 = 2
+        INTEGER, PARAMETER :: Fortran_INTEGER_4 = 4
+        INTEGER, PARAMETER :: Fortran_INTEGER_8 = 8
+        INTEGER, PARAMETER :: Fortran_REAL_4 = 4
+        INTEGER, PARAMETER :: Fortran_REAL_8 = 8
+        INTEGER, PARAMETER :: Fortran_REAL_16 = 8
+        INTEGER, PARAMETER :: HID_T = 4
+        INTEGER, PARAMETER :: Fortran_REAL = 4
+        INTEGER, PARAMETER :: Fortran_DOUBLE = 8
+        INTEGER, PARAMETER :: H5R_DSET_REG_REF_BUF_SIZE_F = 12
+
+        INTEGER(SIZE_T), PARAMETER :: OBJECT_NAMELEN_DEFAULT_F = -1
+
+        END MODULE H5FORTRAN_TYPES
diff --git a/Resources/windows-libs/HDF5/include/H5overflow.h b/Resources/windows-libs/HDF5/include/H5overflow.h
new file mode 100644
index 0000000000000000000000000000000000000000..f4064f439639654a7c97934da129e07d09eaf8cb
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5overflow.h
@@ -0,0 +1,1939 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Generated automatically by bin/make_overflow -- do not edit */
+/* Add new types to H5overflow.txt file */
+
+
+#ifndef _H5overflow_H
+#define _H5overflow_H
+
+
+/* Each type in this file is tested for assignment to the other types,
+ *      and range checks are defined for bad assignments at run-time.
+ */
+
+/* Assignment checks for unsigned */
+
+/* src: unsigned, dst: int */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_INT
+    #define ASSIGN_unsigned_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_INT
+    #define ASSIGN_unsigned_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_INT */
+    #define ASSIGN_unsigned_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: int */
+
+/* src: unsigned, dst: uint8_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT8_T
+    #define ASSIGN_unsigned_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT8_T
+    #define ASSIGN_unsigned_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_unsigned_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: uint8_t */
+
+/* src: unsigned, dst: uint16_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT16_T
+    #define ASSIGN_unsigned_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT16_T
+    #define ASSIGN_unsigned_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_unsigned_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: uint16_t */
+
+/* src: unsigned, dst: uint32_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT32_T
+    #define ASSIGN_unsigned_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT32_T
+    #define ASSIGN_unsigned_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_unsigned_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: uint32_t */
+
+/* src: unsigned, dst: uint64_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT64_T
+    #define ASSIGN_unsigned_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT64_T
+    #define ASSIGN_unsigned_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_unsigned_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: uint64_t */
+
+/* src: unsigned, dst: ptrdiff_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_unsigned_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_unsigned_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_unsigned_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: ptrdiff_t */
+
+/* src: unsigned, dst: size_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_SIZE_T
+    #define ASSIGN_unsigned_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_SIZE_T
+    #define ASSIGN_unsigned_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_unsigned_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: size_t */
+
+/* src: unsigned, dst: ssize_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_unsigned_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_unsigned_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_unsigned_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: ssize_t */
+
+/* src: unsigned, dst: haddr_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_HADDR_T
+    #define ASSIGN_unsigned_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_HADDR_T
+    #define ASSIGN_unsigned_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_unsigned_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: haddr_t */
+
+/* src: unsigned, dst: hsize_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_unsigned_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_unsigned_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_unsigned_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: hsize_t */
+
+/* src: unsigned, dst: hssize_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_unsigned_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_unsigned_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_unsigned_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: hssize_t */
+
+/* src: unsigned, dst: h5_stat_size_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_unsigned_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_unsigned_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_unsigned_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: h5_stat_size_t */
+
+
+/* Assignment checks for int */
+
+/* src: int, dst: unsigned */
+#if H5_SIZEOF_INT < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_int_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_int_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_int_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: unsigned */
+
+/* src: int, dst: uint8_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_UINT8_T
+    #define ASSIGN_int_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_UINT8_T
+    #define ASSIGN_int_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_int_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: uint8_t */
+
+/* src: int, dst: uint16_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_UINT16_T
+    #define ASSIGN_int_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_UINT16_T
+    #define ASSIGN_int_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_int_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: uint16_t */
+
+/* src: int, dst: uint32_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_UINT32_T
+    #define ASSIGN_int_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_UINT32_T
+    #define ASSIGN_int_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_int_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: uint32_t */
+
+/* src: int, dst: uint64_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_UINT64_T
+    #define ASSIGN_int_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_UINT64_T
+    #define ASSIGN_int_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_int_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: uint64_t */
+
+/* src: int, dst: ptrdiff_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_int_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_int_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_int_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: ptrdiff_t */
+
+/* src: int, dst: size_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_SIZE_T
+    #define ASSIGN_int_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_SIZE_T
+    #define ASSIGN_int_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_int_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: size_t */
+
+/* src: int, dst: ssize_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_int_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_int_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_int_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: ssize_t */
+
+/* src: int, dst: haddr_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_HADDR_T
+    #define ASSIGN_int_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_HADDR_T
+    #define ASSIGN_int_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_int_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: haddr_t */
+
+/* src: int, dst: hsize_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_int_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_int_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_int_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: hsize_t */
+
+/* src: int, dst: hssize_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_int_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_int_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_int_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: hssize_t */
+
+/* src: int, dst: h5_stat_size_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_int_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_int_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_int_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: h5_stat_size_t */
+
+
+/* Assignment checks for uint8_t */
+
+/* src: uint8_t, dst: unsigned */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint8_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint8_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_uint8_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: unsigned */
+
+/* src: uint8_t, dst: int */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_INT
+    #define ASSIGN_uint8_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_INT
+    #define ASSIGN_uint8_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_INT */
+    #define ASSIGN_uint8_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: int */
+
+/* src: uint8_t, dst: uint16_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint8_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint8_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_uint8_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: uint16_t */
+
+/* src: uint8_t, dst: uint32_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint8_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint8_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_uint8_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: uint32_t */
+
+/* src: uint8_t, dst: uint64_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint8_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint8_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_uint8_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: uint64_t */
+
+/* src: uint8_t, dst: ptrdiff_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_uint8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: ptrdiff_t */
+
+/* src: uint8_t, dst: size_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint8_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint8_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_uint8_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: size_t */
+
+/* src: uint8_t, dst: ssize_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint8_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint8_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_uint8_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: ssize_t */
+
+/* src: uint8_t, dst: haddr_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint8_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint8_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_uint8_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: haddr_t */
+
+/* src: uint8_t, dst: hsize_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint8_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint8_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_uint8_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: hsize_t */
+
+/* src: uint8_t, dst: hssize_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint8_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint8_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_uint8_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: hssize_t */
+
+/* src: uint8_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_uint8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for uint16_t */
+
+/* src: uint16_t, dst: unsigned */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint16_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint16_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_uint16_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: unsigned */
+
+/* src: uint16_t, dst: int */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_INT
+    #define ASSIGN_uint16_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_INT
+    #define ASSIGN_uint16_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_INT */
+    #define ASSIGN_uint16_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: int */
+
+/* src: uint16_t, dst: uint8_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint16_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint16_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_uint16_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: uint8_t */
+
+/* src: uint16_t, dst: uint32_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint16_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint16_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_uint16_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: uint32_t */
+
+/* src: uint16_t, dst: uint64_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint16_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint16_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_uint16_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: uint64_t */
+
+/* src: uint16_t, dst: ptrdiff_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint16_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint16_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_uint16_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: ptrdiff_t */
+
+/* src: uint16_t, dst: size_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint16_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint16_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_uint16_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: size_t */
+
+/* src: uint16_t, dst: ssize_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint16_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint16_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_uint16_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: ssize_t */
+
+/* src: uint16_t, dst: haddr_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint16_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint16_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_uint16_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: haddr_t */
+
+/* src: uint16_t, dst: hsize_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint16_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint16_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_uint16_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: hsize_t */
+
+/* src: uint16_t, dst: hssize_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint16_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint16_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_uint16_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: hssize_t */
+
+/* src: uint16_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint16_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint16_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_uint16_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for uint32_t */
+
+/* src: uint32_t, dst: unsigned */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint32_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint32_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_uint32_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: unsigned */
+
+/* src: uint32_t, dst: int */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_INT
+    #define ASSIGN_uint32_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_INT
+    #define ASSIGN_uint32_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_INT */
+    #define ASSIGN_uint32_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: int */
+
+/* src: uint32_t, dst: uint8_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint32_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint32_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_uint32_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: uint8_t */
+
+/* src: uint32_t, dst: uint16_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint32_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint32_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_uint32_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: uint16_t */
+
+/* src: uint32_t, dst: uint64_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint32_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint32_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_uint32_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: uint64_t */
+
+/* src: uint32_t, dst: ptrdiff_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint32_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint32_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_uint32_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: ptrdiff_t */
+
+/* src: uint32_t, dst: size_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint32_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint32_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_uint32_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: size_t */
+
+/* src: uint32_t, dst: ssize_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint32_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint32_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_uint32_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: ssize_t */
+
+/* src: uint32_t, dst: haddr_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint32_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint32_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_uint32_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: haddr_t */
+
+/* src: uint32_t, dst: hsize_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint32_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint32_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_uint32_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: hsize_t */
+
+/* src: uint32_t, dst: hssize_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint32_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint32_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_uint32_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: hssize_t */
+
+/* src: uint32_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint32_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint32_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_uint32_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for uint64_t */
+
+/* src: uint64_t, dst: unsigned */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint64_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint64_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_uint64_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: unsigned */
+
+/* src: uint64_t, dst: int */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_INT
+    #define ASSIGN_uint64_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_INT
+    #define ASSIGN_uint64_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_INT */
+    #define ASSIGN_uint64_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: int */
+
+/* src: uint64_t, dst: uint8_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint64_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint64_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_uint64_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: uint8_t */
+
+/* src: uint64_t, dst: uint16_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint64_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint64_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_uint64_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: uint16_t */
+
+/* src: uint64_t, dst: uint32_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint64_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint64_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_uint64_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: uint32_t */
+
+/* src: uint64_t, dst: ptrdiff_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_uint64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: ptrdiff_t */
+
+/* src: uint64_t, dst: size_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint64_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint64_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_uint64_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: size_t */
+
+/* src: uint64_t, dst: ssize_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint64_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint64_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_uint64_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: ssize_t */
+
+/* src: uint64_t, dst: haddr_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint64_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint64_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_uint64_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: haddr_t */
+
+/* src: uint64_t, dst: hsize_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint64_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint64_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_uint64_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: hsize_t */
+
+/* src: uint64_t, dst: hssize_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint64_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint64_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_uint64_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: hssize_t */
+
+/* src: uint64_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_uint64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for ptrdiff_t */
+
+/* src: ptrdiff_t, dst: unsigned */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_ptrdiff_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_ptrdiff_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_ptrdiff_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: unsigned */
+
+/* src: ptrdiff_t, dst: int */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_INT
+    #define ASSIGN_ptrdiff_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_INT
+    #define ASSIGN_ptrdiff_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_INT */
+    #define ASSIGN_ptrdiff_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: int */
+
+/* src: ptrdiff_t, dst: uint8_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_ptrdiff_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_ptrdiff_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_ptrdiff_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: uint8_t */
+
+/* src: ptrdiff_t, dst: uint16_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_ptrdiff_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_ptrdiff_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_ptrdiff_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: uint16_t */
+
+/* src: ptrdiff_t, dst: uint32_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_ptrdiff_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_ptrdiff_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_ptrdiff_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: uint32_t */
+
+/* src: ptrdiff_t, dst: uint64_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_ptrdiff_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_ptrdiff_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_ptrdiff_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: uint64_t */
+
+/* src: ptrdiff_t, dst: size_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_ptrdiff_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_ptrdiff_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_ptrdiff_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: size_t */
+
+/* src: ptrdiff_t, dst: ssize_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_ptrdiff_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: ssize_t */
+
+/* src: ptrdiff_t, dst: haddr_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_ptrdiff_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_ptrdiff_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_ptrdiff_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: haddr_t */
+
+/* src: ptrdiff_t, dst: hsize_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_ptrdiff_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: hsize_t */
+
+/* src: ptrdiff_t, dst: hssize_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_ptrdiff_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: hssize_t */
+
+/* src: ptrdiff_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_ptrdiff_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_ptrdiff_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_ptrdiff_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for size_t */
+
+/* src: size_t, dst: unsigned */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: unsigned */
+
+/* src: size_t, dst: int */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_INT
+    #define ASSIGN_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_INT
+    #define ASSIGN_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_INT */
+    #define ASSIGN_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: int */
+
+/* src: size_t, dst: uint8_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: uint8_t */
+
+/* src: size_t, dst: uint16_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: uint16_t */
+
+/* src: size_t, dst: uint32_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: uint32_t */
+
+/* src: size_t, dst: uint64_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: uint64_t */
+
+/* src: size_t, dst: ptrdiff_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: ptrdiff_t */
+
+/* src: size_t, dst: ssize_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: ssize_t */
+
+/* src: size_t, dst: haddr_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: haddr_t */
+
+/* src: size_t, dst: hsize_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: hsize_t */
+
+/* src: size_t, dst: hssize_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: hssize_t */
+
+/* src: size_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_size_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_size_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_size_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for ssize_t */
+
+/* src: ssize_t, dst: unsigned */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_ssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_ssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_ssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: unsigned */
+
+/* src: ssize_t, dst: int */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_INT
+    #define ASSIGN_ssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_INT
+    #define ASSIGN_ssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_INT */
+    #define ASSIGN_ssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: int */
+
+/* src: ssize_t, dst: uint8_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_ssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_ssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_ssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: uint8_t */
+
+/* src: ssize_t, dst: uint16_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_ssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_ssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_ssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: uint16_t */
+
+/* src: ssize_t, dst: uint32_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_ssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_ssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_ssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: uint32_t */
+
+/* src: ssize_t, dst: uint64_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_ssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_ssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_ssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: uint64_t */
+
+/* src: ssize_t, dst: ptrdiff_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_ssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_ssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_ssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: ptrdiff_t */
+
+/* src: ssize_t, dst: size_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_ssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_ssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_ssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: size_t */
+
+/* src: ssize_t, dst: haddr_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_ssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_ssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_ssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: haddr_t */
+
+/* src: ssize_t, dst: hsize_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_ssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_ssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_ssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: hsize_t */
+
+/* src: ssize_t, dst: hssize_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_ssize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_ssize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_ssize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: hssize_t */
+
+/* src: ssize_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_ssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_ssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_ssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for haddr_t */
+
+/* src: haddr_t, dst: unsigned */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_haddr_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_haddr_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_haddr_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: unsigned */
+
+/* src: haddr_t, dst: int */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_INT
+    #define ASSIGN_haddr_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_INT
+    #define ASSIGN_haddr_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_INT */
+    #define ASSIGN_haddr_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: int */
+
+/* src: haddr_t, dst: uint8_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_haddr_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_haddr_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_haddr_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: uint8_t */
+
+/* src: haddr_t, dst: uint16_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_haddr_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_haddr_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_haddr_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: uint16_t */
+
+/* src: haddr_t, dst: uint32_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_haddr_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_haddr_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_haddr_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: uint32_t */
+
+/* src: haddr_t, dst: uint64_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_haddr_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_haddr_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_haddr_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: uint64_t */
+
+/* src: haddr_t, dst: ptrdiff_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_haddr_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_haddr_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_haddr_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: ptrdiff_t */
+
+/* src: haddr_t, dst: size_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_haddr_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_haddr_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_haddr_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: size_t */
+
+/* src: haddr_t, dst: ssize_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_haddr_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_haddr_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_haddr_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: ssize_t */
+
+/* src: haddr_t, dst: hsize_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_haddr_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_haddr_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_haddr_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: hsize_t */
+
+/* src: haddr_t, dst: hssize_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_haddr_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_haddr_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_haddr_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: hssize_t */
+
+/* src: haddr_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_haddr_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_haddr_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_haddr_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for hsize_t */
+
+/* src: hsize_t, dst: unsigned */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_hsize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_hsize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_hsize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: unsigned */
+
+/* src: hsize_t, dst: int */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_INT
+    #define ASSIGN_hsize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_INT
+    #define ASSIGN_hsize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_INT */
+    #define ASSIGN_hsize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: int */
+
+/* src: hsize_t, dst: uint8_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_hsize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_hsize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_hsize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: uint8_t */
+
+/* src: hsize_t, dst: uint16_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_hsize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_hsize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_hsize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: uint16_t */
+
+/* src: hsize_t, dst: uint32_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_hsize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_hsize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_hsize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: uint32_t */
+
+/* src: hsize_t, dst: uint64_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_hsize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_hsize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_hsize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: uint64_t */
+
+/* src: hsize_t, dst: ptrdiff_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_hsize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_hsize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_hsize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: ptrdiff_t */
+
+/* src: hsize_t, dst: size_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_hsize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_hsize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_hsize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: size_t */
+
+/* src: hsize_t, dst: ssize_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_hsize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_hsize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_hsize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: ssize_t */
+
+/* src: hsize_t, dst: haddr_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_hsize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_hsize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_hsize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: haddr_t */
+
+/* src: hsize_t, dst: hssize_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_hsize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_hsize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_hsize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: hssize_t */
+
+/* src: hsize_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_hsize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_hsize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_hsize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for hssize_t */
+
+/* src: hssize_t, dst: unsigned */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_hssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_hssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_hssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: unsigned */
+
+/* src: hssize_t, dst: int */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_INT
+    #define ASSIGN_hssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_INT
+    #define ASSIGN_hssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_INT */
+    #define ASSIGN_hssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: int */
+
+/* src: hssize_t, dst: uint8_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_hssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_hssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_hssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: uint8_t */
+
+/* src: hssize_t, dst: uint16_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_hssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_hssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_hssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: uint16_t */
+
+/* src: hssize_t, dst: uint32_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_hssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_hssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_hssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: uint32_t */
+
+/* src: hssize_t, dst: uint64_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_hssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_hssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_hssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: uint64_t */
+
+/* src: hssize_t, dst: ptrdiff_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_hssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_hssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_hssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: ptrdiff_t */
+
+/* src: hssize_t, dst: size_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_hssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_hssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_hssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: size_t */
+
+/* src: hssize_t, dst: ssize_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_hssize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_hssize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_hssize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: ssize_t */
+
+/* src: hssize_t, dst: haddr_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_hssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_hssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_hssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: haddr_t */
+
+/* src: hssize_t, dst: hsize_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_hssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_hssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_hssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: hsize_t */
+
+/* src: hssize_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_hssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_hssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_hssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for h5_stat_size_t */
+
+/* src: h5_stat_size_t, dst: unsigned */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_h5_stat_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_h5_stat_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_h5_stat_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: unsigned */
+
+/* src: h5_stat_size_t, dst: int */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_INT
+    #define ASSIGN_h5_stat_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_INT
+    #define ASSIGN_h5_stat_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_INT */
+    #define ASSIGN_h5_stat_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: int */
+
+/* src: h5_stat_size_t, dst: uint8_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_h5_stat_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_h5_stat_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_h5_stat_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: uint8_t */
+
+/* src: h5_stat_size_t, dst: uint16_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_h5_stat_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_h5_stat_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_h5_stat_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: uint16_t */
+
+/* src: h5_stat_size_t, dst: uint32_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_h5_stat_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_h5_stat_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_h5_stat_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: uint32_t */
+
+/* src: h5_stat_size_t, dst: uint64_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_h5_stat_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_h5_stat_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_h5_stat_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: uint64_t */
+
+/* src: h5_stat_size_t, dst: ptrdiff_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_h5_stat_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_h5_stat_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_h5_stat_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: ptrdiff_t */
+
+/* src: h5_stat_size_t, dst: size_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_h5_stat_size_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: size_t */
+
+/* src: h5_stat_size_t, dst: ssize_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_h5_stat_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: ssize_t */
+
+/* src: h5_stat_size_t, dst: haddr_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_h5_stat_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_h5_stat_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_h5_stat_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: haddr_t */
+
+/* src: h5_stat_size_t, dst: hsize_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_h5_stat_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: hsize_t */
+
+/* src: h5_stat_size_t, dst: hssize_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_h5_stat_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: hssize_t */
+
+#endif /* H5overflow_H */
+
diff --git a/Resources/windows-libs/HDF5/include/H5pubconf.h b/Resources/windows-libs/HDF5/include/H5pubconf.h
new file mode 100644
index 0000000000000000000000000000000000000000..fd3704a2de0e71de3c98bde5c5e0aad8961dee20
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5pubconf.h
@@ -0,0 +1,801 @@
+/* H5pubconf.h  Generated By CMake during the configuration */
+
+#ifndef H5_CONFIG_H_
+#define H5_CONFIG_H_
+
+/* Define if the Windows virtual file driver should be compiled */
+#define H5_HAVE_WINDOWS 1
+
+/* Define if using MinGW */
+/* #undef H5_HAVE_MINGW */
+
+/* Define if on the Windows platform and default WIN32 API */
+#define H5_HAVE_WIN32_API 1
+
+/* Define if using a Windows compiler (i.e. Visual Studio) */
+#define H5_HAVE_VISUAL_STUDIO 1
+
+/* Defined if HDF5 was built with CMake AND build as a shared library */
+#define H5_BUILT_AS_DYNAMIC_LIB 1
+
+/* Defined if HDF5 was built with CMake AND build as a static library */
+/* #undef H5_BUILT_AS_STATIC_LIB */
+
+/* Defined if HDF5 CPP  was built with CMake AND build as a shared library  */
+/* #undef H5_CPP_BUILT_AS_DYNAMIC_LIB */
+
+/* Defined if HDF5 CPP  was built with CMake AND build as a static library  */
+/* #undef H5_CPP_BUILT_AS_STATIC_LIB */
+
+/* Defined if HDF5 HL was built with CMake AND build as a shared library */
+/* #undef H5_HL_BUILT_AS_DYNAMIC_LIB */
+
+/* Defined if HDF5 HL was built with CMake AND build as a static library */
+/* #undef H5_HL_BUILT_AS_STATIC_LIB */
+
+/* Define if building universal (internal helper macro) */
+/* #undef H5_AC_APPLE_UNIVERSAL_BUILD */
+
+/* Define if your system generates wrong code for log2 routine. */
+/* #undef H5_BAD_LOG2_CODE_GENERATED */
+
+/* Define if the memory buffers being written to disk should be cleared before
+   writing. */
+#define H5_CLEAR_MEMORY 1
+
+/* Define if your system can handle converting denormalized floating-point
+   values. */
+#define H5_CONVERT_DENORMAL_FLOAT 1
+
+/* Define if C++ compiler recognizes offsetof */
+/* #undef H5_CXX_HAVE_OFFSETOF */
+
+/* Define the default plugins path to compile */
+#define H5_DEFAULT_PLUGINDIR "%ALLUSERSPROFILE%/hdf5/lib/plugin"
+
+/* Define the default virtual file driver to compile */
+#define H5_DEFAULT_VFD H5FD_SEC2
+
+/* Define if `dev_t' is a scalar */
+/* #undef H5_DEV_T_IS_SCALAR */
+
+/* Define to dummy `main' function (if any) required to link to the Fortran
+   libraries. */
+/* #undef H5_FC_DUMMY_MAIN */
+
+/* Define if F77 and FC dummy `main' functions are identical. */
+/* #undef H5_FC_DUMMY_MAIN_EQ_F77 */
+
+/* Define to a macro mangling the given C identifier (in lower and upper
+   case), which must not contain underscores, for linking with Fortran. */
+#define H5_FC_FUNC(name,NAME) NAME
+
+/* As FC_FUNC, but for C identifiers containing underscores. */
+#define H5_FC_FUNC_(name,NAME) NAME
+
+/* Define if your system can handle overflow converting floating-point to
+   integer values. */
+#define H5_FP_TO_INTEGER_OVERFLOW_WORKS 1
+
+/* Define if your system roundup accurately converting floating-point to
+   unsigned long long values. */
+#define H5_FP_TO_ULLONG_ACCURATE 1
+
+/* Define if your system has right maximum convert floating-point to unsigned
+   long long values. */
+/* #undef H5_FP_TO_ULLONG_RIGHT_MAXIMUM */
+
+/* Define if gettimeofday() populates the tz pointer passed in */
+#define H5_GETTIMEOFDAY_GIVES_TZ 1
+
+/* Define to 1 if you have the `alarm' function. */
+/* #undef H5_HAVE_ALARM */
+
+/* Define if the __attribute__(()) extension is present */
+/* #undef H5_HAVE_ATTRIBUTE */
+
+/* Define to 1 if you have the `BSDgettimeofday' function. */
+/* #undef H5_HAVE_BSDGETTIMEOFDAY */
+
+/* Define if the compiler understands C99 designated initialization of structs
+   and unions */
+/* #undef H5_HAVE_C99_DESIGNATED_INITIALIZER */
+
+/* Define if the compiler understands the __func__ keyword */
+/* #undef H5_HAVE_C99_FUNC */
+
+/* Define to 1 if you have the `clock_gettime' function. */
+/* #undef H5_HAVE_CLOCK_GETTIME */
+
+/* Define if the function stack tracing code is to be compiled in */
+/* #undef H5_HAVE_CODESTACK */
+
+/* Define if Darwin or Mac OS X */
+/* #undef H5_HAVE_DARWIN */
+
+/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
+   */
+#define H5_HAVE_DECL_TZNAME 1
+
+/* Define to 1 if you have the `difftime' function. */
+#define H5_HAVE_DIFFTIME 1
+
+/* Define if the direct I/O virtual file driver should be compiled */
+/* #undef H5_HAVE_DIRECT */
+
+/* Define to 1 if you have the <dirent.h> header file. */
+/* #undef H5_HAVE_DIRENT_H */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef H5_HAVE_DLFCN_H */
+
+/* Define to 1 if you have the <dmalloc.h> header file. */
+/* #undef H5_HAVE_DMALLOC_H */
+
+/* Define if library information should be embedded in the executables */
+#define H5_HAVE_EMBEDDED_LIBINFO 1
+
+/* Define to 1 if you have the <features.h> header file. */
+/* #undef H5_HAVE_FEATURES_H */
+
+/* Define if support for deflate (zlib) filter is enabled */
+#define H5_HAVE_FILTER_DEFLATE 1
+
+/* Define if support for Fletcher32 checksum is enabled */
+#define H5_HAVE_FILTER_FLETCHER32 1
+
+/* Define if support for nbit filter is enabled */
+#define H5_HAVE_FILTER_NBIT 1
+
+/* Define if support for scaleoffset filter is enabled */
+#define H5_HAVE_FILTER_SCALEOFFSET 1
+
+/* Define if support for shuffle filter is enabled */
+#define H5_HAVE_FILTER_SHUFFLE 1
+
+/* Define if support for szip filter is enabled */
+#define H5_HAVE_FILTER_SZIP 1
+
+/* Define to 1 if you have the `fork' function. */
+/* #undef H5_HAVE_FORK */
+
+/* Define to 1 if you have the `frexpf' function. */
+/* #undef H5_HAVE_FREXPF */
+
+/* Define to 1 if you have the `frexpl' function. */
+/* #undef H5_HAVE_FREXPL */
+
+/* Define to 1 if you have the `fseeko' function. */
+/* #undef H5_HAVE_FSEEKO */
+
+/* Define to 1 if you have the `fseeko64' function. */
+/* #undef H5_HAVE_FSEEKO64 */
+
+/* Define to 1 if you have the `fstat64' function. */
+/* #undef H5_HAVE_FSTAT64 */
+
+/* Define to 1 if you have the `ftello' function. */
+/* #undef H5_HAVE_FTELLO */
+
+/* Define to 1 if you have the `ftello64' function. */
+/* #undef H5_HAVE_FTELLO64 */
+
+/* Define to 1 if you have the `ftruncate64' function. */
+/* #undef H5_HAVE_FTRUNCATE64 */
+
+/* Define if the compiler understands the __FUNCTION__ keyword */
+#define H5_HAVE_FUNCTION 1
+
+/* Define to 1 if you have the `GetConsoleScreenBufferInfo' function. */
+#define H5_HAVE_GETCONSOLESCREENBUFFERINFO 1
+
+/* Define to 1 if you have the `gethostname' function. */
+#define H5_HAVE_GETHOSTNAME 1
+
+/* Define to 1 if you have the `getpwuid' function. */
+/* #undef H5_HAVE_GETPWUID */
+
+/* Define to 1 if you have the `getrusage' function. */
+/* #undef H5_HAVE_GETRUSAGE */
+
+/* Define to 1 if you have the `gettextinfo' function. */
+/* #undef H5_HAVE_GETTEXTINFO */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define H5_HAVE_GETTIMEOFDAY 1
+
+/* Define to 1 if you have the `gettimeofday' function declared in time.h . */
+/* #undef H5_HAVE_TIME_GETTIMEOFDAY */
+
+/* Define to 1 if you have the `gettimeofday' function declared in sys/time.h . */
+/* #undef H5_HAVE_SYS_TIME_GETTIMEOFDAY */
+
+/* Define to 1 if you have the `get_fpc_csr' function. */
+/* #undef H5_HAVE_GET_FPC_CSR */
+
+/* Define if library will contain instrumentation to detect correct
+   optimization operation */
+/* #undef H5_HAVE_INSTRUMENTED_LIBRARY */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+/* #undef H5_HAVE_INTTYPES_H */
+
+/* Define to 1 if you have the `ioctl' function. */
+/* #undef H5_HAVE_IOCTL */
+
+/* Define to 1 if you have the <io.h> header file. */
+#define H5_HAVE_IO_H 1
+
+/* Define to 1 if you have the `dl' library (-ldl). */
+/* #undef H5_HAVE_LIBDL */
+
+/* Define to 1 if you have the `dmalloc' library (-ldmalloc). */
+/* #undef H5_HAVE_LIBDMALLOC */
+
+/* Define to 1 if you have the `lmpe' library (-llmpe). */
+/* #undef H5_HAVE_LIBLMPE */
+
+/* Define to 1 if you have the `m' library (-lm). */
+#define H5_HAVE_LIBM 1
+
+/* Define to 1 if you have the `mpe' library (-lmpe). */
+/* #undef H5_HAVE_LIBMPE */
+
+/* Define to 1 if you have the `mpi' library (-lmpi). */
+/* #undef H5_HAVE_LIBMPI */
+
+/* Define to 1 if you have the `mpich' library (-lmpich). */
+/* #undef H5_HAVE_LIBMPICH */
+
+/* Define to 1 if you have the `mpio' library (-lmpio). */
+/* #undef H5_HAVE_LIBMPIO */
+
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+/* #undef H5_HAVE_LIBNSL */
+
+/* Define to 1 if you have the `pthread' library (-lpthread). */
+/* #undef H5_HAVE_LIBPTHREAD */
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+/* #undef H5_HAVE_LIBSOCKET */
+
+/* Define to 1 if you have the `sz' library (-lsz). */
+#define H5_HAVE_LIBSZ 1
+
+/* Define to 1 if you have the `ws2_32' library (-lws2_32). */
+#define H5_HAVE_LIBWS2_32 1
+
+/* Define to 1 if you have the `z' library (-lz). */
+#define H5_HAVE_LIBZ 1
+
+/* Define to 1 if you have the `longjmp' function. */
+#define H5_HAVE_LONGJMP 1
+
+/* Define to 1 if you have the `lseek64' function. */
+/* #undef H5_HAVE_LSEEK64 */
+
+/* Define to 1 if you have the `lstat' function. */
+/* #undef H5_HAVE_LSTAT */
+
+/* Define to 1 if you have the <mach/mach_time.h> header file. */
+/* #undef H5_HAVE_MACH_MACH_TIME_H */
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define H5_HAVE_MEMORY_H 1
+
+/* Define if we have MPE support */
+/* #undef H5_HAVE_MPE */
+
+/* Define to 1 if you have the <mpe.h> header file. */
+/* #undef H5_HAVE_MPE_H */
+
+/* Define if MPI_File_get_size works correctly */
+/* #undef H5_HAVE_MPI_GET_SIZE */
+
+/* Define if `MPI_Comm_c2f' and `MPI_Comm_f2c' exists */
+/* #undef H5_HAVE_MPI_MULTI_LANG_Comm */
+
+/* Define if `MPI_Info_c2f' and `MPI_Info_f2c' exists */
+/* #undef H5_HAVE_MPI_MULTI_LANG_Info */
+
+/* Define if we have parallel support */
+/* #undef H5_HAVE_PARALLEL */
+
+/* Define to 1 if you have the <pthread.h> header file. */
+/* #undef H5_HAVE_PTHREAD_H */
+
+/* Define to 1 if you have the 'InitOnceExecuteOnce' function. */
+/* #undef H5_HAVE_WIN_THREADS */
+
+/* Define to 1 if you have the `random' function. */
+/* #undef H5_HAVE_RANDOM */
+
+/* Define to 1 if you have the `rand_r' function. */
+/* #undef H5_HAVE_RAND_R */
+
+/* Define to 1 if you have the `sigsetjmp' function. */
+#define H5_HAVE_SETJMP 1
+
+/* Define to 1 if you have the <setjmp.h> header file. */
+#define H5_HAVE_SETJMP_H 1
+
+/* Define to 1 if you have the `setsysinfo' function. */
+/* #undef H5_HAVE_SETSYSINFO */
+
+/* Define to 1 if you have the `sigaction' function. */
+/* #undef H5_HAVE_SIGACTION */
+
+/* Define to 1 if you have the `siglongjmp' function. */
+/* #undef H5_HAVE_SIGLONGJMP */
+
+/* Define to 1 if you have the `signal' function. */
+#define H5_HAVE_SIGNAL 1
+
+/* Define to 1 if you have the `sigprocmask' function. */
+/* #undef H5_HAVE_SIGPROCMASK */
+
+/* Define to 1 if you have the `sigsetjmp' function. */
+/* #undef H5_HAVE_SIGSETJMP */
+
+/* Define to 1 if you have the `snprintf' function. */
+/* #undef H5_HAVE_SNPRINTF */
+
+/* Define to 1 if you have the `srandom' function. */
+/* #undef H5_HAVE_SRANDOM */
+
+/* Define to 1 if you have the `stat64' function. */
+/* #undef H5_HAVE_STAT64 */
+
+/* Define if `struct stat' has the `st_blocks' field */
+/* #undef H5_HAVE_STAT_ST_BLOCKS */
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define H5_HAVE_STDDEF_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define H5_HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdint.h> header file for Cplusplus. */
+#define H5_HAVE_STDINT_H_CXX 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define H5_HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define H5_HAVE_STRDUP 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+/* #undef H5_HAVE_STRINGS_H */
+
+/* Define to 1 if you have the <string.h> header file. */
+#define H5_HAVE_STRING_H 1
+
+/* Define if `struct text_info' is defined */
+/* #undef H5_HAVE_STRUCT_TEXT_INFO */
+
+/* Define if `struct timezone' is defined */
+/* #undef H5_HAVE_STRUCT_TIMEZONE */
+
+/* Define to 1 if `tm_zone' is a member of `struct tm'. */
+/* #undef H5_HAVE_STRUCT_TM_TM_ZONE */
+
+/* Define if `struct videoconfig' is defined */
+/* #undef H5_HAVE_STRUCT_VIDEOCONFIG */
+
+/* Define to 1 if you have the `symlink' function. */
+/* #undef H5_HAVE_SYMLINK */
+
+/* Define to 1 if you have the `system' function. */
+#define H5_HAVE_SYSTEM 1
+
+/* Define to 1 if you have the <sys/fpu.h> header file. */
+/* #undef H5_HAVE_SYS_FPU_H */
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+/* #undef H5_HAVE_SYS_IOCTL_H */
+
+/* Define to 1 if you have the <sys/proc.h> header file. */
+/* #undef H5_HAVE_SYS_PROC_H */
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+/* #undef H5_HAVE_SYS_RESOURCE_H */
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+/* #undef H5_HAVE_SYS_SOCKET_H */
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define H5_HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/sysinfo.h> header file. */
+/* #undef H5_HAVE_SYS_SYSINFO_H */
+
+/* Define to 1 if you have the <sys/timeb.h> header file. */
+#define H5_HAVE_SYS_TIMEB_H 1
+
+/* Define to 1 if you have the <time.h> header file. */
+#define H5_HAVE_TIME_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+/* #undef H5_HAVE_SYS_TIME_H */
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define H5_HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <szlib.h> header file. */
+#define H5_HAVE_SZLIB_H 1
+
+/* Define if we have thread safe support */
+/* #undef H5_HAVE_THREADSAFE */
+
+/* Define if `timezone' is a global variable */
+#define H5_HAVE_TIMEZONE 1
+
+/* Define if the ioctl TIOCGETD is defined */
+/* #undef H5_HAVE_TIOCGETD */
+
+/* Define if the ioctl TIOGWINSZ is defined */
+/* #undef H5_HAVE_TIOCGWINSZ */
+
+/* Define to 1 if you have the `tmpfile' function. */
+#define H5_HAVE_TMPFILE 1
+
+/* Define if `tm_gmtoff' is a member of `struct tm' */
+/* #undef H5_HAVE_TM_GMTOFF */
+
+/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+   `HAVE_STRUCT_TM_TM_ZONE' instead. */
+/* #undef H5_HAVE_TM_ZONE */
+
+/* Define to 1 if you don't have `tm_zone' but do have the external array
+   `tzname'. */
+/* #undef H5_HAVE_TZNAME */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+/* #undef H5_HAVE_UNISTD_H */
+
+/* Define to 1 if you have the `vasprintf' function. */
+/* #undef H5_HAVE_VASPRINTF */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#define H5_HAVE_VSNPRINTF 1
+
+/* Define to 1 if you have the `waitpid' function. */
+/* #undef H5_HAVE_WAITPID */
+
+/* Define if your system has window style path name. */
+#define H5_HAVE_WINDOW_PATH 1
+
+/* Define to 1 if you have the <winsock.h> header file. */
+#define H5_HAVE_WINSOCK2_H 1
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#define H5_HAVE_ZLIB_H 1
+
+/* Define to 1 if you have the `_getvideoconfig' function. */
+/* #undef H5_HAVE__GETVIDEOCONFIG */
+
+/* Define to 1 if you have the `_scrsize' function. */
+/* #undef H5_HAVE__SCRSIZE */
+
+/* Define if `__tm_gmtoff' is a member of `struct tm' */
+/* #undef H5_HAVE___TM_GMTOFF */
+
+/* Define if your system can't handle converting floating-point values to long
+   long. */
+/* #undef H5_HW_FP_TO_LLONG_NOT_WORKS */
+
+/* Define if HDF5's high-level library headers should be included in hdf5.h */
+#define H5_INCLUDE_HL 1
+
+/* Define if your system can accurately convert from integers to long double
+   values. */
+#define H5_INTEGER_TO_LDOUBLE_ACCURATE 1
+
+/* Define if your system can convert long double to integers accurately. */
+#define H5_LDOUBLE_TO_INTEGER_ACCURATE 1
+
+/* Define if your system can convert from long double to integer values. */
+/* #undef H5_LDOUBLE_TO_INTEGER_WORKS */
+
+/* Define if your system can convert long double to (unsigned) long long
+   values correctly. */
+#define H5_LDOUBLE_TO_LLONG_ACCURATE 1
+
+/* Define if your system converts long double to (unsigned) long values with
+   special algorithm. */
+/* #undef H5_LDOUBLE_TO_LONG_SPECIAL */
+
+/* Define if your system can convert long double to unsigned int values
+   correctly. */
+#define H5_LDOUBLE_TO_UINT_ACCURATE 1
+
+/* Define if your system can compile long long to floating-point casts. */
+#define H5_LLONG_TO_FP_CAST_WORKS 1
+
+/* Define if your system can convert (unsigned) long long to long double
+   values correctly. */
+#define H5_LLONG_TO_LDOUBLE_CORRECT 1
+
+/* Define if your system can convert (unsigned) long to long double values
+   with special algorithm. */
+/* #undef H5_LONG_TO_LDOUBLE_SPECIAL */
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+/* #undef H5_LT_OBJDIR */
+
+/* Define if the metadata trace file code is to be compiled in */
+/* #undef H5_METADATA_TRACE_FILE */
+
+/* Define if your system's `MPI_File_set_size' function works for files over
+   2GB. */
+/* #undef H5_MPI_FILE_SET_SIZE_BIG */
+
+/* Define if we can violate pointer alignment restrictions */
+#define H5_NO_ALIGNMENT_RESTRICTIONS 1
+
+/* Define if deprecated public API symbols are disabled */
+/* #undef H5_NO_DEPRECATED_SYMBOLS */
+
+/* Define if shared writing must be disabled (CodeWarrior only) */
+/* #undef H5_NO_SHARED_WRITING */
+
+/* Name of package */
+#define H5_PACKAGE "hdf5"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define H5_PACKAGE_BUGREPORT "help@hdfgroup.org"
+
+/* Define to the full name of this package. */
+#define H5_PACKAGE_NAME "HDF5"
+
+/* Define to the full name and version of this package. */
+#define H5_PACKAGE_STRING "HDF5 1.8.13"
+
+/* Define to the one symbol short name of this package. */
+#define H5_PACKAGE_TARNAME "hdf5"
+
+/* Define to the home page for this package. */
+#define H5_PACKAGE_URL "http://www.hdfgroup.org"
+
+/* Define to the version of this package. */
+#define H5_PACKAGE_VERSION "1.8.13"
+
+/* Width for printf() for type `long long' or `__int64', use `ll' */
+#define H5_PRINTF_LL_WIDTH "ll"
+
+/* The size of `char', as computed by sizeof. */
+#define H5_SIZEOF_CHAR 1
+
+/* The size of `double', as computed by sizeof. */
+#define H5_SIZEOF_DOUBLE 8
+
+/* The size of `float', as computed by sizeof. */
+#define H5_SIZEOF_FLOAT 4
+
+/* The size of `int', as computed by sizeof. */
+#define H5_SIZEOF_INT 4
+
+/* The size of `int16_t', as computed by sizeof. */
+#define H5_SIZEOF_INT16_T 2
+
+/* The size of `int32_t', as computed by sizeof. */
+#define H5_SIZEOF_INT32_T 4
+
+/* The size of `int64_t', as computed by sizeof. */
+#define H5_SIZEOF_INT64_T 8
+
+/* The size of `int8_t', as computed by sizeof. */
+#define H5_SIZEOF_INT8_T 1
+
+/* The size of `int_fast16_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_FAST16_T 4
+
+/* The size of `int_fast32_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_FAST32_T 4
+
+/* The size of `int_fast64_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_FAST64_T 8
+
+/* The size of `int_fast8_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_FAST8_T 1
+
+/* The size of `int_least16_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_LEAST16_T 2
+
+/* The size of `int_least32_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_LEAST32_T 4
+
+/* The size of `int_least64_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_LEAST64_T 8
+
+/* The size of `int_least8_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_LEAST8_T 1
+
+#if !defined(__APPLE__)
+/* The size of `size_t', as computed by sizeof. */
+#define H5_SIZEOF_SIZE_T 8
+
+/* The size of `ssize_t', as computed by sizeof. */
+/* #undef H5_SIZEOF_SSIZE_T */
+
+/* The size of `long', as computed by sizeof. */
+#define H5_SIZEOF_LONG 4
+
+#else
+   # if defined(__LP64__) && __LP64__
+  #define H5_SIZEOF_LONG 8
+  #define H5_SIZEOF_SIZE_T 8
+  #define H5_SIZEOF_SSIZE_T 8
+  # else
+  #define H5_SIZEOF_LONG 4
+  #define H5_SIZEOF_SIZE_T 4
+  #define H5_SIZEOF_SSIZE_T 4
+  # endif
+
+#endif
+
+/* The size of `long double', as computed by sizeof. */
+#define H5_SIZEOF_LONG_DOUBLE 8
+
+/* Define size of long long and/or __int64 bit integer type only if the type
+   exists.  */
+#if !defined(__APPLE__)
+ #define H5_SIZEOF_LONG_LONG 8
+#else
+ #define H5_SIZEOF_LONG_LONG 8
+#endif
+
+/* The size of `off64_t', as computed by sizeof. */
+/* #undef H5_SIZEOF_OFF64_T */
+
+/* The size of `off_t', as computed by sizeof. */
+#define H5_SIZEOF_OFF_T 4
+
+/* The size of `ptrdiff_t', as computed by sizeof. */
+/* #undef H5_SIZEOF_PTRDIFF_T */
+
+/* The size of `short', as computed by sizeof. */
+#define H5_SIZEOF_SHORT 2
+
+/* The size of `uint16_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT16_T 2
+
+/* The size of `uint32_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT32_T 4
+
+/* The size of `uint64_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT64_T 8
+
+/* The size of `uint8_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT8_T 1
+
+/* The size of `uint_fast16_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_FAST16_T 4
+
+/* The size of `uint_fast32_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_FAST32_T 4
+
+/* The size of `uint_fast64_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_FAST64_T 8
+
+/* The size of `uint_fast8_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_FAST8_T 1
+
+/* The size of `uint_least16_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_LEAST16_T 2
+
+/* The size of `uint_least32_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_LEAST32_T 4
+
+/* The size of `uint_least64_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_LEAST64_T 8
+
+/* The size of `uint_least8_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_LEAST8_T 1
+
+/* The size of `unsigned', as computed by sizeof. */
+#define H5_SIZEOF_UNSIGNED 4
+
+/* The size of `__int64', as computed by sizeof. */
+#define H5_SIZEOF___INT64 8
+
+/* Define to 1 if you have the ANSI C header files. */
+#define H5_STDC_HEADERS 1
+
+/* Define if strict file format checks are enabled */
+/* #undef H5_STRICT_FORMAT_CHECKS */
+
+/* Define if your system supports pthread_attr_setscope(&attribute,
+   PTHREAD_SCOPE_SYSTEM) call. */
+/* #undef H5_SYSTEM_SCOPE_THREADS */
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+/* #undef H5_TIME_WITH_SYS_TIME */
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+/* #undef H5_TM_IN_SYS_TIME */
+
+/* Define if your system can compile unsigned long long to floating-point
+   casts. */
+#define H5_ULLONG_TO_FP_CAST_WORKS 1
+
+/* Define if your system can convert unsigned long long to long double with
+   correct precision. */
+/* #undef H5_ULLONG_TO_LDOUBLE_PRECISION */
+
+/* Define if your system accurately converting unsigned long to float values.
+   */
+#define H5_ULONG_TO_FLOAT_ACCURATE 1
+
+/* Define if your system can accurately convert unsigned (long) long values to
+   floating-point values. */
+#define H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE 1
+
+/* Define using v1.6 public API symbols by default */
+/* #undef H5_USE_16_API_DEFAULT */
+
+/* Define if a memory checking tool will be used on the library, to cause
+   library to be very picky about memory operations and also disable the
+   internal free list manager code. */
+/* #undef H5_USING_MEMCHECKER */
+
+/* Version number of package */
+#define H5_VERSION "1.8.13"
+
+/* Define if vsnprintf() returns the correct value for formatted strings that
+   don't fit into size allowed */
+/* #undef H5_VSNPRINTF_WORKS */
+
+/* Data accuracy is prefered to speed during data conversions */
+#define H5_WANT_DATA_ACCURACY 1
+
+/* Check exception handling functions during data conversions */
+#define H5_WANT_DCONV_EXCEPTION 1
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if !defined(__APPLE__)
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#else
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#endif
+
+/* #undef WORDS_BIGENDIAN */
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef H5__FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef H5__LARGE_FILES */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef H5_const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#define H5_inline __inline
+#endif
+
+/* Define to `long int' if <sys/types.h> does not define. */
+/* #undef H5_off_t */
+
+/* Define to `long' if <sys/types.h> does not define. */
+/* #undef H5_ptrdiff_t */
+
+/* Define to `unsigned long' if <sys/types.h> does not define. */
+/* #undef H5_size_t */
+
+/* Define to `long' if <sys/types.h> does not define. */
+/* #undef H5_ssize_t */
+
+#if defined(__cplusplus) && defined(inline)
+#undef inline
+#endif
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/H5public.h b/Resources/windows-libs/HDF5/include/H5public.h
new file mode 100644
index 0000000000000000000000000000000000000000..aaf0d749847fc8628e2f83328cbe7a8e864203b4
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5public.h
@@ -0,0 +1,343 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the HDF5 module.
+ */
+#ifndef _H5public_H
+#define _H5public_H
+
+/* Include files for public use... */
+/*
+ * Since H5pubconf.h is a generated header file, it is messy to try
+ * to put a #ifndef _H5pubconf_H ... #endif guard in it.
+ * HDF5 has set an internal rule that it is being included here.
+ * Source files should NOT include H5pubconf.h directly but include
+ * it via H5public.h.  The #ifndef _H5public_H guard above would
+ * prevent repeated include.
+ */
+#include "H5pubconf.h"		/*from configure                             */
+
+/* API Version macro wrapper definitions */
+#include "H5version.h"
+
+#ifdef H5_HAVE_FEATURES_H
+#include <features.h>           /*for setting POSIX, BSD, etc. compatibility */
+#endif
+#ifdef H5_HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef H5_STDC_HEADERS
+#   include <limits.h>		/*for H5T_NATIVE_CHAR defn in H5Tpublic.h    */
+#endif
+#ifndef __cplusplus
+# ifdef H5_HAVE_STDINT_H
+#   include <stdint.h>		/*for C9x types				     */
+# endif
+#else
+# ifdef H5_HAVE_STDINT_H_CXX
+#   include <stdint.h>		/*for C9x types	when include from C++	     */
+# endif
+#endif
+#ifdef H5_HAVE_INTTYPES_H
+#   include <inttypes.h>        /* For uint64_t on some platforms            */
+#endif
+#ifdef H5_HAVE_STDDEF_H
+#   include <stddef.h>
+#endif
+#ifdef H5_HAVE_PARALLEL
+#   include <mpi.h>
+#ifndef MPI_FILE_NULL		/*MPIO may be defined in mpi.h already       */
+#   include <mpio.h>
+#endif
+#endif
+
+
+/* Include the Windows API adapter header early */
+#include "H5api_adpt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Macros for enabling/disabling particular GCC warnings */
+/* (see the following web-sites for more info:
+ *      http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html
+ *      http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas
+ */
+/* These pragmas are only implemented usefully in gcc 4.6+ */
+#if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406
+    #define H5_GCC_DIAG_STR(s) #s
+    #define H5_GCC_DIAG_JOINSTR(x,y) H5_GCC_DIAG_STR(x ## y)
+    #define H5_GCC_DIAG_DO_PRAGMA(x) _Pragma (#x)
+    #define H5_GCC_DIAG_PRAGMA(x) H5_GCC_DIAG_DO_PRAGMA(GCC diagnostic x)
+
+    #define H5_GCC_DIAG_OFF(x) H5_GCC_DIAG_PRAGMA(push) H5_GCC_DIAG_PRAGMA(ignored H5_GCC_DIAG_JOINSTR(-W,x))
+    #define H5_GCC_DIAG_ON(x) H5_GCC_DIAG_PRAGMA(pop)
+#else
+    #define H5_GCC_DIAG_OFF(x)
+    #define H5_GCC_DIAG_ON(x)
+#endif
+
+/* Version numbers */
+#define H5_VERS_MAJOR	1	/* For major interface/format changes  	     */
+#define H5_VERS_MINOR	8	/* For minor interface/format changes  	     */
+#define H5_VERS_RELEASE	13	/* For tweaks, bug-fixes, or development     */
+#define H5_VERS_SUBRELEASE ""	/* For pre-releases like snap0       */
+				/* Empty string for real releases.           */
+#define H5_VERS_INFO    "HDF5 library version: 1.8.13"      /* Full version string */
+
+#define H5check()	H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR,	      \
+				        H5_VERS_RELEASE)
+
+/* macros for comparing the version */
+#define H5_VERSION_GE(Maj,Min,Rel) \
+       (((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR==Min) && (H5_VERS_RELEASE>=Rel)) || \
+        ((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR>Min)) || \
+        (H5_VERS_MAJOR>Maj))
+
+#define H5_VERSION_LE(Maj,Min,Rel) \
+       (((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR==Min) && (H5_VERS_RELEASE<=Rel)) || \
+        ((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR<Min)) || \
+        (H5_VERS_MAJOR<Maj))
+
+/*
+ * Status return values.  Failed integer functions in HDF5 result almost
+ * always in a negative value (unsigned failing functions sometimes return
+ * zero for failure) while successfull return is non-negative (often zero).
+ * The negative failure value is most commonly -1, but don't bet on it.  The
+ * proper way to detect failure is something like:
+ *
+ * 	if((dset = H5Dopen2(file, name)) < 0)
+ *	    fprintf(stderr, "unable to open the requested dataset\n");
+ */
+typedef int herr_t;
+
+
+/*
+ * Boolean type.  Successful return values are zero (false) or positive
+ * (true). The typical true value is 1 but don't bet on it.  Boolean
+ * functions cannot fail.  Functions that return `htri_t' however return zero
+ * (false), positive (true), or negative (failure). The proper way to test
+ * for truth from a htri_t function is:
+ *
+ * 	if ((retval = H5Tcommitted(type))>0) {
+ *	    printf("data type is committed\n");
+ *	} else if (!retval) {
+ * 	    printf("data type is not committed\n");
+ *	} else {
+ * 	    printf("error determining whether data type is committed\n");
+ *	}
+ */
+typedef unsigned int hbool_t;
+typedef int htri_t;
+
+/* Define the ssize_t type if it not is defined */
+#if H5_SIZEOF_SSIZE_T==0
+/* Undefine this size, we will re-define it in one of the sections below */
+#undef H5_SIZEOF_SSIZE_T
+#if H5_SIZEOF_SIZE_T==H5_SIZEOF_INT
+typedef int ssize_t;
+#       define H5_SIZEOF_SSIZE_T H5_SIZEOF_INT
+#elif H5_SIZEOF_SIZE_T==H5_SIZEOF_LONG
+typedef long ssize_t;
+#       define H5_SIZEOF_SSIZE_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_SIZE_T==H5_SIZEOF_LONG_LONG
+typedef long long ssize_t;
+#       define H5_SIZEOF_SSIZE_T H5_SIZEOF_LONG_LONG
+#else /* Can't find matching type for ssize_t */
+#   error "nothing appropriate for ssize_t"
+#endif
+#endif
+
+/*
+ * The sizes of file objects have their own types defined here, use a 64-bit
+ * type.
+ */
+#if H5_SIZEOF_LONG_LONG >= 8
+H5_GCC_DIAG_OFF(long-long)
+typedef unsigned long long 	hsize_t;
+typedef signed long long	hssize_t;
+H5_GCC_DIAG_ON(long-long)
+#       define H5_SIZEOF_HSIZE_T H5_SIZEOF_LONG_LONG
+#       define H5_SIZEOF_HSSIZE_T H5_SIZEOF_LONG_LONG
+#else
+#   error "nothing appropriate for hsize_t"
+#endif
+
+/*
+ * File addresses have their own types.
+ */
+#if H5_SIZEOF_INT64_T>=8
+    typedef uint64_t                haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(int64_t)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_INT64_T
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_LONG_LONG_INT
+#   endif  /* H5_HAVE_PARALLEL */
+#elif H5_SIZEOF_INT>=8
+    typedef unsigned                haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_INT
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_UNSIGNED
+#   endif  /* H5_HAVE_PARALLEL */
+#elif H5_SIZEOF_LONG>=8
+    typedef unsigned long           haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(long)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_LONG
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_UNSIGNED_LONG
+#   endif  /* H5_HAVE_PARALLEL */
+#elif H5_SIZEOF_LONG_LONG>=8
+    typedef unsigned long long      haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(long long)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_LONG_LONG
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_LONG_LONG_INT
+#   endif  /* H5_HAVE_PARALLEL */
+#else
+#   error "nothing appropriate for haddr_t"
+#endif
+#if H5_SIZEOF_HADDR_T ==H5_SIZEOF_INT
+#   define H5_PRINTF_HADDR_FMT  "%u"
+#elif H5_SIZEOF_HADDR_T ==H5_SIZEOF_LONG
+#   define H5_PRINTF_HADDR_FMT  "%lu"
+#elif H5_SIZEOF_HADDR_T ==H5_SIZEOF_LONG_LONG
+#   define H5_PRINTF_HADDR_FMT  "%" H5_PRINTF_LL_WIDTH "u"
+#else
+#   error "nothing appropriate for H5_PRINTF_HADDR_FMT"
+#endif
+#define HADDR_MAX		(HADDR_UNDEF-1)
+
+/* uint32_t type is used for creation order field for messages.  It may be
+ * defined in Posix.1g, otherwise it is defined here.
+ */
+#if H5_SIZEOF_UINT32_T>=4
+#elif H5_SIZEOF_SHORT>=4
+    typedef short uint32_t;
+#   undef H5_SIZEOF_UINT32_T
+#   define H5_SIZEOF_UINT32_T H5_SIZEOF_SHORT
+#elif H5_SIZEOF_INT>=4
+    typedef unsigned int uint32_t;
+#   undef H5_SIZEOF_UINT32_T
+#   define H5_SIZEOF_UINT32_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG>=4
+    typedef unsigned long uint32_t;
+#   undef H5_SIZEOF_UINT32_T
+#   define H5_SIZEOF_UINT32_T H5_SIZEOF_LONG
+#else
+#   error "nothing appropriate for uint32_t"
+#endif
+
+/* int64_t type is used for creation order field for links.  It may be
+ * defined in Posix.1g, otherwise it is defined here.
+ */
+#if H5_SIZEOF_INT64_T>=8
+#elif H5_SIZEOF_INT>=8
+    typedef int int64_t;
+#   undef H5_SIZEOF_INT64_T
+#   define H5_SIZEOF_INT64_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG>=8
+    typedef long int64_t;
+#   undef H5_SIZEOF_INT64_T
+#   define H5_SIZEOF_INT64_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_LONG_LONG>=8
+    typedef long long int64_t;
+#   undef H5_SIZEOF_INT64_T
+#   define H5_SIZEOF_INT64_T H5_SIZEOF_LONG_LONG
+#else
+#   error "nothing appropriate for int64_t"
+#endif
+
+/* uint64_t type is used for fields for H5O_info_t.  It may be
+ * defined in Posix.1g, otherwise it is defined here.
+ */
+#if H5_SIZEOF_UINT64_T>=8
+#elif H5_SIZEOF_INT>=8
+    typedef unsigned uint64_t;
+#   undef H5_SIZEOF_UINT64_T
+#   define H5_SIZEOF_UINT64_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG>=8
+    typedef unsigned long uint64_t;
+#   undef H5_SIZEOF_UINT64_T
+#   define H5_SIZEOF_UINT64_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_LONG_LONG>=8
+    typedef unsigned long long uint64_t;
+#   undef H5_SIZEOF_UINT64_T
+#   define H5_SIZEOF_UINT64_T H5_SIZEOF_LONG_LONG
+#else
+#   error "nothing appropriate for uint64_t"
+#endif
+
+/* Default value for all property list classes */
+#define H5P_DEFAULT     0
+
+/* Common iteration orders */
+typedef enum {
+    H5_ITER_UNKNOWN = -1,       /* Unknown order */
+    H5_ITER_INC,                /* Increasing order */
+    H5_ITER_DEC,                /* Decreasing order */
+    H5_ITER_NATIVE,             /* No particular order, whatever is fastest */
+    H5_ITER_N		        /* Number of iteration orders */
+} H5_iter_order_t;
+
+/* Iteration callback values */
+/* (Actually, any postive value will cause the iterator to stop and pass back
+ *      that positive value to the function that called the iterator)
+ */
+#define H5_ITER_ERROR   (-1)
+#define H5_ITER_CONT    (0)
+#define H5_ITER_STOP    (1)
+
+/*
+ * The types of indices on links in groups/attributes on objects.
+ * Primarily used for "<do> <foo> by index" routines and for iterating over
+ * links in groups/attributes on objects.
+ */
+typedef enum H5_index_t {
+    H5_INDEX_UNKNOWN = -1,	/* Unknown index type			*/
+    H5_INDEX_NAME,		/* Index on names 			*/
+    H5_INDEX_CRT_ORDER,		/* Index on creation order 		*/
+    H5_INDEX_N			/* Number of indices defined 		*/
+} H5_index_t;
+
+/*
+ * Storage info struct used by H5O_info_t and H5F_info_t
+ */
+typedef struct H5_ih_info_t {
+    hsize_t     index_size;     /* btree and/or list */
+    hsize_t     heap_size;
+} H5_ih_info_t;
+
+/* Functions in H5.c */
+H5_DLL herr_t H5open(void);
+H5_DLL herr_t H5close(void);
+H5_DLL herr_t H5dont_atexit(void);
+H5_DLL herr_t H5garbage_collect(void);
+H5_DLL herr_t H5set_free_list_limits (int reg_global_lim, int reg_list_lim,
+                int arr_global_lim, int arr_list_lim, int blk_global_lim,
+                int blk_list_lim);
+H5_DLL herr_t H5get_libversion(unsigned *majnum, unsigned *minnum,
+				unsigned *relnum);
+H5_DLL herr_t H5check_version(unsigned majnum, unsigned minnum,
+			       unsigned relnum);
+H5_DLL herr_t H5free_memory(void *mem);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
diff --git a/Resources/windows-libs/HDF5/include/H5version.h b/Resources/windows-libs/HDF5/include/H5version.h
new file mode 100644
index 0000000000000000000000000000000000000000..58de2abafd097fe62acc19bf2799aa8a5011a90f
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/H5version.h
@@ -0,0 +1,419 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Generated automatically by bin/make_vers -- do not edit */
+/* Add new versioned symbols to H5vers.txt file */
+
+
+#ifndef _H5version_H
+#define _H5version_H
+
+/* Issue error if contradicting macros have been defined. */
+#if defined(H5_USE_16_API) && defined(H5_NO_DEPRECATED_SYMBOLS)
+#error "Can't choose old API versions when deprecated APIs are disabled"
+#endif /* defined(H5_USE_16_API) && defined(H5_NO_DEPRECATED_SYMBOLS) */
+
+
+/* If a particular "global" version of the library's interfaces is chosen,
+ *      set the versions for the API symbols affected.
+ *
+ * Note: If an application has already chosen a particular version for an
+ *      API symbol, the individual API version macro takes priority.
+ */
+#if defined(H5_USE_16_API_DEFAULT) && !defined(H5_USE_16_API)
+#define H5_USE_16_API 1
+#endif /* H5_USE_16_API_DEFAULT && !H5_USE_16_API */
+
+#ifdef H5_USE_16_API
+
+/*************/
+/* Functions */
+/*************/
+
+#if !defined(H5Acreate_vers)
+#define H5Acreate_vers 1
+#endif /* !defined(H5Acreate_vers) */
+
+#if !defined(H5Aiterate_vers)
+#define H5Aiterate_vers 1
+#endif /* !defined(H5Aiterate_vers) */
+
+#if !defined(H5Dcreate_vers)
+#define H5Dcreate_vers 1
+#endif /* !defined(H5Dcreate_vers) */
+
+#if !defined(H5Dopen_vers)
+#define H5Dopen_vers 1
+#endif /* !defined(H5Dopen_vers) */
+
+#if !defined(H5Eclear_vers)
+#define H5Eclear_vers 1
+#endif /* !defined(H5Eclear_vers) */
+
+#if !defined(H5Eget_auto_vers)
+#define H5Eget_auto_vers 1
+#endif /* !defined(H5Eget_auto_vers) */
+
+#if !defined(H5Eprint_vers)
+#define H5Eprint_vers 1
+#endif /* !defined(H5Eprint_vers) */
+
+#if !defined(H5Epush_vers)
+#define H5Epush_vers 1
+#endif /* !defined(H5Epush_vers) */
+
+#if !defined(H5Eset_auto_vers)
+#define H5Eset_auto_vers 1
+#endif /* !defined(H5Eset_auto_vers) */
+
+#if !defined(H5Ewalk_vers)
+#define H5Ewalk_vers 1
+#endif /* !defined(H5Ewalk_vers) */
+
+#if !defined(H5Gcreate_vers)
+#define H5Gcreate_vers 1
+#endif /* !defined(H5Gcreate_vers) */
+
+#if !defined(H5Gopen_vers)
+#define H5Gopen_vers 1
+#endif /* !defined(H5Gopen_vers) */
+
+#if !defined(H5Pget_filter_vers)
+#define H5Pget_filter_vers 1
+#endif /* !defined(H5Pget_filter_vers) */
+
+#if !defined(H5Pget_filter_by_id_vers)
+#define H5Pget_filter_by_id_vers 1
+#endif /* !defined(H5Pget_filter_by_id_vers) */
+
+#if !defined(H5Pinsert_vers)
+#define H5Pinsert_vers 1
+#endif /* !defined(H5Pinsert_vers) */
+
+#if !defined(H5Pregister_vers)
+#define H5Pregister_vers 1
+#endif /* !defined(H5Pregister_vers) */
+
+#if !defined(H5Rget_obj_type_vers)
+#define H5Rget_obj_type_vers 1
+#endif /* !defined(H5Rget_obj_type_vers) */
+
+#if !defined(H5Tarray_create_vers)
+#define H5Tarray_create_vers 1
+#endif /* !defined(H5Tarray_create_vers) */
+
+#if !defined(H5Tcommit_vers)
+#define H5Tcommit_vers 1
+#endif /* !defined(H5Tcommit_vers) */
+
+#if !defined(H5Tget_array_dims_vers)
+#define H5Tget_array_dims_vers 1
+#endif /* !defined(H5Tget_array_dims_vers) */
+
+#if !defined(H5Topen_vers)
+#define H5Topen_vers 1
+#endif /* !defined(H5Topen_vers) */
+
+/************/
+/* Typedefs */
+/************/
+
+#if !defined(H5E_auto_t_vers)
+#define H5E_auto_t_vers 1
+#endif /* !defined(H5E_auto_t_vers) */
+
+#if !defined(H5Z_class_t_vers)
+#define H5Z_class_t_vers 1
+#endif /* !defined(H5Z_class_t_vers) */
+
+#endif /* H5_USE_16_API */
+
+
+/* Choose the correct version of each API symbol, defaulting to the latest
+ *      version of each.  The "best" name for API parameters/data structures
+ *      that have changed definitions is also set.  An error is issued for
+ *      specifying an invalid API version.
+ */
+
+/*************/
+/* Functions */
+/*************/
+
+#if !defined(H5Acreate_vers) || H5Acreate_vers == 2
+#ifndef H5Acreate_vers
+#define H5Acreate_vers 2
+#endif /* H5Acreate_vers */
+#define H5Acreate H5Acreate2
+#elif H5Acreate_vers == 1
+#define H5Acreate H5Acreate1
+#else /* H5Acreate_vers */
+#error "H5Acreate_vers set to invalid value"
+#endif /* H5Acreate_vers */
+
+#if !defined(H5Aiterate_vers) || H5Aiterate_vers == 2
+#ifndef H5Aiterate_vers
+#define H5Aiterate_vers 2
+#endif /* H5Aiterate_vers */
+#define H5Aiterate H5Aiterate2
+#define H5A_operator_t H5A_operator2_t
+#elif H5Aiterate_vers == 1
+#define H5Aiterate H5Aiterate1
+#define H5A_operator_t H5A_operator1_t
+#else /* H5Aiterate_vers */
+#error "H5Aiterate_vers set to invalid value"
+#endif /* H5Aiterate_vers */
+
+#if !defined(H5Dcreate_vers) || H5Dcreate_vers == 2
+#ifndef H5Dcreate_vers
+#define H5Dcreate_vers 2
+#endif /* H5Dcreate_vers */
+#define H5Dcreate H5Dcreate2
+#elif H5Dcreate_vers == 1
+#define H5Dcreate H5Dcreate1
+#else /* H5Dcreate_vers */
+#error "H5Dcreate_vers set to invalid value"
+#endif /* H5Dcreate_vers */
+
+#if !defined(H5Dopen_vers) || H5Dopen_vers == 2
+#ifndef H5Dopen_vers
+#define H5Dopen_vers 2
+#endif /* H5Dopen_vers */
+#define H5Dopen H5Dopen2
+#elif H5Dopen_vers == 1
+#define H5Dopen H5Dopen1
+#else /* H5Dopen_vers */
+#error "H5Dopen_vers set to invalid value"
+#endif /* H5Dopen_vers */
+
+#if !defined(H5Eclear_vers) || H5Eclear_vers == 2
+#ifndef H5Eclear_vers
+#define H5Eclear_vers 2
+#endif /* H5Eclear_vers */
+#define H5Eclear H5Eclear2
+#elif H5Eclear_vers == 1
+#define H5Eclear H5Eclear1
+#else /* H5Eclear_vers */
+#error "H5Eclear_vers set to invalid value"
+#endif /* H5Eclear_vers */
+
+#if !defined(H5Eget_auto_vers) || H5Eget_auto_vers == 2
+#ifndef H5Eget_auto_vers
+#define H5Eget_auto_vers 2
+#endif /* H5Eget_auto_vers */
+#define H5Eget_auto H5Eget_auto2
+#elif H5Eget_auto_vers == 1
+#define H5Eget_auto H5Eget_auto1
+#else /* H5Eget_auto_vers */
+#error "H5Eget_auto_vers set to invalid value"
+#endif /* H5Eget_auto_vers */
+
+#if !defined(H5Eprint_vers) || H5Eprint_vers == 2
+#ifndef H5Eprint_vers
+#define H5Eprint_vers 2
+#endif /* H5Eprint_vers */
+#define H5Eprint H5Eprint2
+#elif H5Eprint_vers == 1
+#define H5Eprint H5Eprint1
+#else /* H5Eprint_vers */
+#error "H5Eprint_vers set to invalid value"
+#endif /* H5Eprint_vers */
+
+#if !defined(H5Epush_vers) || H5Epush_vers == 2
+#ifndef H5Epush_vers
+#define H5Epush_vers 2
+#endif /* H5Epush_vers */
+#define H5Epush H5Epush2
+#elif H5Epush_vers == 1
+#define H5Epush H5Epush1
+#else /* H5Epush_vers */
+#error "H5Epush_vers set to invalid value"
+#endif /* H5Epush_vers */
+
+#if !defined(H5Eset_auto_vers) || H5Eset_auto_vers == 2
+#ifndef H5Eset_auto_vers
+#define H5Eset_auto_vers 2
+#endif /* H5Eset_auto_vers */
+#define H5Eset_auto H5Eset_auto2
+#elif H5Eset_auto_vers == 1
+#define H5Eset_auto H5Eset_auto1
+#else /* H5Eset_auto_vers */
+#error "H5Eset_auto_vers set to invalid value"
+#endif /* H5Eset_auto_vers */
+
+#if !defined(H5Ewalk_vers) || H5Ewalk_vers == 2
+#ifndef H5Ewalk_vers
+#define H5Ewalk_vers 2
+#endif /* H5Ewalk_vers */
+#define H5Ewalk H5Ewalk2
+#define H5E_error_t H5E_error2_t
+#define H5E_walk_t H5E_walk2_t
+#elif H5Ewalk_vers == 1
+#define H5Ewalk H5Ewalk1
+#define H5E_error_t H5E_error1_t
+#define H5E_walk_t H5E_walk1_t
+#else /* H5Ewalk_vers */
+#error "H5Ewalk_vers set to invalid value"
+#endif /* H5Ewalk_vers */
+
+#if !defined(H5Gcreate_vers) || H5Gcreate_vers == 2
+#ifndef H5Gcreate_vers
+#define H5Gcreate_vers 2
+#endif /* H5Gcreate_vers */
+#define H5Gcreate H5Gcreate2
+#elif H5Gcreate_vers == 1
+#define H5Gcreate H5Gcreate1
+#else /* H5Gcreate_vers */
+#error "H5Gcreate_vers set to invalid value"
+#endif /* H5Gcreate_vers */
+
+#if !defined(H5Gopen_vers) || H5Gopen_vers == 2
+#ifndef H5Gopen_vers
+#define H5Gopen_vers 2
+#endif /* H5Gopen_vers */
+#define H5Gopen H5Gopen2
+#elif H5Gopen_vers == 1
+#define H5Gopen H5Gopen1
+#else /* H5Gopen_vers */
+#error "H5Gopen_vers set to invalid value"
+#endif /* H5Gopen_vers */
+
+#if !defined(H5Pget_filter_vers) || H5Pget_filter_vers == 2
+#ifndef H5Pget_filter_vers
+#define H5Pget_filter_vers 2
+#endif /* H5Pget_filter_vers */
+#define H5Pget_filter H5Pget_filter2
+#elif H5Pget_filter_vers == 1
+#define H5Pget_filter H5Pget_filter1
+#else /* H5Pget_filter_vers */
+#error "H5Pget_filter_vers set to invalid value"
+#endif /* H5Pget_filter_vers */
+
+#if !defined(H5Pget_filter_by_id_vers) || H5Pget_filter_by_id_vers == 2
+#ifndef H5Pget_filter_by_id_vers
+#define H5Pget_filter_by_id_vers 2
+#endif /* H5Pget_filter_by_id_vers */
+#define H5Pget_filter_by_id H5Pget_filter_by_id2
+#elif H5Pget_filter_by_id_vers == 1
+#define H5Pget_filter_by_id H5Pget_filter_by_id1
+#else /* H5Pget_filter_by_id_vers */
+#error "H5Pget_filter_by_id_vers set to invalid value"
+#endif /* H5Pget_filter_by_id_vers */
+
+#if !defined(H5Pinsert_vers) || H5Pinsert_vers == 2
+#ifndef H5Pinsert_vers
+#define H5Pinsert_vers 2
+#endif /* H5Pinsert_vers */
+#define H5Pinsert H5Pinsert2
+#elif H5Pinsert_vers == 1
+#define H5Pinsert H5Pinsert1
+#else /* H5Pinsert_vers */
+#error "H5Pinsert_vers set to invalid value"
+#endif /* H5Pinsert_vers */
+
+#if !defined(H5Pregister_vers) || H5Pregister_vers == 2
+#ifndef H5Pregister_vers
+#define H5Pregister_vers 2
+#endif /* H5Pregister_vers */
+#define H5Pregister H5Pregister2
+#elif H5Pregister_vers == 1
+#define H5Pregister H5Pregister1
+#else /* H5Pregister_vers */
+#error "H5Pregister_vers set to invalid value"
+#endif /* H5Pregister_vers */
+
+#if !defined(H5Rget_obj_type_vers) || H5Rget_obj_type_vers == 2
+#ifndef H5Rget_obj_type_vers
+#define H5Rget_obj_type_vers 2
+#endif /* H5Rget_obj_type_vers */
+#define H5Rget_obj_type H5Rget_obj_type2
+#elif H5Rget_obj_type_vers == 1
+#define H5Rget_obj_type H5Rget_obj_type1
+#else /* H5Rget_obj_type_vers */
+#error "H5Rget_obj_type_vers set to invalid value"
+#endif /* H5Rget_obj_type_vers */
+
+#if !defined(H5Tarray_create_vers) || H5Tarray_create_vers == 2
+#ifndef H5Tarray_create_vers
+#define H5Tarray_create_vers 2
+#endif /* H5Tarray_create_vers */
+#define H5Tarray_create H5Tarray_create2
+#elif H5Tarray_create_vers == 1
+#define H5Tarray_create H5Tarray_create1
+#else /* H5Tarray_create_vers */
+#error "H5Tarray_create_vers set to invalid value"
+#endif /* H5Tarray_create_vers */
+
+#if !defined(H5Tcommit_vers) || H5Tcommit_vers == 2
+#ifndef H5Tcommit_vers
+#define H5Tcommit_vers 2
+#endif /* H5Tcommit_vers */
+#define H5Tcommit H5Tcommit2
+#elif H5Tcommit_vers == 1
+#define H5Tcommit H5Tcommit1
+#else /* H5Tcommit_vers */
+#error "H5Tcommit_vers set to invalid value"
+#endif /* H5Tcommit_vers */
+
+#if !defined(H5Tget_array_dims_vers) || H5Tget_array_dims_vers == 2
+#ifndef H5Tget_array_dims_vers
+#define H5Tget_array_dims_vers 2
+#endif /* H5Tget_array_dims_vers */
+#define H5Tget_array_dims H5Tget_array_dims2
+#elif H5Tget_array_dims_vers == 1
+#define H5Tget_array_dims H5Tget_array_dims1
+#else /* H5Tget_array_dims_vers */
+#error "H5Tget_array_dims_vers set to invalid value"
+#endif /* H5Tget_array_dims_vers */
+
+#if !defined(H5Topen_vers) || H5Topen_vers == 2
+#ifndef H5Topen_vers
+#define H5Topen_vers 2
+#endif /* H5Topen_vers */
+#define H5Topen H5Topen2
+#elif H5Topen_vers == 1
+#define H5Topen H5Topen1
+#else /* H5Topen_vers */
+#error "H5Topen_vers set to invalid value"
+#endif /* H5Topen_vers */
+
+/************/
+/* Typedefs */
+/************/
+
+#if !defined(H5E_auto_t_vers) || H5E_auto_t_vers == 2
+#ifndef H5E_auto_t_vers
+#define H5E_auto_t_vers 2
+#endif /* H5E_auto_t_vers */
+#define H5E_auto_t H5E_auto2_t
+#elif H5E_auto_t_vers == 1
+#define H5E_auto_t H5E_auto1_t
+#else /* H5E_auto_t_vers */
+#error "H5E_auto_t_vers set to invalid value"
+#endif /* H5E_auto_t_vers */
+
+
+#if !defined(H5Z_class_t_vers) || H5Z_class_t_vers == 2
+#ifndef H5Z_class_t_vers
+#define H5Z_class_t_vers 2
+#endif /* H5Z_class_t_vers */
+#define H5Z_class_t H5Z_class2_t
+#elif H5Z_class_t_vers == 1
+#define H5Z_class_t H5Z_class1_t
+#else /* H5Z_class_t_vers */
+#error "H5Z_class_t_vers set to invalid value"
+#endif /* H5Z_class_t_vers */
+
+#endif /* H5version_H */
+
diff --git a/Resources/windows-libs/HDF5/include/SZconfig.h b/Resources/windows-libs/HDF5/include/SZconfig.h
new file mode 100644
index 0000000000000000000000000000000000000000..6e7766e5ebb212cbcdaf8899340523380d6aeb70
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/SZconfig.h
@@ -0,0 +1,79 @@
+/* SZconfig.h.in.  */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H */
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+/* #undef HAVE_DOPRNT */
+
+/* Define if encoding is enabled */
+#define HAVE_ENCODING 1
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+/* #undef HAVE_INTTYPES_H */
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `memset' function. */
+/* #undef HAVE_MEMSET */
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+/* #undef HAVE_STRINGS_H */
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+/* #undef HAVE_UNISTD_H */
+
+/* Define to 1 if you have the `vprintf' function. */
+/* #undef HAVE_VPRINTF */
+
+/* Name of package */
+#define SZIP_PACKAGE "szip"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define SZIP_PACKAGE_BUGREPORT "help@hdfgroup.org"
+
+/* Define to the full name of this package. */
+#define SZIP_PACKAGE_NAME "SZIP"
+
+/* Define to the full name and version of this package. */
+#define SZIP_PACKAGE_STRING "SZIP 2.1"
+
+/* Define to the one symbol short name of this package. */
+#define SZIP_PACKAGE_TARNAME "szip"
+
+/* Define to the version of this package. */
+#define SZIP_PACKAGE_VERSION "2.1"
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Version number of package */
+#define VERSION "2.1"
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */
+
+/* Define if cmake is used and building dynamic libraries */
+#define SZ_BUILT_AS_DYNAMIC_LIB 1
diff --git a/Resources/windows-libs/HDF5/include/h5_dble_interface.mod b/Resources/windows-libs/HDF5/include/h5_dble_interface.mod
new file mode 100644
index 0000000000000000000000000000000000000000..4e1b9b1d7538c829ffba6327e256f2a18678f0da
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5_dble_interface.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5a.mod b/Resources/windows-libs/HDF5/include/h5a.mod
new file mode 100644
index 0000000000000000000000000000000000000000..0aa7f05e4fce1141e777d21bc86a8dc12cfd3def
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5a.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5a_provisional.mod b/Resources/windows-libs/HDF5/include/h5a_provisional.mod
new file mode 100644
index 0000000000000000000000000000000000000000..1c2bf82c1279283a5901cea3caf674dcff17d87d
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5a_provisional.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5d.mod b/Resources/windows-libs/HDF5/include/h5d.mod
new file mode 100644
index 0000000000000000000000000000000000000000..77303acbca928abd8c673607bf1d224e3a07ef30
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5d.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5d_provisional.mod b/Resources/windows-libs/HDF5/include/h5d_provisional.mod
new file mode 100644
index 0000000000000000000000000000000000000000..c0d733d64673c0a863582e144fb37d3ba2f8d121
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5d_provisional.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5diff.h b/Resources/windows-libs/HDF5/include/h5diff.h
new file mode 100644
index 0000000000000000000000000000000000000000..04b640f731671232899979d0822d4c5e72f796df
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/h5diff.h
@@ -0,0 +1,200 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5DIFF_H__
+#define H5DIFF_H__
+
+#include "hdf5.h"
+#include "h5trav.h"
+
+/*
+ * Debug printf macros. The prefix allows output filtering by test scripts.
+ */
+#ifdef H5DIFF_DEBUG
+#define h5difftrace(x) HDfprintf(stderr, "h5diff debug: " x)
+#define h5diffdebug2(x1, x2) HDfprintf(stderr, "h5diff debug: " x1, x2)
+#define h5diffdebug3(x1, x2, x3) HDfprintf(stderr, "h5diff debug: " x1, x2, x3)
+#define h5diffdebug4(x1, x2, x3, x4) HDfprintf(stderr, "h5diff debug: " x1, x2, x3, x4)
+#define h5diffdebug5(x1, x2, x3, x4, x5) HDfprintf(stderr, "h5diff debug: " x1, x2, x3, x4, x5)
+#else
+#define h5difftrace(x)
+#define h5diffdebug2(x1, x2)
+#define h5diffdebug3(x1, x2, x3)
+#define h5diffdebug4(x1, x2, x3, x4)
+#define h5diffdebug5(x1, x2, x3, x4, x5)
+#endif
+
+#define MAX_FILENAME 1024
+
+/*-------------------------------------------------------------------------
+ * This is used to pass multiple args into diff().
+ * Passing this instead of several each arg provides smoother extensibility 
+ * through its members along with MPI code for ph5diff
+ * as it doesn't require interface change.
+ *------------------------------------------------------------------------*/
+typedef struct {
+    h5trav_type_t   type[2];
+    hbool_t is_same_trgobj;
+} diff_args_t;
+/*-------------------------------------------------------------------------
+ * command line options
+ *-------------------------------------------------------------------------
+ */
+/* linked list to keep exclude path list */
+struct exclude_path_list {
+    char  *obj_path;
+    h5trav_type_t obj_type;
+    struct exclude_path_list * next;
+};
+
+typedef struct {
+    int      m_quiet;               /* quiet mide: no output at all */
+    int      m_report;              /* report mode: print the data */
+    int      m_verbose;             /* verbose mode: print the data, list of objcets, warnings */
+    int      m_verbose_level;       /* control verbose details */
+    int      d;                     /* delta, absolute value to compare */
+    double   delta;                 /* delta value */
+    int      p;                     /* relative error to compare*/
+    int      use_system_epsilon;    /* flag to use system epsilon (1 or 0) */
+    double   percent;               /* relative error value */
+    int      n;                     /* count, compare up to count */
+    hsize_t  count;                 /* count value */
+    hbool_t  follow_links;          /* follow symbolic links */
+    int      no_dangle_links;       /* return error when find dangling link */
+    int      err_stat;              /* an error ocurred (1, error, 0, no error) */
+    int      cmn_objs;              /* do we have common objects */
+    int      not_cmp;               /* are the objects comparable */
+    int      contents;              /* equal contents */
+    int      do_nans;               /* consider Nans while diffing floats */
+    int      m_list_not_cmp;        /* list not comparable messages */
+    int      exclude_path;          /* exclude path to an object */
+    struct   exclude_path_list * exclude; /* keep exclude path list */
+} diff_opt_t;
+
+
+/*-------------------------------------------------------------------------
+ * public functions
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5TOOLS_DLL hsize_t  h5diff(const char *fname1,
+                const char *fname2,
+                const char *objname1,
+                const char *objname2,
+                diff_opt_t *options);
+
+H5TOOLS_DLL hsize_t diff( hid_t      file1_id,
+              const char *path1,
+              hid_t      file2_id,
+              const char *path2,
+              diff_opt_t *options,
+              diff_args_t *argdata);
+
+#ifdef H5_HAVE_PARALLEL
+H5TOOLS_DLL void phdiff_dismiss_workers(void);
+H5TOOLS_DLL void print_manager_output(void);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+/*-------------------------------------------------------------------------
+ * private functions
+ *-------------------------------------------------------------------------
+ */
+
+
+hsize_t diff_dataset( hid_t file1_id,
+                      hid_t file2_id,
+                      const char *obj1_name,
+                      const char *obj2_name,
+                      diff_opt_t *options);
+
+hsize_t diff_datasetid( hid_t dset1_id,
+                        hid_t dset2_id,
+                        const char *obj1_name,
+                        const char *obj2_name,
+                        diff_opt_t *options);
+
+
+hsize_t diff_match( hid_t file1_id, const char *grp1, trav_info_t *info1,
+                    hid_t file2_id, const char *grp2, trav_info_t *info2,
+                    trav_table_t *table, diff_opt_t *options );
+
+hsize_t diff_array( void *_mem1,
+                    void *_mem2,
+                    hsize_t nelmts,
+                    hsize_t hyper_start,
+                    int rank,
+                    hsize_t *dims,
+                    diff_opt_t *options,
+                    const char *name1,
+                    const char *name2,
+                    hid_t m_type,
+                    hid_t container1_id,
+                    hid_t container2_id); /* dataset where the reference came from*/
+
+
+int diff_can_type( hid_t       f_type1, /* file data type */
+                   hid_t       f_type2, /* file data type */
+                   int         rank1,
+                   int         rank2,
+                   hsize_t     *dims1,
+                   hsize_t     *dims2,
+                   hsize_t     *maxdim1,
+                   hsize_t     *maxdim2,
+                   const char  *obj1_name,
+                   const char  *obj2_name,
+                   diff_opt_t  *options,
+                   int         is_compound);
+
+
+hsize_t diff_attr(hid_t loc1_id,
+                  hid_t loc2_id,
+                  const char *path1,
+                  const char *path2,
+                  diff_opt_t *options);
+
+
+/*-------------------------------------------------------------------------
+ * utility functions
+ *-------------------------------------------------------------------------
+ */
+
+/* in h5diff_util.c */
+void        print_found(hsize_t nfound);
+void        print_type(hid_t type);
+const char* diff_basename(const char *name);
+const char* get_type(h5trav_type_t type);
+const char* get_class(H5T_class_t tclass);
+const char* get_sign(H5T_sign_t sign);
+void        print_dimensions (int rank, hsize_t *dims);
+herr_t      match_up_memsize (hid_t f_tid1_id, hid_t f_tid2_id,
+                              hid_t *m_tid1, hid_t *m_tid2, 
+                              size_t *m_size1, size_t  *m_size2);
+/* in h5diff.c */
+int         print_objname(diff_opt_t *options, hsize_t nfound);
+void        do_print_objname (const char *OBJ, const char *path1, const char *path2, diff_opt_t * opts);
+void        do_print_attrname (const char *attr, const char *path1, const char *path2);
+
+#endif  /* H5DIFF_H__ */
+
diff --git a/Resources/windows-libs/HDF5/include/h5ds.mod b/Resources/windows-libs/HDF5/include/h5ds.mod
new file mode 100644
index 0000000000000000000000000000000000000000..172462d942aa97760ec0cc90ca35cc785c93d544
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5ds.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5e.mod b/Resources/windows-libs/HDF5/include/h5e.mod
new file mode 100644
index 0000000000000000000000000000000000000000..a08fe9e00428119d11ed3f13d7b037a24c6b6cce
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5e.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5e_provisional.mod b/Resources/windows-libs/HDF5/include/h5e_provisional.mod
new file mode 100644
index 0000000000000000000000000000000000000000..4d76e2de9db85ef4111861ebdeb8412e52d6f285
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5e_provisional.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5f.mod b/Resources/windows-libs/HDF5/include/h5f.mod
new file mode 100644
index 0000000000000000000000000000000000000000..311f2778c17d73828824cb1204b9068dea0ed698
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5f.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5f_provisional.mod b/Resources/windows-libs/HDF5/include/h5f_provisional.mod
new file mode 100644
index 0000000000000000000000000000000000000000..9b2251b192673f5c306098492aa0836605bc9bfb
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5f_provisional.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5fortran_types.mod b/Resources/windows-libs/HDF5/include/h5fortran_types.mod
new file mode 100644
index 0000000000000000000000000000000000000000..ac331ec02a6761000c424776ad244fbae53f6f5b
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5fortran_types.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5g.mod b/Resources/windows-libs/HDF5/include/h5g.mod
new file mode 100644
index 0000000000000000000000000000000000000000..2c88b9c0b6018255c1abf9c91f20d1807a658e66
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5g.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5global.mod b/Resources/windows-libs/HDF5/include/h5global.mod
new file mode 100644
index 0000000000000000000000000000000000000000..55494c93b20dba4903073a360b20cbc104543ecc
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5global.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5i.mod b/Resources/windows-libs/HDF5/include/h5i.mod
new file mode 100644
index 0000000000000000000000000000000000000000..9c42da8db9acb78a37a4e57eade8f89ec7bd4e65
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5i.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5im.mod b/Resources/windows-libs/HDF5/include/h5im.mod
new file mode 100644
index 0000000000000000000000000000000000000000..49b556d6d1a82b1b3c84b072168622cdbcdd76f9
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5im.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5l.mod b/Resources/windows-libs/HDF5/include/h5l.mod
new file mode 100644
index 0000000000000000000000000000000000000000..2836de733733352c884d79ae38554ce87e34a417
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5l.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5l_provisional.mod b/Resources/windows-libs/HDF5/include/h5l_provisional.mod
new file mode 100644
index 0000000000000000000000000000000000000000..69057fc4724fb4acbebb522b22c35b46716ba902
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5l_provisional.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5lib.mod b/Resources/windows-libs/HDF5/include/h5lib.mod
new file mode 100644
index 0000000000000000000000000000000000000000..06774ced6d8257339d2667b072a3a9e86303c156
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5lib.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5lib_provisional.mod b/Resources/windows-libs/HDF5/include/h5lib_provisional.mod
new file mode 100644
index 0000000000000000000000000000000000000000..55ee636301db0016f47979a45c70bfb17c2a45fb
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5lib_provisional.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5lt.mod b/Resources/windows-libs/HDF5/include/h5lt.mod
new file mode 100644
index 0000000000000000000000000000000000000000..e9a1a4a52cdb76109eaa9d1bac0a408f043b4ae2
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5lt.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5o.mod b/Resources/windows-libs/HDF5/include/h5o.mod
new file mode 100644
index 0000000000000000000000000000000000000000..e93932a94a07bd5cb4c910cb5131faf2afcaff3e
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5o.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5o_provisional.mod b/Resources/windows-libs/HDF5/include/h5o_provisional.mod
new file mode 100644
index 0000000000000000000000000000000000000000..f9f95654b2a752b78a1ff71ebb901a47703276e9
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5o_provisional.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5p.mod b/Resources/windows-libs/HDF5/include/h5p.mod
new file mode 100644
index 0000000000000000000000000000000000000000..f7364ca42ec98ba4686f940c02f22b948832b265
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5p.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5p_provisional.mod b/Resources/windows-libs/HDF5/include/h5p_provisional.mod
new file mode 100644
index 0000000000000000000000000000000000000000..cff2c6e5001ae606d7e36c388388179aa94ea428
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5p_provisional.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5r.mod b/Resources/windows-libs/HDF5/include/h5r.mod
new file mode 100644
index 0000000000000000000000000000000000000000..f54aaeafdde3c0df3bb8359611a6632c05cc0dfd
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5r.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5r_provisional.mod b/Resources/windows-libs/HDF5/include/h5r_provisional.mod
new file mode 100644
index 0000000000000000000000000000000000000000..67364ff2aa4effdb61cb1086a3ca7280502f4779
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5r_provisional.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5s.mod b/Resources/windows-libs/HDF5/include/h5s.mod
new file mode 100644
index 0000000000000000000000000000000000000000..20198fc2202697b065fdf1d219e3441689b9a489
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5s.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5t.mod b/Resources/windows-libs/HDF5/include/h5t.mod
new file mode 100644
index 0000000000000000000000000000000000000000..b07d198150effcbf9749395dc63f62d9bafa18aa
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5t.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5t_provisional.mod b/Resources/windows-libs/HDF5/include/h5t_provisional.mod
new file mode 100644
index 0000000000000000000000000000000000000000..9eea045e554de23364ee78e405b2f10d9fd47751
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5t_provisional.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5tb.mod b/Resources/windows-libs/HDF5/include/h5tb.mod
new file mode 100644
index 0000000000000000000000000000000000000000..b2a3d1f88bafab6e59bd3d9f81c414b5f4927733
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5tb.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5test_kind_sizeof_mod.mod b/Resources/windows-libs/HDF5/include/h5test_kind_sizeof_mod.mod
new file mode 100644
index 0000000000000000000000000000000000000000..9fd0b04f5a8d63917a549c28764d014d80a2359f
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5test_kind_sizeof_mod.mod differ
diff --git a/Resources/windows-libs/HDF5/include/h5tools.h b/Resources/windows-libs/HDF5/include/h5tools.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c3720b4b61a5afce56f4a95ca6ea5b2c69d883
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/h5tools.h
@@ -0,0 +1,598 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Thursday, July 23, 1998
+ *
+ * Purpose:     Support functions for the various tools.
+ */
+#ifndef H5TOOLS_H__
+#define H5TOOLS_H__
+
+#include "hdf5.h"
+#include "h5tools_error.h"
+
+#define ESCAPE_HTML             1
+#define OPT(X,S)                ((X) ? (X) : (S))
+#define OPTIONAL_LINE_BREAK     "\001"  /* Special strings embedded in the output */
+#define START_OF_DATA       0x0001
+#define END_OF_DATA     0x0002
+
+/* format for hsize_t */
+#define HSIZE_T_FORMAT   "%" H5_PRINTF_LL_WIDTH "u"
+
+#define H5TOOLS_DUMP_MAX_RANK     H5S_MAX_RANK
+
+/* Stream macros */
+#define FLUSHSTREAM(S)           if(S != NULL) HDfflush(S)
+#define PRINTSTREAM(S, F, ...)   if(S != NULL) HDfprintf(S, F, __VA_ARGS__)
+#define PRINTVALSTREAM(S, V)   if(S != NULL) HDfprintf(S, V)
+#define PUTSTREAM(X,S)          if(S != NULL) HDfputs(X, S);
+
+/*
+ * Strings for output - these were duplicated from the h5dump.h
+ * file in order to support region reference data display
+ */
+#define ATTRIBUTE       "ATTRIBUTE"
+#define BLOCK           "BLOCK"
+#define SUPER_BLOCK     "SUPER_BLOCK"
+#define COMPRESSION     "COMPRESSION"
+#define CONCATENATOR    "//"
+#define COMPLEX         "COMPLEX"
+#define COUNT           "COUNT"
+#define CSET            "CSET"
+#define CTYPE           "CTYPE"
+#define DATA            "DATA"
+#define DATASPACE       "DATASPACE"
+#define EXTERNAL        "EXTERNAL"
+#define FILENO          "FILENO"
+#define HARDLINK        "HARDLINK"
+#define NLINK           "NLINK"
+#define OBJID           "OBJECTID"
+#define OBJNO           "OBJNO"
+#define S_SCALAR        "SCALAR"
+#define S_SIMPLE        "SIMPLE"
+#define S_NULL          "NULL"
+#define SOFTLINK        "SOFTLINK"
+#define EXTLINK         "EXTERNAL_LINK"
+#define UDLINK          "USERDEFINED_LINK"
+#define START           "START"
+#define STRIDE          "STRIDE"
+#define STRSIZE         "STRSIZE"
+#define STRPAD          "STRPAD"
+#define SUBSET          "SUBSET"
+#define FILTERS         "FILTERS"
+#define DEFLATE         "COMPRESSION DEFLATE"
+#define DEFLATE_LEVEL   "LEVEL"
+#define SHUFFLE         "PREPROCESSING SHUFFLE"
+#define FLETCHER32      "CHECKSUM FLETCHER32"
+#define SZIP            "COMPRESSION SZIP"
+#define NBIT            "COMPRESSION NBIT"
+#define SCALEOFFSET            "COMPRESSION SCALEOFFSET"
+#define SCALEOFFSET_MINBIT            "MIN BITS"
+#define STORAGE_LAYOUT  "STORAGE_LAYOUT"
+#define CONTIGUOUS      "CONTIGUOUS"
+#define COMPACT         "COMPACT"
+#define CHUNKED         "CHUNKED"
+#define EXTERNAL_FILE   "EXTERNAL_FILE"
+#define FILLVALUE       "FILLVALUE"
+#define FILE_CONTENTS   "FILE_CONTENTS"
+#define PACKED_BITS     "PACKED_BITS"
+#define PACKED_OFFSET   "OFFSET"
+#define PACKED_LENGTH   "LENGTH"
+
+#define BEGIN           "{"
+#define END             "}"
+
+/*
+ * dump structure for output - this was duplicated from the h5dump.h
+ * file in order to support region reference data display
+ */
+typedef struct h5tools_dump_header_t {
+    const char *name;
+    const char *filebegin;
+    const char *fileend;
+    const char *bootblockbegin;
+    const char *bootblockend;
+    const char *groupbegin;
+    const char *groupend;
+    const char *datasetbegin;
+    const char *datasetend;
+    const char *attributebegin;
+    const char *attributeend;
+    const char *datatypebegin;
+    const char *datatypeend;
+    const char *dataspacebegin;
+    const char *dataspaceend;
+    const char *databegin;
+    const char *dataend;
+    const char *softlinkbegin;
+    const char *softlinkend;
+    const char *extlinkbegin;
+    const char *extlinkend;
+    const char *udlinkbegin;
+    const char *udlinkend;
+    const char *subsettingbegin;
+    const char *subsettingend;
+    const char *startbegin;
+    const char *startend;
+    const char *stridebegin;
+    const char *strideend;
+    const char *countbegin;
+    const char *countend;
+    const char *blockbegin;
+    const char *blockend;
+
+    const char *fileblockbegin;
+    const char *fileblockend;
+    const char *bootblockblockbegin;
+    const char *bootblockblockend;
+    const char *groupblockbegin;
+    const char *groupblockend;
+    const char *datasetblockbegin;
+    const char *datasetblockend;
+    const char *attributeblockbegin;
+    const char *attributeblockend;
+    const char *datatypeblockbegin;
+    const char *datatypeblockend;
+    const char *dataspaceblockbegin;
+    const char *dataspaceblockend;
+    const char *datablockbegin;
+    const char *datablockend;
+    const char *softlinkblockbegin;
+    const char *softlinkblockend;
+    const char *extlinkblockbegin;
+    const char *extlinkblockend;
+    const char *udlinkblockbegin;
+    const char *udlinkblockend;
+    const char *strblockbegin;
+    const char *strblockend;
+    const char *enumblockbegin;
+    const char *enumblockend;
+    const char *structblockbegin;
+    const char *structblockend;
+    const char *vlenblockbegin;
+    const char *vlenblockend;
+    const char *subsettingblockbegin;
+    const char *subsettingblockend;
+    const char *startblockbegin;
+    const char *startblockend;
+    const char *strideblockbegin;
+    const char *strideblockend;
+    const char *countblockbegin;
+    const char *countblockend;
+    const char *blockblockbegin;
+    const char *blockblockend;
+
+    const char *dataspacedescriptionbegin;
+    const char *dataspacedescriptionend;
+    const char *dataspacedimbegin;
+    const char *dataspacedimend;
+
+} h5tools_dump_header_t;
+
+/*
+ * Information about how to format output.
+ */
+typedef struct h5tool_format_t {
+    /*
+     * Fields associated with formatting numeric data.  If a datatype matches
+     * multiple formats based on its size, then the first applicable format
+     * from this list is used. However, if `raw' is non-zero then dump all
+     * data in hexadecimal format without translating from what appears on
+     * disk.
+     *
+     *   raw:        If set then print all data as hexadecimal without
+     *               performing any conversion from disk.
+     *
+     *   fmt_raw:    The printf() format for each byte of raw data. The
+     *               default is `%02x'.
+     *
+     *   fmt_int:    The printf() format to use when rendering data which is
+     *               typed `int'. The default is `%d'.
+     *
+     *   fmt_uint:   The printf() format to use when rendering data which is
+     *               typed `unsigned'. The default is `%u'.
+     *
+     *   fmt_schar:  The printf() format to use when rendering data which is
+     *               typed `signed char'. The default is `%d'. This format is
+     *               used ony if the `ascii' field is zero.
+     *
+     *   fmt_uchar:  The printf() format to use when rendering data which is
+     *               typed `unsigned char'. The default is `%u'. This format
+     *               is used only if the `ascii' field is zero.
+     *
+     *   fmt_short:  The printf() format to use when rendering data which is
+     *               typed `short'. The default is `%d'.
+     *
+     *   fmt_ushort: The printf() format to use when rendering data which is
+     *               typed `unsigned short'. The default is `%u'.
+     *
+     *   fmt_long:   The printf() format to use when rendering data which is
+     *               typed `long'. The default is `%ld'.
+     *
+     *   fmt_ulong:  The printf() format to use when rendering data which is
+     *               typed `unsigned long'. The default is `%lu'.
+     *
+     *   fmt_llong:  The printf() format to use when rendering data which is
+     *               typed `long long'. The default depends on what printf()
+     *               format is available to print this datatype.
+     *
+     *   fmt_ullong: The printf() format to use when rendering data which is
+     *               typed `unsigned long long'. The default depends on what
+     *               printf() format is available to print this datatype.
+     *
+     *   fmt_double: The printf() format to use when rendering data which is
+     *               typed `double'. The default is `%g'.
+     *
+     *   fmt_float:  The printf() format to use when rendering data which is
+     *               typed `float'. The default is `%g'.
+     *
+     *   ascii:      If set then print 1-byte integer values as an ASCII
+     *               character (no quotes).  If the character is one of the
+     *               standard C escapes then print the escaped version.  If
+     *               the character is unprintable then print a 3-digit octal
+     *               escape.  If `ascii' is zero then then 1-byte integers are
+     *               printed as numeric values.  The default is zero.
+     *
+     *   str_locale: Determines how strings are printed. If zero then strings
+     *               are printed like in C except. If set to ESCAPE_HTML then
+     *               strings are printed using HTML encoding where each
+     *               character not in the class [a-zA-Z0-9] is substituted
+     *               with `%XX' where `X' is a hexadecimal digit.
+     *
+     *   str_repeat: If set to non-zero then any character value repeated N
+     *               or more times is printed as 'C'*N
+     *
+     * Numeric data is also subject to the formats for individual elements.
+     */
+    hbool_t     raw;
+    const char  *fmt_raw;
+    const char  *fmt_int;
+    const char  *fmt_uint;
+    const char  *fmt_schar;
+    const char  *fmt_uchar;
+    const char  *fmt_short;
+    const char  *fmt_ushort;
+    const char  *fmt_long;
+    const char  *fmt_ulong;
+    const char  *fmt_llong;
+    const char  *fmt_ullong;
+    const char  *fmt_double;
+    const char  *fmt_float;
+    int         ascii;
+    int         str_locale;
+    int         str_repeat;
+
+    /*
+     * Fields associated with compound array members.
+     *
+     *   pre:       A string to print at the beginning of each array. The
+     *              default value is the left square bracket `['.
+     *
+     *   sep:       A string to print between array values.  The default
+     *              value is a ",\001" ("\001" indicates an optional line
+     *              break).
+     *
+     *   suf:       A string to print at the end of each array.  The default
+     *              value is a right square bracket `]'.
+     *
+     *   linebreaks: a boolean value to determine if we want to break the line
+     *               after each row of an array.
+     */
+    const char  *arr_pre;
+    const char  *arr_sep;
+    const char  *arr_suf;
+    int         arr_linebreak;
+
+    /*
+     * Fields associated with compound data types.
+     *
+     *   name:      How the name of the struct member is printed in the
+     *              values. By default the name is not printed, but a
+     *              reasonable setting might be "%s=" which prints the name
+     *              followed by an equal sign and then the value.
+     *
+     *   sep:       A string that separates one member from another.  The
+     *              default is ", \001" (the \001 indicates an optional
+     *              line break to allow structs to span multiple lines of
+     *              output).
+     *
+     *   pre:       A string to print at the beginning of a compound type.
+     *              The default is a left curly brace.
+     *
+     *   suf:       A string to print at the end of each compound type.  The
+     *              default is  right curly brace.
+     *
+     *   end:       a string to print after we reach the last element of
+     *              each compound type. prints out before the suf.
+     */
+    const char  *cmpd_name;
+    const char  *cmpd_sep;
+    const char  *cmpd_pre;
+    const char  *cmpd_suf;
+    const char  *cmpd_end;
+
+    /*
+     * Fields associated with vlen data types.
+     *
+     *   sep:       A string that separates one member from another.  The
+     *              default is ", \001" (the \001 indicates an optional
+     *              line break to allow structs to span multiple lines of
+     *              output).
+     *
+     *   pre:       A string to print at the beginning of a vlen type.
+     *              The default is a left parentheses.
+     *
+     *   suf:       A string to print at the end of each vlen type.  The
+     *              default is a right parentheses.
+     *
+     *   end:       a string to print after we reach the last element of
+     *              each compound type. prints out before the suf.
+     */
+    const char  *vlen_sep;
+    const char  *vlen_pre;
+    const char  *vlen_suf;
+    const char  *vlen_end;
+
+    /*
+     * Fields associated with the individual elements.
+     *
+     *   fmt:       A printf(3c) format to use to print the value string
+     *              after it has been rendered.  The default is "%s".
+     *
+     *   suf1:      This string is appended to elements which are followed by
+     *              another element whether the following element is on the
+     *              same line or the next line.  The default is a comma.
+     *
+     *   suf2:      This string is appended (after `suf1') to elements which
+     *              are followed on the same line by another element.  The
+     *              default is a single space.
+     */
+    const char  *elmt_fmt;
+    const char  *elmt_suf1;
+    const char  *elmt_suf2;
+
+    /*
+     * Fields associated with the index values printed at the left edge of
+     * each line of output.
+     *
+     *   n_fmt:     Each index value is printed according to this printf(3c)
+     *              format string which should include a format for a long
+     *              integer.  The default is "%lu".
+     *
+     *   sep:       Each integer in the index list will be separated from the
+     *              others by this string, which defaults to a comma.
+     *
+     *   fmt:       After the index values are formated individually and
+     *              separated from one another by some string, the entire
+     *              resulting string will be formated according to this
+     *              printf(3c) format which should include a format for a
+     *              character string.  The default is "%s".
+     */
+    const char  *idx_n_fmt;             /*index number format           */
+    const char  *idx_sep;               /*separator between numbers     */
+    const char  *idx_fmt;               /*entire index format           */
+
+    /*
+     * Fields associated with entire lines.
+     *
+     *   ncols:     Number of columns per line defaults to 80.
+     *
+     *   per_line:  If this field has a positive value then every Nth element
+     *              will be printed at the beginning of a line.
+     *
+     *   pre:       Each line of output contains an optional prefix area
+     *              before the data. This area can contain the index for the
+     *              first datum (represented by `%s') as well as other
+     *              constant text.  The default value is `%s'.
+     *
+     *   1st:       This is the format to print at the beginning of the first
+     *              line of output. The default value is the current value of
+     *              `pre' described above.
+     *
+     *   cont:      This is the format to print at the beginning of each line
+     *              which was continued because the line was split onto
+     *              multiple lines. This often happens with compound
+     *              data which is longer than one line of output. The default
+     *              value is the current value of the `pre' field
+     *              described above.
+     *
+     *   suf:       This character string will be appended to each line of
+     *              output.  It should not contain line feeds.  The default
+     *              is the empty string.
+     *
+     *   sep:       A character string to be printed after every line feed
+     *              defaulting to the empty string.  It should end with a
+     *              line feed.
+     *
+     *   multi_new: Indicates the algorithm to use when data elements tend to
+     *              occupy more than one line of output. The possible values
+     *              are (zero is the default):
+     *
+     *              0:  No consideration. Each new element is printed
+     *                  beginning where the previous element ended.
+     *
+     *              1:  Print the current element beginning where the
+     *                  previous element left off. But if that would result
+     *                  in the element occupying more than one line and it
+     *                  would only occupy one line if it started at the
+     *                  beginning of a line, then it is printed at the
+     *                  beginning of the next line.
+     *
+     *   multi_new: If an element is continued onto additional lines then
+     *              should the following element begin on the next line? The
+     *              default is to start the next element on the same line
+     *              unless it wouldn't fit.
+     *
+     * indentlevel: a string that shows how far to indent if extra spacing
+     *              is needed. dumper uses it.
+     */
+    unsigned    line_ncols;             /*columns of output             */
+    size_t      line_per_line;          /*max elements per line         */
+    const char  *line_pre;              /*prefix at front of each line  */
+    const char  *line_1st;              /*alternate pre. on first line  */
+    const char  *line_cont;             /*alternate pre. on continuation*/
+    const char  *line_suf;              /*string to append to each line */
+    const char  *line_sep;              /*separates lines               */
+    int         line_multi_new;         /*split multi-line outputs?     */
+    const char  *line_indent;           /*for extra identation if we need it*/
+
+    /*used to skip the first set of checks for line length*/
+    int skip_first;
+
+    /*flag used to hide or show the file number for obj refs*/
+    int obj_hidefileno;
+
+    /*string used to format the output for the obje refs*/
+    const char *obj_format;
+
+    /*flag used to hide or show the file number for dataset regions*/
+    int dset_hidefileno;
+
+    /*string used to format the output for the dataset regions*/
+    const char *dset_format;
+
+    const char *dset_blockformat_pre;
+    const char *dset_ptformat_pre;
+    const char *dset_ptformat;
+
+    /*print array indices in output matrix */
+    int pindex;
+
+    /*escape non printable characters */
+    int do_escape;
+
+} h5tool_format_t;
+
+typedef struct h5tools_context_t {
+    size_t cur_column;                       /*current column for output */
+    size_t cur_elmt;                         /*current element/output line */
+    int  need_prefix;                        /*is line prefix needed? */
+    unsigned ndims;                          /*dimensionality  */
+    hsize_t p_min_idx[H5S_MAX_RANK];         /*min selected index */
+    hsize_t p_max_idx[H5S_MAX_RANK];         /*max selected index */
+    int  prev_multiline;                     /*was prev datum multiline? */
+    size_t prev_prefix_len;                  /*length of previous prefix */
+    int  continuation;                       /*continuation of previous data?*/
+    hsize_t size_last_dim;                   /*the size of the last dimension,
+                                              *needed so we can break after each
+                                              *row */
+    int  indent_level;                 /*the number of times we need some
+                                       *extra indentation */
+    int  default_indent_level;        /*this is used when the indent level gets changed */
+    hsize_t acc[H5S_MAX_RANK];        /* accumulator position */
+    hsize_t pos[H5S_MAX_RANK];        /* matrix position */
+    hsize_t sm_pos;                   /* current stripmine element position */
+} h5tools_context_t;
+
+typedef struct subset_d {
+    hsize_t     *data;
+    unsigned int len;
+} subset_d;
+
+/* a structure to hold the subsetting particulars for a dataset */
+struct subset_t {
+    subset_d start;
+    subset_d stride;
+    subset_d count;
+    subset_d block;
+};
+
+/* The following include, h5tools_str.h, must be after the
+ * above stucts are defined. There is a dependency in the following
+ * include that hasn't been identified yet. */
+
+#include "h5tools_str.h"
+
+H5TOOLS_DLLVAR h5tool_format_t h5tools_dataformat;
+H5TOOLS_DLLVAR const h5tools_dump_header_t h5tools_standardformat;
+H5TOOLS_DLLVAR const h5tools_dump_header_t* h5tools_dump_header_format;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5TOOLS_DLLVAR int     packed_bits_num;     /* number of packed bits to display */
+H5TOOLS_DLLVAR int     packed_data_offset;  /* offset of packed bits to display */
+H5TOOLS_DLLVAR int     packed_data_length; /* lengtht of packed bits to display */
+H5TOOLS_DLLVAR unsigned long long packed_data_mask;  /* mask in which packed bits to display */
+H5TOOLS_DLLVAR FILE   *rawattrstream;       /* output stream for raw attribute data */
+H5TOOLS_DLLVAR FILE   *rawdatastream;       /* output stream for raw data */
+H5TOOLS_DLLVAR FILE   *rawinstream;         /* input stream for raw input */
+H5TOOLS_DLLVAR FILE   *rawoutstream;        /* output stream for raw output */
+H5TOOLS_DLLVAR FILE   *rawerrorstream;      /* output stream for raw error */
+H5TOOLS_DLLVAR int     bin_output;          /* binary output */
+H5TOOLS_DLLVAR int     bin_form;            /* binary form */
+H5TOOLS_DLLVAR int     region_output;       /* region output */
+H5TOOLS_DLLVAR int     oid_output;          /* oid output */
+H5TOOLS_DLLVAR int     data_output;         /* data output */
+H5TOOLS_DLLVAR int     attr_data_output;    /* attribute data output */
+
+/* Strings for output */
+#define H5_TOOLS_GROUP           "GROUP"
+#define H5_TOOLS_DATASET         "DATASET"
+#define H5_TOOLS_DATATYPE        "DATATYPE"
+
+/* Definitions of useful routines */
+H5TOOLS_DLL void    h5tools_init(void);
+H5TOOLS_DLL void    h5tools_close(void);
+H5TOOLS_DLL int 	h5tools_set_data_output_file(const char *fname, int is_bin);
+H5TOOLS_DLL int 	h5tools_set_attr_output_file(const char *fname, int is_bin);
+H5TOOLS_DLL int 	h5tools_set_input_file(const char *fname, int is_bin);
+H5TOOLS_DLL int 	h5tools_set_output_file(const char *fname, int is_bin);
+H5TOOLS_DLL int 	h5tools_set_error_file(const char *fname, int is_bin);
+H5TOOLS_DLL hid_t   h5tools_fopen(const char *fname, unsigned flags, hid_t fapl,
+                            const char *driver, char *drivername, size_t drivername_len);
+H5TOOLS_DLL hid_t   h5tools_get_native_type(hid_t type);
+H5TOOLS_DLL hid_t   h5tools_get_little_endian_type(hid_t type);
+H5TOOLS_DLL hid_t   h5tools_get_big_endian_type(hid_t type);
+H5TOOLS_DLL htri_t  h5tools_detect_vlen(hid_t tid);
+H5TOOLS_DLL htri_t  h5tools_detect_vlen_str(hid_t tid);
+H5TOOLS_DLL hbool_t h5tools_is_obj_same(hid_t loc_id1, const char *name1, hid_t loc_id2, const char *name2);
+H5TOOLS_DLL void    init_acc_pos(h5tools_context_t *ctx, hsize_t *dims);
+H5TOOLS_DLL hbool_t h5tools_is_zero(const void *_mem, size_t size);
+H5TOOLS_DLL int     h5tools_canreadf(const char* name,  hid_t dcpl_id);
+H5TOOLS_DLL int     h5tools_can_encode(H5Z_filter_t filtn);
+
+H5TOOLS_DLL void    h5tools_simple_prefix(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx, hsize_t elmtno, int secnum);
+H5TOOLS_DLL void    h5tools_region_simple_prefix(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx, hsize_t elmtno, hsize_t *ptdata, int secnum);
+
+H5TOOLS_DLL int     render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t nelmts);
+H5TOOLS_DLL hbool_t render_bin_output_region_blocks(hid_t region_space, hid_t region_id,
+                             FILE *stream, hid_t container);
+H5TOOLS_DLL hbool_t render_bin_output_region_points(hid_t region_space, hid_t region_id,
+                             FILE *stream, hid_t container);
+
+H5TOOLS_DLL hbool_t h5tools_render_element(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx, h5tools_str_t *buffer, hsize_t *curr_pos,
+                            size_t ncols, hsize_t local_elmt_counter, hsize_t elmt_counter);
+H5TOOLS_DLL hbool_t h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
+                h5tools_context_t *ctx/*in,out*/,
+                h5tools_str_t *buffer/*string into which to render */,
+                hsize_t *curr_pos/*total data element position*/,
+                size_t ncols, hsize_t *ptdata,
+                hsize_t local_elmt_counter/*element counter*/,
+                hsize_t elmt_counter);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H5TOOLS_H__ */
+
diff --git a/Resources/windows-libs/HDF5/include/h5tools_dump.h b/Resources/windows-libs/HDF5/include/h5tools_dump.h
new file mode 100644
index 0000000000000000000000000000000000000000..061a3db4037ff09751476311929063df3d8dded9
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/h5tools_dump.h
@@ -0,0 +1,84 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Purpose:     Support h5dump functions for the various tools.
+ */
+#ifndef H5TOOLS_DUMP_H__
+#define H5TOOLS_DUMP_H__
+
+#include "h5tools_utils.h"
+
+/* 3 private values: can't be set, but can be read.
+   Note: these are defined in H5Zprivate, they are
+   duplicated here.
+ */
+#define H5_SZIP_LSB_OPTION_MASK         8
+#define H5_SZIP_MSB_OPTION_MASK         16
+#define H5_SZIP_RAW_OPTION_MASK         128
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5TOOLS_DLLVAR table_t *h5dump_type_table;  /*type table reference for datatype dump  */
+
+/* Definitions of useful routines */
+H5TOOLS_DLL void    h5tools_dump_init(void);
+
+H5TOOLS_DLL int     h5tools_dump_dset(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx/*in,out*/, hid_t dset,
+                            hid_t p_typ, struct subset_t *sset);
+H5TOOLS_DLL int     h5tools_dump_mem(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx/*in,out*/, hid_t obj_id,
+                            hid_t type, hid_t space, void *mem);
+H5TOOLS_DLL int     h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t container,
+                            h5tools_context_t *ctx/*in,out*/, unsigned flags,
+                            hsize_t nelmts, hid_t type, void *_mem);
+H5TOOLS_DLL void    h5tools_dump_datatype(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx/*in,out*/, hid_t type);
+H5TOOLS_DLL void    h5tools_dump_dataspace(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx/*in,out*/, hid_t space);
+H5TOOLS_DLL void    h5tools_dump_attribute(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx/*in,out*/, const char *attr_name, 
+                            hid_t attr_id, int display_index, int display_char);
+H5TOOLS_DLL void    h5tools_dump_oid(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx/*in,out*/, hid_t oid);
+H5TOOLS_DLL void    h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx/*in,out*/, hid_t dcpl, hid_t type_id, hid_t obj_id);
+H5TOOLS_DLL void    h5tools_dump_comment(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx/*in,out*/, hid_t obj_id);
+H5TOOLS_DLL void    h5tools_dump_data(FILE *stream, const h5tool_format_t *info,
+                            h5tools_context_t *ctx, hid_t obj_id,
+                            int obj_data, struct subset_t *sset, int display_index, int display_char);
+
+H5TOOLS_DLL int     h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer/*in,out*/,
+                            const h5tool_format_t *info, h5tools_context_t *ctx/*in,out*/,
+                            hid_t type, int object_search);
+H5TOOLS_DLL int     h5tools_print_dataspace(h5tools_str_t *buffer/*in,out*/,
+                            hid_t space);
+H5TOOLS_DLL int     h5tools_print_enum(FILE *stream, h5tools_str_t *buffer/*in,out*/,
+                            const h5tool_format_t *info, h5tools_context_t *ctx/*in,out*/,
+                            hid_t type);
+H5TOOLS_DLL void    h5tools_print_fill_value(h5tools_str_t *buffer/*in,out*/,
+                            const h5tool_format_t *info, h5tools_context_t *ctx/*in,out*/, 
+                            hid_t dcpl, hid_t type_id, hid_t obj_id);
+H5TOOLS_DLL void    h5tools_print_packed_bits(h5tools_str_t *buffer/*in,out*/, hid_t type);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H5TOOLS_DUMP_H__ */
+
diff --git a/Resources/windows-libs/HDF5/include/h5tools_ref.h b/Resources/windows-libs/HDF5/include/h5tools_ref.h
new file mode 100644
index 0000000000000000000000000000000000000000..7ddb91ae32aeefd2d05b4cb6c19f5eff0dcbb20a
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/h5tools_ref.h
@@ -0,0 +1,38 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5TOOLS_REF_H__
+#define H5TOOLS_REF_H__
+
+#include "hdf5.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5TOOLS_DLL herr_t      fill_ref_path_table(hid_t fid);
+H5TOOLS_DLL const char *lookup_ref_path(haddr_t ref);
+H5TOOLS_DLL int         get_next_xid(void);
+H5TOOLS_DLL haddr_t     get_fake_xid(void);
+H5TOOLS_DLL haddr_t     ref_path_table_lookup(const char *);
+H5TOOLS_DLL haddr_t     ref_path_table_gen_fake(const char *);
+H5TOOLS_DLL int         term_ref_path_table(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/Resources/windows-libs/HDF5/include/h5tools_str.h b/Resources/windows-libs/HDF5/include/h5tools_str.h
new file mode 100644
index 0000000000000000000000000000000000000000..38697c6a622fca47b815ffb617331e9fec3e82e7
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/h5tools_str.h
@@ -0,0 +1,53 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Bill Wendling <wendling@ncsa.uiuc.edu>
+ *              Monday, 19. February 2001
+ */
+#ifndef H5TOOLS_STR_H__
+#define H5TOOLS_STR_H__
+
+typedef struct h5tools_str_t {
+    char    *s;     /*allocate string       */
+    size_t  len;        /*length of actual value    */
+    size_t  nalloc;     /*allocated size of string  */
+} h5tools_str_t;
+
+H5TOOLS_DLL void     h5tools_str_close(h5tools_str_t *str);
+H5TOOLS_DLL size_t   h5tools_str_len(h5tools_str_t *str);
+H5TOOLS_DLL char    *h5tools_str_append(h5tools_str_t *str, const char *fmt, ...);
+H5TOOLS_DLL char    *h5tools_str_reset(h5tools_str_t *str);
+H5TOOLS_DLL char    *h5tools_str_trunc(h5tools_str_t *str, size_t size);
+H5TOOLS_DLL char    *h5tools_str_fmt(h5tools_str_t *str, size_t start, const char *fmt);
+H5TOOLS_DLL char    *h5tools_str_prefix(h5tools_str_t *str, const h5tool_format_t *info,
+                        hsize_t elmtno, unsigned ndims, h5tools_context_t *ctx);
+/*
+ * new functions needed to display region reference data
+ */
+H5TOOLS_DLL char    *h5tools_str_region_prefix(h5tools_str_t *str, const h5tool_format_t *info,
+                                   hsize_t elmtno, hsize_t *ptdata, unsigned ndims, 
+                                   hsize_t max_idx[], h5tools_context_t *ctx);
+H5TOOLS_DLL void     h5tools_str_dump_region_blocks(h5tools_str_t *, hid_t, const h5tool_format_t *);
+H5TOOLS_DLL void     h5tools_str_dump_region_points(h5tools_str_t *, hid_t, const h5tool_format_t *);
+H5TOOLS_DLL void     h5tools_str_sprint_region(h5tools_str_t *str, const h5tool_format_t *info, hid_t container,
+                                   void *vp);
+H5TOOLS_DLL char    *h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info,
+                                   hid_t container, hid_t type, void *vp,
+                                   h5tools_context_t *ctx);
+H5TOOLS_DLL char    *h5tools_str_replace ( const char *string, const char *substr, 
+									const char *replacement );
+
+#endif  /* H5TOOLS_STR_H__ */
diff --git a/Resources/windows-libs/HDF5/include/h5tools_utils.h b/Resources/windows-libs/HDF5/include/h5tools_utils.h
new file mode 100644
index 0000000000000000000000000000000000000000..3285278beabae8d28ef4884af9cb7a38ddcc553e
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/h5tools_utils.h
@@ -0,0 +1,183 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Bill Wendling <wendling@ncsa.uiuc.edu>
+ *              Tuesday, 6. March 2001
+ *
+ * Purpose:     Support functions for the various tools.
+ */
+#ifndef H5TOOLS_UTILS_H__
+#define H5TOOLS_UTILS_H__
+
+#include "hdf5.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ``parallel_print'' information */
+#define PRINT_DATA_MAX_SIZE     512
+#define OUTBUFF_SIZE        (PRINT_DATA_MAX_SIZE*4)
+
+H5TOOLS_DLLVAR int  g_nTasks;
+H5TOOLS_DLLVAR unsigned char g_Parallel;
+H5TOOLS_DLLVAR char    outBuff[];
+H5TOOLS_DLLVAR int  outBuffOffset;
+H5TOOLS_DLLVAR FILE *   overflow_file;
+
+/* Maximum size used in a call to malloc for a dataset */
+H5TOOLS_DLLVAR hsize_t H5TOOLS_MALLOCSIZE;
+/* size of hyperslab buffer when a dataset is bigger than H5TOOLS_MALLOCSIZE */
+H5TOOLS_DLLVAR hsize_t H5TOOLS_BUFSIZE;
+/*
+ * begin get_option section
+ */
+H5TOOLS_DLLVAR int         opt_err;     /* getoption prints errors if this is on    */
+H5TOOLS_DLLVAR int         opt_ind;     /* token pointer                            */
+H5TOOLS_DLLVAR const char *opt_arg;     /* flag argument (or value)                 */
+
+enum {
+    no_arg = 0,         /* doesn't take an argument     */
+    require_arg,        /* requires an argument          */
+    optional_arg        /* argument is optional         */
+};
+
+/*
+ * get_option determines which options are specified on the command line and
+ * returns a pointer to any arguments possibly associated with the option in
+ * the ``opt_arg'' variable. get_option returns the shortname equivalent of
+ * the option. The long options are specified in the following way:
+ *
+ * struct long_options foo[] = {
+ *   { "filename", require_arg, 'f' },
+ *   { "append", no_arg, 'a' },
+ *   { "width", require_arg, 'w' },
+ *   { NULL, 0, 0 }
+ * };
+ *
+ * Long named options can have arguments specified as either:
+ *
+ *   ``--param=arg'' or ``--param arg''
+ *
+ * Short named options can have arguments specified as either:
+ *
+ *   ``-w80'' or ``-w 80''
+ *
+ * and can have more than one short named option specified at one time:
+ *
+ *   -aw80
+ *
+ * in which case those options which expect an argument need to come at the
+ * end.
+ */
+typedef struct long_options {
+    const char  *name;          /* name of the long option              */
+    int          has_arg;       /* whether we should look for an arg    */
+    char         shortval;      /* the shortname equivalent of long arg
+                                 * this gets returned from get_option   */
+} long_options;
+
+H5TOOLS_DLL int    get_option(int argc, const char **argv, const char *opt,
+                         const struct long_options *l_opt);
+/*
+ * end get_option section
+ */
+
+/*struct taken from the dumper. needed in table struct*/
+typedef struct obj_t {
+    haddr_t objno;
+    char *objname;
+    hbool_t displayed;          /* Flag to indicate that the object has been displayed */
+    hbool_t recorded;           /* Flag for named datatypes to indicate they were found in the group hierarchy */
+} obj_t;
+
+/*struct for the tables that the find_objs function uses*/
+typedef struct table_t {
+    size_t size;
+    size_t nobjs;
+    obj_t *objs;
+} table_t;
+
+/*this struct stores the information that is passed to the find_objs function*/
+typedef struct find_objs_t {
+    hid_t fid;
+    table_t *group_table;
+    table_t *type_table;
+    table_t *dset_table;
+} find_objs_t;
+
+H5TOOLS_DLLVAR int     h5tools_nCols;               /*max number of columns for outputting  */
+
+/* Definitions of useful routines */
+H5TOOLS_DLL void     indentation(int);
+H5TOOLS_DLL void     print_version(const char *progname);
+H5TOOLS_DLL void     parallel_print(const char* format, ... );
+H5TOOLS_DLL void     error_msg(const char *fmt, ...);
+H5TOOLS_DLL void     warn_msg(const char *fmt, ...);
+H5TOOLS_DLL void     help_ref_msg(FILE *output);
+H5TOOLS_DLL void     free_table(table_t *table);
+#ifdef H5DUMP_DEBUG
+H5TOOLS_DLL void     dump_tables(find_objs_t *info)
+#endif  /* H5DUMP_DEBUG */
+H5TOOLS_DLL herr_t init_objs(hid_t fid, find_objs_t *info, table_t **group_table,
+    table_t **dset_table, table_t **type_table);
+H5TOOLS_DLL obj_t   *search_obj(table_t *temp, haddr_t objno);
+#ifndef H5_HAVE_TMPFILE
+H5TOOLS_DLL FILE *  tmpfile(void);
+#endif
+
+/*************************************************************
+ *
+ * candidate functions to be public
+ *
+ *************************************************************/
+
+/* This code is layout for common code among tools */
+typedef enum toolname_t {
+    TOOL_H5DIFF, TOOL_H5LS, TOOL__H5DUMP /* add as necessary */
+} h5tool_toolname_t;
+
+/* this struct can be used to differntiate among tools */
+typedef struct {
+    h5tool_toolname_t toolname;
+    int msg_mode;
+} h5tool_opt_t;
+
+/* obtain link info from H5tools_get_symlink_info() */
+typedef struct {
+    H5O_type_t  trg_type;  /* OUT: target type */
+    char *trg_path;        /* OUT: target obj path. This must be freed 
+                            *      when used with H5tools_get_symlink_info() */
+    haddr_t     objno;     /* OUT: target object address */
+    unsigned long  fileno; /* OUT: File number that target object is located in */
+    H5L_info_t linfo;      /* OUT: link info */
+    h5tool_opt_t opt;      /* IN: options */
+} h5tool_link_info_t;
+
+
+/* Definitions of routines */
+H5TOOLS_DLL int H5tools_get_symlink_info(hid_t file_id, const char * linkpath,
+    h5tool_link_info_t *link_info, hbool_t get_obj_type);
+H5TOOLS_DLL const char *h5tools_getprogname(void);
+H5TOOLS_DLL void     h5tools_setprogname(const char*progname);
+H5TOOLS_DLL int      h5tools_getstatus(void);
+H5TOOLS_DLL void     h5tools_setstatus(int d_status);
+H5TOOLS_DLL int h5tools_getenv_update_hyperslab_bufsize(void);
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* H5TOOLS_UTILS_H__ */
diff --git a/Resources/windows-libs/HDF5/include/h5trav.h b/Resources/windows-libs/HDF5/include/h5trav.h
new file mode 100644
index 0000000000000000000000000000000000000000..352a9e537737635b73dd9533bca5f6d13c1e7aec
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/h5trav.h
@@ -0,0 +1,199 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5TRAV_H__
+#define H5TRAV_H__
+
+#include "hdf5.h"
+
+/* Typedefs for visiting objects */
+typedef herr_t (*h5trav_obj_func_t)(const char *path_name, const H5O_info_t *oinfo,
+        const char *first_seen, void *udata);
+typedef herr_t (*h5trav_lnk_func_t)(const char *path_name, const H5L_info_t *linfo,
+        void *udata);
+
+/*-------------------------------------------------------------------------
+ * public enum to specify type of an object
+ * the TYPE can be:
+ *    H5TRAV_TYPE_UNKNOWN = -1,
+ *    H5TRAV_TYPE_GROUP,            Object is a group
+ *    H5TRAV_TYPE_DATASET,          Object is a dataset
+ *    H5TRAV_TYPE_TYPE,             Object is a named datatype
+ *    H5TRAV_TYPE_LINK,             Object is a symbolic link
+ *    H5TRAV_TYPE_UDLINK,           Object is a user-defined link
+ *-------------------------------------------------------------------------
+ */
+typedef enum {
+    H5TRAV_TYPE_UNKNOWN = -1,        /* Unknown object type */
+    H5TRAV_TYPE_GROUP,          /* Object is a group */
+    H5TRAV_TYPE_DATASET,        /* Object is a dataset */
+    H5TRAV_TYPE_NAMED_DATATYPE, /* Object is a named datatype */
+    H5TRAV_TYPE_LINK,           /* Object is a symbolic link */
+    H5TRAV_TYPE_UDLINK          /* Object is a user-defined link */
+} h5trav_type_t;
+
+/*-------------------------------------------------------------------------
+ * public struct to store name and type of an object
+ *-------------------------------------------------------------------------
+ */
+/* Struct to keep track of symbolic link targets visited.
+ * Functions: symlink_visit_add() and symlink_is_visited()
+ */
+typedef struct symlink_trav_path_t {
+    H5L_type_t  type;
+    char *file;
+    char *path;
+} symlink_trav_path_t;
+
+typedef struct symlink_trav_t {
+    size_t      nalloc;
+    size_t      nused;
+    symlink_trav_path_t *objs;
+    hbool_t dangle_link;
+} symlink_trav_t;
+
+typedef struct trav_path_t {
+    char      *path;
+    h5trav_type_t type;
+    haddr_t     objno;     /* object address */
+    unsigned long 	fileno; /* File number that object is located in */
+} trav_path_t;
+
+typedef struct trav_info_t {
+    size_t      nalloc;
+    size_t      nused;
+    const char *fname;
+    hid_t fid;                          /* File ID */
+    trav_path_t *paths;
+    symlink_trav_t symlink_visited;     /* already visited symbolic links */
+    void * opts;                        /* optional data passing */
+} trav_info_t;
+
+
+/*-------------------------------------------------------------------------
+ * keep record of hard link information
+ *-------------------------------------------------------------------------
+ */
+typedef struct trav_link_t {
+    char      *new_name;
+} trav_link_t;
+
+
+/*-------------------------------------------------------------------------
+ * struct to store basic info needed for the h5trav table traversal algorythm
+ *-------------------------------------------------------------------------
+ */
+
+typedef struct trav_obj_t {
+    haddr_t     objno;     /* object address */
+    unsigned    flags[2];  /* h5diff.object is present or not in both files*/
+    hbool_t     is_same_trgobj; /* same target object? no need to compare */
+    char        *name;     /* name */
+    h5trav_type_t type;    /* type of object */
+    trav_link_t *links;    /* array of possible link names */
+    size_t      sizelinks; /* size of links array */
+    size_t      nlinks;    /* number of links */
+} trav_obj_t;
+
+
+/*-------------------------------------------------------------------------
+ * private struct that stores all objects
+ *-------------------------------------------------------------------------
+ */
+
+typedef struct trav_table_t {
+    size_t      size;
+    size_t      nobjs;
+    trav_obj_t *objs;
+} trav_table_t;
+
+
+/*-------------------------------------------------------------------------
+ * public functions
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*-------------------------------------------------------------------------
+ * "h5trav general" public functions
+ *-------------------------------------------------------------------------
+ */
+H5TOOLS_DLL void h5trav_set_index(H5_index_t print_index_by, H5_iter_order_t print_index_order);
+H5TOOLS_DLL int h5trav_visit(hid_t file_id, const char *grp_name, 
+    hbool_t visit_start, hbool_t recurse, h5trav_obj_func_t visit_obj, 
+    h5trav_lnk_func_t visit_lnk, void *udata);
+H5TOOLS_DLL herr_t symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, const char *path);
+H5TOOLS_DLL hbool_t symlink_is_visited(symlink_trav_t *visited, H5L_type_t type, const char *file, const char *path);
+
+/*-------------------------------------------------------------------------
+ * "h5trav info" public functions
+ *-------------------------------------------------------------------------
+ */
+H5TOOLS_DLL int h5trav_getinfo(hid_t file_id, trav_info_t *info);
+H5TOOLS_DLL ssize_t h5trav_getindex(const trav_info_t *info, const char *obj);
+H5TOOLS_DLL int trav_info_visit_obj (const char *path, const H5O_info_t *oinfo, const char *already_visited, void *udata);
+H5TOOLS_DLL int trav_info_visit_lnk (const char *path, const H5L_info_t *linfo, void *udata);
+
+/*-------------------------------------------------------------------------
+ * "h5trav table" public functions
+ *-------------------------------------------------------------------------
+ */
+
+H5TOOLS_DLL int  h5trav_gettable(hid_t fid, trav_table_t *travt);
+H5TOOLS_DLL int  h5trav_getindext(const char *obj, const trav_table_t *travt);
+
+/*-------------------------------------------------------------------------
+ * "h5trav print" public functions
+ *-------------------------------------------------------------------------
+ */
+H5TOOLS_DLL int h5trav_print(hid_t fid);
+H5TOOLS_DLL void h5trav_set_verbose(int print_verbose);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*-------------------------------------------------------------------------
+ * info private functions
+ *-------------------------------------------------------------------------
+ */
+
+H5TOOLS_DLL void trav_info_init(const char *filename, hid_t fileid, trav_info_t **info);
+
+H5TOOLS_DLL void trav_info_free(trav_info_t *info);
+
+H5TOOLS_DLL void trav_info_add(trav_info_t *info, const char *path, h5trav_type_t obj_type);
+
+H5TOOLS_DLL void trav_fileinfo_add(trav_info_t *info, hid_t loc_id);
+
+/*-------------------------------------------------------------------------
+ * table private functions
+ *-------------------------------------------------------------------------
+ */
+
+H5TOOLS_DLL void trav_table_init(trav_table_t **table);
+
+H5TOOLS_DLL void trav_table_free(trav_table_t *table);
+
+H5TOOLS_DLL void trav_table_addflags(unsigned *flags,
+                         char *objname,
+                         h5trav_type_t type,
+                         trav_table_t *table);
+
+#endif  /* H5TRAV_H__ */
+
diff --git a/Resources/windows-libs/HDF5/include/h5z.mod b/Resources/windows-libs/HDF5/include/h5z.mod
new file mode 100644
index 0000000000000000000000000000000000000000..0a2e2be019978a16677086453c22782e10c3c80c
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/h5z.mod differ
diff --git a/Resources/windows-libs/HDF5/include/hdf5.h b/Resources/windows-libs/HDF5/include/hdf5.h
new file mode 100644
index 0000000000000000000000000000000000000000..ef150630f5f6fa8982267b531b9bbaab57104acd
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/hdf5.h
@@ -0,0 +1,55 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This is the main public HDF5 include file.  Put further information in
+ * a particular header file and include that here, don't fill this file with
+ * lots of gunk...
+ */
+#ifndef _HDF5_H
+#define _HDF5_H
+
+#include "H5public.h"
+#include "H5Apublic.h"		/* Attributes				*/
+#include "H5ACpublic.h"		/* Metadata cache			*/
+#include "H5Dpublic.h"		/* Datasets				*/
+#include "H5Epublic.h"		/* Errors				*/
+#include "H5Fpublic.h"		/* Files				*/
+#include "H5FDpublic.h"		/* File drivers				*/
+#include "H5Gpublic.h"		/* Groups				*/
+#include "H5Ipublic.h"		/* ID management			*/
+#include "H5Lpublic.h"		/* Links				*/
+#include "H5MMpublic.h"		/* Memory management			*/
+#include "H5Opublic.h"		/* Object headers			*/
+#include "H5Ppublic.h"		/* Property lists			*/
+#include "H5Rpublic.h"		/* References				*/
+#include "H5Spublic.h"		/* Dataspaces				*/
+#include "H5Tpublic.h"		/* Datatypes				*/
+#include "H5Zpublic.h"		/* Data filters				*/
+
+/* Predefined file drivers */
+#include "H5FDcore.h"		/* Files stored entirely in memory	*/
+#include "H5FDfamily.h"		/* File families 			*/
+#include "H5FDlog.h"        	/* sec2 driver with I/O logging (for debugging) */
+#include "H5FDmpi.h"            /* MPI-based file drivers		*/
+#include "H5FDmulti.h"		/* Usage-partitioned file family	*/
+#include "H5FDsec2.h"		/* POSIX unbuffered file I/O		*/
+#include "H5FDstdio.h"		/* Standard C buffered I/O		*/
+#ifdef H5_HAVE_WINDOWS
+#include "H5FDwindows.h"        /* Windows buffered I/O     */
+#endif
+#include "H5FDdirect.h"     	/* Linux direct I/O			*/
+
+#endif
diff --git a/Resources/windows-libs/HDF5/include/hdf5.mod b/Resources/windows-libs/HDF5/include/hdf5.mod
new file mode 100644
index 0000000000000000000000000000000000000000..9c084d066732f27deb19f9dd5825c02aebbd9f3f
Binary files /dev/null and b/Resources/windows-libs/HDF5/include/hdf5.mod differ
diff --git a/Resources/windows-libs/HDF5/include/hdf5_hl.h b/Resources/windows-libs/HDF5/include/hdf5_hl.h
new file mode 100644
index 0000000000000000000000000000000000000000..46439324e1c2b7b9ff7bd5d4bae3473bc032bbc5
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/hdf5_hl.h
@@ -0,0 +1,33 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This is the main public HDF5 High Level include file.  Put further
+ * information in a particular header file and include that here, don't
+ * fill this file with lots of gunk...
+ */
+
+#ifndef _HDF5_HL_H
+#define _HDF5_HL_H
+
+#include "H5DOpublic.h" /* dataset optimization */
+#include "H5DSpublic.h" /* dimension scales */
+#include "H5LTpublic.h" /* lite */
+#include "H5IMpublic.h" /* image */
+#include "H5TBpublic.h" /* table */
+#include "H5PTpublic.h" /* table */
+
+#endif /*H5_INCLUDE_HL*/
+
diff --git a/Resources/windows-libs/HDF5/include/ricehdf.h b/Resources/windows-libs/HDF5/include/ricehdf.h
new file mode 100644
index 0000000000000000000000000000000000000000..c1be7a20fa4b1790cd7f64467f854f64de8a6b68
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/ricehdf.h
@@ -0,0 +1,86 @@
+/*==============================================================================
+The SZIP Science Data Lossless Compression Program is Copyright (C) 2001 Science
+& Technology Corporation @ UNM.  All rights released.  Copyright (C) 2003 Lowell
+H. Miles and Jack A. Venbrux.  Licensed to ICs Corp. for distribution by the
+University of Illinois' National Center for Supercomputing Applications as a
+part of the HDF data storage and retrieval file format and software library
+products package.  All rights reserved.  Do not modify or use for other
+purposes.
+
+SZIP implements an extended Rice adaptive lossless compression algorithm
+for sample data.  The primary algorithm was developed by R. F. Rice at
+Jet Propulsion Laboratory.  
+
+SZIP embodies certain inventions patented by the National Aeronautics &
+Space Administration.  United States Patent Nos. 5,448,642, 5,687,255,
+and 5,822,457 have been licensed to ICs Corp. for distribution with the
+HDF data storage and retrieval file format and software library products.
+All rights reserved.
+
+Revocable (in the event of breach by the user or if required by law), 
+royalty-free, nonexclusive sublicense to use SZIP decompression software 
+routines and underlying patents is hereby granted by ICs Corp. to all users 
+of and in conjunction with HDF data storage and retrieval file format and 
+software library products.
+
+Revocable (in the event of breach by the user or if required by law), 
+royalty-free, nonexclusive sublicense to use SZIP compression software 
+routines and underlying patents for non-commercial, scientific use only 
+is hereby granted by ICs Corp. to users of and in conjunction with HDF 
+data storage and retrieval file format and software library products.
+
+For commercial use license to SZIP compression software routines and underlying 
+patents please contact ICs Corp. at ICs Corp., 721 Lochsa Street, Suite 8,
+Post Falls, ID 83854.  (208) 262-2008.
+
+==============================================================================*/
+/********************************************************/
+/* defines and declarations to interface to the szip    */
+/* functions in file rice.c.                            */
+/* USE EXTREME CARE WHEN MODIFYING THIS FILE            */
+/********************************************************/
+extern int szip_allow_encoding;
+
+#define SZ_ALLOW_K13_OPTION_MASK         1
+#define SZ_CHIP_OPTION_MASK              2 
+#define SZ_EC_OPTION_MASK                4
+#define SZ_LSB_OPTION_MASK               8
+#define SZ_MSB_OPTION_MASK              16
+#define SZ_NN_OPTION_MASK               32
+#define SZ_RAW_OPTION_MASK             128
+
+#define SZ_STREAM_ERROR 	(-1)
+#define SZ_MEM_ERROR    	(-2)
+#define SZ_INIT_ERROR   	(-3)
+#define SZ_PARAM_ERROR  	(-4)
+#define SZ_NO_ENCODER_ERROR (-5)
+
+#define SZ_MAX_BLOCKS_PER_SCANLINE            128
+#define SZ_MAX_PIXELS_PER_BLOCK                32
+#define SZ_MAX_PIXELS_PER_SCANLINE     (SZ_MAX_BLOCKS_PER_SCANLINE)*(SZ_MAX_PIXELS_PER_BLOCK)
+
+long szip_compress_memory(
+	int options_mask,
+	int bits_per_pixel,
+	int pixels_per_block,
+	int pixels_per_scanline,
+	const void *in,
+	long pixels,
+	char *out);
+
+long szip_uncompress_memory(
+	int new_options_mask,
+	int new_bits_per_pixel,
+	int new_pixels_per_block,
+	int new_pixels_per_scanline, 
+	const char *in,
+	long in_bytes,
+	void *out,
+	long out_pixels);
+
+int szip_check_params(
+	int bits_per_pixel,
+	int pixels_per_block,
+	int pixels_per_scanline,
+	long image_pixels,
+	char **msg);
diff --git a/Resources/windows-libs/HDF5/include/szip_adpt.h b/Resources/windows-libs/HDF5/include/szip_adpt.h
new file mode 100644
index 0000000000000000000000000000000000000000..2e5a5177ac4b8232eb851bbfed0107789dc14350
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/szip_adpt.h
@@ -0,0 +1,56 @@
+/*
+ * This files has neccesary definitions to provide SZIP DLL 
+ * support on Windows platfroms, both MSVC and CodeWarrior 
+ * compilers
+ */
+
+#ifndef SZAPI_ADPT_H
+#define SZAPI_ADPT_H
+
+/* This will only be defined if szip was built with CMake shared libs*/
+#ifdef SZ_BUILT_AS_DYNAMIC_LIB
+
+#if defined (szip_EXPORTS)
+  #define _SZDLL_
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define __SZ_DLL__ __declspec(dllexport)
+/*    #define __DLLVARH425__ __declspec(dllexport)*/
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define __SZ_DLL__ __attribute__ ((visibility("default")))
+/*    #define __DLLVARH425__ extern __attribute__ ((visibility("default"))) */
+  #endif
+#else
+  #define _SZUSEDLL_
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define __SZ_DLL__ __declspec(dllimport)
+/*    #define __DLLVARH425__ __declspec(dllimport)*/
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define __SZ_DLL__ __attribute__ ((visibility("default")))
+/*    #define __DLLVARH425__ extern __attribute__ ((visibility("default"))) */
+  #endif
+#endif
+
+#else /* SZ_BUILT_AS_DYNAMIC_LIB */
+/* This is the original HDFGroup defined preprocessor code */
+
+#if defined(WIN32) && !defined(__MWERKS__)
+#if defined(_SZDLL_)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define __SZ_DLL__ __declspec(dllexport)
+/*#define __DLLVARH425__ __declspec(dllexport)*/
+#elif defined(_SZUSEDLL_)
+#define __SZ_DLL__ __declspec(dllimport)
+/*#define __DLLVARH425__ __declspec(dllimport)*/
+#else
+#define __SZ_DLL__
+/*#define __DLLVARH425__ extern*/
+#endif /* _SZDLL_ */
+
+#else /*WIN32*/
+#define __SZ_DLL__ extern
+/*#define __DLLVAR__ extern*/
+#endif
+
+#endif /* SZ_BUILT_AS_DYNAMIC_LIB */
+
+#endif /* H5API_ADPT_H */
diff --git a/Resources/windows-libs/HDF5/include/szlib.h b/Resources/windows-libs/HDF5/include/szlib.h
new file mode 100644
index 0000000000000000000000000000000000000000..efd7cd00ca89c036aecf0d4563b8807b95758f0c
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/szlib.h
@@ -0,0 +1,152 @@
+/* szlib.h -- defines, typedefs, and data structures for szlib API functions. */
+
+/*==============================================================================
+The SZIP Science Data Lossless Compression Program is Copyright (C) 2001 Science
+& Technology Corporation @ UNM.  All rights released.  Copyright (C) 2003 Lowell
+H. Miles and Jack A. Venbrux.  Licensed to ICs Corp. for distribution by the
+University of Illinois' National Center for Supercomputing Applications as a
+part of the HDF data storage and retrieval file format and software library
+products package.  All rights reserved.  Do not modify or use for other
+purposes.
+
+SZIP implements an extended Rice adaptive lossless compression algorithm
+for sample data.  The primary algorithm was developed by R. F. Rice at
+Jet Propulsion Laboratory.  
+
+SZIP embodies certain inventions patented by the National Aeronautics &
+Space Administration.  United States Patent Nos. 5,448,642, 5,687,255,
+and 5,822,457 have been licensed to ICs Corp. for distribution with the
+HDF data storage and retrieval file format and software library products.
+All rights reserved.
+
+Revocable (in the event of breach by the user or if required by law), 
+royalty-free, nonexclusive sublicense to use SZIP decompression software 
+routines and underlying patents is hereby granted by ICs Corp. to all users 
+of and in conjunction with HDF data storage and retrieval file format and 
+software library products.
+
+Revocable (in the event of breach by the user or if required by law), 
+royalty-free, nonexclusive sublicense to use SZIP compression software 
+routines and underlying patents for non-commercial, scientific use only 
+is hereby granted by ICs Corp. to users of and in conjunction with HDF 
+data storage and retrieval file format and software library products.
+
+For commercial use license to SZIP compression software routines and underlying 
+patents please contact ICs Corp. at ICs Corp., 721 Lochsa Street, Suite 8,
+Post Falls, ID 83854.  (208) 262-2008.
+
+==============================================================================*/
+#ifndef _SZLIB_H
+#define _SZLIB_H
+
+#include "ricehdf.h"
+#include "szip_adpt.h"
+
+#define SZLIB_VERSION "2.1"
+
+/*
+   The application must update next_in and avail_in when avail_in has
+   dropped to zero. It must update next_out and avail_out when avail_out
+   has dropped to zero. The application must initialize zalloc, zfree and
+   opaque before calling the init function. All other fields are set by the
+   compression library and must not be updated by the application.
+
+   The fields total_in and total_out can be used for statistics or
+   progress reports. After compression, total_in holds the total size of
+   the uncompressed data and may be saved for use in the decompressor
+   (particularly if the decompressor wants to decompress everything in
+   a single step).
+*/
+
+#define SZ_NULL  0
+
+/*** API flush values ***/
+#define SZ_NO_FLUSH      0
+#define SZ_FINISH        4
+
+/*** API state values ***/
+#define SZ_INPUT_IMAGE   5
+#define SZ_OUTPUT_IMAGE  6
+
+/*** API return values ***/
+#define SZ_OK			0
+#define SZ_STREAM_END	1
+#define SZ_OUTBUFF_FULL 2
+
+/*** API error values defined in ricehdf.h ***/
+/* SZ_STREAM_ERROR */
+/* SZ_MEM_ERROR    */
+/* SZ_INIT_ERROR   */
+/* SZ_PARAM_ERROR  */
+/* SZ_NO_ENCODER_ERROR  */
+
+/*** API options_mask values defined in ricehdf.h ***/
+/* SZ_ALLOW_K13_OPTION_MASK */
+/* SZ_CHIP_OPTION_MASK      */
+/* SZ_EC_OPTION_MASK        */
+/* SZ_LSB_OPTION_MASK       */
+/* SZ_MSB_OPTION_MASK       */
+/* SZ_NN_OPTION_MASK        */
+/* SZ_RAW_OPTION_MASK       */
+
+/*** API MAX limits defined in ricehdf.h ***/
+/* SZ_MAX_BLOCKS_PER_SCANLINE */
+/* SZ_MAX_PIXELS_PER_BLOCK    */
+/* SZ_MAX_PIXELS_PER_SCANLINE */
+
+typedef struct sz_hidden_data_s
+	{
+	char *image_in;
+	long avail_in;
+	char *next_in;
+
+	char *image_out;
+	long avail_out;
+	char *next_out;
+	} sz_hidden_data; 
+
+typedef struct sz_stream_s
+	{
+	char    		*next_in;  /* next input byte */
+	unsigned int	avail_in;  /* number of bytes available at next_in */
+	unsigned long	total_in;  /* total nb of input bytes read so far */
+
+	char			*next_out; /* next output byte should be put there */
+	unsigned int	avail_out; /* remaining free space at next_out */
+	unsigned long	total_out; /* total nb of bytes output so far */
+
+	char			*msg;
+	int				state;
+
+	void			*hidden;	/* this data hidden from user */
+
+	int		options_mask;
+	int		bits_per_pixel;
+	int		pixels_per_block;
+	int		pixels_per_scanline;
+	long	image_pixels;
+	} sz_stream;
+
+typedef sz_stream *sz_streamp;
+
+typedef struct SZ_com_t_s
+	{
+	int options_mask;
+	int bits_per_pixel;
+	int pixels_per_block;
+	int pixels_per_scanline;
+	} SZ_com_t;
+
+__SZ_DLL__ int SZ_BufftoBuffCompress(void *dest, size_t *destLen, const void *source, size_t sourceLen, SZ_com_t *param);
+__SZ_DLL__ int SZ_BufftoBuffDecompress(void *dest, size_t *destLen, const void *source, size_t sourceLen, SZ_com_t *param);
+
+__SZ_DLL__ int SZ_DecompressInit(sz_stream *strm);
+__SZ_DLL__ int SZ_Decompress(sz_stream *strm, int flush);
+__SZ_DLL__ int SZ_DecompressEnd(sz_stream *strm);
+
+__SZ_DLL__ int SZ_CompressInit(sz_stream *strm);
+__SZ_DLL__ int SZ_Compress(sz_stream *strm, int flush);
+__SZ_DLL__ int SZ_CompressEnd(sz_stream *strm);
+__SZ_DLL__ int SZ_encoder_enabled(void);
+
+#endif /* _SZLIB_H */
diff --git a/Resources/windows-libs/HDF5/include/zconf.h b/Resources/windows-libs/HDF5/include/zconf.h
new file mode 100644
index 0000000000000000000000000000000000000000..f542ce7a7e0a4ced91102ad7175e5bd6e8cb9947
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/zconf.h
@@ -0,0 +1,513 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+/* #undef Z_PREFIX */
+/* #undef Z_HAVE_UNISTD_H */
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
+#  cmakedefine Z_PREFIX_SET
+
+/* all linked symbols */
+#  define _dist_code            z__dist_code
+#  define _length_code          z__length_code
+#  define _tr_align             z__tr_align
+#  define _tr_flush_bits        z__tr_flush_bits
+#  define _tr_flush_block       z__tr_flush_block
+#  define _tr_init              z__tr_init
+#  define _tr_stored_block      z__tr_stored_block
+#  define _tr_tally             z__tr_tally
+#  define adler32               z_adler32
+#  define adler32_combine       z_adler32_combine
+#  define adler32_combine64     z_adler32_combine64
+#  ifndef Z_SOLO
+#    define compress              z_compress
+#    define compress2             z_compress2
+#    define compressBound         z_compressBound
+#  endif
+#  define crc32                 z_crc32
+#  define crc32_combine         z_crc32_combine
+#  define crc32_combine64       z_crc32_combine64
+#  define deflate               z_deflate
+#  define deflateBound          z_deflateBound
+#  define deflateCopy           z_deflateCopy
+#  define deflateEnd            z_deflateEnd
+#  define deflateInit2_         z_deflateInit2_
+#  define deflateInit_          z_deflateInit_
+#  define deflateParams         z_deflateParams
+#  define deflatePending        z_deflatePending
+#  define deflatePrime          z_deflatePrime
+#  define deflateReset          z_deflateReset
+#  define deflateResetKeep      z_deflateResetKeep
+#  define deflateSetDictionary  z_deflateSetDictionary
+#  define deflateSetHeader      z_deflateSetHeader
+#  define deflateTune           z_deflateTune
+#  define deflate_copyright     z_deflate_copyright
+#  define get_crc_table         z_get_crc_table
+#  ifndef Z_SOLO
+#    define gz_error              z_gz_error
+#    define gz_intmax             z_gz_intmax
+#    define gz_strwinerror        z_gz_strwinerror
+#    define gzbuffer              z_gzbuffer
+#    define gzclearerr            z_gzclearerr
+#    define gzclose               z_gzclose
+#    define gzclose_r             z_gzclose_r
+#    define gzclose_w             z_gzclose_w
+#    define gzdirect              z_gzdirect
+#    define gzdopen               z_gzdopen
+#    define gzeof                 z_gzeof
+#    define gzerror               z_gzerror
+#    define gzflush               z_gzflush
+#    define gzgetc                z_gzgetc
+#    define gzgetc_               z_gzgetc_
+#    define gzgets                z_gzgets
+#    define gzoffset              z_gzoffset
+#    define gzoffset64            z_gzoffset64
+#    define gzopen                z_gzopen
+#    define gzopen64              z_gzopen64
+#    ifdef _WIN32
+#      define gzopen_w              z_gzopen_w
+#    endif
+#    define gzprintf              z_gzprintf
+#    define gzvprintf             z_gzvprintf
+#    define gzputc                z_gzputc
+#    define gzputs                z_gzputs
+#    define gzread                z_gzread
+#    define gzrewind              z_gzrewind
+#    define gzseek                z_gzseek
+#    define gzseek64              z_gzseek64
+#    define gzsetparams           z_gzsetparams
+#    define gztell                z_gztell
+#    define gztell64              z_gztell64
+#    define gzungetc              z_gzungetc
+#    define gzwrite               z_gzwrite
+#  endif
+#  define inflate               z_inflate
+#  define inflateBack           z_inflateBack
+#  define inflateBackEnd        z_inflateBackEnd
+#  define inflateBackInit_      z_inflateBackInit_
+#  define inflateCopy           z_inflateCopy
+#  define inflateEnd            z_inflateEnd
+#  define inflateGetHeader      z_inflateGetHeader
+#  define inflateInit2_         z_inflateInit2_
+#  define inflateInit_          z_inflateInit_
+#  define inflateMark           z_inflateMark
+#  define inflatePrime          z_inflatePrime
+#  define inflateReset          z_inflateReset
+#  define inflateReset2         z_inflateReset2
+#  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateGetDictionary  z_inflateGetDictionary
+#  define inflateSync           z_inflateSync
+#  define inflateSyncPoint      z_inflateSyncPoint
+#  define inflateUndermine      z_inflateUndermine
+#  define inflateResetKeep      z_inflateResetKeep
+#  define inflate_copyright     z_inflate_copyright
+#  define inflate_fast          z_inflate_fast
+#  define inflate_table         z_inflate_table
+#  ifndef Z_SOLO
+#    define uncompress            z_uncompress
+#  endif
+#  define zError                z_zError
+#  ifndef Z_SOLO
+#    define zcalloc               z_zcalloc
+#    define zcfree                z_zcfree
+#  endif
+#  define zlibCompileFlags      z_zlibCompileFlags
+#  define zlibVersion           z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+#  define Byte                  z_Byte
+#  define Bytef                 z_Bytef
+#  define alloc_func            z_alloc_func
+#  define charf                 z_charf
+#  define free_func             z_free_func
+#  ifndef Z_SOLO
+#    define gzFile                z_gzFile
+#  endif
+#  define gz_header             z_gz_header
+#  define gz_headerp            z_gz_headerp
+#  define in_func               z_in_func
+#  define intf                  z_intf
+#  define out_func              z_out_func
+#  define uInt                  z_uInt
+#  define uIntf                 z_uIntf
+#  define uLong                 z_uLong
+#  define uLongf                z_uLongf
+#  define voidp                 z_voidp
+#  define voidpc                z_voidpc
+#  define voidpf                z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+#  define gz_header_s           z_gz_header_s
+#  define internal_state        z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+#  define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+#  define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+#  define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+#  ifndef WIN32
+#    define WIN32
+#  endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+#    ifndef SYS16BIT
+#      define SYS16BIT
+#    endif
+#  endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+#  define MAXSEG_64K
+#endif
+#ifdef MSDOS
+#  define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+#  ifndef STDC
+#    define STDC
+#  endif
+#  if __STDC_VERSION__ >= 199901L
+#    ifndef STDC99
+#      define STDC99
+#    endif
+#  endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+#  define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
+#  define STDC
+#endif
+
+#ifndef STDC
+#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+#    define const       /* note: need a more gentle solution here */
+#  endif
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+#  define z_const const
+#else
+#  define z_const
+#endif
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+#  define NO_DUMMY_DECL
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#  ifdef MAXSEG_64K
+#    define MAX_MEM_LEVEL 8
+#  else
+#    define MAX_MEM_LEVEL 9
+#  endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+#  define MAX_WBITS   15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+            (1 << (windowBits+2)) +  (1 << (memLevel+9))
+ that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+   The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
+                        /* Type declarations */
+
+#ifndef OF /* function prototypes */
+#  ifdef STDC
+#    define OF(args)  args
+#  else
+#    define OF(args)  ()
+#  endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+#  if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#    define Z_ARG(args)  args
+#  else
+#    define Z_ARG(args)  ()
+#  endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+#  if defined(M_I86SM) || defined(M_I86MM)
+     /* MSC small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef _MSC_VER
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#  if (defined(__SMALL__) || defined(__MEDIUM__))
+     /* Turbo C small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef __BORLANDC__
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+   /* If building or using zlib as a DLL, define ZLIB_DLL.
+    * This is not mandatory, but it offers a little performance increase.
+    */
+#  ifdef ZLIB_DLL
+#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+#      ifdef ZLIB_INTERNAL
+#        define ZEXTERN extern __declspec(dllexport)
+#      else
+#        define ZEXTERN extern __declspec(dllimport)
+#      endif
+#    endif
+#  endif  /* ZLIB_DLL */
+   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+    * define ZLIB_WINAPI.
+    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+    */
+#  ifdef ZLIB_WINAPI
+#    ifdef FAR
+#      undef FAR
+#    endif
+#    include <windows.h>
+     /* No need for _export, use ZLIB.DEF instead. */
+     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#    define ZEXPORT WINAPI
+#    ifdef WIN32
+#      define ZEXPORTVA WINAPIV
+#    else
+#      define ZEXPORTVA FAR CDECL
+#    endif
+#  endif
+#endif
+
+#if defined (__BEOS__)
+#  ifdef ZLIB_DLL
+#    ifdef ZLIB_INTERNAL
+#      define ZEXPORT   __declspec(dllexport)
+#      define ZEXPORTVA __declspec(dllexport)
+#    else
+#      define ZEXPORT   __declspec(dllimport)
+#      define ZEXPORTVA __declspec(dllimport)
+#    endif
+#  endif
+#endif
+
+#ifndef ZEXTERN
+#  define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+#  define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+#  define ZEXPORTVA
+#endif
+
+#ifndef FAR
+#  define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char  Byte;  /* 8 bits */
+#endif
+typedef unsigned int   uInt;  /* 16 bits or more */
+typedef unsigned long  uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+#  define Bytef Byte FAR
+#else
+   typedef Byte  FAR Bytef;
+#endif
+typedef char  FAR charf;
+typedef int   FAR intf;
+typedef uInt  FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+   typedef void const *voidpc;
+   typedef void FAR   *voidpf;
+   typedef void       *voidp;
+#else
+   typedef Byte const *voidpc;
+   typedef Byte FAR   *voidpf;
+   typedef Byte       *voidp;
+#endif
+
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+#  include <limits.h>
+#  if (UINT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned
+#  elif (ULONG_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned long
+#  elif (USHRT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned short
+#  endif
+#endif
+
+#ifdef Z_U4
+   typedef Z_U4 z_crc_t;
+#else
+   typedef unsigned long z_crc_t;
+#endif
+
+#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_STDARG_H
+#endif
+
+#ifdef STDC
+#  ifndef Z_SOLO
+#    include <sys/types.h>      /* for off_t */
+#  endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+#    include <stdarg.h>         /* for va_list */
+#  endif
+#endif
+
+#ifdef _WIN32
+#  ifndef Z_SOLO
+#    include <stddef.h>         /* for wchar_t */
+#  endif
+#endif
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+#  undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+#  define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+#  if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#    ifdef VMS
+#      include <unixio.h>       /* for off_t */
+#    endif
+#    ifndef z_off_t
+#      define z_off_t off_t
+#    endif
+#  endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
+#  define SEEK_SET        0       /* Seek from beginning of file.  */
+#  define SEEK_CUR        1       /* Seek from current position.  */
+#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
+#endif
+
+#ifndef z_off_t
+#  define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+#  define z_off64_t off64_t
+#else
+#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+  #pragma map(deflateInit_,"DEIN")
+  #pragma map(deflateInit2_,"DEIN2")
+  #pragma map(deflateEnd,"DEEND")
+  #pragma map(deflateBound,"DEBND")
+  #pragma map(inflateInit_,"ININ")
+  #pragma map(inflateInit2_,"ININ2")
+  #pragma map(inflateEnd,"INEND")
+  #pragma map(inflateSync,"INSY")
+  #pragma map(inflateSetDictionary,"INSEDI")
+  #pragma map(compressBound,"CMBND")
+  #pragma map(inflate_table,"INTABL")
+  #pragma map(inflate_fast,"INFA")
+  #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/Resources/windows-libs/HDF5/include/zlib.h b/Resources/windows-libs/HDF5/include/zlib.h
new file mode 100644
index 0000000000000000000000000000000000000000..3e0c7672ac51d93782f020bba32eb1207617e70a
--- /dev/null
+++ b/Resources/windows-libs/HDF5/include/zlib.h
@@ -0,0 +1,1768 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+  version 1.2.8, April 28th, 2013
+
+  Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup@gzip.org          madler@alumni.caltech.edu
+
+
+  The data format used by the zlib library is described by RFCs (Request for
+  Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+  (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
+*/
+
+#ifndef ZLIB_H
+#define ZLIB_H
+
+#include "zconf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ZLIB_VERSION "1.2.8"
+#define ZLIB_VERNUM 0x1280
+#define ZLIB_VER_MAJOR 1
+#define ZLIB_VER_MINOR 2
+#define ZLIB_VER_REVISION 8
+#define ZLIB_VER_SUBREVISION 0
+
+/*
+    The 'zlib' compression library provides in-memory compression and
+  decompression functions, including integrity checks of the uncompressed data.
+  This version of the library supports only one compression method (deflation)
+  but other algorithms will be added later and will have the same stream
+  interface.
+
+    Compression can be done in a single step if the buffers are large enough,
+  or can be done by repeated calls of the compression function.  In the latter
+  case, the application must provide more input and/or consume the output
+  (providing more output space) before each call.
+
+    The compressed data format used by default by the in-memory functions is
+  the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
+  around a deflate stream, which is itself documented in RFC 1951.
+
+    The library also supports reading and writing files in gzip (.gz) format
+  with an interface similar to that of stdio using the functions that start
+  with "gz".  The gzip format is different from the zlib format.  gzip is a
+  gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
+
+    This library can optionally read and write gzip streams in memory as well.
+
+    The zlib format was designed to be compact and fast for use in memory
+  and on communications channels.  The gzip format was designed for single-
+  file compression on file systems, has a larger header than zlib to maintain
+  directory information, and uses a different, slower check method than zlib.
+
+    The library does not install any signal handler.  The decoder checks
+  the consistency of the compressed data, so the library should never crash
+  even in case of corrupted input.
+*/
+
+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
+typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
+
+struct internal_state;
+
+typedef struct z_stream_s {
+    z_const Bytef *next_in;     /* next input byte */
+    uInt     avail_in;  /* number of bytes available at next_in */
+    uLong    total_in;  /* total number of input bytes read so far */
+
+    Bytef    *next_out; /* next output byte should be put there */
+    uInt     avail_out; /* remaining free space at next_out */
+    uLong    total_out; /* total number of bytes output so far */
+
+    z_const char *msg;  /* last error message, NULL if no error */
+    struct internal_state FAR *state; /* not visible by applications */
+
+    alloc_func zalloc;  /* used to allocate the internal state */
+    free_func  zfree;   /* used to free the internal state */
+    voidpf     opaque;  /* private data object passed to zalloc and zfree */
+
+    int     data_type;  /* best guess about the data type: binary or text */
+    uLong   adler;      /* adler32 value of the uncompressed data */
+    uLong   reserved;   /* reserved for future use */
+} z_stream;
+
+typedef z_stream FAR *z_streamp;
+
+/*
+     gzip header information passed to and from zlib routines.  See RFC 1952
+  for more details on the meanings of these fields.
+*/
+typedef struct gz_header_s {
+    int     text;       /* true if compressed data believed to be text */
+    uLong   time;       /* modification time */
+    int     xflags;     /* extra flags (not used when writing a gzip file) */
+    int     os;         /* operating system */
+    Bytef   *extra;     /* pointer to extra field or Z_NULL if none */
+    uInt    extra_len;  /* extra field length (valid if extra != Z_NULL) */
+    uInt    extra_max;  /* space at extra (only when reading header) */
+    Bytef   *name;      /* pointer to zero-terminated file name or Z_NULL */
+    uInt    name_max;   /* space at name (only when reading header) */
+    Bytef   *comment;   /* pointer to zero-terminated comment or Z_NULL */
+    uInt    comm_max;   /* space at comment (only when reading header) */
+    int     hcrc;       /* true if there was or will be a header crc */
+    int     done;       /* true when done reading gzip header (not used
+                           when writing a gzip file) */
+} gz_header;
+
+typedef gz_header FAR *gz_headerp;
+
+/*
+     The application must update next_in and avail_in when avail_in has dropped
+   to zero.  It must update next_out and avail_out when avail_out has dropped
+   to zero.  The application must initialize zalloc, zfree and opaque before
+   calling the init function.  All other fields are set by the compression
+   library and must not be updated by the application.
+
+     The opaque value provided by the application will be passed as the first
+   parameter for calls of zalloc and zfree.  This can be useful for custom
+   memory management.  The compression library attaches no meaning to the
+   opaque value.
+
+     zalloc must return Z_NULL if there is not enough memory for the object.
+   If zlib is used in a multi-threaded application, zalloc and zfree must be
+   thread safe.
+
+     On 16-bit systems, the functions zalloc and zfree must be able to allocate
+   exactly 65536 bytes, but will not be required to allocate more than this if
+   the symbol MAXSEG_64K is defined (see zconf.h).  WARNING: On MSDOS, pointers
+   returned by zalloc for objects of exactly 65536 bytes *must* have their
+   offset normalized to zero.  The default allocation function provided by this
+   library ensures this (see zutil.c).  To reduce memory requirements and avoid
+   any allocation of 64K objects, at the expense of compression ratio, compile
+   the library with -DMAX_WBITS=14 (see zconf.h).
+
+     The fields total_in and total_out can be used for statistics or progress
+   reports.  After compression, total_in holds the total size of the
+   uncompressed data and may be saved for use in the decompressor (particularly
+   if the decompressor wants to decompress everything in a single step).
+*/
+
+                        /* constants */
+
+#define Z_NO_FLUSH      0
+#define Z_PARTIAL_FLUSH 1
+#define Z_SYNC_FLUSH    2
+#define Z_FULL_FLUSH    3
+#define Z_FINISH        4
+#define Z_BLOCK         5
+#define Z_TREES         6
+/* Allowed flush values; see deflate() and inflate() below for details */
+
+#define Z_OK            0
+#define Z_STREAM_END    1
+#define Z_NEED_DICT     2
+#define Z_ERRNO        (-1)
+#define Z_STREAM_ERROR (-2)
+#define Z_DATA_ERROR   (-3)
+#define Z_MEM_ERROR    (-4)
+#define Z_BUF_ERROR    (-5)
+#define Z_VERSION_ERROR (-6)
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+
+#define Z_NO_COMPRESSION         0
+#define Z_BEST_SPEED             1
+#define Z_BEST_COMPRESSION       9
+#define Z_DEFAULT_COMPRESSION  (-1)
+/* compression levels */
+
+#define Z_FILTERED            1
+#define Z_HUFFMAN_ONLY        2
+#define Z_RLE                 3
+#define Z_FIXED               4
+#define Z_DEFAULT_STRATEGY    0
+/* compression strategy; see deflateInit2() below for details */
+
+#define Z_BINARY   0
+#define Z_TEXT     1
+#define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */
+#define Z_UNKNOWN  2
+/* Possible values of the data_type field (though see inflate()) */
+
+#define Z_DEFLATED   8
+/* The deflate compression method (the only one supported in this version) */
+
+#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
+
+#define zlib_version zlibVersion()
+/* for compatibility with versions < 1.0.2 */
+
+
+                        /* basic functions */
+
+ZEXTERN const char * ZEXPORT zlibVersion OF((void));
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+   If the first character differs, the library code actually used is not
+   compatible with the zlib.h header file used by the application.  This check
+   is automatically made by deflateInit and inflateInit.
+ */
+
+/*
+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
+
+     Initializes the internal stream state for compression.  The fields
+   zalloc, zfree and opaque must be initialized before by the caller.  If
+   zalloc and zfree are set to Z_NULL, deflateInit updates them to use default
+   allocation functions.
+
+     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+   1 gives best speed, 9 gives best compression, 0 gives no compression at all
+   (the input data is simply copied a block at a time).  Z_DEFAULT_COMPRESSION
+   requests a default compromise between speed and compression (currently
+   equivalent to level 6).
+
+     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if level is not a valid compression level, or
+   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+   with the version assumed by the caller (ZLIB_VERSION).  msg is set to null
+   if there is no error message.  deflateInit does not perform any compression:
+   this will be done by deflate().
+*/
+
+
+ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
+/*
+    deflate compresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full.  It may introduce
+  some output latency (reading input without producing any output) except when
+  forced to flush.
+
+    The detailed semantics are as follows.  deflate performs one or both of the
+  following actions:
+
+  - Compress more input starting at next_in and update next_in and avail_in
+    accordingly.  If not all input can be processed (because there is not
+    enough room in the output buffer), next_in and avail_in are updated and
+    processing will resume at this point for the next call of deflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  This action is forced if the parameter flush is non zero.
+    Forcing flush frequently degrades the compression ratio, so this parameter
+    should be set only when necessary (in interactive applications).  Some
+    output may be provided even if flush is not set.
+
+    Before the call of deflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming more
+  output, and updating avail_in or avail_out accordingly; avail_out should
+  never be zero before the call.  The application can consume the compressed
+  output when it wants, for example when the output buffer is full (avail_out
+  == 0), or after each call of deflate().  If deflate returns Z_OK and with
+  zero avail_out, it must be called again after making room in the output
+  buffer because there might be more output pending.
+
+    Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
+  decide how much data to accumulate before producing output, in order to
+  maximize compression.
+
+    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+  flushed to the output buffer and the output is aligned on a byte boundary, so
+  that the decompressor can get all input data available so far.  (In
+  particular avail_in is zero after the call if enough output space has been
+  provided before the call.) Flushing may degrade compression for some
+  compression algorithms and so it should be used only when necessary.  This
+  completes the current deflate block and follows it with an empty stored block
+  that is three bits plus filler bits to the next byte, followed by four bytes
+  (00 00 ff ff).
+
+    If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the
+  output buffer, but the output is not aligned to a byte boundary.  All of the
+  input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
+  This completes the current deflate block and follows it with an empty fixed
+  codes block that is 10 bits long.  This assures that enough bytes are output
+  in order for the decompressor to finish the block before the empty fixed code
+  block.
+
+    If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
+  for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
+  seven bits of the current block are held to be written as the next byte after
+  the next deflate block is completed.  In this case, the decompressor may not
+  be provided enough bits at this point in order to complete decompression of
+  the data provided so far to the compressor.  It may need to wait for the next
+  block to be emitted.  This is for advanced applications that need to control
+  the emission of deflate blocks.
+
+    If flush is set to Z_FULL_FLUSH, all output is flushed as with
+  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+  restart from this point if previous compressed data has been damaged or if
+  random access is desired.  Using Z_FULL_FLUSH too often can seriously degrade
+  compression.
+
+    If deflate returns with avail_out == 0, this function must be called again
+  with the same value of the flush parameter and more output space (updated
+  avail_out), until the flush is complete (deflate returns with non-zero
+  avail_out).  In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
+  avail_out is greater than six to avoid repeated flush markers due to
+  avail_out == 0 on return.
+
+    If the parameter flush is set to Z_FINISH, pending input is processed,
+  pending output is flushed and deflate returns with Z_STREAM_END if there was
+  enough output space; if deflate returns with Z_OK, this function must be
+  called again with Z_FINISH and more output space (updated avail_out) but no
+  more input data, until it returns with Z_STREAM_END or an error.  After
+  deflate has returned Z_STREAM_END, the only possible operations on the stream
+  are deflateReset or deflateEnd.
+
+    Z_FINISH can be used immediately after deflateInit if all the compression
+  is to be done in a single step.  In this case, avail_out must be at least the
+  value returned by deflateBound (see below).  Then deflate is guaranteed to
+  return Z_STREAM_END.  If not enough output space is provided, deflate will
+  not return Z_STREAM_END, and it must be called again as described above.
+
+    deflate() sets strm->adler to the adler32 checksum of all input read
+  so far (that is, total_in bytes).
+
+    deflate() may update strm->data_type if it can make a good guess about
+  the input data type (Z_BINARY or Z_TEXT).  In doubt, the data is considered
+  binary.  This field is only for information purposes and does not affect the
+  compression algorithm in any manner.
+
+    deflate() returns Z_OK if some progress has been made (more input
+  processed or more output produced), Z_STREAM_END if all input has been
+  consumed and all output has been produced (only when flush is set to
+  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+  if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
+  (for example avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not
+  fatal, and deflate() can be called again with more input and more output
+  space to continue compressing.
+*/
+
+
+ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any pending
+   output.
+
+     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+   prematurely (some input or output was discarded).  In the error case, msg
+   may be set but then points to a static string (which must not be
+   deallocated).
+*/
+
+
+/*
+ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
+
+     Initializes the internal stream state for decompression.  The fields
+   next_in, avail_in, zalloc, zfree and opaque must be initialized before by
+   the caller.  If next_in is not Z_NULL and avail_in is large enough (the
+   exact value depends on the compression method), inflateInit determines the
+   compression method from the zlib header and allocates all data structures
+   accordingly; otherwise the allocation will be deferred to the first call of
+   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
+   use default allocation functions.
+
+     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+   invalid, such as a null pointer to the structure.  msg is set to null if
+   there is no error message.  inflateInit does not perform any decompression
+   apart from possibly reading the zlib header if present: actual decompression
+   will be done by inflate().  (So next_in and avail_in may be modified, but
+   next_out and avail_out are unused and unchanged.) The current implementation
+   of inflateInit() does not process any header information -- that is deferred
+   until inflate() is called.
+*/
+
+
+ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
+/*
+    inflate decompresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full.  It may introduce
+  some output latency (reading input without producing any output) except when
+  forced to flush.
+
+  The detailed semantics are as follows.  inflate performs one or both of the
+  following actions:
+
+  - Decompress more input starting at next_in and update next_in and avail_in
+    accordingly.  If not all input can be processed (because there is not
+    enough room in the output buffer), next_in is updated and processing will
+    resume at this point for the next call of inflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  inflate() provides as much output as possible, until there is
+    no more input data or no more space in the output buffer (see below about
+    the flush parameter).
+
+    Before the call of inflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming more
+  output, and updating the next_* and avail_* values accordingly.  The
+  application can consume the uncompressed output when it wants, for example
+  when the output buffer is full (avail_out == 0), or after each call of
+  inflate().  If inflate returns Z_OK and with zero avail_out, it must be
+  called again after making room in the output buffer because there might be
+  more output pending.
+
+    The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,
+  Z_BLOCK, or Z_TREES.  Z_SYNC_FLUSH requests that inflate() flush as much
+  output as possible to the output buffer.  Z_BLOCK requests that inflate()
+  stop if and when it gets to the next deflate block boundary.  When decoding
+  the zlib or gzip format, this will cause inflate() to return immediately
+  after the header and before the first block.  When doing a raw inflate,
+  inflate() will go ahead and process the first block, and will return when it
+  gets to the end of that block, or when it runs out of data.
+
+    The Z_BLOCK option assists in appending to or combining deflate streams.
+  Also to assist in this, on return inflate() will set strm->data_type to the
+  number of unused bits in the last byte taken from strm->next_in, plus 64 if
+  inflate() is currently decoding the last block in the deflate stream, plus
+  128 if inflate() returned immediately after decoding an end-of-block code or
+  decoding the complete header up to just before the first byte of the deflate
+  stream.  The end-of-block will not be indicated until all of the uncompressed
+  data from that block has been written to strm->next_out.  The number of
+  unused bits may in general be greater than seven, except when bit 7 of
+  data_type is set, in which case the number of unused bits will be less than
+  eight.  data_type is set as noted here every time inflate() returns for all
+  flush options, and so can be used to determine the amount of currently
+  consumed input in bits.
+
+    The Z_TREES option behaves as Z_BLOCK does, but it also returns when the
+  end of each deflate block header is reached, before any actual data in that
+  block is decoded.  This allows the caller to determine the length of the
+  deflate block header for later use in random access within a deflate block.
+  256 is added to the value of strm->data_type when inflate() returns
+  immediately after reaching the end of the deflate block header.
+
+    inflate() should normally be called until it returns Z_STREAM_END or an
+  error.  However if all decompression is to be performed in a single step (a
+  single call of inflate), the parameter flush should be set to Z_FINISH.  In
+  this case all pending input is processed and all pending output is flushed;
+  avail_out must be large enough to hold all of the uncompressed data for the
+  operation to complete.  (The size of the uncompressed data may have been
+  saved by the compressor for this purpose.) The use of Z_FINISH is not
+  required to perform an inflation in one step.  However it may be used to
+  inform inflate that a faster approach can be used for the single inflate()
+  call.  Z_FINISH also informs inflate to not maintain a sliding window if the
+  stream completes, which reduces inflate's memory footprint.  If the stream
+  does not complete, either because not all of the stream is provided or not
+  enough output space is provided, then a sliding window will be allocated and
+  inflate() can be called again to continue the operation as if Z_NO_FLUSH had
+  been used.
+
+     In this implementation, inflate() always flushes as much output as
+  possible to the output buffer, and always uses the faster approach on the
+  first call.  So the effects of the flush parameter in this implementation are
+  on the return value of inflate() as noted below, when inflate() returns early
+  when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
+  memory for a sliding window when Z_FINISH is used.
+
+     If a preset dictionary is needed after this call (see inflateSetDictionary
+  below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
+  chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
+  strm->adler to the Adler-32 checksum of all output produced so far (that is,
+  total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
+  below.  At the end of the stream, inflate() checks that its computed adler32
+  checksum is equal to that saved by the compressor and returns Z_STREAM_END
+  only if the checksum is correct.
+
+    inflate() can decompress and check either zlib-wrapped or gzip-wrapped
+  deflate data.  The header type is detected automatically, if requested when
+  initializing with inflateInit2().  Any information contained in the gzip
+  header is not retained, so applications that need that information should
+  instead use raw inflate, see inflateInit2() below, or inflateBack() and
+  perform their own processing of the gzip header and trailer.  When processing
+  gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
+  producted so far.  The CRC-32 is checked against the gzip trailer.
+
+    inflate() returns Z_OK if some progress has been made (more input processed
+  or more output produced), Z_STREAM_END if the end of the compressed data has
+  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+  corrupted (input stream not conforming to the zlib format or incorrect check
+  value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+  next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
+  Z_BUF_ERROR if no progress is possible or if there was not enough room in the
+  output buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and
+  inflate() can be called again with more input and more output space to
+  continue decompressing.  If Z_DATA_ERROR is returned, the application may
+  then call inflateSync() to look for a good compression block if a partial
+  recovery of the data is desired.
+*/
+
+
+ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any pending
+   output.
+
+     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
+   was inconsistent.  In the error case, msg may be set but then points to a
+   static string (which must not be deallocated).
+*/
+
+
+                        /* Advanced functions */
+
+/*
+    The following functions are needed only in some special applications.
+*/
+
+/*
+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
+                                     int  level,
+                                     int  method,
+                                     int  windowBits,
+                                     int  memLevel,
+                                     int  strategy));
+
+     This is another version of deflateInit with more compression options.  The
+   fields next_in, zalloc, zfree and opaque must be initialized before by the
+   caller.
+
+     The method parameter is the compression method.  It must be Z_DEFLATED in
+   this version of the library.
+
+     The windowBits parameter is the base two logarithm of the window size
+   (the size of the history buffer).  It should be in the range 8..15 for this
+   version of the library.  Larger values of this parameter result in better
+   compression at the expense of memory usage.  The default value is 15 if
+   deflateInit is used instead.
+
+     windowBits can also be -8..-15 for raw deflate.  In this case, -windowBits
+   determines the window size.  deflate() will then generate raw deflate data
+   with no zlib header or trailer, and will not compute an adler32 check value.
+
+     windowBits can also be greater than 15 for optional gzip encoding.  Add
+   16 to windowBits to write a simple gzip header and trailer around the
+   compressed data instead of a zlib wrapper.  The gzip header will have no
+   file name, no extra data, no comment, no modification time (set to zero), no
+   header crc, and the operating system will be set to 255 (unknown).  If a
+   gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+
+     The memLevel parameter specifies how much memory should be allocated
+   for the internal compression state.  memLevel=1 uses minimum memory but is
+   slow and reduces compression ratio; memLevel=9 uses maximum memory for
+   optimal speed.  The default value is 8.  See zconf.h for total memory usage
+   as a function of windowBits and memLevel.
+
+     The strategy parameter is used to tune the compression algorithm.  Use the
+   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+   filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
+   string match), or Z_RLE to limit match distances to one (run-length
+   encoding).  Filtered data consists mostly of small values with a somewhat
+   random distribution.  In this case, the compression algorithm is tuned to
+   compress them better.  The effect of Z_FILTERED is to force more Huffman
+   coding and less string matching; it is somewhat intermediate between
+   Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.  Z_RLE is designed to be almost as
+   fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data.  The
+   strategy parameter only affects the compression ratio but not the
+   correctness of the compressed output even if it is not set appropriately.
+   Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
+   decoder for special applications.
+
+     deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
+   method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is
+   incompatible with the version assumed by the caller (ZLIB_VERSION).  msg is
+   set to null if there is no error message.  deflateInit2 does not perform any
+   compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
+                                             const Bytef *dictionary,
+                                             uInt  dictLength));
+/*
+     Initializes the compression dictionary from the given byte sequence
+   without producing any compressed output.  When using the zlib format, this
+   function must be called immediately after deflateInit, deflateInit2 or
+   deflateReset, and before any call of deflate.  When doing raw deflate, this
+   function must be called either before any call of deflate, or immediately
+   after the completion of a deflate block, i.e. after all input has been
+   consumed and all output has been delivered when using any of the flush
+   options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH.  The
+   compressor and decompressor must use exactly the same dictionary (see
+   inflateSetDictionary).
+
+     The dictionary should consist of strings (byte sequences) that are likely
+   to be encountered later in the data to be compressed, with the most commonly
+   used strings preferably put towards the end of the dictionary.  Using a
+   dictionary is most useful when the data to be compressed is short and can be
+   predicted with good accuracy; the data can then be compressed better than
+   with the default empty dictionary.
+
+     Depending on the size of the compression data structures selected by
+   deflateInit or deflateInit2, a part of the dictionary may in effect be
+   discarded, for example if the dictionary is larger than the window size
+   provided in deflateInit or deflateInit2.  Thus the strings most likely to be
+   useful should be put at the end of the dictionary, not at the front.  In
+   addition, the current implementation of deflate will use at most the window
+   size minus 262 bytes of the provided dictionary.
+
+     Upon return of this function, strm->adler is set to the adler32 value
+   of the dictionary; the decompressor may later use this value to determine
+   which dictionary has been used by the compressor.  (The adler32 value
+   applies to the whole dictionary even if only a subset of the dictionary is
+   actually used by the compressor.) If a raw deflate was requested, then the
+   adler32 value is not computed and strm->adler is not set.
+
+     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
+   inconsistent (for example if deflate has already been called for this stream
+   or if not at a block boundary for raw deflate).  deflateSetDictionary does
+   not perform any compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
+                                    z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when several compression strategies will be
+   tried, for example when there are several ways of pre-processing the input
+   data with a filter.  The streams that will be discarded should then be freed
+   by calling deflateEnd.  Note that deflateCopy duplicates the internal
+   compression state which can be quite large, so this strategy is slow and can
+   consume lots of memory.
+
+     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
+   destination.
+*/
+
+ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to deflateEnd followed by deflateInit,
+   but does not free and reallocate all the internal compression state.  The
+   stream will keep the same compression level and any other attributes that
+   may have been set by deflateInit2.
+
+     deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
+                                      int level,
+                                      int strategy));
+/*
+     Dynamically update the compression level and compression strategy.  The
+   interpretation of level and strategy is as in deflateInit2.  This can be
+   used to switch between compression and straight copy of the input data, or
+   to switch to a different kind of input data requiring a different strategy.
+   If the compression level is changed, the input available so far is
+   compressed with the old level (and may be flushed); the new level will take
+   effect only at the next call of deflate().
+
+     Before the call of deflateParams, the stream state must be set as for
+   a call of deflate(), since the currently available input may have to be
+   compressed and flushed.  In particular, strm->avail_out must be non-zero.
+
+     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
+   strm->avail_out was zero.
+*/
+
+ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
+                                    int good_length,
+                                    int max_lazy,
+                                    int nice_length,
+                                    int max_chain));
+/*
+     Fine tune deflate's internal compression parameters.  This should only be
+   used by someone who understands the algorithm used by zlib's deflate for
+   searching for the best matching string, and even then only by the most
+   fanatic optimizer trying to squeeze out the last compressed bit for their
+   specific input data.  Read the deflate.c source code for the meaning of the
+   max_lazy, good_length, nice_length, and max_chain parameters.
+
+     deflateTune() can be called after deflateInit() or deflateInit2(), and
+   returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
+ */
+
+ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
+                                       uLong sourceLen));
+/*
+     deflateBound() returns an upper bound on the compressed size after
+   deflation of sourceLen bytes.  It must be called after deflateInit() or
+   deflateInit2(), and after deflateSetHeader(), if used.  This would be used
+   to allocate an output buffer for deflation in a single pass, and so would be
+   called before deflate().  If that first deflate() call is provided the
+   sourceLen input bytes, an output buffer allocated to the size returned by
+   deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
+   to return Z_STREAM_END.  Note that it is possible for the compressed size to
+   be larger than the value returned by deflateBound() if flush options other
+   than Z_FINISH or Z_NO_FLUSH are used.
+*/
+
+ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,
+                                       unsigned *pending,
+                                       int *bits));
+/*
+     deflatePending() returns the number of bytes and bits of output that have
+   been generated, but not yet provided in the available output.  The bytes not
+   provided would be due to the available output space having being consumed.
+   The number of bits of output not provided are between 0 and 7, where they
+   await more bits to join them in order to fill out a full byte.  If pending
+   or bits are Z_NULL, then those values are not set.
+
+     deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+ */
+
+ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
+                                     int bits,
+                                     int value));
+/*
+     deflatePrime() inserts bits in the deflate output stream.  The intent
+   is that this function is used to start off the deflate output with the bits
+   leftover from a previous deflate stream when appending to it.  As such, this
+   function can only be used for raw deflate, and must be used before the first
+   deflate() call after a deflateInit2() or deflateReset().  bits must be less
+   than or equal to 16, and that many of the least significant bits of value
+   will be inserted in the output.
+
+     deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
+   room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
+   source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
+                                         gz_headerp head));
+/*
+     deflateSetHeader() provides gzip header information for when a gzip
+   stream is requested by deflateInit2().  deflateSetHeader() may be called
+   after deflateInit2() or deflateReset() and before the first call of
+   deflate().  The text, time, os, extra field, name, and comment information
+   in the provided gz_header structure are written to the gzip header (xflag is
+   ignored -- the extra flags are set according to the compression level).  The
+   caller must assure that, if not Z_NULL, name and comment are terminated with
+   a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
+   available there.  If hcrc is true, a gzip header crc is included.  Note that
+   the current versions of the command-line version of gzip (up through version
+   1.3.x) do not support header crc's, and will report that it is a "multi-part
+   gzip file" and give up.
+
+     If deflateSetHeader is not used, the default gzip header has text false,
+   the time set to zero, and os set to 255, with no extra, name, or comment
+   fields.  The gzip header is returned to the default state by deflateReset().
+
+     deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
+                                     int  windowBits));
+
+     This is another version of inflateInit with an extra parameter.  The
+   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+   before by the caller.
+
+     The windowBits parameter is the base two logarithm of the maximum window
+   size (the size of the history buffer).  It should be in the range 8..15 for
+   this version of the library.  The default value is 15 if inflateInit is used
+   instead.  windowBits must be greater than or equal to the windowBits value
+   provided to deflateInit2() while compressing, or it must be equal to 15 if
+   deflateInit2() was not used.  If a compressed stream with a larger window
+   size is given as input, inflate() will return with the error code
+   Z_DATA_ERROR instead of trying to allocate a larger window.
+
+     windowBits can also be zero to request that inflate use the window size in
+   the zlib header of the compressed stream.
+
+     windowBits can also be -8..-15 for raw inflate.  In this case, -windowBits
+   determines the window size.  inflate() will then process raw deflate data,
+   not looking for a zlib or gzip header, not generating a check value, and not
+   looking for any check values for comparison at the end of the stream.  This
+   is for use with other formats that use the deflate compressed data format
+   such as zip.  Those formats provide their own check values.  If a custom
+   format is developed using the raw deflate format for compressed data, it is
+   recommended that a check value such as an adler32 or a crc32 be applied to
+   the uncompressed data as is done in the zlib, gzip, and zip formats.  For
+   most applications, the zlib format should be used as is.  Note that comments
+   above on the use in deflateInit2() applies to the magnitude of windowBits.
+
+     windowBits can also be greater than 15 for optional gzip decoding.  Add
+   32 to windowBits to enable zlib and gzip decoding with automatic header
+   detection, or add 16 to decode only the gzip format (the zlib format will
+   return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a
+   crc32 instead of an adler32.
+
+     inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+   invalid, such as a null pointer to the structure.  msg is set to null if
+   there is no error message.  inflateInit2 does not perform any decompression
+   apart from possibly reading the zlib header if present: actual decompression
+   will be done by inflate().  (So next_in and avail_in may be modified, but
+   next_out and avail_out are unused and unchanged.) The current implementation
+   of inflateInit2() does not process any header information -- that is
+   deferred until inflate() is called.
+*/
+
+ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
+                                             const Bytef *dictionary,
+                                             uInt  dictLength));
+/*
+     Initializes the decompression dictionary from the given uncompressed byte
+   sequence.  This function must be called immediately after a call of inflate,
+   if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor
+   can be determined from the adler32 value returned by that call of inflate.
+   The compressor and decompressor must use exactly the same dictionary (see
+   deflateSetDictionary).  For raw inflate, this function can be called at any
+   time to set the dictionary.  If the provided dictionary is smaller than the
+   window and there is already data in the window, then the provided dictionary
+   will amend what's there.  The application must insure that the dictionary
+   that was used for compression is provided.
+
+     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
+   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+   expected one (incorrect adler32 value).  inflateSetDictionary does not
+   perform any decompression: this will be done by subsequent calls of
+   inflate().
+*/
+
+ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm,
+                                             Bytef *dictionary,
+                                             uInt  *dictLength));
+/*
+     Returns the sliding dictionary being maintained by inflate.  dictLength is
+   set to the number of bytes in the dictionary, and that many bytes are copied
+   to dictionary.  dictionary must have enough space, where 32768 bytes is
+   always enough.  If inflateGetDictionary() is called with dictionary equal to
+   Z_NULL, then only the dictionary length is returned, and nothing is copied.
+   Similary, if dictLength is Z_NULL, then it is not set.
+
+     inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+   stream state is inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
+/*
+     Skips invalid compressed data until a possible full flush point (see above
+   for the description of deflate with Z_FULL_FLUSH) can be found, or until all
+   available input is skipped.  No output is provided.
+
+     inflateSync searches for a 00 00 FF FF pattern in the compressed data.
+   All full flush points have this pattern, but not all occurrences of this
+   pattern are full flush points.
+
+     inflateSync returns Z_OK if a possible full flush point has been found,
+   Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
+   has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
+   In the success case, the application may save the current current value of
+   total_in which indicates where valid compressed data was found.  In the
+   error case, the application may repeatedly call inflateSync, providing more
+   input each time, until success or end of the input data.
+*/
+
+ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
+                                    z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when randomly accessing a large stream.  The
+   first pass through the stream can periodically record the inflate state,
+   allowing restarting inflate at those points when randomly accessing the
+   stream.
+
+     inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
+   destination.
+*/
+
+ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to inflateEnd followed by inflateInit,
+   but does not free and reallocate all the internal decompression state.  The
+   stream will keep attributes that may have been set by inflateInit2.
+
+     inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
+                                      int windowBits));
+/*
+     This function is the same as inflateReset, but it also permits changing
+   the wrap and window size requests.  The windowBits parameter is interpreted
+   the same as it is for inflateInit2.
+
+     inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL), or if
+   the windowBits parameter is invalid.
+*/
+
+ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
+                                     int bits,
+                                     int value));
+/*
+     This function inserts bits in the inflate input stream.  The intent is
+   that this function is used to start inflating at a bit position in the
+   middle of a byte.  The provided bits will be used before any bytes are used
+   from next_in.  This function should only be used with raw inflate, and
+   should be used before the first inflate() call after inflateInit2() or
+   inflateReset().  bits must be less than or equal to 16, and that many of the
+   least significant bits of value will be inserted in the input.
+
+     If bits is negative, then the input stream bit buffer is emptied.  Then
+   inflatePrime() can be called again to put bits in the buffer.  This is used
+   to clear out bits leftover after feeding inflate a block description prior
+   to feeding inflate codes.
+
+     inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
+/*
+     This function returns two values, one in the lower 16 bits of the return
+   value, and the other in the remaining upper bits, obtained by shifting the
+   return value down 16 bits.  If the upper value is -1 and the lower value is
+   zero, then inflate() is currently decoding information outside of a block.
+   If the upper value is -1 and the lower value is non-zero, then inflate is in
+   the middle of a stored block, with the lower value equaling the number of
+   bytes from the input remaining to copy.  If the upper value is not -1, then
+   it is the number of bits back from the current bit position in the input of
+   the code (literal or length/distance pair) currently being processed.  In
+   that case the lower value is the number of bytes already emitted for that
+   code.
+
+     A code is being processed if inflate is waiting for more input to complete
+   decoding of the code, or if it has completed decoding but is waiting for
+   more output space to write the literal or match data.
+
+     inflateMark() is used to mark locations in the input data for random
+   access, which may be at bit positions, and to note those cases where the
+   output of a code may span boundaries of random access blocks.  The current
+   location in the input stream can be determined from avail_in and data_type
+   as noted in the description for the Z_BLOCK flush parameter for inflate.
+
+     inflateMark returns the value noted above or -1 << 16 if the provided
+   source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
+                                         gz_headerp head));
+/*
+     inflateGetHeader() requests that gzip header information be stored in the
+   provided gz_header structure.  inflateGetHeader() may be called after
+   inflateInit2() or inflateReset(), and before the first call of inflate().
+   As inflate() processes the gzip stream, head->done is zero until the header
+   is completed, at which time head->done is set to one.  If a zlib stream is
+   being decoded, then head->done is set to -1 to indicate that there will be
+   no gzip header information forthcoming.  Note that Z_BLOCK or Z_TREES can be
+   used to force inflate() to return immediately after header processing is
+   complete and before any actual data is decompressed.
+
+     The text, time, xflags, and os fields are filled in with the gzip header
+   contents.  hcrc is set to true if there is a header CRC.  (The header CRC
+   was valid if done is set to one.) If extra is not Z_NULL, then extra_max
+   contains the maximum number of bytes to write to extra.  Once done is true,
+   extra_len contains the actual extra field length, and extra contains the
+   extra field, or that field truncated if extra_max is less than extra_len.
+   If name is not Z_NULL, then up to name_max characters are written there,
+   terminated with a zero unless the length is greater than name_max.  If
+   comment is not Z_NULL, then up to comm_max characters are written there,
+   terminated with a zero unless the length is greater than comm_max.  When any
+   of extra, name, or comment are not Z_NULL and the respective field is not
+   present in the header, then that field is set to Z_NULL to signal its
+   absence.  This allows the use of deflateSetHeader() with the returned
+   structure to duplicate the header.  However if those fields are set to
+   allocated memory, then the application will need to save those pointers
+   elsewhere so that they can be eventually freed.
+
+     If inflateGetHeader is not used, then the header information is simply
+   discarded.  The header is always checked for validity, including the header
+   CRC if present.  inflateReset() will reset the process to discard the header
+   information.  The application would need to call inflateGetHeader() again to
+   retrieve the header from the next gzip stream.
+
+     inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
+                                        unsigned char FAR *window));
+
+     Initialize the internal stream state for decompression using inflateBack()
+   calls.  The fields zalloc, zfree and opaque in strm must be initialized
+   before the call.  If zalloc and zfree are Z_NULL, then the default library-
+   derived memory allocation routines are used.  windowBits is the base two
+   logarithm of the window size, in the range 8..15.  window is a caller
+   supplied buffer of that size.  Except for special applications where it is
+   assured that deflate was used with small window sizes, windowBits must be 15
+   and a 32K byte window must be supplied to be able to decompress general
+   deflate streams.
+
+     See inflateBack() for the usage of these routines.
+
+     inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
+   the parameters are invalid, Z_MEM_ERROR if the internal state could not be
+   allocated, or Z_VERSION_ERROR if the version of the library does not match
+   the version of the header file.
+*/
+
+typedef unsigned (*in_func) OF((void FAR *,
+                                z_const unsigned char FAR * FAR *));
+typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
+
+ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
+                                    in_func in, void FAR *in_desc,
+                                    out_func out, void FAR *out_desc));
+/*
+     inflateBack() does a raw inflate with a single call using a call-back
+   interface for input and output.  This is potentially more efficient than
+   inflate() for file i/o applications, in that it avoids copying between the
+   output and the sliding window by simply making the window itself the output
+   buffer.  inflate() can be faster on modern CPUs when used with large
+   buffers.  inflateBack() trusts the application to not change the output
+   buffer passed by the output function, at least until inflateBack() returns.
+
+     inflateBackInit() must be called first to allocate the internal state
+   and to initialize the state with the user-provided window buffer.
+   inflateBack() may then be used multiple times to inflate a complete, raw
+   deflate stream with each call.  inflateBackEnd() is then called to free the
+   allocated state.
+
+     A raw deflate stream is one with no zlib or gzip header or trailer.
+   This routine would normally be used in a utility that reads zip or gzip
+   files and writes out uncompressed files.  The utility would decode the
+   header and process the trailer on its own, hence this routine expects only
+   the raw deflate stream to decompress.  This is different from the normal
+   behavior of inflate(), which expects either a zlib or gzip header and
+   trailer around the deflate stream.
+
+     inflateBack() uses two subroutines supplied by the caller that are then
+   called by inflateBack() for input and output.  inflateBack() calls those
+   routines until it reads a complete deflate stream and writes out all of the
+   uncompressed data, or until it encounters an error.  The function's
+   parameters and return types are defined above in the in_func and out_func
+   typedefs.  inflateBack() will call in(in_desc, &buf) which should return the
+   number of bytes of provided input, and a pointer to that input in buf.  If
+   there is no input available, in() must return zero--buf is ignored in that
+   case--and inflateBack() will return a buffer error.  inflateBack() will call
+   out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()
+   should return zero on success, or non-zero on failure.  If out() returns
+   non-zero, inflateBack() will return with an error.  Neither in() nor out()
+   are permitted to change the contents of the window provided to
+   inflateBackInit(), which is also the buffer that out() uses to write from.
+   The length written by out() will be at most the window size.  Any non-zero
+   amount of input may be provided by in().
+
+     For convenience, inflateBack() can be provided input on the first call by
+   setting strm->next_in and strm->avail_in.  If that input is exhausted, then
+   in() will be called.  Therefore strm->next_in must be initialized before
+   calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called
+   immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in
+   must also be initialized, and then if strm->avail_in is not zero, input will
+   initially be taken from strm->next_in[0 ..  strm->avail_in - 1].
+
+     The in_desc and out_desc parameters of inflateBack() is passed as the
+   first parameter of in() and out() respectively when they are called.  These
+   descriptors can be optionally used to pass any information that the caller-
+   supplied in() and out() functions need to do their job.
+
+     On return, inflateBack() will set strm->next_in and strm->avail_in to
+   pass back any unused input that was provided by the last in() call.  The
+   return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
+   if in() or out() returned an error, Z_DATA_ERROR if there was a format error
+   in the deflate stream (in which case strm->msg is set to indicate the nature
+   of the error), or Z_STREAM_ERROR if the stream was not properly initialized.
+   In the case of Z_BUF_ERROR, an input or output error can be distinguished
+   using strm->next_in which will be Z_NULL only if in() returned an error.  If
+   strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
+   non-zero.  (in() will always be called before out(), so strm->next_in is
+   assured to be defined if out() returns non-zero.) Note that inflateBack()
+   cannot return Z_OK.
+*/
+
+ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
+/*
+     All memory allocated by inflateBackInit() is freed.
+
+     inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
+   state was inconsistent.
+*/
+
+ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
+/* Return flags indicating compile-time options.
+
+    Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
+     1.0: size of uInt
+     3.2: size of uLong
+     5.4: size of voidpf (pointer)
+     7.6: size of z_off_t
+
+    Compiler, assembler, and debug options:
+     8: DEBUG
+     9: ASMV or ASMINF -- use ASM code
+     10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
+     11: 0 (reserved)
+
+    One-time table building (smaller code, but not thread-safe if true):
+     12: BUILDFIXED -- build static block decoding tables when needed
+     13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
+     14,15: 0 (reserved)
+
+    Library content (indicates missing functionality):
+     16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
+                          deflate code when not needed)
+     17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
+                    and decode gzip streams (to avoid linking crc code)
+     18-19: 0 (reserved)
+
+    Operation variations (changes in library functionality):
+     20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
+     21: FASTEST -- deflate algorithm with only one, lowest compression level
+     22,23: 0 (reserved)
+
+    The sprintf variant used by gzprintf (zero is best):
+     24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
+     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
+     26: 0 = returns value, 1 = void -- 1 means inferred string length returned
+
+    Remainder:
+     27-31: 0 (reserved)
+ */
+
+#ifndef Z_SOLO
+
+                        /* utility functions */
+
+/*
+     The following utility functions are implemented on top of the basic
+   stream-oriented functions.  To simplify the interface, some default options
+   are assumed (compression level and memory usage, standard memory allocation
+   functions).  The source code of these utility functions can be modified if
+   you need special options.
+*/
+
+ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,
+                                 const Bytef *source, uLong sourceLen));
+/*
+     Compresses the source buffer into the destination buffer.  sourceLen is
+   the byte length of the source buffer.  Upon entry, destLen is the total size
+   of the destination buffer, which must be at least the value returned by
+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
+   compressed buffer.
+
+     compress returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_BUF_ERROR if there was not enough room in the output
+   buffer.
+*/
+
+ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,
+                                  const Bytef *source, uLong sourceLen,
+                                  int level));
+/*
+     Compresses the source buffer into the destination buffer.  The level
+   parameter has the same meaning as in deflateInit.  sourceLen is the byte
+   length of the source buffer.  Upon entry, destLen is the total size of the
+   destination buffer, which must be at least the value returned by
+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
+   compressed buffer.
+
+     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+   Z_STREAM_ERROR if the level parameter is invalid.
+*/
+
+ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
+/*
+     compressBound() returns an upper bound on the compressed size after
+   compress() or compress2() on sourceLen bytes.  It would be used before a
+   compress() or compress2() call to allocate the destination buffer.
+*/
+
+ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
+                                   const Bytef *source, uLong sourceLen));
+/*
+     Decompresses the source buffer into the destination buffer.  sourceLen is
+   the byte length of the source buffer.  Upon entry, destLen is the total size
+   of the destination buffer, which must be large enough to hold the entire
+   uncompressed data.  (The size of the uncompressed data must have been saved
+   previously by the compressor and transmitted to the decompressor by some
+   mechanism outside the scope of this compression library.) Upon exit, destLen
+   is the actual size of the uncompressed buffer.
+
+     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_BUF_ERROR if there was not enough room in the output
+   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.  In
+   the case where there is not enough room, uncompress() will fill the output
+   buffer with the uncompressed data up to that point.
+*/
+
+                        /* gzip file access functions */
+
+/*
+     This library supports reading and writing files in gzip (.gz) format with
+   an interface similar to that of stdio, using the functions that start with
+   "gz".  The gzip format is different from the zlib format.  gzip is a gzip
+   wrapper, documented in RFC 1952, wrapped around a deflate stream.
+*/
+
+typedef struct gzFile_s *gzFile;    /* semi-opaque gzip file descriptor */
+
+/*
+ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
+
+     Opens a gzip (.gz) file for reading or writing.  The mode parameter is as
+   in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
+   a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
+   compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
+   for fixed code compression as in "wb9F".  (See the description of
+   deflateInit2 for more information about the strategy parameter.)  'T' will
+   request transparent writing or appending with no compression and not using
+   the gzip format.
+
+     "a" can be used instead of "w" to request that the gzip stream that will
+   be written be appended to the file.  "+" will result in an error, since
+   reading and writing to the same gzip file is not supported.  The addition of
+   "x" when writing will create the file exclusively, which fails if the file
+   already exists.  On systems that support it, the addition of "e" when
+   reading or writing will set the flag to close the file on an execve() call.
+
+     These functions, as well as gzip, will read and decode a sequence of gzip
+   streams in a file.  The append function of gzopen() can be used to create
+   such a file.  (Also see gzflush() for another way to do this.)  When
+   appending, gzopen does not test whether the file begins with a gzip stream,
+   nor does it look for the end of the gzip streams to begin appending.  gzopen
+   will simply append a gzip stream to the existing file.
+
+     gzopen can be used to read a file which is not in gzip format; in this
+   case gzread will directly read from the file without decompression.  When
+   reading, this will be detected automatically by looking for the magic two-
+   byte gzip header.
+
+     gzopen returns NULL if the file could not be opened, if there was
+   insufficient memory to allocate the gzFile state, or if an invalid mode was
+   specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
+   errno can be checked to determine if the reason gzopen failed was that the
+   file could not be opened.
+*/
+
+ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
+/*
+     gzdopen associates a gzFile with the file descriptor fd.  File descriptors
+   are obtained from calls like open, dup, creat, pipe or fileno (if the file
+   has been previously opened with fopen).  The mode parameter is as in gzopen.
+
+     The next call of gzclose on the returned gzFile will also close the file
+   descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
+   fd.  If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
+   mode);.  The duplicated descriptor should be saved to avoid a leak, since
+   gzdopen does not close fd if it fails.  If you are using fileno() to get the
+   file descriptor from a FILE *, then you will have to use dup() to avoid
+   double-close()ing the file descriptor.  Both gzclose() and fclose() will
+   close the associated file descriptor, so they need to have different file
+   descriptors.
+
+     gzdopen returns NULL if there was insufficient memory to allocate the
+   gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
+   provided, or '+' was provided), or if fd is -1.  The file descriptor is not
+   used until the next gz* read, write, seek, or close operation, so gzdopen
+   will not detect if fd is invalid (unless fd is -1).
+*/
+
+ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
+/*
+     Set the internal buffer size used by this library's functions.  The
+   default buffer size is 8192 bytes.  This function must be called after
+   gzopen() or gzdopen(), and before any other calls that read or write the
+   file.  The buffer memory allocation is always deferred to the first read or
+   write.  Two buffers are allocated, either both of the specified size when
+   writing, or one of the specified size and the other twice that size when
+   reading.  A larger buffer size of, for example, 64K or 128K bytes will
+   noticeably increase the speed of decompression (reading).
+
+     The new buffer size also affects the maximum length for gzprintf().
+
+     gzbuffer() returns 0 on success, or -1 on failure, such as being called
+   too late.
+*/
+
+ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
+/*
+     Dynamically update the compression level or strategy.  See the description
+   of deflateInit2 for the meaning of these parameters.
+
+     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
+   opened for writing.
+*/
+
+ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
+/*
+     Reads the given number of uncompressed bytes from the compressed file.  If
+   the input file is not in gzip format, gzread copies the given number of
+   bytes into the buffer directly from the file.
+
+     After reaching the end of a gzip stream in the input, gzread will continue
+   to read, looking for another gzip stream.  Any number of gzip streams may be
+   concatenated in the input file, and will all be decompressed by gzread().
+   If something other than a gzip stream is encountered after a gzip stream,
+   that remaining trailing garbage is ignored (and no error is returned).
+
+     gzread can be used to read a gzip file that is being concurrently written.
+   Upon reaching the end of the input, gzread will return with the available
+   data.  If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
+   gzclearerr can be used to clear the end of file indicator in order to permit
+   gzread to be tried again.  Z_OK indicates that a gzip stream was completed
+   on the last gzread.  Z_BUF_ERROR indicates that the input file ended in the
+   middle of a gzip stream.  Note that gzread does not return -1 in the event
+   of an incomplete gzip stream.  This error is deferred until gzclose(), which
+   will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
+   stream.  Alternatively, gzerror can be used before gzclose to detect this
+   case.
+
+     gzread returns the number of uncompressed bytes actually read, less than
+   len for end of file, or -1 for error.
+*/
+
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
+                                voidpc buf, unsigned len));
+/*
+     Writes the given number of uncompressed bytes into the compressed file.
+   gzwrite returns the number of uncompressed bytes written or 0 in case of
+   error.
+*/
+
+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
+/*
+     Converts, formats, and writes the arguments to the compressed file under
+   control of the format string, as in fprintf.  gzprintf returns the number of
+   uncompressed bytes actually written, or 0 in case of error.  The number of
+   uncompressed bytes written is limited to 8191, or one less than the buffer
+   size given to gzbuffer().  The caller should assure that this limit is not
+   exceeded.  If it is exceeded, then gzprintf() will return an error (0) with
+   nothing written.  In this case, there may also be a buffer overflow with
+   unpredictable consequences, which is possible only if zlib was compiled with
+   the insecure functions sprintf() or vsprintf() because the secure snprintf()
+   or vsnprintf() functions were not available.  This can be determined using
+   zlibCompileFlags().
+*/
+
+ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
+/*
+     Writes the given null-terminated string to the compressed file, excluding
+   the terminating null character.
+
+     gzputs returns the number of characters written, or -1 in case of error.
+*/
+
+ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
+/*
+     Reads bytes from the compressed file until len-1 characters are read, or a
+   newline character is read and transferred to buf, or an end-of-file
+   condition is encountered.  If any characters are read or if len == 1, the
+   string is terminated with a null character.  If no characters are read due
+   to an end-of-file or len < 1, then the buffer is left untouched.
+
+     gzgets returns buf which is a null-terminated string, or it returns NULL
+   for end-of-file or in case of error.  If there was an error, the contents at
+   buf are indeterminate.
+*/
+
+ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
+/*
+     Writes c, converted to an unsigned char, into the compressed file.  gzputc
+   returns the value that was written, or -1 in case of error.
+*/
+
+ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
+/*
+     Reads one byte from the compressed file.  gzgetc returns this byte or -1
+   in case of end of file or error.  This is implemented as a macro for speed.
+   As such, it does not do all of the checking the other functions do.  I.e.
+   it does not check to see if file is NULL, nor whether the structure file
+   points to has been clobbered or not.
+*/
+
+ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
+/*
+     Push one character back onto the stream to be read as the first character
+   on the next read.  At least one character of push-back is allowed.
+   gzungetc() returns the character pushed, or -1 on failure.  gzungetc() will
+   fail if c is -1, and may fail if a character has been pushed but not read
+   yet.  If gzungetc is used immediately after gzopen or gzdopen, at least the
+   output buffer size of pushed characters is allowed.  (See gzbuffer above.)
+   The pushed character will be discarded if the stream is repositioned with
+   gzseek() or gzrewind().
+*/
+
+ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
+/*
+     Flushes all pending output into the compressed file.  The parameter flush
+   is as in the deflate() function.  The return value is the zlib error number
+   (see function gzerror below).  gzflush is only permitted when writing.
+
+     If the flush parameter is Z_FINISH, the remaining data is written and the
+   gzip stream is completed in the output.  If gzwrite() is called again, a new
+   gzip stream will be started in the output.  gzread() is able to read such
+   concatented gzip streams.
+
+     gzflush should be called only when strictly necessary because it will
+   degrade compression if called too often.
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
+                                   z_off_t offset, int whence));
+
+     Sets the starting position for the next gzread or gzwrite on the given
+   compressed file.  The offset represents a number of bytes in the
+   uncompressed data stream.  The whence parameter is defined as in lseek(2);
+   the value SEEK_END is not supported.
+
+     If the file is opened for reading, this function is emulated but can be
+   extremely slow.  If the file is opened for writing, only forward seeks are
+   supported; gzseek then compresses a sequence of zeroes up to the new
+   starting position.
+
+     gzseek returns the resulting offset location as measured in bytes from
+   the beginning of the uncompressed stream, or -1 in case of error, in
+   particular if the file is opened for writing and the new starting position
+   would be before the current position.
+*/
+
+ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
+/*
+     Rewinds the given file. This function is supported only for reading.
+
+     gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
+
+     Returns the starting position for the next gzread or gzwrite on the given
+   compressed file.  This position represents a number of bytes in the
+   uncompressed data stream, and is zero when starting, even if appending or
+   reading a gzip stream from the middle of a file using gzdopen().
+
+     gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
+
+     Returns the current offset in the file being read or written.  This offset
+   includes the count of bytes that precede the gzip stream, for example when
+   appending or when using gzdopen() for reading.  When reading, the offset
+   does not include as yet unused buffered input.  This information can be used
+   for a progress indicator.  On error, gzoffset() returns -1.
+*/
+
+ZEXTERN int ZEXPORT gzeof OF((gzFile file));
+/*
+     Returns true (1) if the end-of-file indicator has been set while reading,
+   false (0) otherwise.  Note that the end-of-file indicator is set only if the
+   read tried to go past the end of the input, but came up short.  Therefore,
+   just like feof(), gzeof() may return false even if there is no more data to
+   read, in the event that the last read request was for the exact number of
+   bytes remaining in the input file.  This will happen if the input file size
+   is an exact multiple of the buffer size.
+
+     If gzeof() returns true, then the read functions will return no more data,
+   unless the end-of-file indicator is reset by gzclearerr() and the input file
+   has grown since the previous end of file was detected.
+*/
+
+ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
+/*
+     Returns true (1) if file is being copied directly while reading, or false
+   (0) if file is a gzip stream being decompressed.
+
+     If the input file is empty, gzdirect() will return true, since the input
+   does not contain a gzip stream.
+
+     If gzdirect() is used immediately after gzopen() or gzdopen() it will
+   cause buffers to be allocated to allow reading the file to determine if it
+   is a gzip file.  Therefore if gzbuffer() is used, it should be called before
+   gzdirect().
+
+     When writing, gzdirect() returns true (1) if transparent writing was
+   requested ("wT" for the gzopen() mode), or false (0) otherwise.  (Note:
+   gzdirect() is not needed when writing.  Transparent writing must be
+   explicitly requested, so the application already knows the answer.  When
+   linking statically, using gzdirect() will include all of the zlib code for
+   gzip file reading and decompression, which may not be desired.)
+*/
+
+ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
+/*
+     Flushes all pending output if necessary, closes the compressed file and
+   deallocates the (de)compression state.  Note that once file is closed, you
+   cannot call gzerror with file, since its structures have been deallocated.
+   gzclose must not be called more than once on the same file, just as free
+   must not be called more than once on the same allocation.
+
+     gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
+   file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
+   last read ended in the middle of a gzip stream, or Z_OK on success.
+*/
+
+ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
+ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
+/*
+     Same as gzclose(), but gzclose_r() is only for use when reading, and
+   gzclose_w() is only for use when writing or appending.  The advantage to
+   using these instead of gzclose() is that they avoid linking in zlib
+   compression or decompression code that is not used when only reading or only
+   writing respectively.  If gzclose() is used, then both compression and
+   decompression code will be included the application when linking to a static
+   zlib library.
+*/
+
+ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
+/*
+     Returns the error message for the last error which occurred on the given
+   compressed file.  errnum is set to zlib error number.  If an error occurred
+   in the file system and not in the compression library, errnum is set to
+   Z_ERRNO and the application may consult errno to get the exact error code.
+
+     The application must not modify the returned string.  Future calls to
+   this function may invalidate the previously returned string.  If file is
+   closed, then the string previously returned by gzerror will no longer be
+   available.
+
+     gzerror() should be used to distinguish errors from end-of-file for those
+   functions above that do not distinguish those cases in their return values.
+*/
+
+ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
+/*
+     Clears the error and end-of-file flags for file.  This is analogous to the
+   clearerr() function in stdio.  This is useful for continuing to read a gzip
+   file that is being written concurrently.
+*/
+
+#endif /* !Z_SOLO */
+
+                        /* checksum functions */
+
+/*
+     These functions are not related to compression but are exported
+   anyway because they might be useful in applications using the compression
+   library.
+*/
+
+ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
+/*
+     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+   return the updated checksum.  If buf is Z_NULL, this function returns the
+   required initial value for the checksum.
+
+     An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+   much faster.
+
+   Usage example:
+
+     uLong adler = adler32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       adler = adler32(adler, buffer, length);
+     }
+     if (adler != original_adler) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
+                                          z_off_t len2));
+
+     Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1
+   and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
+   each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of
+   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.  Note
+   that the z_off_t type (like off_t) is a signed integer.  If len2 is
+   negative, the result has no meaning or utility.
+*/
+
+ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
+/*
+     Update a running CRC-32 with the bytes buf[0..len-1] and return the
+   updated CRC-32.  If buf is Z_NULL, this function returns the required
+   initial value for the crc.  Pre- and post-conditioning (one's complement) is
+   performed within this function so it shouldn't be done by the application.
+
+   Usage example:
+
+     uLong crc = crc32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       crc = crc32(crc, buffer, length);
+     }
+     if (crc != original_crc) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
+
+     Combine two CRC-32 check values into one.  For two sequences of bytes,
+   seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
+   calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32
+   check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
+   len2.
+*/
+
+
+                        /* various hacks, don't look :) */
+
+/* deflateInit and inflateInit are macros to allow checking the zlib version
+ * and the compiler's view of z_stream:
+ */
+ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,
+                                      int windowBits, int memLevel,
+                                      int strategy, const char *version,
+                                      int stream_size));
+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
+                                      const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
+                                         unsigned char FAR *window,
+                                         const char *version,
+                                         int stream_size));
+#define deflateInit(strm, level) \
+        deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit(strm) \
+        inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                      (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit2(strm, windowBits) \
+        inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+                      (int)sizeof(z_stream))
+#define inflateBackInit(strm, windowBits, window) \
+        inflateBackInit_((strm), (windowBits), (window), \
+                      ZLIB_VERSION, (int)sizeof(z_stream))
+
+#ifndef Z_SOLO
+
+/* gzgetc() macro and its supporting function and exposed data structure.  Note
+ * that the real internal state is much larger than the exposed structure.
+ * This abbreviated structure exposes just enough for the gzgetc() macro.  The
+ * user should not mess with these exposed elements, since their names or
+ * behavior could change in the future, perhaps even capriciously.  They can
+ * only be used by the gzgetc() macro.  You have been warned.
+ */
+struct gzFile_s {
+    unsigned have;
+    unsigned char *next;
+    z_off64_t pos;
+};
+ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
+#ifdef Z_PREFIX_SET
+#  undef z_gzgetc
+#  define z_gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#else
+#  define gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#endif
+
+/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
+ * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
+ * both are true, the application gets the *64 functions, and the regular
+ * functions are changed to 64 bits) -- in case these are set on systems
+ * without large file support, _LFS64_LARGEFILE must also be true
+ */
+#ifdef Z_LARGE64
+   ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+   ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+   ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+   ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+   ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
+   ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
+#endif
+
+#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
+#  ifdef Z_PREFIX_SET
+#    define z_gzopen z_gzopen64
+#    define z_gzseek z_gzseek64
+#    define z_gztell z_gztell64
+#    define z_gzoffset z_gzoffset64
+#    define z_adler32_combine z_adler32_combine64
+#    define z_crc32_combine z_crc32_combine64
+#  else
+#    define gzopen gzopen64
+#    define gzseek gzseek64
+#    define gztell gztell64
+#    define gzoffset gzoffset64
+#    define adler32_combine adler32_combine64
+#    define crc32_combine crc32_combine64
+#  endif
+#  ifndef Z_LARGE64
+     ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+     ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
+     ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
+     ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
+     ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+     ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+#  endif
+#else
+   ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
+   ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
+   ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
+   ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+#endif
+
+#else /* Z_SOLO */
+
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+
+#endif /* !Z_SOLO */
+
+/* hack for buggy compilers */
+#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
+    struct internal_state {int dummy;};
+#endif
+
+/* undocumented functions */
+ZEXTERN const char   * ZEXPORT zError           OF((int));
+ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));
+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table    OF((void));
+ZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int            ZEXPORT inflateResetKeep OF((z_streamp));
+ZEXTERN int            ZEXPORT deflateResetKeep OF((z_streamp));
+#if defined(_WIN32) && !defined(Z_SOLO)
+ZEXTERN gzFile         ZEXPORT gzopen_w OF((const wchar_t *path,
+                                            const char *mode));
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+ZEXTERN int            ZEXPORTVA gzvprintf Z_ARG((gzFile file,
+                                                  const char *format,
+                                                  va_list va));
+#  endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ZLIB_H */
diff --git a/Resources/windows-libs/HDF5/lib/x64/hdf5.lib b/Resources/windows-libs/HDF5/lib/x64/hdf5.lib
new file mode 100644
index 0000000000000000000000000000000000000000..0e0fc9ee357fcb21e082fca482d415f8904ff311
Binary files /dev/null and b/Resources/windows-libs/HDF5/lib/x64/hdf5.lib differ
diff --git a/Resources/windows-libs/HDF5/lib/x64/hdf5_cpp.lib b/Resources/windows-libs/HDF5/lib/x64/hdf5_cpp.lib
new file mode 100644
index 0000000000000000000000000000000000000000..9dce3a1e4eb13824a8bb9b98b4979cb112f1823a
Binary files /dev/null and b/Resources/windows-libs/HDF5/lib/x64/hdf5_cpp.lib differ
diff --git a/Resources/windows-libs/HDF5/lib/x64/szip.lib b/Resources/windows-libs/HDF5/lib/x64/szip.lib
new file mode 100644
index 0000000000000000000000000000000000000000..aec19e330aaa19a10bcc8223925a723d3eed19df
Binary files /dev/null and b/Resources/windows-libs/HDF5/lib/x64/szip.lib differ
diff --git a/Resources/windows-libs/HDF5/lib/x64/zlib.lib b/Resources/windows-libs/HDF5/lib/x64/zlib.lib
new file mode 100644
index 0000000000000000000000000000000000000000..ab44e00d57bfd86eecfd3076547ec2388e82fd28
Binary files /dev/null and b/Resources/windows-libs/HDF5/lib/x64/zlib.lib differ
diff --git a/Resources/windows-libs/HDF5/lib/x86/hdf5.lib b/Resources/windows-libs/HDF5/lib/x86/hdf5.lib
new file mode 100644
index 0000000000000000000000000000000000000000..5f77ba9abb016c6c211bcddd056949034ca3fdb4
Binary files /dev/null and b/Resources/windows-libs/HDF5/lib/x86/hdf5.lib differ
diff --git a/Resources/windows-libs/HDF5/lib/x86/hdf5_cpp.lib b/Resources/windows-libs/HDF5/lib/x86/hdf5_cpp.lib
new file mode 100644
index 0000000000000000000000000000000000000000..41cdaa76e431bb28db51e4378d94b5772d11d240
Binary files /dev/null and b/Resources/windows-libs/HDF5/lib/x86/hdf5_cpp.lib differ
diff --git a/Resources/windows-libs/HDF5/lib/x86/szip.lib b/Resources/windows-libs/HDF5/lib/x86/szip.lib
new file mode 100644
index 0000000000000000000000000000000000000000..bebb9e5391b21543aee199b4823caf148fa15549
Binary files /dev/null and b/Resources/windows-libs/HDF5/lib/x86/szip.lib differ
diff --git a/Resources/windows-libs/HDF5/lib/x86/zlib.lib b/Resources/windows-libs/HDF5/lib/x86/zlib.lib
new file mode 100644
index 0000000000000000000000000000000000000000..723710e914c81a346b22ae209eda6028cb726b6a
Binary files /dev/null and b/Resources/windows-libs/HDF5/lib/x86/zlib.lib differ
diff --git a/Source/AccessClass.cpp b/Source/AccessClass.cpp
index 281f9fde8c1e1a68243af86c0680817157ad1eda..df670c214c82e32411d04f27271f5ce01607b772 100644
--- a/Source/AccessClass.cpp
+++ b/Source/AccessClass.cpp
@@ -2,7 +2,7 @@
    ------------------------------------------------------------------
 
    This file is part of the Open Ephys GUI
-   Copyright (C) 2013 Open Ephys
+   Copyright (C) 2014 Open Ephys
 
    ------------------------------------------------------------------
 
@@ -24,14 +24,6 @@
 #include "AccessClass.h"
 
 #include "UI/UIComponent.h"
-// #include "UI/EditorViewport.h"
-// #include "UI/ProcessorList.h"
-// #include "UI/DataViewport.h"
-// #include "UI/ControlPanel.h"
-// #include "UI/MessageCenter.h"
-// #include "UI/GraphViewer.h"
-// #include "Audio/AudioComponent.h"
-// #include "Processors/ProcessorGraph.h"
 
 void AccessClass::setUIComponent(UIComponent* ui_)
 {
diff --git a/Source/AccessClass.h b/Source/AccessClass.h
index 303150e1a83a4f3b055ede8b190cab2cb8968058..e27118fa366663b6a9432580b761f8d5d4cc5c92 100644
--- a/Source/AccessClass.h
+++ b/Source/AccessClass.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -31,7 +31,7 @@ class EditorViewport;
 class ProcessorList;
 class DataViewport;
 class ProcessorGraph;
-class MessageCenter;
+class MessageCenterEditor;
 class ControlPanel;
 class AudioComponent;
 class GraphViewer;
@@ -102,7 +102,7 @@ public:
     }
 
     /** Returns a pointer to the application's MessageCenter. */
-    MessageCenter* getMessageCenter()
+    MessageCenterEditor* getMessageCenter()
     {
         return mc;
     }
@@ -133,7 +133,7 @@ private:
     DataViewport* dv;
     ProcessorGraph* pg;
     ControlPanel* cp;
-    MessageCenter* mc;
+    MessageCenterEditor* mc;
     AudioComponent* ac;
     GraphViewer* gv;
 
diff --git a/Source/Audio/AudioComponent.cpp b/Source/Audio/AudioComponent.cpp
index ddfc55594edb078f186ab940e9431c0cb2d62fb0..b3db191270a18e0a856145e2a8932917e1bcad09 100644
--- a/Source/Audio/AudioComponent.cpp
+++ b/Source/Audio/AudioComponent.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Audio/AudioComponent.h b/Source/Audio/AudioComponent.h
index a77e5beaef83bc2626f7d96f12330a51161496d3..ccf050a6c07a4b10921daca6f7b221a1ffeb1467 100644
--- a/Source/Audio/AudioComponent.h
+++ b/Source/Audio/AudioComponent.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/DoxygenMainPage.h b/Source/DoxygenMainPage.h
index c72a095f7d8508d484dfb5fcf8d3ec67ae62e571..3f22c8c12cf97b94d92b8f226d35678ce1148c49 100644
--- a/Source/DoxygenMainPage.h
+++ b/Source/DoxygenMainPage.h
@@ -7,6 +7,6 @@
 
   \section install More info
 
-  \subsection step1 More info will appear here soon!
+  \subsection step1 More info will appear here eventually!
 
 */
\ No newline at end of file
diff --git a/Source/Main.cpp b/Source/Main.cpp
index ba1eeb994441f9d076c5b2ea14ecde17d5f5921f..f718d2ce77ebd09d9c76ae123dcdcaaf4af3ad4d 100644
--- a/Source/Main.cpp
+++ b/Source/Main.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -75,6 +75,7 @@ public:
                 std::cout.rdbuf(console_out.rdbuf());
 				std::cerr.rdbuf(console_out.rdbuf());
                 SetConsoleTitle("Debug Console");
+				std::cout << "Debug console..." << std::endl;
             }
         }
 
diff --git a/Source/MainWindow.cpp b/Source/MainWindow.cpp
index ace0b88ec056a01657b93a652ea1096a4e5341d9..c4d0c530db9a770eb1ee361203cd95fc47bbe8ed 100644
--- a/Source/MainWindow.cpp
+++ b/Source/MainWindow.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -23,7 +23,6 @@
 
 #include "MainWindow.h"
 #include <stdio.h>
-
 //-----------------------------------------------------------------------
 
 MainWindow::MainWindow()
diff --git a/Source/MainWindow.h b/Source/MainWindow.h
index 82b4af6be0762e2fb6c98e166cddfd6b9caa5c51..5cf9976d15cfd05f095cf5ec2c2a81a357cc0fae 100644
--- a/Source/MainWindow.h
+++ b/Source/MainWindow.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -27,7 +27,7 @@
 #include "../JuceLibraryCode/JuceHeader.h"
 #include "UI/UIComponent.h"
 #include "Audio/AudioComponent.h"
-#include "Processors/ProcessorGraph.h"
+#include "Processors/ProcessorGraph/ProcessorGraph.h"
 
 /**
   The main window for the GUI application.
diff --git a/Source/OpenGL.h b/Source/OpenGL.h
deleted file mode 100644
index d558915e36b815081f37f025b529a58ea604ca19..0000000000000000000000000000000000000000
--- a/Source/OpenGL.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-    ------------------------------------------------------------------
-
-    This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
-
-    ------------------------------------------------------------------
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
-#if JUCE_WINDOWS
-#include <gl/gl.h>
-#include <gl/glu.h>
-#elif JUCE_LINUX
-#include <GL/gl.h>
-#include <GL/glut.h>
-#undef KeyPress
-#elif JUCE_IPHONE
-#include <OpenGLES/ES1/gl.h>
-#include <OpenGLES/ES1/glext.h>
-#elif JUCE_MAC
-#include <GLUT/glut.h>
-#endif
-
-#ifndef GL_BGRA_EXT
-#define GL_BGRA_EXT 0x80e1
-#endif
-
-#include <FTGL/ftgl.h>
\ No newline at end of file
diff --git a/Source/Processors/ArduinoOutput.cpp b/Source/Processors/ArduinoOutput/ArduinoOutput.cpp
similarity index 95%
rename from Source/Processors/ArduinoOutput.cpp
rename to Source/Processors/ArduinoOutput/ArduinoOutput.cpp
index 345336f44ca01fd27b46f8ab394ddbe93365d673..053020e76980a015ff39f4b531e81b38f337fb8c 100755
--- a/Source/Processors/ArduinoOutput.cpp
+++ b/Source/Processors/ArduinoOutput/ArduinoOutput.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/ArduinoOutput.h b/Source/Processors/ArduinoOutput/ArduinoOutput.h
similarity index 88%
rename from Source/Processors/ArduinoOutput.h
rename to Source/Processors/ArduinoOutput/ArduinoOutput.h
index 451a7d21f10dd31dd3188c9ffc8e46c456e2c6e8..86f6480dbedf6b8bdff342f5505bfd7f12847921 100755
--- a/Source/Processors/ArduinoOutput.h
+++ b/Source/Processors/ArduinoOutput/ArduinoOutput.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,11 +24,11 @@
 #ifndef __ARDUINOOUTPUT_H_F7BDA585__
 #define __ARDUINOOUTPUT_H_F7BDA585__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 
-#include "Editors/ArduinoOutputEditor.h"
-#include "Serial/ofArduino.h"
-#include "GenericProcessor.h"
+#include "ArduinoOutputEditor.h"
+#include "../Serial/ofArduino.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 
 /**
diff --git a/Source/Processors/Editors/ArduinoOutputEditor.cpp b/Source/Processors/ArduinoOutput/ArduinoOutputEditor.cpp
similarity index 94%
rename from Source/Processors/Editors/ArduinoOutputEditor.cpp
rename to Source/Processors/ArduinoOutput/ArduinoOutputEditor.cpp
index b0b635ce7ec1e37d3a2cedcb0892099c3d5a8789..90d38ef1a53757f0798b44f11fae18ab5d632c50 100644
--- a/Source/Processors/Editors/ArduinoOutputEditor.cpp
+++ b/Source/Processors/ArduinoOutput/ArduinoOutputEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/Editors/ArduinoOutputEditor.h b/Source/Processors/ArduinoOutput/ArduinoOutputEditor.h
similarity index 89%
rename from Source/Processors/Editors/ArduinoOutputEditor.h
rename to Source/Processors/ArduinoOutput/ArduinoOutputEditor.h
index 18bf0754a7dc1c01c7df136bdf34b16418f220b9..ab99d8beb85d012ed12e2b80f9b2fd74e7e7ebca 100644
--- a/Source/Processors/Editors/ArduinoOutputEditor.h
+++ b/Source/Processors/ArduinoOutput/ArduinoOutputEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,8 +26,8 @@
 
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
-#include "ImageIcon.h"
+#include "../Editors/GenericEditor.h"
+#include "../Editors/ImageIcon.h"
 
 class ImageIcon;
 
diff --git a/Source/Processors/Editors/AudioEditor.cpp b/Source/Processors/AudioNode/AudioEditor.cpp
similarity index 95%
rename from Source/Processors/Editors/AudioEditor.cpp
rename to Source/Processors/AudioNode/AudioEditor.cpp
index a3140e0334d9df3745be414c73d8f19fdbd8522d..ce49cc8ec94a16ea38cc54a1124d09e6ddb507d0 100755
--- a/Source/Processors/Editors/AudioEditor.cpp
+++ b/Source/Processors/AudioNode/AudioEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -83,7 +83,7 @@ void AudioWindowButton::setText(String text)
 }
 
 AudioEditor::AudioEditor(AudioNode* owner)
-    : AudioProcessorEditor(owner), lastValue(1.0f), acw(0), isEnabled(true)
+    : AudioProcessorEditor(owner), lastValue(1.0f), isEnabled(true), acw(0)
 
 {
 
diff --git a/Source/Processors/Editors/AudioEditor.h b/Source/Processors/AudioNode/AudioEditor.h
similarity index 93%
rename from Source/Processors/Editors/AudioEditor.h
rename to Source/Processors/AudioNode/AudioEditor.h
index 2cc91107d32ab8a7501b8f39454da438f80a0bde..c4808ba8dc1b9aa11edc4b0179083be73f474e8a 100755
--- a/Source/Processors/Editors/AudioEditor.h
+++ b/Source/Processors/AudioNode/AudioEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,7 +25,7 @@
 
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "../AudioNode.h"
+#include "AudioNode.h"
 #include <stdio.h>
 
 class AudioNode;
diff --git a/Source/Processors/AudioNode.cpp b/Source/Processors/AudioNode/AudioNode.cpp
similarity index 82%
rename from Source/Processors/AudioNode.cpp
rename to Source/Processors/AudioNode/AudioNode.cpp
index bfd9c8ca986e1eeda036d40dbfd7918bd4f0290b..53d3339624768a4e73a505a4eb46cbb93b912d45 100755
--- a/Source/Processors/AudioNode.cpp
+++ b/Source/Processors/AudioNode/AudioNode.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -21,9 +21,9 @@
 
 */
 
+#include <cmath>
 
 #include "AudioNode.h"
-#include "Channel.h"
 
 AudioNode::AudioNode()
     : GenericProcessor("Audio Node"), audioEditor(0), volume(0.00001f), noiseGateLevel(0.0f),
@@ -140,7 +140,8 @@ void AudioNode::setParameter(int parameterIndex, float newValue)
     else if (parameterIndex == 2)
     {
         // noiseGateLevel level
-        noiseGateLevel = newValue; // in microVolts
+
+        expander.setThreshold(newValue); // in microVolts
 
     }
     else if (parameterIndex == 100)
@@ -334,7 +335,7 @@ void AudioNode::process(AudioSampleBuffer& buffer,
                     // std::cout << "Samples remaining in incoming buffer: " << orphanedSamples << std::endl;
 
 
-                    if (orphanedSamples > 0)
+                    if (orphanedSamples > 0 && (samplesInBackupBuffer + orphanedSamples < backupBuffer->getNumSamples()))
                     {
                         backupBuffer->addFrom(0,       // destination channel
                                               samplesInBackupBuffer,           // destination start sample
@@ -354,20 +355,17 @@ void AudioNode::process(AudioSampleBuffer& buffer,
                                               gain       // gain to apply
                                              );
 
-                    }
+					}
+					else {
+						samplesInBackupBuffer = 0; // just throw out the buffer in the case of an overrun
+											       // not ideal, but the output still sounds fine
+					}
 
                     // Simple implementation of a "noise gate" on audio output
-                    float* leftChannelData = buffer.getWritePointer(0);
-                    float* rightChannelData = buffer.getWritePointer(1);
-                    float gateLevel = noiseGateLevel * gain; // uVolts scaled by gain
+                    expander.process(buffer.getWritePointer(0), // left channel
+                                       buffer.getWritePointer(1), // right channel
+                                       buffer.getNumSamples());
 
-                    for (int m = 0; m < buffer.getNumSamples(); m++)
-                    {
-                        if (fabs(leftChannelData[m])  < gateLevel)
-                            leftChannelData[m] = 0;
-                        if (fabs(rightChannelData[m]) < gateLevel)
-                            rightChannelData[m] = 0;
-                    }
                 }
             }
 
@@ -378,3 +376,70 @@ void AudioNode::process(AudioSampleBuffer& buffer,
 
     }
 }
+
+// ==========================================================
+
+Expander::Expander()
+{
+  threshold = 1.f;
+  output = 1.f;
+    
+  env = 0.f;
+  gain = 1.f;
+
+  setAttack(1.0f);
+  setRelease(1.0f);
+  setRatio(1.2); // ratio > 1.0 will decrease gain below threshold
+}
+
+void Expander::setThreshold(float value)
+{
+    threshold = value;
+    transfer_B = output * pow(threshold, -transfer_A);
+
+    std::cout << "Threshold set to " << threshold << std::endl;
+    std::cout << "transfer_B set to " << transfer_B << std::endl;
+}
+
+
+void Expander::setRatio(float value)
+{
+    transfer_A = value - 1.f;
+    transfer_B = output * pow(threshold, -transfer_A);
+}
+
+
+void Expander::setAttack(float value)
+{
+    attack = exp(-1.f/value);
+}
+
+
+void Expander::setRelease(float value)
+{
+    release = exp(-1.f/value);
+    envelope_decay = exp(-4.f/value); /* = exp(-1/(0.25*value)) */
+}
+
+
+void Expander::process(float* leftChan, float* rightChan, int numSamples)
+{
+  float det, transfer_gain;
+
+  for(int i = 0; i < numSamples; i++)
+  {
+      det = jmax(fabs(leftChan[i]),fabs(rightChan[i]));
+      det += 10e-30f; /* add tiny DC offset (-600dB) to prevent denormals */
+
+      env = det >= env ? det : det + envelope_decay*(env-det);
+
+      transfer_gain = env < threshold ? pow(env, transfer_A) * transfer_B : output;
+
+      gain = transfer_gain < gain ?
+                      transfer_gain + attack * (gain - transfer_gain) :
+                      transfer_gain + release * (gain - transfer_gain);
+
+      leftChan[i] = leftChan[i] * gain; 
+      rightChan[i] = rightChan[i] * gain;
+  }
+}
\ No newline at end of file
diff --git a/Source/Processors/AudioNode.h b/Source/Processors/AudioNode/AudioNode.h
similarity index 83%
rename from Source/Processors/AudioNode.h
rename to Source/Processors/AudioNode/AudioNode.h
index 011ae3af5597005c92028faec62966e323c9babe..c6fda84453558d968420e3f5abe250bc1a1f1639 100755
--- a/Source/Processors/AudioNode.h
+++ b/Source/Processors/AudioNode/AudioNode.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,13 +25,13 @@
 #define __AUDIONODE_H_AF61F3C5__
 
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 #include <stdio.h>
 
-#include "GenericProcessor.h"
-#include "Editors/AudioEditor.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "AudioEditor.h"
 
-#include "Channel.h"
+#include "../Channel/Channel.h"
 
 class AudioEditor;
 
@@ -57,6 +57,27 @@ class AudioEditor;
 
 */
 
+class Expander
+{
+public:
+  Expander();
+  void setThreshold(float);
+  void setRatio(float);
+  void setAttack(float);
+  void setRelease(float);
+  void reset();
+
+  void process(float* leftChan, float* rightChan, int numSamples);
+
+private:
+    float   threshold;
+    float   attack, release, envelope_decay;
+    float   output;
+    float   transfer_A, transfer_B;
+    float   env, gain;
+
+};
+
 class AudioNode : public GenericProcessor
 {
 public:
@@ -118,6 +139,8 @@ private:
 
     bool bufferSwap;
 
+    Expander expander;
+
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(AudioNode);
 
 };
diff --git a/Source/Processors/AudioResamplingNode.cpp b/Source/Processors/AudioResamplingNode/AudioResamplingNode.cpp
similarity index 100%
rename from Source/Processors/AudioResamplingNode.cpp
rename to Source/Processors/AudioResamplingNode/AudioResamplingNode.cpp
diff --git a/Source/Processors/AudioResamplingNode.h b/Source/Processors/AudioResamplingNode/AudioResamplingNode.h
similarity index 93%
rename from Source/Processors/AudioResamplingNode.h
rename to Source/Processors/AudioResamplingNode/AudioResamplingNode.h
index b3a85b7bcd6dfd8fe387b562fe897d29f3b2617d..77cda548eaa6c289bbcc27162632b62881a9c740 100644
--- a/Source/Processors/AudioResamplingNode.h
+++ b/Source/Processors/AudioResamplingNode/AudioResamplingNode.h
@@ -24,11 +24,9 @@
 #ifndef __AUDIORESAMPLINGNODE_H_CFAB182E__
 #define __AUDIORESAMPLINGNODE_H_CFAB182E__
 
-
-
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 #include "../Dsp/Dsp.h"
-#include "GenericProcessor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 /**
 
diff --git a/Source/Processors/Channel.cpp b/Source/Processors/Channel/Channel.cpp
similarity index 68%
rename from Source/Processors/Channel.cpp
rename to Source/Processors/Channel/Channel.cpp
index 27c891cd999447283c6bcb8a3edb6e37e044a824..ec382768aeed4c23ad53111c3d8e59eb0030151b 100644
--- a/Source/Processors/Channel.cpp
+++ b/Source/Processors/Channel/Channel.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,8 +24,8 @@
 #include "Channel.h"
 
 
-Channel::Channel(GenericProcessor* p, int n) : num(n), eventType(0), processor(p), sampleRate(44100.0), bitVolts(1.0f), isADCchannel(false),isEventChannel(false), isMonitored(false), isEnabled(true), isRecording(false)
-
+Channel::Channel(GenericProcessor* p, int n) : num(n), eventType(0), processor(p), sampleRate(44100.0),
+	 isEventChannel(false), isADCchannel(false), isMonitored(false),  isEnabled(true), recordIndex(-1), bitVolts(1.0f), isRecording(false)
 {
     nodeId = p->getNodeId();
 
@@ -46,9 +46,28 @@ Channel::Channel(const Channel& ch)
     nodeId = ch.nodeId;
     num = ch.num;
 
+    originalStream = ch.originalStream;
+    originalChannel = ch.originalChannel;
+
     setRecordState(false);
 }
 
+float Channel::getChannelGain()
+{
+    return bitVolts;
+}
+
+String Channel::getChannelName()
+{
+    return name;
+}
+
+void Channel::setGain(float gain)
+{
+    bitVolts = gain;
+}
+
+
 void Channel::setProcessor(GenericProcessor* p)
 {
     processor = p;
@@ -64,10 +83,21 @@ String Channel::getName()
 void Channel::setRecordState(bool t)
 {
 
-    isRecording = t;
-    //std::cout << "Setting record status for channel " <<
-    //            nodeId << " - " << num << " to " << t << std::endl;
+   isRecording = t;
+   //std::cout << "Setting record status for channel " <<
+     //            nodeId << " - " << num << " to " << t << std::endl;
+
+}
+
+void Channel::setType(channelType t)
+{
+    type = t;
+}
+
 
+channelType Channel::getType()
+{
+    return type;
 }
 
 void Channel::setName(String name_)
diff --git a/Source/Processors/Channel.h b/Source/Processors/Channel/Channel.h
similarity index 74%
rename from Source/Processors/Channel.h
rename to Source/Processors/Channel/Channel.h
index e13299052cc42652dd2f61de4e22d6eba48351b6..737f1bb2835d0b4feb842b891a7de7a9366527b2 100644
--- a/Source/Processors/Channel.h
+++ b/Source/Processors/Channel/Channel.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,9 +25,9 @@
 #define __CHANNEL_H_DABDFE3F__
 
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 
-#include "GenericProcessor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 #include <stdio.h>
 
@@ -47,6 +47,7 @@ class GenericProcessor;
 
 */
 
+
 class Channel
 
 {
@@ -64,6 +65,12 @@ public:
     /** Sets the name of a given channel. */
     void setName(String);
 
+   /** Sets the type of a given channel. */
+    void setType(channelType t);
+
+   /** Sets the type of a given channel. */
+    channelType getType();
+
     /** Restores the default settings for a given channel. */
     void reset();
 
@@ -74,10 +81,16 @@ public:
     void setRecordState(bool t); // {isRecording = t;}
 
     /** Sets whether or not the channel will record. */
-    bool getRecordState()
-    {
-        return isRecording;
-    }
+    bool getRecordState() {return isRecording;}
+
+    /** Sets a new channel gain by modifying bitVolts */
+    void setGain(float gain);
+
+    /** returns channel's name */
+    String getChannelName();
+
+    /** returns current gain */
+    float getChannelGain();
 
     /** The channel number.*/
     int num;
@@ -91,25 +104,30 @@ public:
     /** Pointer to the channel's parent processor. */
     GenericProcessor* processor;
 
+    int originalStream;
+    int originalChannel;
+
+
     // crucial information:
     float sampleRate;
-    float bitVolts;
-
-    // boolean values:
+    channelType type;
+    
+     // boolean values:
     bool isEventChannel;
     bool isADCchannel;
     bool isMonitored;
     bool isEnabled;
 
-    // file info (for disk writing):
-    String filename;
-    FILE* file;
+    // file info (for disk writing). Meaning depends on RecordEngine
+	int recordIndex;
 
     String name;
 
+    float bitVolts;
+
 private:
 
-    bool isRecording;
+    bool isRecording; 
 
     /** Generates a default name, based on the channel number. */
     void createDefaultName();
diff --git a/Source/Processors/Editors/ChannelMappingEditor.cpp b/Source/Processors/ChannelMappingNode/ChannelMappingEditor.cpp
similarity index 93%
rename from Source/Processors/Editors/ChannelMappingEditor.cpp
rename to Source/Processors/ChannelMappingNode/ChannelMappingEditor.cpp
index c18fa487ba14d52ade34b4fd56df33aa26700eb0..4ad9ae72d9da68ac452bb2d67d1c4009733cb485 100644
--- a/Source/Processors/Editors/ChannelMappingEditor.cpp
+++ b/Source/Processors/ChannelMappingNode/ChannelMappingEditor.cpp
@@ -2,7 +2,7 @@
 ------------------------------------------------------------------
 
 This file is part of the Open Ephys GUI
-Copyright (C) 2013 Open Ephys
+Copyright (C) 2014 Open Ephys
 
 ------------------------------------------------------------------
 
@@ -23,9 +23,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 #include "ChannelMappingEditor.h"
-#include "../ChannelMappingNode.h"
+#include "ChannelMappingNode.h"
 #include "../../UI/EditorViewport.h"
-#include "ChannelSelector.h"
+#include "../Editors/ChannelSelector.h"
 #include <stdio.h>
 
 
@@ -33,7 +33,7 @@ ChannelMappingEditor::ChannelMappingEditor(GenericProcessor* parentNode, bool us
     : GenericEditor(parentNode, useDefaultParameterEditors), previousChannelCount(0), isConfigured(false)
 
 {
-    desiredWidth = 340;
+    desiredWidth = 350;
 
     scrollDistance = 0;
 
@@ -58,6 +58,19 @@ ChannelMappingEditor::ChannelMappingEditor(GenericProcessor* parentNode, bool us
     resetButton->setClickingTogglesState(false);
     resetButton->setEnabled(false);
 
+    upButton = new TriangleButton(1);
+    upButton->addListener(this);
+    upButton->setBounds(320,30,10,8);
+    addAndMakeVisible(upButton);
+    upButton->setVisible(false);
+
+    downButton = new TriangleButton(2);
+    downButton->addListener(this);
+    downButton->setBounds(320,45,10,8);
+    addAndMakeVisible(downButton);
+    downButton->setVisible(false);
+
+
     //    channelSelector->setRadioStatus(true);
 
     for (int i = 0 ; i < NUM_REFERENCES; i++)
@@ -188,6 +201,15 @@ void ChannelMappingEditor::createElectrodeButtons(int numNeeded, bool clearPrevi
     channelSelector->setRadioStatus(true);
 
     refreshButtonLocations();
+
+    if (numNeeded > 100)
+    {
+        upButton->setVisible(true);
+        downButton->setVisible(true);
+    } else {
+        upButton->setVisible(false);
+        downButton->setVisible(false);
+    }
 }
 
 void ChannelMappingEditor::refreshButtonLocations()
@@ -471,6 +493,28 @@ void ChannelMappingEditor::buttonEvent(Button* button)
 
 
         }
+    } else if (button == upButton)
+    {
+
+        scrollDistance -= 1;
+
+        if (scrollDistance < 0)
+            scrollDistance = 0;
+
+        refreshButtonLocations();
+
+    } else if (button == downButton)
+    {
+
+        float maxScrollDistance = ceil(float(electrodeButtons.size() - 80) / 16.0f);
+        
+        scrollDistance += 1;
+
+        if (scrollDistance > maxScrollDistance)
+            scrollDistance = maxScrollDistance;
+
+        refreshButtonLocations();
+    
     }
 }
 
diff --git a/Source/Processors/Editors/ChannelMappingEditor.h b/Source/Processors/ChannelMappingNode/ChannelMappingEditor.h
similarity index 88%
rename from Source/Processors/Editors/ChannelMappingEditor.h
rename to Source/Processors/ChannelMappingNode/ChannelMappingEditor.h
index 1def1ca825b9e6182be3bacd6c5b5b6779c64684..26aac8cd323181267e7d5e8b0ef9198f7085608f 100644
--- a/Source/Processors/Editors/ChannelMappingEditor.h
+++ b/Source/Processors/ChannelMappingNode/ChannelMappingEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,9 +26,9 @@
 
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
-#include "ElectrodeButtons.h" // for ElectrodeButton and ElectrodeEditorButton
+#include "../Editors/ElectrodeButtons.h" // for ElectrodeButton and ElectrodeEditorButton
 
 #define NUM_REFERENCES 4
 
@@ -83,6 +83,8 @@ private:
     ScopedPointer<ElectrodeEditorButton> selectAllButton;
     ScopedPointer<ElectrodeEditorButton> modifyButton;
     ScopedPointer<ElectrodeEditorButton> resetButton;
+    ScopedPointer<TriangleButton> upButton;
+    ScopedPointer<TriangleButton> downButton;
 
     Array<int> channelArray;
     Array<int> referenceArray;
diff --git a/Source/Processors/ChannelMappingNode.cpp b/Source/Processors/ChannelMappingNode/ChannelMappingNode.cpp
similarity index 95%
rename from Source/Processors/ChannelMappingNode.cpp
rename to Source/Processors/ChannelMappingNode/ChannelMappingNode.cpp
index f99ea6c6f5451e77218c647fa048e503eca54abd..1fa005652daa87683bc7dc13d390a6fe0d3af56d 100644
--- a/Source/Processors/ChannelMappingNode.cpp
+++ b/Source/Processors/ChannelMappingNode/ChannelMappingNode.cpp
@@ -2,7 +2,7 @@
 ------------------------------------------------------------------
 
 This file is part of the Open Ephys GUI
-Copyright (C) 2013 Open Ephys
+Copyright (C) 2014 Open Ephys
 
 ------------------------------------------------------------------
 
@@ -23,7 +23,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdio.h>
 #include "ChannelMappingNode.h"
-#include "Editors/ChannelMappingEditor.h"
+#include "ChannelMappingEditor.h"
 
 
 
diff --git a/Source/Processors/ChannelMappingNode.h b/Source/Processors/ChannelMappingNode/ChannelMappingNode.h
similarity index 89%
rename from Source/Processors/ChannelMappingNode.h
rename to Source/Processors/ChannelMappingNode/ChannelMappingNode.h
index 6a69d0e1398094f450275b0b8c51af07e6a8be22..46f5572589685ad9f1b81724c517aca99c06d638 100644
--- a/Source/Processors/ChannelMappingNode.h
+++ b/Source/Processors/ChannelMappingNode/ChannelMappingNode.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,10 +25,10 @@
 #define __CHANNELMAPPINGNODE_H_330E50E0__
 
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 
 
-#include "GenericProcessor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 
 /**
diff --git a/Source/Processors/DataThreads/DataBuffer.cpp b/Source/Processors/DataThreads/DataBuffer.cpp
index 70a146bf1fa640bf4c2ec20c2ae8939a701d4a29..3eabce007cf11ac85efbb28f7a985b2d39ea49a4 100755
--- a/Source/Processors/DataThreads/DataBuffer.cpp
+++ b/Source/Processors/DataThreads/DataBuffer.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/DataThreads/DataBuffer.h b/Source/Processors/DataThreads/DataBuffer.h
index 01930fbdce8a3b0eda5ea4102c21ce337866ce3a..7bcb29a0bdb8ac1d4add69af745ab7d8af767f13 100755
--- a/Source/Processors/DataThreads/DataBuffer.h
+++ b/Source/Processors/DataThreads/DataBuffer.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/DataThreads/DataThread.cpp b/Source/Processors/DataThreads/DataThread.cpp
index aeebad2b5dde064a06294ed8b35b2e20758e80e3..5c6de4151ad9308bc3c61b7a99f3ac3a749cd5e0 100755
--- a/Source/Processors/DataThreads/DataThread.cpp
+++ b/Source/Processors/DataThreads/DataThread.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,7 +22,7 @@
 */
 
 #include "DataThread.h"
-#include "../SourceNode.h"
+#include "../SourceNode/SourceNode.h"
 
 
 DataThread::DataThread(SourceNode* s) : Thread("Data Thread"), dataBuffer(0)
diff --git a/Source/Processors/DataThreads/DataThread.h b/Source/Processors/DataThreads/DataThread.h
index e91cb608799657b99fc1bbadc232f179ed08b486..6795e28169d826ca552ad9c3b566cd159bc2f25a 100755
--- a/Source/Processors/DataThreads/DataThread.h
+++ b/Source/Processors/DataThreads/DataThread.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -27,6 +27,7 @@
 #include "../../../JuceLibraryCode/JuceHeader.h"
 #include <stdio.h>
 #include "DataBuffer.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 class SourceNode;
 
@@ -92,6 +93,30 @@ public:
     {
         return 0;
     }
+    virtual int modifyChannelName(channelType t, int stream, int ch, String newName)
+    {
+        return -1;
+    }
+    virtual int modifyChannelGain(channelType t, int stream, int ch, float gain)
+    {
+        return -1;
+    }
+    virtual void setDefaultNamingScheme(int scheme)
+    {
+    }
+
+    virtual void getChannelsInfo(StringArray &Names, Array<channelType> &type, Array<int> &stream, Array<int> &originalChannelNumber, Array<float> &gains)
+    {
+    };
+    virtual void getEventChannelNames(StringArray &names)
+    {
+    }
+
+    /** Returns the number of ADC channels of the data source.*/
+    virtual int getNumADCchannels()
+    {
+        return 0;
+    }
 
     /** Changes the names of channels, if the thread needs custom names. */
     virtual void updateChannelNames() { }
diff --git a/Source/Processors/DataThreads/EcubeEditor.cpp b/Source/Processors/DataThreads/EcubeEditor.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fa9c7aecc35bdf99306de3f5b244bb75a02eed5f
--- /dev/null
+++ b/Source/Processors/DataThreads/EcubeEditor.cpp
@@ -0,0 +1,173 @@
+/*
+------------------------------------------------------------------
+
+This file is part of the Open Ephys GUI
+Copyright (C) 2014 Open Ephys
+Copyright (C) 2014 Michael Borisov
+
+------------------------------------------------------------------
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "EcubeEditor.h"
+
+#include "EcubeThread.h"
+
+#include <stdio.h>
+
+EcubeEditor::EcubeEditor(GenericProcessor* parentNode, bool useDefaultParameterEditors = true)
+: GenericEditor(parentNode, useDefaultParameterEditors)
+
+{
+    desiredWidth = 180;
+
+    ipLabel = new Label("IP address label", "Address");
+    ipLabel->setBounds(35, 80, 180, 20);
+    ipLabel->setFont(Font("Small Text", 12, Font::plain));
+    addAndMakeVisible(ipLabel);
+
+    ipValue = new Label("IP address value", "127.0.0.1");
+    ipValue->setBounds(40, 50, 60, 20);
+    ipValue->setFont(Font("Default", 15, Font::plain));
+    ipValue->setColour(Label::textColourId, Colours::white);
+    ipValue->setColour(Label::backgroundColourId, Colours::grey);
+    ipValue->setEditable(true);
+    ipValue->addListener(this);
+    addAndMakeVisible(ipValue);
+
+}
+
+EcubeEditor::~EcubeEditor()
+{
+
+}
+
+void EcubeEditor::labelTextChanged(Label* label)
+{/*
+    FilterNode* fn = (FilterNode*)getProcessor();
+
+    Value val = label->getTextValue();
+    double requestedValue = double(val.getValue());
+
+    if (requestedValue < 0.01 || requestedValue > 10000)
+    {
+        sendActionMessage("Value out of range.");
+
+        if (label == highCutValue)
+        {
+            label->setText(lastHighCutString, dontSendNotification);
+            lastHighCutString = label->getText();
+        }
+        else
+        {
+            label->setText(lastLowCutString, dontSendNotification);
+            lastLowCutString = label->getText();
+        }
+
+        return;
+    }
+
+    Array<int> chans = getActiveChannels();
+
+    // This needs to change, since there's not enough feedback about whether
+    // or not individual channel settings were altered:
+
+    for (int n = 0; n < chans.size(); n++)
+    {
+
+        if (label == highCutValue)
+        {
+            double minVal = fn->getLowCutValueForChannel(n);
+
+            if (requestedValue > minVal)
+            {
+                fn->setCurrentChannel(n);
+                fn->setParameter(1, requestedValue);
+            }
+
+            lastHighCutString = label->getText();
+
+        }
+        else
+        {
+            double maxVal = fn->getHighCutValueForChannel(n);
+
+            if (requestedValue < maxVal)
+            {
+                fn->setCurrentChannel(n);
+                fn->setParameter(0, requestedValue);
+            }
+
+            lastLowCutString = label->getText();
+        }
+
+    }
+*/
+}
+
+
+void EcubeEditor::buttonEvent(Button* button)
+{
+
+    if (!acquisitionIsActive)
+    {
+
+/*        if (button == fileButton)
+        {
+            //std::cout << "Button clicked." << std::endl;
+            FileChooser chooseFileReaderFile("Please select the file you want to load...",
+                lastFilePath,
+                "*");
+
+            if (chooseFileReaderFile.browseForFileToOpen())
+            {
+                // Use the selected file
+                setFile(chooseFileReaderFile.getResult().getFullPathName());
+
+                // lastFilePath = fileToRead.getParentDirectory();
+
+                // thread->setFile(fileToRead.getFullPathName());
+
+                // fileNameLabel->setText(fileToRead.getFileName(),false);
+            }
+        }
+        */
+    }
+}
+
+void EcubeEditor::saveEditorParameters(XmlElement* xml)
+{
+
+    // XmlElement* fileName = xml->createNewChildElement("FILENAME");
+    // fileName->addTextElement(lastFilePath.getFullPathName());
+
+}
+
+void EcubeEditor::loadEditorParameters(XmlElement* xml)
+{
+
+    // forEachXmlChildElement(*xml, xmlNode)
+    //    {
+    //       if (xmlNode->hasTagName("FILENAME"))
+    //       {
+
+    //           lastFilePath = File(xmlNode->getText());
+    //           thread->setFile(lastFilePath.getFullPathName());
+    //           fileNameLabel->setText(lastFilePath.getFullPathName(),false);
+    //       }
+    //   }
+
+}
diff --git a/Source/Processors/DataThreads/EcubeEditor.h b/Source/Processors/DataThreads/EcubeEditor.h
new file mode 100644
index 0000000000000000000000000000000000000000..a8c800092415e1996b45f338089f2b630e0b02be
--- /dev/null
+++ b/Source/Processors/DataThreads/EcubeEditor.h
@@ -0,0 +1,65 @@
+/*
+------------------------------------------------------------------
+
+This file is part of the Open Ephys GUI
+Copyright (C) 2014 Open Ephys
+Copyright (C) 2014 Michael Borisov
+
+------------------------------------------------------------------
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef __ECUBEEDITOR_H_D3EC8BA8__
+#define __ECUBEEDITOR_H_D3EC8BA8__
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../Editors/GenericEditor.h"
+
+
+
+/**
+
+User interface for the "eCube" source node.
+
+@see SourceNode, eCube
+
+*/
+
+class EcubeEditor : public GenericEditor,
+    public Label::Listener
+{
+public:
+    EcubeEditor(GenericProcessor* parentNode, bool useDefaultParameterEditors);
+    virtual ~EcubeEditor();
+
+    void buttonEvent(Button* button);
+    void labelTextChanged(Label* label);
+
+    void saveEditorParameters(XmlElement*);
+    void loadEditorParameters(XmlElement*);
+
+private:
+    ScopedPointer<Label> ipLabel;
+    ScopedPointer<Label> ipValue;
+
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EcubeEditor);
+
+};
+
+
+
+#endif  // __ECUBEEDITOR_H_D3EC8BA8__
diff --git a/Source/Processors/DataThreads/EcubeThread.cpp b/Source/Processors/DataThreads/EcubeThread.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1e7535c00386d17abcb40f77e4c1d4079e6bf725
--- /dev/null
+++ b/Source/Processors/DataThreads/EcubeThread.cpp
@@ -0,0 +1,567 @@
+/*
+------------------------------------------------------------------
+
+This file is part of the Open Ephys GUI
+Copyright (C) 2014 Michael Borisov
+
+------------------------------------------------------------------
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+#include "EcubeThread.h"
+#include "../SourceNode/SourceNode.h"
+#include "../../UI/EcubeDialogComponent.h"
+#include <stdint.h>
+
+#ifdef ECUBE_COMPILE
+#import "libid:60C0AAC2-1E0B-4FE5-A921-AF9CEEAAA582"
+
+using namespace ecubeapiLib;
+
+class EcubeDevInt
+{
+public:
+
+    enum DataFormat
+    {
+        dfSeparateChannelsAnalog,
+        dfInterleavedChannelsAnalog,
+        dfDigital
+    };
+    IEcubePtr pEcube;
+    IEcubeDevicePtr pDevice;
+    IEcubeModulePtr pModule;
+    unsigned n_channel_objects;
+    std::map<int, int> chid_map;
+    IEcubeAnalogAcquisitionPtr pStrmA;
+    IEcubeDigitalInputStreamingPtr pStrmD;
+    HeapBlock<float, true> interleaving_buffer;
+    bool buf_timestamp_locked;
+    unsigned long buf_timestamp;
+    uint64 buf_timestamp64;
+    unsigned long int_buf_size;
+    DataFormat data_format;
+};
+
+static const char bits_port0[16] = { 23, 22, -1, 14, 11, -1, -1, 28, 12, 10, 27, 26, -1, -1, -1, -1 };
+static const char bits_port1[16] = { 20, 21, 19, 18, 13, 6, 4, 5, 3, 2, -1, -1, 29, -1, 24, 25 };
+static const char bits_port2[16] = { 16, 17, 15, 8, 9, 7, 0, 1, 31, 30, -1, -1, -1, -1, -1, -1 };
+
+
+
+static std::vector<std::wstring> SafeArrayToVecStr(SAFEARRAY* sa)
+{
+    HRESULT hr;
+    long lbound, ubound;
+
+    if (SafeArrayGetElemsize(sa) != sizeof(BSTR*))
+        _com_raise_error(E_FAIL);
+    if(SafeArrayGetDim(sa)!=1)
+        _com_raise_error(E_FAIL);
+    if (FAILED(hr = SafeArrayGetLBound(sa, 1, &lbound)))
+        _com_raise_error(hr);
+    if (FAILED(hr = SafeArrayGetUBound(sa, 1, &ubound)))
+        _com_raise_error(hr);
+
+    std::vector<std::wstring> result;
+    for (long index = lbound; index <= ubound; index++)
+    {
+        BSTR raw_bstr;
+        if (FAILED(hr = SafeArrayGetElement(sa, &index, &raw_bstr)))
+            _com_raise_error(hr);
+        _bstr_t bstr(raw_bstr, false);
+        result.push_back(raw_bstr);
+    }
+    return result;
+}
+
+static StringArray SafeArrayToStringArray(SAFEARRAY* sa)
+{
+    HRESULT hr;
+    long lbound, ubound;
+    VARTYPE vt;
+
+    hr = SafeArrayGetVartype(sa, &vt);
+    if (FAILED(hr))
+        _com_raise_error(hr);
+    if (vt!=VT_BSTR)
+        _com_raise_error(E_FAIL);
+    if (SafeArrayGetElemsize(sa) != sizeof(BSTR*))
+        _com_raise_error(E_FAIL);
+    if (SafeArrayGetDim(sa) != 1)
+        _com_raise_error(E_FAIL);
+    if (FAILED(hr = SafeArrayGetLBound(sa, 1, &lbound)))
+        _com_raise_error(hr);
+    if (FAILED(hr = SafeArrayGetUBound(sa, 1, &ubound)))
+        _com_raise_error(hr);
+
+    StringArray result;
+    for (long index = lbound; index <= ubound; index++)
+    {
+        BSTR raw_bstr;
+        if (FAILED(hr = SafeArrayGetElement(sa, &index, &raw_bstr)))
+            _com_raise_error(hr);
+        _bstr_t bstr(raw_bstr, false);
+        result.add(raw_bstr);
+    }
+    return result;
+}
+
+std::vector<std::wstring> GetEcubeModuleChannels(IEcubeModulePtr& mp)
+{
+    std::vector<std::wstring> chnames;
+    {
+        SAFEARRAY *sa = mp->GetChannels();
+        chnames = SafeArrayToVecStr(sa);
+        SafeArrayDestroy(sa); // ARTEM - Leaks a safearray if an exception is thrown here
+    }
+    return chnames;
+}
+
+EcubeThread::EcubeThread(SourceNode* sn) : DataThread(sn), numberingScheme(1), acquisition_running(false)
+{
+    try
+    {
+        EcubeDialogComponent component;
+        DialogWindow::LaunchOptions opt;
+        opt.dialogTitle = "eCube parameters";
+        opt.content = OptionalScopedPointer<Component>(&component, false);
+        opt.escapeKeyTriggersCloseButton = true;
+
+        pDevInt = new EcubeDevInt;
+        pDevInt->pEcube.CreateInstance(__uuidof(Ecube));
+        {
+            SAFEARRAY *sa = pDevInt->pEcube->DetectNetworkDevices();
+            StringArray a(SafeArrayToStringArray(sa)); // ARTEM - Leaks a safearray if an exception is thrown here
+            SafeArrayDestroy(sa);
+            component.SetDeviceNames(a);
+        }
+        int dres = opt.runModal();
+        if (dres != 1)
+        {
+            throw std::runtime_error("Operation cancelled");
+        }
+
+        pDevInt->pDevice = pDevInt->pEcube->OpenNetworkDevice(_bstr_t(component.GetAddressValue().toUTF16()));
+        pDevInt->n_channel_objects = 0;
+        {
+            String selmod = component.GetModuleName();
+            if (selmod == "Headstage(s)")
+            {
+                m_samplerate = 25000.0f;
+                pDevInt->data_format = EcubeDevInt::dfSeparateChannelsAnalog;
+                // Get status of headstage selection
+                bool selhs[10];
+                component.GetHeadstageSelection(selhs);
+                bool acq_created = false;
+                for (int i = 0; i < 10; i++)
+                {
+                    if (selhs[i])
+                    {
+                        String modname = "Headstage" + String(i + 1);
+                        pDevInt->pModule = pDevInt->pDevice->OpenModule(_bstr_t(modname.toUTF16()));
+                        std::vector<std::wstring> chnames = GetEcubeModuleChannels(pDevInt->pModule);
+                        for (int j = 0; j < chnames.size(); j++)
+                        {
+                            IEcubeChannelPtr pch = pDevInt->pModule->OpenChannel(chnames[j].c_str());
+                            if (!acq_created)
+                            {
+                                pDevInt->pStrmA = pDevInt->pEcube->CreateAnalogAcquisition(pch);
+                                acq_created = true;
+                            }
+                            else
+                                pDevInt->pStrmA->AddChannel(pch);
+                            pDevInt->chid_map[pch->GetID()] = pDevInt->n_channel_objects;
+                            pDevInt->n_channel_objects++;
+                        }
+                    }
+                }
+                dataBuffer = new DataBuffer(pDevInt->n_channel_objects, 10000);
+                // Create the interleaving buffer based on the number of channels
+                pDevInt->interleaving_buffer.malloc(sizeof(float)* 1500 * pDevInt->n_channel_objects);
+            }
+            else if (selmod == "Panel Analog Input")
+            {
+                pDevInt->pModule = pDevInt->pDevice->OpenModule(_bstr_t(L"PanelAnalogInput"));
+                m_samplerate = 25000.0f;// 40.0e6 / 572 original samplerate;
+                pDevInt->data_format = EcubeDevInt::dfInterleavedChannelsAnalog;
+                bool acq_created = false;
+                std::vector<std::wstring> chnames = GetEcubeModuleChannels(pDevInt->pModule);
+                for (int j = 0; j < chnames.size(); j++)
+                {
+                    IEcubeChannelPtr pch = pDevInt->pModule->OpenChannel(chnames[j].c_str());
+                    if (!acq_created)
+                    {
+                        pDevInt->pStrmA = pDevInt->pEcube->CreateAnalogAcquisition(pch);
+                        acq_created = true;
+                    }
+                    else
+                        pDevInt->pStrmA->AddChannel(pch);
+                    pDevInt->chid_map[pch->GetID()] = pDevInt->n_channel_objects;
+                    pDevInt->n_channel_objects++;
+                }
+                dataBuffer = new DataBuffer(32, 10000);
+                // The interleaving buffer is there just for short->float conversion
+                pDevInt->interleaving_buffer.malloc(sizeof(float)* 1500);
+            }
+            else if (selmod == "Panel Digital Input")
+            {
+                pDevInt->pModule = pDevInt->pDevice->OpenModule(_bstr_t(L"PanelDigitalIO"));
+                m_samplerate = 25000.0f;
+                pDevInt->data_format = EcubeDevInt::dfDigital;
+
+                bool acq_created = false;
+                std::vector<std::wstring> chnames = GetEcubeModuleChannels(pDevInt->pModule);
+                for (int j = 0; j < chnames.size(); j++)
+                {
+                    IEcubeChannelPtr pch = pDevInt->pModule->OpenChannel(chnames[j].c_str());
+                    if (!acq_created)
+                    {
+                        pDevInt->pStrmD = pDevInt->pEcube->CreateDigitalInputStreaming(pch);
+                        acq_created = true;
+                    }
+                    else
+                        pDevInt->pStrmD->AddChannel(pch);
+                    pDevInt->chid_map[pch->GetID()] = pDevInt->n_channel_objects;
+                    pDevInt->n_channel_objects++;
+                }
+
+                dataBuffer = new DataBuffer(64, 10000);
+                // Create the interleaving buffer based on the number of digital ports
+                pDevInt->interleaving_buffer.malloc(sizeof(float)* 1500 * 64);
+            }
+            else
+                throw std::runtime_error("Invlid module selection");
+        }
+
+        pDevInt->buf_timestamp_locked = false;
+
+        setDefaultChannelNamesAndType();
+
+    }
+    catch (_com_error& e)
+    {
+        // Convert COM errors to std::runtime_errors, to avoid making other files Windows-dependent
+        throw std::runtime_error(std::string(e.Description()));
+    }
+}
+void EcubeThread::getChannelsInfo(StringArray &Names_, Array<channelType> &type_, Array<int> &stream_, Array<int> &originalChannelNumber_, Array<float> &gains_)
+{
+    Names_ = Names;
+    type_ = type;
+    stream_ = stream;
+    originalChannelNumber_ = originalChannelNumber;
+    gains_ = gains;
+}
+
+/* This will give default names & gains to channels, unless they were manually modified by the user
+In that case, the query channelModified, will return the values that need to be put */
+void EcubeThread::setDefaultChannelNamesAndType()
+{
+    Names.clear();
+    type.clear();
+    stream.clear();
+    gains.clear();
+    originalChannelNumber.clear();
+    String prefix;
+    channelType common_type;
+
+    int numch = getNumChannels();
+
+    if (pDevInt->data_format == EcubeDevInt::dfSeparateChannelsAnalog)
+    {
+        prefix = "HS10_CH";
+        common_type = DATA_CHANNEL;
+    }
+    else if (pDevInt->data_format == EcubeDevInt::dfInterleavedChannelsAnalog)
+    {
+        prefix = "PAI";
+        common_type = AUX_CHANNEL;
+    }
+    else //if (pDevInt->data_format == EcubeDevInt::dfDigital)
+    {
+        prefix = "PDI";
+        common_type = AUX_CHANNEL;
+    }
+
+    if (numberingScheme != 1)
+        prefix += "_";
+
+    for (int i = 0; i < numch; i++)
+    {
+        Names.add(prefix + String(i));
+        gains.add(getBitVolts());
+        type.add(common_type);
+        originalChannelNumber.add(i);
+    }
+
+    stream.add(0);
+}
+
+void EcubeThread::setDefaultNamingScheme(int scheme)
+{
+    numberingScheme = scheme;
+    setDefaultChannelNamesAndType();
+}
+
+
+EcubeThread::~EcubeThread()
+{
+    if (acquisition_running)
+        stopAcquisition();
+    if (isThreadRunning())
+    {
+        signalThreadShouldExit();
+    }
+    waitForThreadToExit(-1);
+}
+
+int EcubeThread::getNumChannels()
+{
+    if (pDevInt->data_format == EcubeDevInt::dfInterleavedChannelsAnalog)
+        return 32;
+    else if (pDevInt->data_format == EcubeDevInt::dfDigital)
+        return 64;
+    else
+        return pDevInt->n_channel_objects;
+}
+
+float EcubeThread::getSampleRate()
+{
+    return m_samplerate;
+}
+
+float EcubeThread::getBitVolts()
+{
+    return 10e3/32768; // For some reason the data is supposed to be in millivolts
+}
+
+bool EcubeThread::foundInputSource()
+{
+    return true;
+}
+
+bool EcubeThread::updateBuffer()
+{
+    unsigned long ba;
+    int16 eventcode = 0;
+    int nchan = pDevInt->n_channel_objects;
+
+    if (pDevInt->data_format == EcubeDevInt::dfSeparateChannelsAnalog || pDevInt->data_format == EcubeDevInt::dfInterleavedChannelsAnalog)
+        ba = pDevInt->pStrmA->WaitForData(100);
+    else
+        ba = pDevInt->pStrmD->WaitForData(100);
+    while (ba)
+    {
+        for (unsigned long i = 0; i < ba; i++)
+        {
+            IEcubeDataBufferPtr ab;
+            if (pDevInt->data_format == EcubeDevInt::dfSeparateChannelsAnalog || pDevInt->data_format == EcubeDevInt::dfInterleavedChannelsAnalog)
+                ab = pDevInt->pStrmA->FetchNextBuffer();
+            else
+                ab = pDevInt->pStrmD->FetchNextBuffer(); 
+            unsigned long chid = ab->GetStreamID();
+            std::map<int, int>::const_iterator chit = pDevInt->chid_map.find(chid);
+            if (chit != pDevInt->chid_map.end())
+            {
+                unsigned long bts = ab->GetTimestamp();
+                unsigned long datasize = ab->GetDataSize() / 2; // Data size is returned in bytes, not in samples
+                if (pDevInt->data_format == EcubeDevInt::dfSeparateChannelsAnalog)
+                {
+                    if (!pDevInt->buf_timestamp_locked || (bts - pDevInt->buf_timestamp >= 3200 && pDevInt->buf_timestamp - bts >= 3200)
+                        /*bts != pDevInt->buf_timestamp*/
+                        || datasize != pDevInt->int_buf_size)
+                    {
+                        // The new buffer does not match interleaving buffer length, or has a different timestamp,
+                        // or interleaving buffer is empty
+                        if (pDevInt->buf_timestamp_locked)
+                        {
+                            // Interleaving buffer is not empty.
+                            // Send its contents out to the application
+                            int64 cts = pDevInt->buf_timestamp64 / 3200; // Convert eCube 80MHz timestamp into a 25kHz timestamp
+                            for (unsigned long j = 0; j < pDevInt->int_buf_size; j++)
+                            {
+                                dataBuffer->addToBuffer(pDevInt->interleaving_buffer + j*nchan, &cts, &eventCode, 1);
+                                cts++;
+                            }
+                            // Update the 64-bit timestamp, take account of its wrap-around
+                            unsigned tsdif = bts - pDevInt->buf_timestamp;
+                            pDevInt->buf_timestamp64 += tsdif;
+                        }
+                        else
+                        {
+                            // The interleaving buffer is empty
+                            pDevInt->buf_timestamp64 = bts;
+                        }
+                        pDevInt->int_buf_size = datasize;
+                        pDevInt->buf_timestamp = bts;
+                        pDevInt->buf_timestamp_locked = true;
+                        // Clear the interleaving buffer within the new packet's size
+                        memset(pDevInt->interleaving_buffer, 0, sizeof(float)*datasize*nchan);
+                    }
+                    chid = chit->second; // Adjust the channel id to become the channel index
+                    unsigned char* dp = ab->GetDataPointer();
+                    const short* pData = (const short*)dp;
+                    for (unsigned long j = 0; j < datasize; j++)
+                    {
+                        pDevInt->interleaving_buffer[chid + nchan*j] = pData[j] * 10.0e3 / 32768; // OpenEphys uses 10e3 instead of just 10
+                    }
+                }
+                else if (pDevInt->data_format == EcubeDevInt::dfInterleavedChannelsAnalog)
+                {
+                    if (pDevInt->buf_timestamp_locked)
+                    {
+                        // Update the 64-bit timestamp, take care of its wrap-around
+                        unsigned tsdif = pDevInt->buf_timestamp - bts;
+                        pDevInt->buf_timestamp64 += tsdif;
+                    }
+                    else
+                    {
+                        pDevInt->buf_timestamp64 = bts;
+                    }
+                    pDevInt->buf_timestamp = bts;
+                    pDevInt->buf_timestamp_locked = true;
+                    unsigned char* dp = ab->GetDataPointer();
+                    const short* pData = (const short*)dp;
+                    for (unsigned j = 0; j < datasize; j++)
+                    {
+                        pDevInt->interleaving_buffer[j] = pData[j] * 10.0e3 / 32768;
+                    }
+                    unsigned long datasam = datasize / 32;
+                    int64 cts = pDevInt->buf_timestamp64 / 3200; // Convert eCube's 80MHz timestamps into number of samples on the Panel Analog input (orig sample rate 1144)
+                    for (unsigned long j = 0; j < datasam; j++)
+                    {
+                        dataBuffer->addToBuffer(pDevInt->interleaving_buffer+j*32, &cts, &eventCode, 1);
+                        cts++;
+                    }
+                }
+                else // Digital data
+                {
+                    unsigned tsdif = bts - pDevInt->buf_timestamp;
+                    if (!pDevInt->buf_timestamp_locked || (bts != pDevInt->buf_timestamp && tsdif!=5 && tsdif!=10 && tsdif!=0xFFFFFFFB && tsdif!=0xFFFFFFFA) || datasize != pDevInt->int_buf_size)
+                    {
+                        // The new buffer does not match interleaving buffer length, or has a different timestamp,
+                        // or interleaving buffer is empty
+                        if (pDevInt->buf_timestamp_locked)
+                        {
+                            // Interleaving buffer is not empty.
+                            // Send its contents out to the application
+                            int64 cts = pDevInt->buf_timestamp64 / 3200; // Convert eCube 80MHz timestamp into a 25kHz timestamp
+                            for (unsigned long j = 0; j < pDevInt->int_buf_size; j++)
+                            {
+                                dataBuffer->addToBuffer(pDevInt->interleaving_buffer + j*64, &cts, &eventCode, 1);
+                                cts++;
+                            }
+                            // Update the 64-bit timestamp, take account of its wrap-around
+                            pDevInt->buf_timestamp64 += tsdif;
+                        }
+                        else
+                        {
+                            // The interleaving buffer is empty
+                            pDevInt->buf_timestamp64 = bts;
+                        }
+                        pDevInt->buf_timestamp = bts;
+                        pDevInt->int_buf_size = datasize;
+                        pDevInt->buf_timestamp_locked = true;
+                        // Clear the interleaving buffer within the new packet's size
+                        memset(pDevInt->interleaving_buffer, 0, sizeof(float)*datasize*64);
+                    }
+                    // Convert data from ecube buffer into the interleaving buffer format
+                    chid = chit->second; // Adjust the channel id to become the channel index
+                    unsigned char* dp = ab->GetDataPointer();
+                    const uint16_t* pData = (const uint16_t*)dp;
+                    const char* pbits;
+                    switch (chid)
+                    {
+                    case 0:
+                    case 3:
+                        pbits = bits_port0;
+                        break;
+                    case 1:
+                    case 4:
+                        pbits = bits_port1;
+                        break;
+                    case 2:
+                    case 5:
+                    default:
+                        pbits = bits_port2;
+                        break;
+                    }
+                    int bitchn_offset = chid >= 3 ? 32 : 0;
+                    for (unsigned long j = 0; j < datasize; j++)
+                    {
+                        uint16_t wrd = pData[j];
+                        uint16_t msk = 1;
+                        for (unsigned long k = 0; k < 16; k++)
+                        {
+                            int bitchn = pbits[k];
+                            if (bitchn>=0)
+                            {
+                                float val = wrd&msk ? 1.0e3f : 0.0f;
+                                pDevInt->interleaving_buffer[bitchn + bitchn_offset + 64*j] = val;
+                            }
+                            msk <<= 1;
+                        }
+                    }
+                }
+            }
+        }
+        if (pDevInt->data_format == EcubeDevInt::dfSeparateChannelsAnalog || pDevInt->data_format == EcubeDevInt::dfInterleavedChannelsAnalog)
+            ba = pDevInt->pStrmA->GetBuffersAcquired();
+        else
+            ba = pDevInt->pStrmD->GetBuffersAcquired();
+    }
+    return true;
+}
+
+bool EcubeThread::startAcquisition()
+{
+    pDevInt->buf_timestamp_locked = false;
+    if (!isThreadRunning())
+        startThread();
+
+    if (!acquisition_running)
+    {
+        if (pDevInt->data_format == EcubeDevInt::dfSeparateChannelsAnalog || pDevInt->data_format == EcubeDevInt::dfInterleavedChannelsAnalog)
+            pDevInt->pStrmA->Start();
+        else
+            pDevInt->pStrmD->Start();
+        acquisition_running = true;
+    }
+
+    return true;
+}
+
+bool EcubeThread::stopAcquisition()
+{
+    if (acquisition_running)
+    {
+        if (pDevInt->data_format == EcubeDevInt::dfSeparateChannelsAnalog || pDevInt->data_format == EcubeDevInt::dfInterleavedChannelsAnalog)
+            pDevInt->pStrmA->Stop();
+        else
+            pDevInt->pStrmD->Stop();
+    }
+    acquisition_running = false;
+    return true;
+}
+
+void EcubeThread::run()
+{
+    // Call the base class's run
+    DataThread::run();
+}
+
+
+#endif
\ No newline at end of file
diff --git a/Source/Processors/DataThreads/EcubeThread.h b/Source/Processors/DataThreads/EcubeThread.h
new file mode 100644
index 0000000000000000000000000000000000000000..14e2f0f55e746ea1420774219313a74232e46ea9
--- /dev/null
+++ b/Source/Processors/DataThreads/EcubeThread.h
@@ -0,0 +1,123 @@
+/*
+------------------------------------------------------------------
+
+This file is part of the Open Ephys GUI
+Copyright (C) 2014 Open Ephys
+Copyright (C) 2014 Michael Borisov
+
+------------------------------------------------------------------
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef __ECUBETHREAD_H_EC4CAD67__
+#define __ECUBETHREAD_H_EC4CAD67__
+
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "DataThread.h"
+#include "../GenericProcessor/GenericProcessor.h"
+
+#define MAX_NUM_DATA_STREAMS 8
+
+class SourceNode;
+
+#if JUCE_WINDOWS
+#ifdef ECUBE_SUPPORT
+#define ECUBE_COMPILE
+#endif
+#endif
+
+#ifdef ECUBE_COMPILE
+class EcubeDevInt;
+#endif
+
+class EcubeThread : public DataThread
+
+{
+public:
+
+#ifdef ECUBE_COMPILE
+    EcubeThread(SourceNode* sn);
+    ~EcubeThread();
+
+    void run(); // Overridden
+
+    /** Fills the DataBuffer with incoming data. This is the most important
+    method for each DataThread.*/
+    virtual bool updateBuffer();
+
+    /** Returns true if the data source is connected, false otherwise.*/
+    virtual bool foundInputSource();
+
+    /** Initializes data transfer.*/
+    virtual bool startAcquisition();
+
+    /** Stops data transfer.*/
+    virtual bool stopAcquisition();
+
+    /** Returns the number of continuous channels the data source can provide.*/
+    virtual int getNumChannels();
+
+    /** Returns the sample rate of the data source.*/
+    virtual float getSampleRate();
+
+    /** Returns the volts per bit of the data source.*/
+    virtual float getBitVolts();
+
+    virtual void getChannelsInfo(StringArray &Names, Array<channelType> &type, Array<int> &stream, Array<int> &originalChannelNumber, Array<float> &gains);
+    void setDefaultNamingScheme(int scheme);
+
+
+private:
+    void setDefaultChannelNamesAndType();
+
+    // used for data stream names...
+    int numberingScheme;
+    StringArray Names;
+    Array<channelType> type;
+    Array<float> gains;
+    Array<int> stream;
+    Array<int> originalChannelNumber;
+
+    ScopedPointer<EcubeDevInt> pDevInt;
+
+    float m_samplerate;
+    bool acquisition_running;
+
+#else
+/** Empty methods for non-Windows platforms **/
+    bool updateBuffer() {return false;}
+    bool foundInputSource() {return false;}
+    bool startAcquisition() {return false;}
+    bool stopAcquisition() {return false;}
+    int getNumChannels() {return 0;}
+    float getSampleRate() {return 0.0f;}
+    float getBitVolts() {return 0.0f;}
+
+
+#endif
+
+
+
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EcubeThread);
+};
+
+#endif  // __RHD2000THREAD_H_2C4CBD67__
diff --git a/Source/Processors/DataThreads/FPGAThread.cpp b/Source/Processors/DataThreads/FPGAThread.cpp
index 94fb0030b3c07cc8a99ac5d8384520ca3c5eb11a..d42d33778bba90cdd0892fbbaaf5191a4539d40d 100644
--- a/Source/Processors/DataThreads/FPGAThread.cpp
+++ b/Source/Processors/DataThreads/FPGAThread.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,7 +22,7 @@
 */
 
 #include "FPGAThread.h"
-#include "../SourceNode.h"
+#include "../SourceNode/SourceNode.h"
 
 #include <string.h>
 #include <math.h>
diff --git a/Source/Processors/DataThreads/FPGAThread.h b/Source/Processors/DataThreads/FPGAThread.h
index a1f1dce5216fedb38b4415c1968661ccc29dba89..f49c7dfdbbf12a938929a1446b608a4024604b29 100755
--- a/Source/Processors/DataThreads/FPGAThread.h
+++ b/Source/Processors/DataThreads/FPGAThread.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/DataThreads/FileReaderThread.cpp b/Source/Processors/DataThreads/FileReaderThread.cpp
index 804b3f80ff9883e2169564dcfb0cd1b48ec1156c..bfa12cc7805d54e1f7a2744f1b9ddeb7a86d4ac6 100755
--- a/Source/Processors/DataThreads/FileReaderThread.cpp
+++ b/Source/Processors/DataThreads/FileReaderThread.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -21,7 +21,7 @@
 
 */
 
-#include "../SourceNode.h"
+#include "../SourceNode/SourceNode.h"
 #include "FileReaderThread.h"
 
 FileReaderThread::FileReaderThread(SourceNode* sn) :
@@ -133,6 +133,11 @@ bool FileReaderThread::updateBuffer()
 
         size_t numRead = fread(readBuffer, 2, bufferSize, input);
 
+        if (numRead != bufferSize)
+        {
+            std::cout << "Fewer samples read than were requested." << std::endl;
+        }
+        
         int chan = 0;
 
         for (int n = 0; n < bufferSize; n++)
diff --git a/Source/Processors/DataThreads/FileReaderThread.h b/Source/Processors/DataThreads/FileReaderThread.h
index bdf9dd1fc5d44efcb298b6fc9f5db4c02e49409f..c88c1e2024b5bc50acb7304d00ab20606f0afd51 100755
--- a/Source/Processors/DataThreads/FileReaderThread.h
+++ b/Source/Processors/DataThreads/FileReaderThread.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/DataThreads/IntanThread.cpp b/Source/Processors/DataThreads/IntanThread.cpp
index 04fb6f681fcb70402ce79f0496924008d82e8877..21cf1ef80d7da92861f5339544d0aa409dacc476 100755
--- a/Source/Processors/DataThreads/IntanThread.cpp
+++ b/Source/Processors/DataThreads/IntanThread.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/DataThreads/IntanThread.h b/Source/Processors/DataThreads/IntanThread.h
index d09eaf3c74921f11763d4cddc44c41c29aaa69bb..6a26cef17c11a7963b1d093997ce8d32a777da8e 100755
--- a/Source/Processors/DataThreads/IntanThread.h
+++ b/Source/Processors/DataThreads/IntanThread.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/Editors/RHD2000Editor.cpp b/Source/Processors/DataThreads/RHD2000Editor.cpp
similarity index 52%
rename from Source/Processors/Editors/RHD2000Editor.cpp
rename to Source/Processors/DataThreads/RHD2000Editor.cpp
index 5f6d87906bb3d4f3a038f105a17813c5d91417a2..4c9619a5b4d6574ba42188d0cad83c4c4d93dd8a 100644
--- a/Source/Processors/Editors/RHD2000Editor.cpp
+++ b/Source/Processors/DataThreads/RHD2000Editor.cpp
@@ -1,48 +1,494 @@
-/*
- ------------------------------------------------------------------
- 
- This file is part of the Open Ephys GUI
- Copyright (C) 2013 Open Ephys
- 
- ------------------------------------------------------------------
- 
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- 
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- 
- You should have received a copy of the GNU General Public License
- along with this program.  If not, see <http://www.gnu.org/licenses/>.
- 
- */
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2014 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
 
 #include "RHD2000Editor.h"
 #include "../../UI/EditorViewport.h"
 #include <cmath>
 
+#include "../Editors/ChannelSelector.h"
+#include "../SourceNode/SourceNode.h"
+#include "RHD2000Thread.h"
+
 #ifdef WIN32
 #if (_MSC_VER < 1800) //round doesn't exist on MSVC prior to 2013 version
 inline double round(double x) { return floor(x+0.5);}
 #endif
 #endif
 
-#include "ChannelSelector.h"
+FPGAchannelList::FPGAchannelList(GenericProcessor* proc_, Viewport *p, FPGAcanvas*c) : proc(proc_), viewport(p), canvas(c)
+{
+    channelComponents.clear();
+
+    numberingSchemeLabel = new Label("Numbering scheme:","Numbering scheme:");
+    numberingSchemeLabel->setEditable(false);
+    numberingSchemeLabel->setBounds(10,10,150, 25);
+    numberingSchemeLabel->setColour(Label::textColourId,juce::Colours::white);
+    addAndMakeVisible(numberingSchemeLabel);
+
+    numberingScheme = new ComboBox("numberingScheme");
+    numberingScheme->addItem("Continuous",1);
+    numberingScheme->addItem("Per Stream",2);
+    numberingScheme->setBounds(160,10,100,25);
+    numberingScheme->addListener(this);
+    numberingScheme->setSelectedId(1, dontSendNotification);
+    addAndMakeVisible(numberingScheme);
+
+    impedanceButton = new UtilityButton("Measure Impedance", Font("Default", 13, Font::plain));
+    impedanceButton->setRadius(3);
+    impedanceButton->setBounds(280,10,140,25);
+    impedanceButton->addListener(this);
+    addAndMakeVisible(impedanceButton);
+
+    
+    gains.clear();
+    gains.add( 0.01);
+    gains.add( 0.1);
+    gains.add( 1);
+    gains.add( 2);
+    gains.add( 5);
+    gains.add( 10);
+    gains.add( 20);
+    gains.add( 50);
+    gains.add( 100);
+    gains.add( 500);
+    gains.add(  1000);
+
+
+    update();
+}
+
+FPGAchannelList::~FPGAchannelList()
+{
+    
+}
+
+void FPGAchannelList::paint(Graphics& g)
+{
+}
+
+void FPGAchannelList::buttonClicked(Button *btn)
+{
+    if (btn == impedanceButton)
+    {
+        RHD2000Editor *p = (RHD2000Editor*)proc->getEditor();
+        p->measureImpedance();
+    }
+}
+
+void FPGAchannelList::update()
+{
+    // Query processor for number of channels, types, gains, etc... and update the UI
+    channelComponents.clear();
+    staticLabels.clear();
+    StringArray names;
+    Array<float> oldgains;
+    proc->getChannelsInfo(names,types,stream,orig_number,oldgains);
+    int numChannels = names.size();
+
+    // find out which streams are active.
+    bool streamActive[MAX_NUM_DATA_STREAMS+1];
+    bool adcActive = false;
+    int numActiveStreams = 0;
+    int streamColumn[MAX_NUM_DATA_STREAMS+1];
+    int numChannelsPerStream[MAX_NUM_DATA_STREAMS+1];
+
+    for (int k=0;k<MAX_NUM_DATA_STREAMS+1;k++) {
+        numChannelsPerStream[k] = 0;
+        streamActive[k] = false;
+        streamColumn[k] = 0;
+    }
+    int columnWidth =330;
+
+    for (int k=0;k<numChannels;k++)
+    {
+        if (streamActive[stream[k]] == false)
+        {
+            streamColumn[stream[k]] = numActiveStreams*columnWidth;
+            numActiveStreams++;
+            streamActive[stream[k]] = true;
+        }
+    }
+
+    StringArray streamNames;
+    streamNames.add("Port A1");
+    streamNames.add("Port A2");
+    streamNames.add("Port B1");
+    streamNames.add("Port B2");
+    streamNames.add("Port C1");
+    streamNames.add("Port C2");
+    streamNames.add("Port D1");
+    streamNames.add("Port D2");
+    streamNames.add("ADC");
+    
+    for (int k=0;k<MAX_NUM_DATA_STREAMS+1;k++)
+    {
+        if (streamActive[k])
+        {
+            Label *lbl = new Label(streamNames[k],streamNames[k]);
+            lbl->setEditable(false);
+            lbl->setBounds(10+streamColumn[k],40,columnWidth, 25);
+            lbl->setJustificationType(juce::Justification::centred);
+            lbl->setColour(Label::textColourId,juce::Colours::white);
+            staticLabels.add(lbl);
+            addAndMakeVisible(lbl);
+
+        }
+
+    }
+
+    // add buttons for all DATA,AUX,channels
+    for (int k=0;k<numChannels;k++)
+        {
+            int channelGainIndex = 1;
+            float ch_gain = oldgains[k]/proc->getDefaultBitVolts();
+            for (int j=0;j<gains.size();j++) {
+                if (fabs(gains[j]-ch_gain) < 1e-3) {
+                    channelGainIndex = j;
+                    break;
+                }
+            }
+
+            FPGAchannelComponent* comp = new FPGAchannelComponent(this, stream[k],orig_number[k],types[k],channelGainIndex+1, names[k],gains);
+            comp->setBounds(10+streamColumn[stream[k]],70+numChannelsPerStream[stream[k]]*22,columnWidth,22);
+            numChannelsPerStream[stream[k]]++;
+
+            comp->setUserDefinedData(k);
+            addAndMakeVisible(comp);
+            channelComponents.add(comp);
+        }   
+
+    StringArray ttlNames;
+    proc->getEventChannelNames(ttlNames);
+    // add buttons for TTL channels
+    for (int k=0;k<ttlNames.size();k++)
+    {
+        FPGAchannelComponent* comp = new FPGAchannelComponent(this,-1,k, EVENT_CHANNEL,-1, ttlNames[k],gains);
+            comp->setBounds( 10+numActiveStreams*columnWidth,70+k*22,columnWidth,22);
+            comp->setUserDefinedData(k);
+            addAndMakeVisible(comp);
+            channelComponents.add(comp);
+    }
+
+    Label *lbl = new Label("TTL Events","TTL Events");
+    lbl->setEditable(false);
+    lbl->setBounds(numActiveStreams*columnWidth,40,columnWidth, 25);
+    lbl->setJustificationType(juce::Justification::centred);
+    lbl->setColour(Label::textColourId,juce::Colours::white);
+    staticLabels.add(lbl);
+    addAndMakeVisible(lbl);
+
+
+}
+
+void FPGAchannelList::disableAll()
+{
+    for (int k=0;k<channelComponents.size();k++)
+    {
+        channelComponents[k]->disableEdit();
+    }
+}
+
+void FPGAchannelList::enableAll()
+{
+    for (int k=0;k<channelComponents.size();k++)
+    {
+        channelComponents[k]->enableEdit();
+    }
+
+}
+
+void FPGAchannelList::setNewGain(int stream, int channel, channelType type, float gain)
+{
+    SourceNode* p = (SourceNode*) proc;
+    p->modifyChannelGain(stream, channel, type, gain, true);
+}
+
+void FPGAchannelList::setNewName(int stream, int channelIndex, channelType t, String newName)
+{
+    proc->modifyChannelName(t, stream, channelIndex, newName, true);
+}
+
+void FPGAchannelList::updateButtons()
+{
+}
+
+int FPGAchannelList::getNumChannels()
+{
+    return 0;
+}
+
+void FPGAchannelList::comboBoxChanged(ComboBox *b)
+{
+    if (b == numberingScheme)
+    {
+        SourceNode* p = (SourceNode* )proc;
+        int scheme = numberingScheme->getSelectedId();
+        if (scheme == 1)
+        {
+            p->setDefaultNamingScheme(scheme);
+        } else if (scheme == 2)
+        {
+            p->setDefaultNamingScheme(scheme);
+        }
+        update();
+
+    }
+}
+
+void FPGAchannelList::updateImpedance(Array<int> streams, Array<int> channels, Array<float> magnitude, Array<float> phase)
+{
+        for (int k=0;k<streams.size();k++)
+        {
+            for (int j=k;j<stream.size();j++)
+            {
+            if (stream[j] == streams[k] && types[j] == DATA_CHANNEL && orig_number[j] == channels[k]) {
+                channelComponents[j]->setImpedanceValues(magnitude[k],phase[k]);
+                break;
+            }
+
+        }
+    }
+
+}
+
+
+/****************************************************/
+FPGAchannelComponent::FPGAchannelComponent(FPGAchannelList* cl, int stream_, int ch, channelType t, int gainIndex_, String N, Array<float> gains_) :   gains(gains_), channelList(cl), channel(ch), name(N), stream(stream_), type(t), gainIndex(gainIndex_)
+{
+    Font f = Font("Small Text", 13, Font::plain);
+
+    staticLabel = new Label("Channel","Channel");
+    staticLabel->setFont(f);
+    staticLabel->setEditable(false);
+    addAndMakeVisible(staticLabel);
+
+    editName = new Label(name,name);
+    editName->setFont(f);
+    editName->setEditable(true);
+    editName->setColour(Label::backgroundColourId,juce::Colours::lightgrey);
+    editName->addListener(this);
+    addAndMakeVisible(editName);
+    if (gainIndex > 0)
+    {
+        
+        gainComboBox = new ComboBox("Gains");
+        for (int k=0;k<gains.size();k++)
+        {
+            if (gains[k] < 1) {
+                gainComboBox->addItem("x"+String(gains[k],2),k+1);
+            } else
+            {
+                gainComboBox->addItem("x"+String((int)gains[k]),k+1);
+            }
+        }
+        gainComboBox->setSelectedId(gainIndex, sendNotification);
+        gainComboBox->addListener(this);
+        addAndMakeVisible(gainComboBox);
+    } else
+    {
+        gainComboBox = nullptr;
+    }
+
+    if (type == DATA_CHANNEL)
+    {
+        impedance = new Label("Impedance","? Ohm");
+        impedance->setFont(Font("Default", 13, Font::plain));
+        impedance->setEditable(false);
+        addAndMakeVisible(impedance);
+    } else
+    {
+        impedance = nullptr;
+    }
+}
+FPGAchannelComponent::~FPGAchannelComponent()
+{
+    
+}
+
+void FPGAchannelComponent::setImpedanceValues(float mag, float phase)
+{
+    if (impedance != nullptr)
+    {
+        if (mag > 10000)
+            impedance->setText(String(mag/1e6,2)+" mOhm, "+String((int)phase) + " deg",juce::NotificationType::dontSendNotification);
+        else if (mag > 1000)
+            impedance->setText(String(mag/1e3,0)+" kOhm, "+String((int)phase) + " deg" ,juce::NotificationType::dontSendNotification);
+        else 
+            impedance->setText(String(mag,0)+" Ohm, "+String((int)phase) + " deg" ,juce::NotificationType::dontSendNotification);
+    } else 
+    {
+
+    }
+}
+
+void FPGAchannelComponent::comboBoxChanged(ComboBox* comboBox)
+{
+    if (comboBox == gainComboBox)
+    {
+        int newGainIndex = gainComboBox->getSelectedId();
+        float mult = gains[newGainIndex-1];
+        float bitvolts = channelList->proc->getDefaultBitVolts();
+        channelList->setNewGain(stream,channel,type, mult*bitvolts);
+    }
+}
+void FPGAchannelComponent::labelTextChanged(Label* lbl)
+{
+    // channel name change
+    String newName = lbl->getText();
+    channelList->setNewName(stream,channel, type, newName);
+}
+
+void FPGAchannelComponent::disableEdit()
+{
+    editName->setEnabled(false);
+}
+
+void FPGAchannelComponent::enableEdit()
+{
+    editName->setEnabled(true);
+}
+
+void FPGAchannelComponent::buttonClicked(Button *btn)
+{
+}
+
+void FPGAchannelComponent::setUserDefinedData(int d)
+{
+}
+
+int FPGAchannelComponent::getUserDefinedData()
+{
+    return 0;
+}
+
+void FPGAchannelComponent::resized()
+{
+    editName->setBounds(0,0,90,20);
+    if (gainComboBox != nullptr)
+    {
+        gainComboBox->setBounds(100,0,70,20);
+    }
+    if (impedance != nullptr)
+    {
+        impedance->setBounds(180,0,130,20);
+    }
+
+}
+
+
+
+/**********************************************/
+
+FPGAcanvas::FPGAcanvas(GenericProcessor* n) : processor(n)
+{
+
+    channelsViewport = new Viewport();
+    channelList = new FPGAchannelList(processor, channelsViewport, this);
+    channelsViewport->setViewedComponent(channelList, false);
+    channelsViewport->setScrollBarsShown(true, true);
+    addAndMakeVisible(channelsViewport);
+
+    resized();
+    update();
+}
+
+FPGAcanvas::~FPGAcanvas()
+{
+}
+
+void FPGAcanvas::setParameter(int x, float f) 
+{
+
+}
+
+void FPGAcanvas::setParameter(int a, int b, int c, float d) 
+{
+}
+
+void FPGAcanvas::paint(Graphics& g)
+{
+    g.fillAll(Colours::grey);
+
+}
+
+void FPGAcanvas::refresh()
+{
+    repaint();
+}
+
+void FPGAcanvas::refreshState()
+{
+    resized();
+}
+
+
+void FPGAcanvas::beginAnimation()
+{
+}
+
+void FPGAcanvas::endAnimation()
+{
+}
+
+void FPGAcanvas::update()
+{
+    // create channel buttons (name, gain, recording, impedance, ... ?)
+    channelList->update();
+}
+
+void FPGAcanvas::resized()
+{
+    int screenWidth = getWidth();
+    int screenHeight = getHeight();
+
+    int scrollBarThickness = channelsViewport->getScrollBarThickness();
+    int numChannels = 35; // max channels per stream? (32+3)*2
+
+    channelsViewport->setBounds(0,0,getWidth(),getHeight());
+    channelList->setBounds(0,0,getWidth()-scrollBarThickness, 200+22*numChannels);
+}
+
+void FPGAcanvas::buttonClicked(Button* button)
+{
+}
+
+void FPGAcanvas::updateImpedance(Array<int> streams, Array<int> channels, Array<float> magnitude, Array<float> phase)
+{
+    channelList->updateImpedance(streams, channels,  magnitude, phase);
+}
 
-#include "../DataThreads/RHD2000Thread.h"
+/***********************************************************************/
 
 RHD2000Editor::RHD2000Editor(GenericProcessor* parentNode,
                              RHD2000Thread* board_,
-                             bool useDefaultParameterEditors
-                             )
-: GenericEditor(parentNode, useDefaultParameterEditors), board(board_)
+                             bool useDefaultParameterEditors
+                            )
+                            : VisualizerEditor(parentNode, useDefaultParameterEditors), board(board_)
 {
-    desiredWidth = 260;
-    
+    canvas = nullptr;
+    desiredWidth = 330;
+    tabText = "FPGA";
+
     // add headstage-specific controls (currently just an enable/disable button)
     for (int i = 0; i < 4; i++)
     {
@@ -91,14 +537,11 @@ RHD2000Editor::RHD2000Editor(GenericProcessor* parentNode,
         if (i == 0)
         {
             button->setTooltip("Audio monitor left channel");
-        }
-        else
-        {
+        } else {
             button->setTooltip("Audio monitor right channel");
         }
     }
     
-    
     audioLabel = new Label("audio label", "Audio out");
     audioLabel->setBounds(180,25,75,15);
     audioLabel->setFont(Font("Small Text", 10, Font::plain));
@@ -117,7 +560,7 @@ RHD2000Editor::RHD2000Editor(GenericProcessor* parentNode,
     adcButton->addListener(this);
     adcButton->setClickingTogglesState(true);
     adcButton->setTooltip("Enable/disable ADC channels");
-    addAndMakeVisible(adcButton);
+    addAndMakeVisible(adcButton);
     
     // add DSP Offset Button
     dspoffsetButton = new UtilityButton("DSP", Font("Very Small Text", 13, Font::plain));
@@ -132,8 +575,52 @@ RHD2000Editor::RHD2000Editor(GenericProcessor* parentNode,
     // add DSP Frequency Selection field
     dspInterface = new DSPInterface(board, this);
     addAndMakeVisible(dspInterface);
-    dspInterface->setBounds(110, 108, 80, 50);
+    dspInterface->setBounds(110, 108, 80, 50);
+
+    ttlSettleLabel = new Label("TTL Settle","TTL Settle");
+    ttlSettleLabel->setFont( Font("Small Text", 11, Font::plain));
+    ttlSettleLabel->setBounds(245,80,100,20);
+    ttlSettleLabel->setColour(Label::textColourId, Colours::darkgrey);
+    addAndMakeVisible(ttlSettleLabel);
+
     
+    ttlSettleCombo = new ComboBox("FastSettleComboBox");
+    ttlSettleCombo->setBounds(250,100,60,18);
+    ttlSettleCombo->addListener(this);
+    ttlSettleCombo->addItem("-",1);
+    for (int k=0; k<8; k++)
+    {
+        ttlSettleCombo->addItem("TTL"+String(1+k),2+k);
+    }
+    ttlSettleCombo->setSelectedId(1, sendNotification);
+    addAndMakeVisible(ttlSettleCombo);
+
+    dacTTLButton = new UtilityButton("DAC TTL", Font("Small Text", 13, Font::plain));
+    dacTTLButton->setRadius(3.0f);
+    dacTTLButton->setBounds(250,25,65,18);
+    dacTTLButton->addListener(this);
+    dacTTLButton->setClickingTogglesState(true);
+    dacTTLButton->setTooltip("Enable/disable DAC Threshold TTL Output");
+    addAndMakeVisible(dacTTLButton);
+
+    dacHPFlabel = new Label("DAC HPF","DAC HPF");
+    dacHPFlabel->setFont( Font("Small Text", 11, Font::plain));
+    dacHPFlabel->setBounds(250,42,100,20);
+    dacHPFlabel->setColour(Label::textColourId, Colours::darkgrey);
+    addAndMakeVisible(dacHPFlabel);
+
+    dacHPFcombo = new ComboBox("dacHPFCombo");
+    dacHPFcombo->setBounds(250,60,60,18);
+    dacHPFcombo->addListener(this);
+    dacHPFcombo->addItem("OFF",1);
+    int HPFvalues[10] = {50,100,200,300,400,500,600,700,800,900};
+    for (int k=0; k<10; k++)
+    {
+        dacHPFcombo->addItem(String(HPFvalues[k])+" Hz",2+k);
+    }
+    dacHPFcombo->setSelectedId(1, sendNotification);
+    addAndMakeVisible(dacHPFcombo);
+
 }
 
 RHD2000Editor::~RHD2000Editor()
@@ -146,9 +633,46 @@ void RHD2000Editor::scanPorts()
     rescanButton->triggerClick();
 }
 
+void RHD2000Editor::measureImpedance()
+{
+    Array<int> stream, channel;
+    Array<float> magnitude, phase;
+    board->runImpedanceTest(stream,channel,magnitude,phase);
+
+    // update components...
+    canvas->updateImpedance(stream,channel,magnitude,phase);
+}
+
+void RHD2000Editor::comboBoxChanged(ComboBox* comboBox)
+{
+    if (comboBox == ttlSettleCombo)
+    {
+        int selectedChannel = ttlSettleCombo->getSelectedId();
+        if (selectedChannel == 1)
+        {
+            board->setFastTTLSettle(false,0);
+        } else
+        {
+            board->setFastTTLSettle(true,selectedChannel-2);
+        }
+    } else if (comboBox == dacHPFcombo)
+    {
+        int selection = dacHPFcombo->getSelectedId();
+        if (selection == 1)
+        {
+            board->setDAChpf(100,false);
+        } else 
+        {
+            int HPFvalues[10] = {50,100,200,300,400,500,600,700,800,900};
+            board->setDAChpf(HPFvalues[selection-2],true);
+        }
+    }
+}
+ 
+
 void RHD2000Editor::buttonEvent(Button* button)
 {
-    
+    VisualizerEditor::buttonEvent(button);
     if (button == rescanButton && !acquisitionIsActive)
     {
         board->scanPorts();
@@ -156,8 +680,8 @@ void RHD2000Editor::buttonEvent(Button* button)
         for (int i = 0; i < 4; i++)
         {
             headstageOptionsInterfaces[i]->checkEnabledState();
-        }
-        
+        }
+        board->updateChannelNames();
     }
     else if (button == electrodeButtons[0])
     {
@@ -170,7 +694,11 @@ void RHD2000Editor::buttonEvent(Button* button)
     else if (button == adcButton && !acquisitionIsActive)
     {
         board->enableAdcs(button->getToggleState());
+        board->updateChannelNames();
         getEditorViewport()->makeEditorVisible(this, false, true);
+    } else if (button == dacTTLButton)
+    {
+        board->setTTLoutputMode(dacTTLButton->getToggleState());
     }
     else if (button == dspoffsetButton && !acquisitionIsActive)
     {
@@ -189,8 +717,8 @@ void RHD2000Editor::channelChanged(int chan)
         {
             electrodeButtons[i]->setChannelNum(chan);
             electrodeButtons[i]->repaint();
-            
-            board->assignAudioOut(i, chan-1);
+            board->assignAudioOut(i, chan);
+
         }
     }
 }
@@ -201,11 +729,11 @@ void RHD2000Editor::startAcquisition()
     channelSelector->startAcquisition();
     
     rescanButton->setEnabledState(false);
-    adcButton->setEnabledState(false);
+    adcButton->setEnabledState(false);
     dspoffsetButton-> setEnabledState(false);
-    
     acquisitionIsActive = true;
-    
+    if (canvas !=nullptr)
+        canvas->channelList->setEnabled(false);
 }
 
 void RHD2000Editor::stopAcquisition()
@@ -218,17 +746,29 @@ void RHD2000Editor::stopAcquisition()
     dspoffsetButton-> setEnabledState(true);
     
     acquisitionIsActive = false;
-    
+    if (canvas != nullptr)
+        canvas->channelList->setEnabled(true);
+    //  canvas->channelList->setEnabled(true);
 }
 
 void RHD2000Editor::saveCustomParameters(XmlElement* xml)
 {
-    xml->setAttribute("SampleRate", sampleRateInterface->getSelectedId());
-    xml->setAttribute("LowCut", bandwidthInterface->getLowerBandwidth());
-    xml->setAttribute("HighCut", bandwidthInterface->getUpperBandwidth());
-    xml->setAttribute("ADCsOn", adcButton->getToggleState());
-    xml->setAttribute("DSPOffset", dspoffsetButton->getToggleState());
-    xml->setAttribute("DSPCutoffFreq", dspInterface->getDspCutoffFreq());
+     xml->setAttribute("SampleRate", sampleRateInterface->getSelectedId());
+     xml->setAttribute("LowCut", bandwidthInterface->getLowerBandwidth());
+     xml->setAttribute("HighCut", bandwidthInterface->getUpperBandwidth());
+     xml->setAttribute("ADCsOn", adcButton->getToggleState());
+     xml->setAttribute("SampleRate", sampleRateInterface->getSelectedId());
+     xml->setAttribute("LowCut", bandwidthInterface->getLowerBandwidth());
+     xml->setAttribute("HighCut", bandwidthInterface->getUpperBandwidth());
+     xml->setAttribute("ADCsOn", adcButton->getToggleState());
+     xml->setAttribute("AudioOutputL", electrodeButtons[0]->getChannelNum());
+     xml->setAttribute("AudioOutputR", electrodeButtons[1]->getChannelNum());
+     xml->setAttribute("NoiseSlicer", audioInterface->getNoiseSlicerLevel());
+     xml->setAttribute("TTLFastSettle", ttlSettleCombo->getSelectedId());
+     xml->setAttribute("DAC_TTL", dacTTLButton->getToggleState());
+     xml->setAttribute("DAC_HPF", dacHPFcombo->getSelectedId());
+     xml->setAttribute("DSPOffset", dspoffsetButton->getToggleState());
+     xml->setAttribute("DSPCutoffFreq", dspInterface->getDspCutoffFreq());
 }
 
 void RHD2000Editor::loadCustomParameters(XmlElement* xml)
@@ -238,11 +778,28 @@ void RHD2000Editor::loadCustomParameters(XmlElement* xml)
     bandwidthInterface->setLowerBandwidth(xml->getDoubleAttribute("LowCut"));
     bandwidthInterface->setUpperBandwidth(xml->getDoubleAttribute("HighCut"));
     adcButton->setToggleState(xml->getBoolAttribute("ADCsOn"), sendNotification);
+    electrodeButtons[0]->setChannelNum(xml->getIntAttribute("AudioOutputL"));
+    board->assignAudioOut(0, xml->getIntAttribute("AudioOutputL"));
+    electrodeButtons[1]->setChannelNum(xml->getIntAttribute("AudioOutputR"));
+    board->assignAudioOut(1, xml->getIntAttribute("AudioOutputR"));
+    audioInterface->setNoiseSlicerLevel(xml->getIntAttribute("NoiseSlicer"));
+    ttlSettleCombo->setSelectedId(xml->getIntAttribute("TTLFastSettle"));
+    dacTTLButton->setToggleState(xml->getBoolAttribute("DAC_TTL"), sendNotification);
+    dacHPFcombo->setSelectedId(xml->getIntAttribute("DAC_HPF"));
     dspoffsetButton->setToggleState(xml->getBoolAttribute("DSPOffset"), sendNotification);
     dspInterface->setDspCutoffFreq(xml->getDoubleAttribute("DSPCutoffFreq"));
 }
 
 
+Visualizer* RHD2000Editor::createNewCanvas()
+{
+    GenericProcessor* processor = (GenericProcessor*) getProcessor();
+    canvas= new FPGAcanvas(processor);
+    //ActionListener* listener = (ActionListener*) canvas;
+    //getUIComponent()->registerAnimatedComponent(listener);
+    return canvas;
+}
+
 // Bandwidth Options --------------------------------------------------------------------
 
 BandwidthInterface::BandwidthInterface(RHD2000Thread* board_,
@@ -358,7 +915,6 @@ void BandwidthInterface::setUpperBandwidth(double value)
     upperBandwidthSelection->setText(String(round(actualUpperBandwidth*10.f)/10.f), dontSendNotification);
 }
 
-
 double BandwidthInterface::getLowerBandwidth()
 {
     return actualLowerBandwidth;
@@ -578,7 +1134,10 @@ void HeadstageOptionsInterface::buttonClicked(Button* button)
             
             hsButton1->setLabel(String(channelsOnHs1));
             board->setNumChannels(hsNumber1, channelsOnHs1);
-            
+
+            board->updateChannelNames();
+            editor->updateSettings();
+
         }
         else if (button == hsButton2)
         {
@@ -589,6 +1148,8 @@ void HeadstageOptionsInterface::buttonClicked(Button* button)
             
             hsButton2->setLabel(String(channelsOnHs2));
             board->setNumChannels(hsNumber2, channelsOnHs2);
+            board->updateChannelNames();
+            editor->updateSettings();
         }
         
         
@@ -619,7 +1180,7 @@ void HeadstageOptionsInterface::paint(Graphics& g)
 // (Direct OpalKelly) Audio Options --------------------------------------------------------------------
 
 AudioInterface::AudioInterface(RHD2000Thread* board_,
-                               RHD2000Editor* editor_) :
+                                       RHD2000Editor* editor_) :
 board(board_), editor(editor_)
 {
     
@@ -671,8 +1232,7 @@ void AudioInterface::labelTextChanged(Label* label)
             
         }
     }
-    else
-    {
+    else {
         Value val = label->getTextValue();
         int requestedValue = int(val.getValue()); // Note that it might be nice to translate to actual uV levels (16*value)
         if (requestedValue < 0 || requestedValue > 127)
@@ -706,7 +1266,7 @@ void AudioInterface::paint(Graphics& g)
     g.drawText(name, 0, 0, 200, 15, Justification::left, false);
     
     g.drawText("Level: ", 0, 10, 200, 20, Justification::left, false);
-    
+    
 }
 
 
@@ -731,7 +1291,7 @@ board(board_), editor(editor_)
 
 DSPInterface::~DSPInterface()
 {
-    
+
 }
 
 
diff --git a/Source/Processors/Editors/RHD2000Editor.h b/Source/Processors/DataThreads/RHD2000Editor.h
similarity index 55%
rename from Source/Processors/Editors/RHD2000Editor.h
rename to Source/Processors/DataThreads/RHD2000Editor.h
index 706d6e18be2aebccea0c1154c8f2731d68441bef..73e75da1332a679dfce14b74522b3d2e88e4dc6a 100644
--- a/Source/Processors/Editors/RHD2000Editor.h
+++ b/Source/Processors/DataThreads/RHD2000Editor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,9 +25,10 @@
 #define __RHD2000EDITOR_H_2AD3C591__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
+#include "../Editors/VisualizerEditor.h"
 
-#include "ElectrodeButtons.h" // for ElectrodeButton
+#include "../Editors/ElectrodeButtons.h" // for ElectrodeButton
 
 class HeadstageOptionsInterface;
 class SampleRateInterface;
@@ -45,9 +46,116 @@ class UtilityButton;
   @see SourceNode
 
 */
+class SourceNode;
 
+class FPGAchannelComponent;
+class RHD2000Editor;
+class FPGAcanvas;
 
-class RHD2000Editor : public GenericEditor
+class FPGAchannelList : public Component,
+    public AccessClass, Button::Listener, ComboBox::Listener
+{
+public:
+    
+    FPGAchannelList(GenericProcessor* proc, Viewport *p, FPGAcanvas*c);
+    ~FPGAchannelList();
+    void setNewName(int stream, int channelIndex, channelType t, String newName);
+    void setNewGain(int stream, int channel,channelType t, float gain);
+    void disableAll();
+    void enableAll();
+    void paint(Graphics& g);
+    void buttonClicked(Button *btn);
+    void update();
+    void updateButtons();
+    int getNumChannels();
+    void comboBoxChanged(ComboBox *b);
+    void updateImpedance(Array<int> streams, Array<int> channels, Array<float> magnitude, Array<float> phase);
+    GenericProcessor* proc;
+    
+private:
+    Array<float> gains;
+    Array<channelType> types;
+    Array<int> stream;
+    Array<int> orig_number;
+
+    Viewport *viewport;
+    FPGAcanvas *canvas;
+    ScopedPointer<UtilityButton> impedanceButton;
+    ScopedPointer<ComboBox> numberingScheme;
+    ScopedPointer<Label> numberingSchemeLabel;
+    OwnedArray<Label> staticLabels;
+    OwnedArray<FPGAchannelComponent> channelComponents;
+   JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(FPGAchannelList);
+};
+
+
+class FPGAchannelComponent : public Component, public AccessClass, Button::Listener, public ComboBox::Listener, public Label::Listener
+{
+public:
+    FPGAchannelComponent(FPGAchannelList* cl,int stream, int ch, channelType t,  int gainIndex_, String name_, Array<float> gains_);
+    ~FPGAchannelComponent();
+    Colour getDefaultColor(int ID);
+    void setImpedanceValues(float mag, float phase);
+    void disableEdit();
+    void enableEdit();
+
+
+    void setEnabledState(bool);
+    bool getEnabledState()
+    {
+        return isEnabled;
+    }
+    void buttonClicked(Button *btn);
+    void setUserDefinedData(int d);
+    int getUserDefinedData();
+    void comboBoxChanged(ComboBox* comboBox);
+    void labelTextChanged(Label* lbl);
+
+    void resized();
+private:
+    Array<float> gains;
+    FPGAchannelList* channelList;
+    ScopedPointer<Label> staticLabel, editName, impedance;
+    ScopedPointer<ComboBox> gainComboBox;
+    int channel;
+    String name;
+    int stream;
+    channelType type;
+    int gainIndex;
+    int userDefinedData;
+    Font font;
+    bool isEnabled;
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(FPGAchannelComponent);
+};
+
+
+class FPGAcanvas : public Visualizer, public Button::Listener
+{
+public:
+     FPGAcanvas(GenericProcessor* n);
+    ~FPGAcanvas();
+
+    void paint(Graphics& g);
+
+    void refresh();
+
+    void beginAnimation();
+    void endAnimation();
+
+    void refreshState();
+    void update();
+    void setParameter(int, float) ;
+    void setParameter(int, int, int, float) ;
+    void updateImpedance(Array<int> streams, Array<int> channels, Array<float> magnitude, Array<float> phase);
+
+    void resized();
+    void buttonClicked(Button* button);
+    Viewport* channelsViewport;
+    GenericProcessor* processor;
+    ScopedPointer<FPGAchannelList> channelList;
+};
+
+class RHD2000Editor : public VisualizerEditor, public ComboBox::Listener
 
 {
 public:
@@ -57,7 +165,8 @@ public:
     void buttonEvent(Button* button);
 
     void scanPorts();
-
+    void comboBoxChanged(ComboBox* comboBox);
+ 
     void startAcquisition();
     void stopAcquisition();
 
@@ -65,7 +174,8 @@ public:
 
     void saveCustomParameters(XmlElement* xml);
     void loadCustomParameters(XmlElement* xml);
-
+    Visualizer* createNewCanvas(void);
+    void measureImpedance();
 private:
 
     OwnedArray<HeadstageOptionsInterface> headstageOptionsInterfaces;
@@ -77,15 +187,17 @@ private:
 
     ScopedPointer<AudioInterface> audioInterface;
 
-    ScopedPointer<UtilityButton> rescanButton;
-    ScopedPointer<UtilityButton> adcButton;
+    ScopedPointer<UtilityButton> rescanButton,dacTTLButton;
+    ScopedPointer<UtilityButton> adcButton;
     
-    ScopedPointer<UtilityButton> dspoffsetButton;
+    ScopedPointer<UtilityButton> dspoffsetButton;
+    ScopedPointer<ComboBox> ttlSettleCombo,dacHPFcombo;
 
-    ScopedPointer<Label> audioLabel;
 
-    RHD2000Thread* board;
+    ScopedPointer<Label> audioLabel,ttlSettleLabel,dacHPFlabel ;
 
+    RHD2000Thread* board;
+    FPGAcanvas *canvas;
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(RHD2000Editor);
 
 };
@@ -208,36 +320,36 @@ private:
 };
 
 class AudioInterface : public Component,
-    public Label::Listener
+public Label::Listener
 {
 public:
     AudioInterface(RHD2000Thread*, RHD2000Editor*);
     ~AudioInterface();
-
+    
     void paint(Graphics& g);
     void labelTextChanged(Label* te);
-
+    
     void setNoiseSlicerLevel(int value);
     int getNoiseSlicerLevel();
     //void setGain(double value);
     //double getGain();
-
+    
 private:
-
+    
     String name;
-
+    
     String lastNoiseSlicerString;
     String lastGainString;
-
+    
     RHD2000Thread* board;
     RHD2000Editor* editor;
-
+    
     ScopedPointer<Label> noiseSlicerLevelSelection;
     //ScopedPointer<Label> gainSelection;
-
+    
     int actualNoiseSlicerLevel;
     //double actualGain;
-
+    
 };
 
 
diff --git a/Source/Processors/DataThreads/RHD2000Thread.cpp b/Source/Processors/DataThreads/RHD2000Thread.cpp
index a8758331226ad4d832911971887497454103cfd3..e4969c8c4f2b74396b1d16e25766df273dad252b 100644
--- a/Source/Processors/DataThreads/RHD2000Thread.cpp
+++ b/Source/Processors/DataThreads/RHD2000Thread.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,7 +22,7 @@
 */
 
 #include "RHD2000Thread.h"
-#include "../SourceNode.h"
+#include "../SourceNode/SourceNode.h"
 
 #if defined(_WIN32)
 #define okLIB_NAME "okFrontPanel.dll"
@@ -34,6 +34,25 @@
 #define okLIB_NAME "./libokFrontPanel.so"
 #define okLIB_EXTENSION "*.so"
 #endif
+#define CHIP_ID_RHD2164_B  1000
+
+// Allocates memory for a 3-D array of doubles.
+void allocateDoubleArray3D(std::vector<std::vector<std::vector<double> > >& array3D,
+                           int xSize, int ySize, int zSize)
+{
+    int i, j;
+
+    if (xSize == 0) return;
+    array3D.resize(xSize);
+    for (i = 0; i < xSize; ++i)
+    {
+        array3D[i].resize(ySize);
+        for (j = 0; j < ySize; ++j)
+        {
+            array3D[i][j].resize(zSize);
+        }
+    }
+}
 
 RHD2000Thread::RHD2000Thread(SourceNode* sn) : DataThread(sn),
     chipRegisters(30000.0f),
@@ -44,6 +63,9 @@ RHD2000Thread::RHD2000Thread(SourceNode* sn) : DataThread(sn),
     acquireAdcChannels(false),
     acquireAuxChannels(true),
     fastSettleEnabled(false),
+    fastTTLSettleEnabled(false),
+    fastSettleTTLChannel(-1),
+    ttlMode(false),
     dspEnabled(true),
     desiredDspCutoffFreq(0.5f),
     desiredUpperBandwidth(7500.0f),
@@ -51,7 +73,7 @@ RHD2000Thread::RHD2000Thread(SourceNode* sn) : DataThread(sn),
     boardSampleRate(30000.0f),
     savedSampleRateIndex(16),
     cableLengthPortA(0.914f), cableLengthPortB(0.914f), cableLengthPortC(0.914f), cableLengthPortD(0.914f), // default is 3 feet (0.914 m),
-    audioOutputL(-1), audioOutputR(-1)
+    audioOutputL(-1), audioOutputR(-1) ,numberingScheme(1)
 {
     evalBoard = new Rhd2000EvalBoard;
     dataBlock = new Rhd2000DataBlock(1);
@@ -78,6 +100,10 @@ RHD2000Thread::RHD2000Thread(SourceNode* sn) : DataThread(sn),
     libraryFilePath += File::separatorString;
     libraryFilePath += okLIB_NAME;
 
+    dacStream = nullptr;
+    dacChannels = nullptr;
+    dacThresholds = nullptr;
+    dacChannelsToUpdate = nullptr;
     if (openBoard(libraryFilePath))
     {
 
@@ -87,13 +113,33 @@ RHD2000Thread::RHD2000Thread(SourceNode* sn) : DataThread(sn),
         // automatically find connected headstages
         scanPorts(); // things would appear to run more smoothly if this were done after the editor has been created
 
-        if (0)
+        // to perform electrode impedance measurements at very low frequencies.
+        const int maxNumBlocks = 120;
+        int numStreams = 8;
+        allocateDoubleArray3D(amplifierPreFilter, numStreams, 32, SAMPLES_PER_DATA_BLOCK * maxNumBlocks);
+
+        // probably better to do this with a thread, but a timer works for now:
+        // startTimer(10); // initialize the board in the background
+        dacStream = new int[8];
+        dacChannels = new int[8];
+        dacThresholds = new float[8];
+        dacChannelsToUpdate = new bool[8];
+        for (int k = 0; k < 8; k++)
         {
-            evalBoard->setContinuousRunMode(true);
-            evalBoard->run();
+            dacChannelsToUpdate[k] = true;
+            dacStream[k] = 0;
+            setDACthreshold(k, 65534);
         }
 
+        evalBoard->getDacInformation(dacChannels,dacThresholds);
+        setDefaultChannelNamesAndType();
     }
+}
+
+void RHD2000Thread::timerCallback()
+{
+
+    stopTimer();
 
 }
 
@@ -109,17 +155,45 @@ RHD2000Thread::~RHD2000Thread()
     }
 
     if (deviceFound)
-    {
-        evalBoard->flush();
-        evalBoard->resetBoard();
         evalBoard->resetFpga();
-    }
-
 
     deleteAndZero(dataBlock);
 
+    delete dacStream;
+    delete dacChannels;
+    delete dacThresholds;
+    delete dacChannelsToUpdate;
+
+}
+
+void RHD2000Thread::setDACthreshold(int dacOutput, float threshold)
+{
+    dacThresholds[dacOutput]= threshold;
+    dacChannelsToUpdate[dacOutput] = true;
+    dacOutputShouldChange = true;
+
+    //  evalBoard->setDacThresholdVoltage(dacOutput,threshold);
+}
+
+void RHD2000Thread::setDACchannel(int dacOutput, int stream, int channel)
+{
+    dacChannels[dacOutput] = channel;
+    dacStream[dacOutput] = stream;
+    dacChannelsToUpdate[dacOutput] = true;
+    dacOutputShouldChange = true;
+    evalBoard->updateDacAssignment(dacOutput, channel); // doesn't really change anything, but keep things in sync...
 }
 
+Array<int> RHD2000Thread::getDACchannels()
+{
+    Array<int> dacChannels;
+    for (int k=0; k<8; k++)
+    {
+        dacChannels.add(evalBoard->gecDacDataChannel(k));
+    }
+    return dacChannels;
+
+}
 bool RHD2000Thread::openBoard(String pathToLibrary)
 {
     int return_code = evalBoard->open(pathToLibrary.getCharPointer());
@@ -206,6 +280,7 @@ bool RHD2000Thread::uploadBitfile(String bitfilename)
             if (fc.browseForFileToOpen())
             {
                 File currentFile = fc.getResult();
+
                 uploadBitfile(currentFile.getFullPathName()); // call recursively
             }
             else
@@ -283,13 +358,11 @@ void RHD2000Thread::initializeBoard()
         ;
     }
 
-
     // Read the resulting single data block from the USB interface. We don't
     // need to do anything with this, since it was only used for ADC calibration
     Rhd2000DataBlock* dataBlock = new Rhd2000DataBlock(evalBoard->getNumEnabledDataStreams());
 
 
-
     // evalBoard->readDataBlock(dataBlock);
 
     // Now that ADC calibration has been performed, we switch to the command sequence
@@ -322,21 +395,44 @@ void RHD2000Thread::scanPorts()
 
     int delay, stream, id;
     //int numChannelsOnPort[4] = {0, 0, 0, 0};
-    Array<int> chipId;
+    Rhd2000EvalBoard::BoardDataSource initStreamPorts[8] =
+    {
+        Rhd2000EvalBoard::PortA1,
+        Rhd2000EvalBoard::PortA2,
+        Rhd2000EvalBoard::PortB1,
+        Rhd2000EvalBoard::PortB2,
+        Rhd2000EvalBoard::PortC1,
+        Rhd2000EvalBoard::PortC2,
+        Rhd2000EvalBoard::PortD1,
+        Rhd2000EvalBoard::PortD2
+    };
+
+    Rhd2000EvalBoard::BoardDataSource initStreamDdrPorts[8] =
+    {
+        Rhd2000EvalBoard::PortA1Ddr,
+        Rhd2000EvalBoard::PortA2Ddr,
+        Rhd2000EvalBoard::PortB1Ddr,
+        Rhd2000EvalBoard::PortB2Ddr,
+        Rhd2000EvalBoard::PortC1Ddr,
+        Rhd2000EvalBoard::PortC2Ddr,
+        Rhd2000EvalBoard::PortD1Ddr,
+        Rhd2000EvalBoard::PortD2Ddr
+    };
+
     chipId.insertMultiple(0,-1,8);
 
     setSampleRate(16, true); // set to 30 kHz temporarily
 
     // Enable all data streams, and set sources to cover one or two chips
     // on Ports A-D.
-    evalBoard->setDataSource(0, Rhd2000EvalBoard::PortA1);
-    evalBoard->setDataSource(1, Rhd2000EvalBoard::PortA2);
-    evalBoard->setDataSource(2, Rhd2000EvalBoard::PortB1);
-    evalBoard->setDataSource(3, Rhd2000EvalBoard::PortB2);
-    evalBoard->setDataSource(4, Rhd2000EvalBoard::PortC1);
-    evalBoard->setDataSource(5, Rhd2000EvalBoard::PortC2);
-    evalBoard->setDataSource(6, Rhd2000EvalBoard::PortD1);
-    evalBoard->setDataSource(7, Rhd2000EvalBoard::PortD2);
+    evalBoard->setDataSource(0, initStreamPorts[0]);
+    evalBoard->setDataSource(1, initStreamPorts[1]);
+    evalBoard->setDataSource(2, initStreamPorts[2]);
+    evalBoard->setDataSource(3, initStreamPorts[3]);
+    evalBoard->setDataSource(4, initStreamPorts[4]);
+    evalBoard->setDataSource(5, initStreamPorts[5]);
+    evalBoard->setDataSource(6, initStreamPorts[6]);
+    evalBoard->setDataSource(7, initStreamPorts[7]);
 
     evalBoard->enableDataStream(0, true);
     evalBoard->enableDataStream(1, true);
@@ -405,13 +501,13 @@ void RHD2000Thread::scanPorts()
         // Record delay settings that yield good communication with the chip.
         for (stream = 0; stream < MAX_NUM_DATA_STREAMS; ++stream)//MAX_NUM_DATA_STREAMS; ++stream)
         {
-             std::cout << "Stream number " << stream << ", delay = " << delay << std::endl;
+            // std::cout << "Stream number " << stream << ", delay = " << delay << std::endl;
 
             id = deviceId(dataBlock, stream);
 
             if (id > 0) // 1 = RHD2132, 2 = RHD2216
             {
-                 std::cout << "Device ID found: " << id << std::endl;
+                //  std::cout << "Device ID found: " << id << std::endl;
 
                 sumGoodDelays.set(stream,sumGoodDelays[stream] + 1);
 
@@ -442,7 +538,18 @@ void RHD2000Thread::scanPorts()
         if (chipId[stream] > 0)
         {
             //std::cout << "Enabling headstage on stream " << stream << std::endl;
-            enableHeadstage(stream, true);
+            if (chipId[stream] == 4) //RHD2164
+            {
+                //We just add it like a second headstage, allowing only one RHD2164 per channel
+                //This would need to change
+				evalBoard->setDataSource(stream+1,initStreamDdrPorts[stream]);
+				enableHeadstage(stream,true);
+				enableHeadstage(stream+1,true);
+				chipId.set(stream+1,CHIP_ID_RHD2164_B);
+				stream++;
+            }
+            else
+                enableHeadstage(stream, true);
         }
         else
         {
@@ -533,101 +640,254 @@ bool RHD2000Thread::isAcquisitionActive()
 
 void RHD2000Thread::setNumChannels(int hsNum, int numChannels)
 {
-    numChannelsPerDataStream.set(hsNum, numChannels);
+    if (numChannelsPerDataStream[hsNum] > 0)
+        numChannelsPerDataStream.set(hsNum, numChannels);
 }
 
-int RHD2000Thread::getNumChannels()
-{
 
-    numChannels = 0;
+int RHD2000Thread::getNumADCchannels()
+{
+    if (acquireAdcChannels)
+        return 8;
+    else
+        return 0;
+}
 
-    for (int i = 0; i < MAX_NUM_DATA_STREAMS; i++)
+void RHD2000Thread::getEventChannelNames(StringArray& Names)
+{
+    Names.clear();
+    for (int k=0; k<8; k++)
     {
+        Names.add("TTL"+String(k+1));
+    }
+}
 
-        if (numChannelsPerDataStream[i] > 0)
-        {
-            numChannels += numChannelsPerDataStream[i];
-            numChannels += 3; // to account for aux inputs
-        }
+void RHD2000Thread::getChannelsInfo(StringArray& Names_, Array<channelType>& type_, Array<int>& stream_, Array<int>& originalChannelNumber_,Array<float>& gains_)
+{
+    Names_ = Names;
+    type_ = type;
+    stream_ = stream;
+    originalChannelNumber_ = originalChannelNumber;
+    gains_ = gains;
+}
 
+void RHD2000Thread::updateChannelNames()
+{
+    setDefaultChannelNamesAndType();
+}
 
-        /*
-        if (chipRegisters->adcAux1En){ // no public function to read these? fix this in some way
-        	numChannels += 1;
-        }
-        if (chipRegisters->adcAux2En){
-        	numChannels += 1;
-        }
-        if (chipRegisters->adcAux3En){
-        	numChannels += 1;
+/* go over the old names and tests whether this particular channel name was changed.
+if so, return the old name */
+bool RHD2000Thread::channelModified(channelType t, int str, int ch, String& oldName, float& oldGain, int& index)
+{
+    for (int k=0; k<oldNames.size(); k++)
+    {
+        if (oldType[k] == t && oldStream[k] == str && oldChannelNumber[k] == ch)
+        {
+            oldName = oldNames[k];
+            oldGain = oldGains[k];
+            index = k;
+            return true;
         }
-        */
     }
+    return false;
+}
 
 
-    if (acquireAdcChannels)
+int RHD2000Thread::modifyChannelName(channelType t, int str, int ch, String newName)
+{
+    String dummy;
+    float dummyFloat;
+    int index;
+    if (channelModified(t, str, ch, dummy, dummyFloat, index))
     {
-        numChannels += 8; // add 8 channels for the ADCs
+        oldNames.set(index, newName);
     }
-
-    if (numChannels > 0)
-        return numChannels;
     else
-        return 1; // to prevent crashing with 0 channels
+    {
+        oldNames.add(newName);
+        oldType.add(t);
+        oldStream.add(str);
+        oldChannelNumber.add(ch);
+        oldGains.add(dummyFloat);
+    }
+
+    for (int k=0; k<Names.size(); k++)
+    {
+        if (type[k] == t && stream[k] == str && originalChannelNumber[k] == ch)
+        {
+            Names.set(k,newName);
+            return k;
+        }
+    }
+    return -1;
 }
 
-void RHD2000Thread::updateChannelNames()
+int RHD2000Thread::modifyChannelGain(channelType t, int str, int ch, float gain)
 {
-
-    int chNum = -1;
-
-    for (int i = 0; i < MAX_NUM_DATA_STREAMS; i++)
+    String dummy;
+    float dummyFloat;
+    int index;
+    if (channelModified(t, str, ch, dummy, dummyFloat, index))
     {
+        oldGains.set(index, gain);
+    }
+    else
+    {
+        oldNames.add(dummy);
+        oldType.add(t);
+        oldStream.add(str);
+        oldChannelNumber.add(ch);
+        oldGains.add(gain);
+    }
 
-        for (int j = 0; j < numChannelsPerDataStream[i]; j++)
+    for (int k=0; k<Names.size(); k++)
+    {
+        if (type[k] == t && stream[k] == str && originalChannelNumber[k] == ch)
         {
-            chNum++;
-
-            sn->channels[chNum]->setName(String(chNum));
+            gains.set(k,gain);
+            return k;
         }
     }
+    return -1;
+}
+
+void RHD2000Thread::setDefaultNamingScheme(int scheme)
+{
+    oldNames.clear();
+    oldType.clear();
+    oldStream.clear();
+    oldGains.clear();
+    oldChannelNumber.clear();
+    numberingScheme = scheme;
+    setDefaultChannelNamesAndType();
+}
 
-    if (acquireAuxChannels)
+/* This will give default names & gains to channels, unless they were manually modified by the user
+ In that case, the query channelModified, will return the values that need to be put */
+void RHD2000Thread::setDefaultChannelNamesAndType()
+{
+    Names.clear();
+    type.clear();
+    stream.clear();
+    gains.clear();
+    originalChannelNumber.clear();
+    int aux_counter=1;
+    int data_counter = 1;
+    String oldName;
+    int dummy;
+    float oldGain;
+    StringArray stream_prefix;
+    stream_prefix.add("A1");
+    stream_prefix.add("A2");
+    stream_prefix.add("B1");
+    stream_prefix.add("B2");
+    stream_prefix.add("C1");
+    stream_prefix.add("C2");
+    stream_prefix.add("D1");
+    stream_prefix.add("D2");
+    for (int i = 0; i < MAX_NUM_DATA_STREAMS; i++)
     {
-        for (int i = 0; i < MAX_NUM_DATA_STREAMS; i++)
+        if (numChannelsPerDataStream[i] > 0)
         {
+            for (int k=0; k<numChannelsPerDataStream[i]; k++)
+            {
+                if (channelModified(DATA_CHANNEL,i,k, oldName,oldGain,dummy))
+                {
+                    Names.add(oldName);
+                    gains.add(oldGain);
+                    data_counter++;
+                }
+                else
+                {
+                    if (numberingScheme == 1)
+                        Names.add("CH"+String(data_counter++));
+                    else
+                        Names.add("CH_"+stream_prefix[i]+"_"+String(1+k));
 
-            for (int j = 0; j < 3; j++)
+                    gains.add(getBitVolts());
+                }
+
+                type.add(DATA_CHANNEL);
+                stream.add(i);
+                originalChannelNumber.add(k);
+
+            }
+            for (int k=0; k<3; k++)
             {
+                if (channelModified(AUX_CHANNEL,i,numChannelsPerDataStream[i]+k, oldName,oldGain, dummy))
+                {
+                    Names.add(oldName);
+                    gains.add(oldGain);
 
-                chNum++;
+                    aux_counter++;
+                }
+                else
+                {
+                    if (numberingScheme == 1)
+                        Names.add("AUX"+String(aux_counter++));
+                    else
+                        Names.add("AUX_"+stream_prefix[i]+"_"+String(1+k));
+
+                    gains.add(getBitVolts());
 
-                String chName = "AUX";
-                chName += (j+1);
+                }
+                type.add(AUX_CHANNEL);
+                stream.add(i);
+                originalChannelNumber.add(numChannelsPerDataStream[i]+k);
 
-                // this is causing a seg fault for some reason:
-                //  sn->channels[chNum]->setName(chName);
             }
         }
     }
 
-
     if (acquireAdcChannels)
     {
-        for (int j = 0; j < 8; j++)
+        for (int k=0; k<8; k++)
         {
-            chNum++;
+            if (channelModified(ADC_CHANNEL,MAX_NUM_DATA_STREAMS,k, oldName,oldGain,dummy))
+            {
+                Names.add(oldName);
+                gains.add(oldGain);
+            }
+            else
+            {
+                Names.add("ADC"+String(k+1));
+                gains.add(getBitVolts());
+            }
+            type.add(ADC_CHANNEL);
+            stream.add(MAX_NUM_DATA_STREAMS);
+            originalChannelNumber.add(k);
+
+        }
+    }
 
-            String chName = "ADC";
-            chName += (j+1);
+}
 
-            //  sn->channels[chNum]->setName(chName);
+int RHD2000Thread::getNumChannels()
+{
+    numChannels = 0;
+    for (int i = 0; i < MAX_NUM_DATA_STREAMS; i++)
+    {
+
+        if (numChannelsPerDataStream[i] > 0)
+        {
+            numChannels += numChannelsPerDataStream[i];
+            numChannels += 3; // to account for aux inputs
         }
     }
+    if (acquireAdcChannels)
+    {
+        numChannels += 8; // add 8 channels for the ADCs
+    }
 
+    if (numChannels > 0)
+        return numChannels;
+    else
+        return 1; // to prevent crashing with 0 channels
 }
 
 
+
 int RHD2000Thread::getNumEventChannels()
 {
     return 16; // 8 inputs, 8 outputs
@@ -662,7 +922,7 @@ double RHD2000Thread::setLowerBandwidth(double lower)
 
     return actualLowerBandwidth;
 }
-
+
 double RHD2000Thread::setDspCutoffFreq(double freq)
 {
     
@@ -683,13 +943,34 @@ void RHD2000Thread::setDSPOffset(bool state)
 {
     dspEnabled = state;
     updateRegisters();
-    
+
+void RHD2000Thread::setTTLoutputMode(bool state)
+{
+    ttlMode = state;
+    dacOutputShouldChange = true;
+
+}
+
+void RHD2000Thread::setDAChpf(float cutoff, bool enabled)
+{
+    dacOutputShouldChange = true;
+    desiredDAChpf = cutoff;
+    desiredDAChpfState = enabled;
+}
+
+void RHD2000Thread::setFastTTLSettle(bool state, int channel)
+{
+    fastTTLSettleEnabled = state;
+    fastSettleTTLChannel = channel;
+    dacOutputShouldChange = true;
 }
 
 int RHD2000Thread::setNoiseSlicerLevel(int level)
 {
+
     desiredNoiseSlicerLevel = level;
-    evalBoard->setAudioNoiseSuppress(desiredNoiseSlicerLevel);
+    if (deviceFound)
+        evalBoard->setAudioNoiseSuppress(desiredNoiseSlicerLevel);
 
     // Level has been checked once before this and then is checked again in setAudioNoiseSuppress.
     // This may be overkill - maybe API should change so that the final function returns the value?
@@ -749,23 +1030,24 @@ bool RHD2000Thread::isHeadstageEnabled(int hsNum)
 
 void RHD2000Thread::assignAudioOut(int dacChannel, int dataChannel)
 {
-
-    if (dacChannel == 0)
-    {
-        audioOutputR = dataChannel;
-
-
-    }
-    else if (dacChannel == 1)
+    if (deviceFound)
     {
-        audioOutputL = dataChannel;
+        if (dacChannel == 0)
+        {
+            audioOutputR = dataChannel;
+            dacChannels[0] = dataChannel;
+        }
+        else if (dacChannel == 1)
+        {
+            audioOutputL = dataChannel;
+            dacChannels[1] = dataChannel;
+        }
 
+        dacOutputShouldChange = true; // set a flag and take care of setting wires
+        // during the updateBuffer() method
+        // to avoid problems
     }
 
-    dacOutputShouldChange = true; // set a flag and take care of setting wires
-    // during the updateBuffer() method
-    // to avoid problems
-
 }
 
 void RHD2000Thread::enableAdcs(bool t)
@@ -774,9 +1056,10 @@ void RHD2000Thread::enableAdcs(bool t)
     acquireAdcChannels = t;
 
     dataBuffer->resize(getNumChannels(), 10000);
-
+    updateChannelNames();
 }
 
+
 void RHD2000Thread::setSampleRate(int sampleRateIndex, bool isTemporary)
 {
 
@@ -959,16 +1242,16 @@ void RHD2000Thread::updateRegisters()
     evalBoard->selectAuxCommandLength(Rhd2000EvalBoard::AuxCmd3, 0,
                                       commandSequenceLength - 1);
 
+
     chipRegisters.setFastSettle(true);
+
     commandSequenceLength = chipRegisters.createCommandListRegisterConfig(commandList, false);
     // Upload version with fast settle enabled to AuxCmd3 RAM Bank 2.
     evalBoard->uploadCommandList(commandList, Rhd2000EvalBoard::AuxCmd3, 2);
     evalBoard->selectAuxCommandLength(Rhd2000EvalBoard::AuxCmd3, 0,
                                       commandSequenceLength - 1);
-    chipRegisters.setFastSettle(false);
-
-
 
+    chipRegisters.setFastSettle(false);
     evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortA, Rhd2000EvalBoard::AuxCmd3,
                                     fastSettleEnabled ? 2 : 1);
     evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortB, Rhd2000EvalBoard::AuxCmd3,
@@ -1047,7 +1330,7 @@ bool RHD2000Thread::startAcquisition()
 bool RHD2000Thread::stopAcquisition()
 {
 
-    //	isTransmitting = false;
+    //  isTransmitting = false;
     std::cout << "RHD2000 data thread stopping acquisition." << std::endl;
 
     if (isThreadRunning())
@@ -1088,6 +1371,7 @@ bool RHD2000Thread::stopAcquisition()
         int ledArray[8] = {1, 0, 0, 0, 0, 0, 0, 0};
         evalBoard->setLedDisplay(ledArray);
     }
+
     isTransmitting = false;
 
     return true;
@@ -1135,7 +1419,7 @@ bool RHD2000Thread::updateBuffer()
 
             streamNumber = -1;
 
-            // then do the Intan ADC channels
+            // then do the Intan AUX channels
             for (int dataStream = 0; dataStream < MAX_NUM_DATA_STREAMS; dataStream++)
             {
                 if (numChannelsPerDataStream[dataStream] > 0)
@@ -1214,30 +1498,529 @@ bool RHD2000Thread::updateBuffer()
 
     if (dacOutputShouldChange)
     {
-        if (audioOutputR >= 0)
+        for (int k=0; k<8; k++)
         {
-            evalBoard->enableDac(0, true);
-            evalBoard->selectDacDataChannel(0, audioOutputR);
+            if (dacChannelsToUpdate[k])
+            {
+                dacChannelsToUpdate[k] = false;
+                if (dacChannels[k] >= 0)
+                {
+                    evalBoard->enableDac(k, true);
+                    evalBoard->selectDacDataStream(k, dacStream[k]);
+                    evalBoard->selectDacDataChannel(k, dacChannels[k]);
+                    evalBoard->setDacThresholdVoltage(k, (int) dacThresholds[k]);
+                }
+                else
+                {
+                    evalBoard->enableDac(k, false);
+                }
+            }
         }
-        else
+
+        evalBoard->setTtlMode(ttlMode);
+        evalBoard->setFastSettleByTTL(fastTTLSettleEnabled);
+        evalBoard->setFastSettleByTTLchannel(fastSettleTTLChannel);
+        evalBoard->setDacHighpassFilter(desiredDAChpf);
+        evalBoard->enableDacHighpassFilter(desiredDAChpfState);
+
+        dacOutputShouldChange = false;
+    }
+
+
+    return true;
+
+}
+
+
+/***********************************/
+/* Below is code for impedance measurements */
+
+
+
+
+// Update electrode impedance measurement frequency, after checking that
+// requested test frequency lies within acceptable ranges based on the
+// amplifier bandwidth and the sampling rate.  See impedancefreqdialog.cpp
+// for more information.
+float RHD2000Thread::updateImpedanceFrequency(float desiredImpedanceFreq, bool& impedanceFreqValid)
+{
+    int impedancePeriod;
+    double lowerBandwidthLimit, upperBandwidthLimit;
+    float actualImpedanceFreq;
+
+    upperBandwidthLimit = actualUpperBandwidth / 1.5;
+    lowerBandwidthLimit = actualLowerBandwidth * 1.5;
+    if (dspEnabled)
+    {
+        if (actualDspCutoffFreq > actualLowerBandwidth)
         {
-            evalBoard->enableDac(0, false);
+            lowerBandwidthLimit = actualDspCutoffFreq * 1.5;
         }
+    }
 
-        if (audioOutputL >= 0)
+    if (desiredImpedanceFreq > 0.0)
+    {
+        impedancePeriod = (boardSampleRate / desiredImpedanceFreq);
+        if (impedancePeriod >= 4 && impedancePeriod <= 1024 &&
+            desiredImpedanceFreq >= lowerBandwidthLimit &&
+            desiredImpedanceFreq <= upperBandwidthLimit)
         {
-            evalBoard->enableDac(1, true);
-            evalBoard->selectDacDataChannel(1, audioOutputL);
+            actualImpedanceFreq = boardSampleRate / impedancePeriod;
+            impedanceFreqValid = true;
         }
         else
         {
-            evalBoard->enableDac(1, false);
+            actualImpedanceFreq = 0.0;
+            impedanceFreqValid = false;
         }
+    }
+    else
+    {
+        actualImpedanceFreq = 0.0;
+        impedanceFreqValid = false;
+    }
 
-        dacOutputShouldChange = false;
+    return actualImpedanceFreq;
+}
+
+
+// Reads numBlocks blocks of raw USB data stored in a queue of Rhd2000DataBlock
+// objects, loads this data into this SignalProcessor object, scaling the raw
+// data to generate waveforms with units of volts or microvolts.
+int RHD2000Thread::loadAmplifierData(queue<Rhd2000DataBlock>& dataQueue,
+                                     int numBlocks, int numDataStreams)
+{
+
+    int block, t, channel, stream, i, j;
+    int indexAmp = 0;
+    int indexAux = 0;
+    int indexSupply = 0;
+    int indexAdc = 0;
+    int indexDig = 0;
+    int numWordsWritten = 0;
+
+    int bufferIndex;
+    int16 tempQint16;
+    uint16 tempQuint16;
+    int32 tempQint32;
+
+    bool triggerFound = false;
+    const double AnalogTriggerThreshold = 1.65;
+
+
+    for (block = 0; block < numBlocks; ++block)
+    {
+
+        // Load and scale RHD2000 amplifier waveforms
+        // (sampled at amplifier sampling rate)
+        for (t = 0; t < SAMPLES_PER_DATA_BLOCK; ++t)
+        {
+            for (channel = 0; channel < 32; ++channel)
+            {
+                for (stream = 0; stream < numDataStreams; ++stream)
+                {
+                    // Amplifier waveform units = microvolts
+                    amplifierPreFilter[stream][channel][indexAmp] = 0.195 *
+                                                                    (dataQueue.front().amplifierData[stream][channel][t] - 32768);
+                }
+            }
+            ++indexAmp;
+        }
+        // We are done with this Rhd2000DataBlock object; remove it from dataQueue
+        dataQueue.pop();
     }
 
+    return 0;
+}
 
-    return true;
+#define PI  3.14159265359
+#define TWO_PI  6.28318530718
+#define DEGREES_TO_RADIANS  0.0174532925199
+#define RADIANS_TO_DEGREES  57.2957795132
+
+// Return the magnitude and phase (in degrees) of a selected frequency component (in Hz)
+// for a selected amplifier channel on the selected USB data stream.
+void RHD2000Thread::measureComplexAmplitude(std::vector<std::vector<std::vector<double>>>& measuredMagnitude,
+                                            std::vector<std::vector<std::vector<double>>>& measuredPhase,
+                                            int capIndex, int stream, int chipChannel, int numBlocks,
+                                            double sampleRate, double frequency, int numPeriods)
+{
+    int period = (sampleRate / frequency);
+    int startIndex = 0;
+    int endIndex = startIndex + numPeriods * period - 1;
+
+    // Move the measurement window to the end of the waveform to ignore start-up transient.
+    while (endIndex < SAMPLES_PER_DATA_BLOCK * numBlocks - period)
+    {
+        startIndex += period;
+        endIndex += period;
+    }
+
+    double iComponent, qComponent;
+
+    // Measure real (iComponent) and imaginary (qComponent) amplitude of frequency component.
+    amplitudeOfFreqComponent(iComponent, qComponent, amplifierPreFilter[stream][chipChannel],
+                             startIndex, endIndex, sampleRate, frequency);
+    // Calculate magnitude and phase from real (I) and imaginary (Q) components.
+    measuredMagnitude[stream][chipChannel][capIndex] =
+        sqrt(iComponent * iComponent + qComponent * qComponent);
+    measuredPhase[stream][chipChannel][capIndex] =
+        RADIANS_TO_DEGREES *atan2(qComponent, iComponent);
+}
+
+// Returns the real and imaginary amplitudes of a selected frequency component in the vector
+// data, between a start index and end index.
+void RHD2000Thread::amplitudeOfFreqComponent(double& realComponent, double& imagComponent,
+                                             const std::vector<double>& data, int startIndex,
+                                             int endIndex, double sampleRate, double frequency)
+{
+    int length = endIndex - startIndex + 1;
+    const double k = TWO_PI * frequency / sampleRate;  // precalculate for speed
+
+    // Perform correlation with sine and cosine waveforms.
+    double meanI = 0.0;
+    double meanQ = 0.0;
+    for (int t = startIndex; t <= endIndex; ++t)
+    {
+        meanI += data.at(t) * cos(k * t);
+        meanQ += data.at(t) * -1.0 * sin(k * t);
+    }
+    meanI /= (double) length;
+    meanQ /= (double) length;
+
+    realComponent = 2.0 * meanI;
+    imagComponent = 2.0 * meanQ;
+}
+
+
+
+// Given a measured complex impedance that is the result of an electrode impedance in parallel
+// with a parasitic capacitance (i.e., due to the amplifier input capacitance and other
+// capacitances associated with the chip bondpads), this function factors out the effect of the
+// parasitic capacitance to return the acutal electrode impedance.
+void RHD2000Thread::factorOutParallelCapacitance(double& impedanceMagnitude, double& impedancePhase,
+                                                 double frequency, double parasiticCapacitance)
+{
+    // First, convert from polar coordinates to rectangular coordinates.
+    double measuredR = impedanceMagnitude * cos(DEGREES_TO_RADIANS * impedancePhase);
+    double measuredX = impedanceMagnitude * sin(DEGREES_TO_RADIANS * impedancePhase);
+
+    double capTerm = TWO_PI * frequency * parasiticCapacitance;
+    double xTerm = capTerm * (measuredR * measuredR + measuredX * measuredX);
+    double denominator = capTerm * xTerm + 2 * capTerm * measuredX + 1;
+    double trueR = measuredR / denominator;
+    double trueX = (measuredX + xTerm) / denominator;
+
+    // Now, convert from rectangular coordinates back to polar coordinates.
+    impedanceMagnitude = sqrt(trueR * trueR + trueX * trueX);
+    impedancePhase = RADIANS_TO_DEGREES * atan2(trueX, trueR);
+}
+
+// This is a purely empirical function to correct observed errors in the real component
+// of measured electrode impedances at sampling rates below 15 kS/s.  At low sampling rates,
+// it is difficult to approximate a smooth sine wave with the on-chip voltage DAC and 10 kHz
+// 2-pole lowpass filter.  This function attempts to somewhat correct for this, but a better
+// solution is to always run impedance measurements at 20 kS/s, where they seem to be most
+// accurate.
+void RHD2000Thread::empiricalResistanceCorrection(double& impedanceMagnitude, double& impedancePhase,
+                                                  double boardSampleRate)
+{
+    // First, convert from polar coordinates to rectangular coordinates.
+    double impedanceR = impedanceMagnitude * cos(DEGREES_TO_RADIANS * impedancePhase);
+    double impedanceX = impedanceMagnitude * sin(DEGREES_TO_RADIANS * impedancePhase);
+
+    // Emprically derived correction factor (i.e., no physical basis for this equation).
+    impedanceR /= 10.0 * exp(-boardSampleRate / 2500.0) * cos(TWO_PI * boardSampleRate / 15000.0) + 1.0;
+
+    // Now, convert from rectangular coordinates back to polar coordinates.
+    impedanceMagnitude = sqrt(impedanceR * impedanceR + impedanceX * impedanceX);
+    impedancePhase = RADIANS_TO_DEGREES * atan2(impedanceX, impedanceR);
+}
+
+void RHD2000Thread::runImpedanceTest(Array<int>& streams, Array<int>& channels, Array<float>& magnitudes, Array<float>& phases)
+{
+    int commandSequenceLength, stream, channel, capRange;
+    double cSeries;
+    vector<int> commandList;
+    int triggerIndex;                       // dummy reference variable; not used
+    queue<Rhd2000DataBlock> bufferQueue;    // dummy reference variable; not used
+    int numdataStreams = evalBoard->getNumEnabledDataStreams();
+
+    bool rhd2164ChipPresent = false;
+    Array<int> enabledStreams;
+    for (stream = 0; stream < MAX_NUM_DATA_STREAMS; ++stream)
+    {
+
+        if (evalBoard->isStreamEnabled(stream))
+        {
+            enabledStreams.add(stream);
+        }
+
+        if (chipId[stream] == CHIP_ID_RHD2164_B)
+        {
+            rhd2164ChipPresent = true;
+        }
+    }
+
+    bool validImpedanceFreq;
+    float actualImpedanceFreq = updateImpedanceFrequency(1000.0, validImpedanceFreq);
+    if (!validImpedanceFreq)
+    {
+        return ;
+    }
+    // Create a command list for the AuxCmd1 slot.
+    commandSequenceLength = chipRegisters.createCommandListZcheckDac(commandList, actualImpedanceFreq, 128.0);
+    evalBoard->uploadCommandList(commandList, Rhd2000EvalBoard::AuxCmd1, 1);
+    evalBoard->selectAuxCommandLength(Rhd2000EvalBoard::AuxCmd1,
+                                      0, commandSequenceLength - 1);
+    bool fastSettleMode = evalBoard->getExternalFastSettle();
+    if (fastSettleMode)
+    {
+        evalBoard->enableExternalFastSettle(false);
+    }
+
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortA,
+                                    Rhd2000EvalBoard::AuxCmd1, 1);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortB,
+                                    Rhd2000EvalBoard::AuxCmd1, 1);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortC,
+                                    Rhd2000EvalBoard::AuxCmd1, 1);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortD,
+                                    Rhd2000EvalBoard::AuxCmd1, 1);
+
+    // Select number of periods to measure impedance over
+    int numPeriods = (0.020 * actualImpedanceFreq); // Test each channel for at least 20 msec...
+    if (numPeriods < 5) numPeriods = 5; // ...but always measure across no fewer than 5 complete periods
+    double period = boardSampleRate / actualImpedanceFreq;
+    int numBlocks = ceil((numPeriods + 2.0) * period / 60.0);  // + 2 periods to give time to settle initially
+    if (numBlocks < 2) numBlocks = 2;   // need first block for command to switch channels to take effect.
+
+    actualDspCutoffFreq = chipRegisters.setDspCutoffFreq(desiredDspCutoffFreq);
+    actualLowerBandwidth = chipRegisters.setLowerBandwidth(desiredLowerBandwidth);
+    actualUpperBandwidth = chipRegisters.setUpperBandwidth(desiredUpperBandwidth);
+    chipRegisters.enableDsp(dspEnabled);
+    chipRegisters.enableZcheck(true);
+    commandSequenceLength = chipRegisters.createCommandListRegisterConfig(commandList, false);
+    // Upload version with no ADC calibration to AuxCmd3 RAM Bank 1.
+    evalBoard->uploadCommandList(commandList, Rhd2000EvalBoard::AuxCmd3, 3);
+    evalBoard->selectAuxCommandLength(Rhd2000EvalBoard::AuxCmd3, 0, commandSequenceLength - 1);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortA, Rhd2000EvalBoard::AuxCmd3, 3);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortB, Rhd2000EvalBoard::AuxCmd3, 3);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortC, Rhd2000EvalBoard::AuxCmd3, 3);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortD, Rhd2000EvalBoard::AuxCmd3, 3);
+
+    evalBoard->setContinuousRunMode(false);
+    evalBoard->setMaxTimeStep(SAMPLES_PER_DATA_BLOCK * numBlocks);
+
+    // Create matrices of doubles of size (numStreams x 32 x 3) to store complex amplitudes
+    // of all amplifier channels (32 on each data stream) at three different Cseries values.
+    std::vector<std::vector<std::vector<double>>>  measuredMagnitude;
+    std::vector<std::vector<std::vector<double>>>  measuredPhase;
+
+    measuredMagnitude.resize(evalBoard->getNumEnabledDataStreams());
+    measuredPhase.resize(evalBoard->getNumEnabledDataStreams());
+    for (int i = 0; i < evalBoard->getNumEnabledDataStreams(); ++i)
+    {
+        measuredMagnitude[i].resize(32);
+        measuredPhase[i].resize(32);
+        for (int j = 0; j < 32; ++j)
+        {
+            measuredMagnitude[i][j].resize(3);
+            measuredPhase[i][j].resize(3);
+        }
+    }
+
+
+
+    double distance, minDistance, current, Cseries;
+    double impedanceMagnitude, impedancePhase;
+
+    const double bestAmplitude = 250.0;  // we favor voltage readings that are closest to 250 uV: not too large,
+    // and not too small.
+    const double dacVoltageAmplitude = 128 * (1.225 / 256);  // this assumes the DAC amplitude was set to 128
+    const double parasiticCapacitance = 14.0e-12;  // 14 pF: an estimate of on-chip parasitic capacitance,
+    // including 10 pF of amplifier input capacitance.
+    double relativeFreq = actualImpedanceFreq / boardSampleRate;
+
+    int bestAmplitudeIndex;
+
+    // We execute three complete electrode impedance measurements: one each with
+    // Cseries set to 0.1 pF, 1 pF, and 10 pF.  Then we select the best measurement
+    // for each channel so that we achieve a wide impedance measurement range.
+    for (capRange = 0; capRange < 3; ++ capRange)
+    {
+
+
+        switch (capRange)
+        {
+            case 0:
+                chipRegisters.setZcheckScale(Rhd2000Registers::ZcheckCs100fF);
+                cSeries = 0.1e-12;
+                cout << "setting capacitance to 0.1pF"  << endl;
+                break;
+            case 1:
+                chipRegisters.setZcheckScale(Rhd2000Registers::ZcheckCs1pF);
+                cSeries = 1.0e-12;
+                cout << "setting capacitance to 1pF"  << endl;
+                break;
+            case 2:
+                chipRegisters.setZcheckScale(Rhd2000Registers::ZcheckCs10pF);
+                cSeries = 10.0e-12;
+                cout << "setting capacitance to 10pF"  << endl;
+                break;
+        }
+
+        // Check all 32 channels across all active data streams.
+        for (channel = 0; channel < 32; ++channel)
+        {
+            cout << "running impedance on channel " << channel << endl;
+
+            chipRegisters.setZcheckChannel(channel);
+            commandSequenceLength =
+                chipRegisters.createCommandListRegisterConfig(commandList, false);
+            // Upload version with no ADC calibration to AuxCmd3 RAM Bank 1.
+            evalBoard->uploadCommandList(commandList, Rhd2000EvalBoard::AuxCmd3, 3);
+
+            evalBoard->run();
+            while (evalBoard->isRunning())
+            {
 
-}
\ No newline at end of file
+            }
+            queue<Rhd2000DataBlock> dataQueue;
+            evalBoard->readDataBlocks(numBlocks, dataQueue);
+            loadAmplifierData(dataQueue, numBlocks, numdataStreams);
+            for (stream = 0; stream < numdataStreams; ++stream)
+            {
+                if (chipId[stream] != CHIP_ID_RHD2164_B)
+                {
+                    measureComplexAmplitude(measuredMagnitude, measuredPhase,
+                                            capRange, stream, channel,  numBlocks, boardSampleRate,
+                                            actualImpedanceFreq, numPeriods);
+                }
+            }
+
+            // If an RHD2164 chip is plugged in, we have to set the Zcheck select register to channels 32-63
+            // and repeat the previous steps.
+            if (rhd2164ChipPresent)
+            {
+                chipRegisters.setZcheckChannel(channel + 32); // address channels 32-63
+                commandSequenceLength =
+                    chipRegisters.createCommandListRegisterConfig(commandList, false);
+                // Upload version with no ADC calibration to AuxCmd3 RAM Bank 1.
+                evalBoard->uploadCommandList(commandList, Rhd2000EvalBoard::AuxCmd3, 3);
+
+                evalBoard->run();
+                while (evalBoard->isRunning())
+                {
+
+                }
+                evalBoard->readDataBlocks(numBlocks, dataQueue);
+                loadAmplifierData(dataQueue, numBlocks, numdataStreams);
+
+                for (stream = 0; stream < evalBoard->getNumEnabledDataStreams(); ++stream)
+                {
+                    if (chipId[stream] == CHIP_ID_RHD2164_B)
+                    {
+                        measureComplexAmplitude(measuredMagnitude, measuredPhase,
+                                                capRange, stream, channel,  numBlocks, boardSampleRate,
+                                                actualImpedanceFreq, numPeriods);
+                    }
+                }
+            }
+        }
+    }
+
+    streams.clear();
+    channels.clear();
+    magnitudes.clear();
+    phases.clear();
+
+    for (stream = 0; stream < evalBoard->getNumEnabledDataStreams(); ++stream)
+    {
+        for (channel = 0; channel < 32; ++channel)
+        {
+            if (1)
+            {
+                minDistance = 9.9e99;  // ridiculously large number
+                for (capRange = 0; capRange < 3; ++capRange)
+                {
+                    // Find the measured amplitude that is closest to bestAmplitude on a logarithmic scale
+                    distance = abs(log(measuredMagnitude[stream][channel][capRange] / bestAmplitude));
+                    if (distance < minDistance)
+                    {
+                        bestAmplitudeIndex = capRange;
+                        minDistance = distance;
+                    }
+                }
+                switch (bestAmplitudeIndex)
+                {
+                    case 0:
+                        Cseries = 0.1e-12;
+                        break;
+                    case 1:
+                        Cseries = 1.0e-12;
+                        break;
+                    case 2:
+                        Cseries = 10.0e-12;
+                        break;
+                }
+
+                // Calculate current amplitude produced by on-chip voltage DAC
+                current = TWO_PI * actualImpedanceFreq * dacVoltageAmplitude * Cseries;
+
+                // Calculate impedance magnitude from calculated current and measured voltage.
+                impedanceMagnitude = 1.0e-6 * (measuredMagnitude[stream][channel][bestAmplitudeIndex] / current) *
+                                     (18.0 * relativeFreq * relativeFreq + 1.0);
+
+                // Calculate impedance phase, with small correction factor accounting for the
+                // 3-command SPI pipeline delay.
+                impedancePhase = measuredPhase[stream][channel][bestAmplitudeIndex] + (360.0 * (3.0 / period));
+
+                // Factor out on-chip parasitic capacitance from impedance measurement.
+                factorOutParallelCapacitance(impedanceMagnitude, impedancePhase, actualImpedanceFreq,
+                                             parasiticCapacitance);
+
+                // Perform empirical resistance correction to improve accuarcy at sample rates below
+                // 15 kS/s.
+                empiricalResistanceCorrection(impedanceMagnitude, impedancePhase,
+                                              boardSampleRate);
+
+                streams.add(enabledStreams[stream]);
+                channels.add(channel);
+                magnitudes.add(impedanceMagnitude);
+                phases.add(impedancePhase);
+
+                if (impedanceMagnitude > 1000000)
+                    cout << "stream " << stream << " channel " << 1+channel << " magnitude: " <<  String(impedanceMagnitude/1e6,2) << " mOhm , phase : " <<impedancePhase << endl;
+                else
+                    cout << "stream " << stream << " channel " << 1+channel << " magnitude: " <<  String(impedanceMagnitude/1e3,2) << " kOhm , phase : " <<impedancePhase << endl;
+
+            }
+        }
+    }
+
+    evalBoard->setContinuousRunMode(false);
+    evalBoard->setMaxTimeStep(0);
+    evalBoard->flush();
+
+    // Switch back to flatline
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortA, Rhd2000EvalBoard::AuxCmd1, 0);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortB, Rhd2000EvalBoard::AuxCmd1, 0);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortC, Rhd2000EvalBoard::AuxCmd1, 0);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortD, Rhd2000EvalBoard::AuxCmd1, 0);
+    evalBoard->selectAuxCommandLength(Rhd2000EvalBoard::AuxCmd1, 0, 1);
+
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortA, Rhd2000EvalBoard::AuxCmd3,
+                                    fastSettleEnabled ? 2 : 1);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortB, Rhd2000EvalBoard::AuxCmd3,
+                                    fastSettleEnabled ? 2 : 1);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortC, Rhd2000EvalBoard::AuxCmd3,
+                                    fastSettleEnabled ? 2 : 1);
+    evalBoard->selectAuxCommandBank(Rhd2000EvalBoard::PortD, Rhd2000EvalBoard::AuxCmd3,
+                                    fastSettleEnabled ? 2 : 1);
+
+    if (fastSettleMode)
+    {
+        evalBoard->enableExternalFastSettle(true);
+    }
+}
diff --git a/Source/Processors/DataThreads/RHD2000Thread.h b/Source/Processors/DataThreads/RHD2000Thread.h
index 203cfa0b0ef7da76bc47a7ce44c9bea4d1b78b40..08b7831de3e38086bd7b1d29c82793b9a976e46a 100644
--- a/Source/Processors/DataThreads/RHD2000Thread.h
+++ b/Source/Processors/DataThreads/RHD2000Thread.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -37,6 +37,7 @@
 #include "rhythm-api/okFrontPanelDLL.h"
 
 #include "DataThread.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 #define MAX_NUM_DATA_STREAMS 8
 
@@ -50,7 +51,7 @@ class SourceNode;
 
 */
 
-class RHD2000Thread : public DataThread
+class RHD2000Thread : public DataThread, public Timer
 
 {
 public:
@@ -71,34 +72,62 @@ public:
     void setSampleRate(int index, bool temporary = false);
 
     double setUpperBandwidth(double upper); // set desired BW, returns actual BW
-    double setLowerBandwidth(double lower);
+    double setLowerBandwidth(double lower);
+
     double setDspCutoffFreq(double freq);
     double getDspCutoffFreq();
     
     void setDSPOffset(bool state);
 
     int setNoiseSlicerLevel(int level);
+    void runImpedanceTest(Array<int> &stream, Array<int> &channel, Array<float> &magnitude, Array<float> &phase);
+    void setFastTTLSettle(bool state, int channel);
+    void setTTLoutputMode(bool state);
+    void setDAChpf(float cutoff, bool enabled);
 
     void scanPorts();
-
+    float updateImpedanceFrequency(float desiredImpedanceFreq, bool &impedanceFreqValid);
+    int loadAmplifierData(queue<Rhd2000DataBlock> &dataQueue,
+                                       int numBlocks, int numDataStreams);
+    void measureComplexAmplitude(std::vector<std::vector<std::vector<double>>> &measuredMagnitude,
+                                            std::vector<std::vector<std::vector<double>>> &measuredPhase,
+                                              int capIndex, int stream, int chipChannel, int numBlocks,
+                                              double sampleRate, double frequency, int numPeriods);
+    void amplitudeOfFreqComponent(double &realComponent, double &imagComponent,
+                                               const std::vector<double> &data, int startIndex,
+                                               int endIndex, double sampleRate, double frequency);
     int getNumEventChannels();
+    int getNumADCchannels();
 
     void assignAudioOut(int dacChannel, int dataChannel);
     void enableAdcs(bool);
 
     bool isAcquisitionActive();
-
+    
+    virtual int modifyChannelGain(channelType t, int str, int ch, float gain);
+    virtual int modifyChannelName(channelType t, int str, int k, String newName);
+    virtual void getChannelsInfo(StringArray &Names, Array<channelType> &type, Array<int> &stream, Array<int> &originalChannelNumber, Array<float> &gains);
+    virtual void getEventChannelNames(StringArray &Names);
     void updateChannelNames();
+    Array<int> getDACchannels();
+    void setDACchannel(int dacOutput, int stream, int channel);
+    void setDACthreshold(int dacOutput, float threshold);
+    void setDefaultNamingScheme(int scheme);
 
 private:
+    void setDefaultChannelNamesAndType();
+    bool channelModified(channelType t, int str, int k, String &oldName, float &oldGain, int &index);
 
     ScopedPointer<Rhd2000EvalBoard> evalBoard;
     Rhd2000Registers chipRegisters;
     Rhd2000DataBlock* dataBlock;
 
-
+    std::vector<std::vector<std::vector<double>>> amplifierPreFilter;
     Array<int> numChannelsPerDataStream;
-
+    void factorOutParallelCapacitance(double &impedanceMagnitude, double &impedancePhase,
+                                              double frequency, double parasiticCapacitance);
+    void empiricalResistanceCorrection(double &impedanceMagnitude, double &impedancePhase,
+                                               double boardSampleRate);
     int numChannels;
     bool deviceFound;
 
@@ -114,6 +143,11 @@ private:
     bool acquireAuxChannels;
 
     bool fastSettleEnabled;
+    bool fastTTLSettleEnabled;
+    bool fastSettleTTLChannel;
+    bool ttlMode;
+    bool desiredDAChpfState;
+    double desiredDAChpf;
 
     bool dspEnabled;
     double actualDspCutoffFreq, desiredDspCutoffFreq;
@@ -125,7 +159,7 @@ private:
 
     String libraryFilePath;
 
-
+    void timerCallback();
 
     bool startAcquisition();
     bool stopAcquisition();
@@ -143,6 +177,19 @@ private:
     double cableLengthPortA, cableLengthPortB, cableLengthPortC, cableLengthPortD;
 
     int audioOutputL, audioOutputR;
+    int *dacChannels, *dacStream;
+    float *dacThresholds;
+    bool *dacChannelsToUpdate;
+    Array<int> chipId;
+
+    // used for data stream names...
+    int numberingScheme ;
+    StringArray Names, oldNames;
+    Array<channelType> type, oldType;
+    Array<float> gains, oldGains;
+    Array<int> stream, oldStream;
+    Array<bool> modifiedName, oldModifiedName;
+    Array<int> originalChannelNumber, oldChannelNumber;
 
 
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(RHD2000Thread);
diff --git a/Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.cpp b/Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.cpp
index 54e5e702162843a8658edfa10d7c826d488b00d7..686aaa17385d56b1fcd1e5e7bff6d0c979711326 100755
--- a/Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.cpp
+++ b/Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.cpp
@@ -39,6 +39,7 @@ using namespace std;
 Rhd2000EvalBoard::Rhd2000EvalBoard()
 {
     int i;
+    fast_settle_enabled = false;
     sampleRate = SampleRate30000Hz; // Rhythm FPGA boots up with 30.0 kS/s/channel sampling rate
     numDataStreams = 0;
     dev = 0; //nullptr;
@@ -47,6 +48,13 @@ Rhd2000EvalBoard::Rhd2000EvalBoard()
     {
         dataStreamEnabled[i] = 0;
     }
+    dacChannelAssignment = new int[8];
+    dacChannelThreshold = new float[8];
+    for (int k=0;k<8;k++)
+    {
+        dacChannelAssignment[k] = -1;
+        dacChannelThreshold[k] =0;
+    }
 }
 
 //Destructor: Deletes the device to avoid memory leak
@@ -132,28 +140,28 @@ bool Rhd2000EvalBoard::uploadFpgaBitfile(string filename)
             break;
         case okCFrontPanel::DeviceNotOpen:
             cerr << "FPGA configuration failed: Device not open." << endl;
-            return (false);
+            return(false);
         case okCFrontPanel::FileError:
             cerr << "FPGA configuration failed: Cannot find configuration file." << endl;
-            return (false);
+            return(false);
         case okCFrontPanel::InvalidBitstream:
             cerr << "FPGA configuration failed: Bitstream is not properly formatted." << endl;
-            return (false);
+            return(false);
         case okCFrontPanel::DoneNotHigh:
             cerr << "FPGA configuration failed: FPGA DONE signal did not assert after configuration." << endl;
-            return (false);
+            return(false);
         case okCFrontPanel::TransferError:
             cerr << "FPGA configuration failed: USB error occurred during download." << endl;
-            return (false);
+            return(false);
         case okCFrontPanel::CommunicationError:
             cerr << "FPGA configuration failed: Communication error with firmware." << endl;
-            return (false);
+            return(false);
         case okCFrontPanel::UnsupportedFeature:
             cerr << "FPGA configuration failed: Unsupported feature." << endl;
-            return (false);
+            return(false);
         default:
             cerr << "FPGA configuration failed: Unknown error." << endl;
-            return (false);
+            return(false);
     }
 
     // Check for Opal Kelly FrontPanel support in the FPGA configuration.
@@ -162,7 +170,7 @@ bool Rhd2000EvalBoard::uploadFpgaBitfile(string filename)
         cerr << "Opal Kelly FrontPanel support is not enabled in this FPGA configuration." << endl;
         delete dev;
         dev = 0; //nullptr;
-        return (false);
+        return(false);
     }
 
     int boardId, boardVersion;
@@ -173,7 +181,7 @@ bool Rhd2000EvalBoard::uploadFpgaBitfile(string filename)
     if (boardId != RHYTHM_BOARD_ID)
     {
         cerr << "FPGA configuration does not support Rhythm.  Incorrect board ID: " << boardId << endl;
-        return (false);
+        return(false);
     }
     else
     {
@@ -181,9 +189,14 @@ bool Rhd2000EvalBoard::uploadFpgaBitfile(string filename)
              boardVersion << endl << endl;
     }
 
-    return (true);
+    return(true);
 }
 
+// Uses the Opal Kelly library to reset the FPGA
+void Rhd2000EvalBoard::resetFpga() 
+{
+    dev->ResetFPGA();
+}
 
 // Reads system clock frequency from Opal Kelly board (in MHz).  Should be 100 MHz for normal
 // Rhythm operation.
@@ -275,6 +288,18 @@ void Rhd2000EvalBoard::initialize()
 
     setDacGain(0);
     setAudioNoiseSuppress(0);
+
+    setTtlMode(0);          // If 1 then Digital outputs 0-7 are DAC comparators; 8-15 under manual control
+                            // by default, set to 0 (all are under manual control).
+
+    setDacThreshold(0, 32768, true);
+    setDacThreshold(1, 32768, true);
+    setDacThreshold(2, 32768, true);
+    setDacThreshold(3, 32768, true);
+    setDacThreshold(4, 32768, true);
+    setDacThreshold(5, 32768, true);
+    setDacThreshold(6, 32768, true);
+    setDacThreshold(7, 32768, true);
 }
 
 // Set the per-channel sampling rate of the RHD2000 chips connected to the FPGA.
@@ -406,7 +431,7 @@ bool Rhd2000EvalBoard::setSampleRate(AmplifierSampleRate newSampleRate)
             D = 25;
             break;
         default:
-            return (false);
+            return(false);
     }
 
     sampleRate = newSampleRate;
@@ -422,7 +447,7 @@ bool Rhd2000EvalBoard::setSampleRate(AmplifierSampleRate newSampleRate)
     // Wait for DataClkLocked = 1 before allowing data acquisition to continue
     while (isDataClockLocked() == false) {}
 
-    return (true);
+    return(true);
 }
 
 // Returns the current per-channel sampling rate (in Hz) as a floating-point number.
@@ -492,7 +517,7 @@ Rhd2000EvalBoard::AmplifierSampleRate Rhd2000EvalBoard::getSampleRateEnum() cons
 }
 
 // Print a command list to the console in readable form.
-void Rhd2000EvalBoard::printCommandList(const vector<int>& commandList) const
+void Rhd2000EvalBoard::printCommandList(const vector<int> &commandList) const
 {
     unsigned int i;
     int cmd, channel, reg, data;
@@ -543,7 +568,7 @@ void Rhd2000EvalBoard::printCommandList(const vector<int>& commandList) const
 
 // Upload an auxiliary command list to a particular command slot (AuxCmd1, AuxCmd2, or AuxCmd3) and RAM bank (0-15)
 // on the FPGA.
-void Rhd2000EvalBoard::uploadCommandList(const vector<int>& commandList, AuxCmdSlot auxCommandSlot, int bank)
+void Rhd2000EvalBoard::uploadCommandList(const vector<int> &commandList, AuxCmdSlot auxCommandSlot, int bank)
 {
     unsigned int i;
 
@@ -678,12 +703,6 @@ void Rhd2000EvalBoard::resetBoard()
     dev->UpdateWireIns();
 }
 
-// Use the Opal Kelly library to reset the FPGA
-void Rhd2000EvalBoard::resetFpga()
-{
-    dev->ResetFPGA();
-}
-
 // Set the FPGA to run continuously once started (if continuousMode == true) or to run until
 // maxTimeStep is reached (if continuousMode == false).
 void Rhd2000EvalBoard::setContinuousRunMode(bool continuousMode)
@@ -906,6 +925,14 @@ void Rhd2000EvalBoard::setDataSource(int stream, BoardDataSource dataSource)
     dev->UpdateWireIns();
 }
 
+bool Rhd2000EvalBoard::isStreamEnabled(int streamIndex)
+{
+  if (streamIndex < 0 || streamIndex > (MAX_NUM_DATA_STREAMS - 1))
+    return false;
+
+  return dataStreamEnabled[streamIndex];
+}
+
 // Enable or disable one of the eight available USB data streams (0-7).
 void Rhd2000EvalBoard::enableDataStream(int stream, bool enabled)
 {
@@ -1127,6 +1154,69 @@ void Rhd2000EvalBoard::selectDacDataStream(int dacChannel, int stream)
     dev->UpdateWireIns();
 }
 
+void Rhd2000EvalBoard::setFastSettleByTTL(bool state)
+
+{
+    dev->SetWireInValue(WireInResetRun, (state ? 0x10 : 0x00), 0x10);
+    dev->UpdateWireIns();
+}
+
+void Rhd2000EvalBoard::setFastSettleByTTLchannel(int channel)
+{
+  if (channel < 0 || channel > 7)
+    {
+        cerr << "Error in Rhd2000EvalBoard::setFastSettleByTTLchannel: channel out of range." << endl;
+        return;
+    }
+// the WireInTTLSettleChannel is also used by DAC, so keep the values of 10 used bits
+ // and shift the channel value 10 bits to the left
+    dev->SetWireInValue(WireInTTLSettleChannel, channel << 10, 0x3c00);
+    dev->UpdateWireIns();
+}
+
+
+
+// Enable external triggering of amplifier hardware 'fast settle' function (blanking).
+// If external triggering is enabled, this fast settling of amplifiers on all connected
+// chips will be controlled in real time via one of the 16 TTL inputs.
+void Rhd2000EvalBoard::enableExternalFastSettle(bool enable)
+{
+    fast_settle_enabled = enable;
+    dev->SetWireInValue(WireInMultiUse, enable ? 1 : 0);
+    dev->UpdateWireIns();
+    dev->ActivateTriggerIn(TrigInExtFastSettle, 0);
+}
+
+bool Rhd2000EvalBoard::getExternalFastSettle()
+{
+    return fast_settle_enabled;
+}
+// Select which of the TTL inputs 0-15 is used to perform a hardware 'fast settle' (blanking)
+// of the amplifiers if external triggering of fast settling
+// is enabled.
+void Rhd2000EvalBoard::setExternalFastSettleChannel(int channel)
+{
+    if (channel < 0 || channel > 15) {
+        cerr << "Error in Rhd2000EvalBoard::setExternalFastSettleChannel: channel out of range." << endl;
+        return;
+    }
+    dev->SetWireInValue(WireInMultiUse, channel);
+    dev->UpdateWireIns();
+    dev->ActivateTriggerIn(TrigInExtFastSettle, 1);
+}
+
+int Rhd2000EvalBoard::gecDacDataChannel(int dacChannel)
+{
+    if (dacChannel < 0 || dacChannel > 7)
+        return -1;
+    return dacChannelAssignment[dacChannel];
+}
+
+void Rhd2000EvalBoard::updateDacAssignment(int dacChannel, int channel)
+{
+    dacChannelAssignment[dacChannel] = channel;
+}
+
 // Assign a particular amplifier channel (0-31) to a DAC channel (0-7).
 void Rhd2000EvalBoard::selectDacDataChannel(int dacChannel, int dataChannel)
 {
@@ -1141,6 +1231,7 @@ void Rhd2000EvalBoard::selectDacDataChannel(int dacChannel, int dataChannel)
         cerr << "Error in Rhd2000EvalBoard::selectDacDataChannel: dataChannel out of range." << endl;
         return;
     }
+    dacChannelAssignment[dacChannel] = dataChannel;
 
     switch (dacChannel)
     {
@@ -1172,6 +1263,112 @@ void Rhd2000EvalBoard::selectDacDataChannel(int dacChannel, int dataChannel)
     dev->UpdateWireIns();
 }
 
+// Enable optional FPGA-implemented digital high-pass filters associated with DAC outputs
+// on USB interface board.. These one-pole filters can be used to record wideband neural data
+// while viewing only spikes without LFPs on the DAC outputs, for example.  This is useful when
+// using the low-latency FPGA thresholds to detect spikes and produce digital pulses on the TTL
+// outputs, for example.
+void Rhd2000EvalBoard::enableDacHighpassFilter(bool enable)
+{
+    dev->SetWireInValue(WireInMultiUse, enable ? 1 : 0);
+    dev->UpdateWireIns();
+    dev->ActivateTriggerIn(TrigInDacHpf, 0);
+}
+
+// Set cutoff frequency (in Hz) for optional FPGA-implemented digital high-pass filters
+// associated with DAC outputs on USB interface board.  These one-pole filters can be used
+// to record wideband neural data while viewing only spikes without LFPs on the DAC outputs,
+// for example.  This is useful when using the low-latency FPGA thresholds to detect spikes
+// and produce digital pulses on the TTL outputs, for example.
+void Rhd2000EvalBoard::setDacHighpassFilter(double cutoff)
+{
+    double b;
+    int filterCoefficient;
+    const double pi = 3.1415926535897;
+
+    // Note that the filter coefficient is a function of the amplifier sample rate, so this
+    // function should be called after the sample rate is changed.
+    b = 1.0 - exp(-2.0 * pi * cutoff / getSampleRate());
+
+    // In hardware, the filter coefficient is represented as a 16-bit number.
+    filterCoefficient = (int) floor(65536.0 * b + 0.5);
+
+    if (filterCoefficient < 1) {
+        filterCoefficient = 1;
+    } else if (filterCoefficient > 65535) {
+        filterCoefficient = 65535;
+    }
+
+    dev->SetWireInValue(WireInMultiUse, filterCoefficient);
+    dev->UpdateWireIns();
+    dev->ActivateTriggerIn(TrigInDacHpf, 1);
+}
+
+// Set thresholds for DAC channels; threshold output signals appear on TTL outputs 0-7.
+// The parameter 'threshold' corresponds to the RHD2000 chip ADC output value, and must fall
+// in the range of 0 to 65535, where the 'zero' level is 32768.
+// If trigPolarity is true, voltages equaling or rising above the threshold produce a high TTL output.
+// If trigPolarity is false, voltages equaling or falling below the threshold produce a high TTL output.
+//
+// To convert threshold in voltage to this range, use the following:
+//     int threshLevel = ((double) threshold / 0.195) + 32768;
+//    evalBoard->setDacThreshold(0, threshLevel, threshold >= 0);
+
+void Rhd2000EvalBoard::setDacThresholdVoltage(int dacChannel, float voltage_threshold)
+{
+     int threshLevel = (voltage_threshold / 0.195) + 32768;
+    setDacThreshold(dacChannel, abs(threshLevel), voltage_threshold >= 0);
+
+}
+
+void Rhd2000EvalBoard::getDacInformation(int *ch, float *th)
+{
+    for (int k=0;k<8;k++)
+    {
+        ch[k] = dacChannelAssignment[k];
+        th[k] = dacChannelThreshold[k];
+    }
+}
+
+void Rhd2000EvalBoard::setDacThreshold(int dacChannel, int threshold, bool trigPolarityPositive)
+{
+    if (dacChannel < 0 || dacChannel > 7) {
+        cerr << "Error in Rhd2000EvalBoard::setDacThreshold: dacChannel out of range." << endl;
+        return;
+    }
+
+    if (threshold < 0 || threshold > 65535) {
+        cerr << "Error in Rhd2000EvalBoard::setDacThreshold: threshold out of range." << endl;
+        return;
+    }
+    dacChannelThreshold[dacChannel] = trigPolarityPositive? -(float)(threshold-32768)*0.195 : (float)(threshold-32768)*0.195;
+
+    // Set threshold level.
+    dev->SetWireInValue(WireInMultiUse, threshold);
+    dev->UpdateWireIns();
+    dev->ActivateTriggerIn(TrigInDacThresh, dacChannel);
+
+    // Set threshold polarity.
+    dev->SetWireInValue(WireInMultiUse, (trigPolarityPositive ? 1 : 0));
+    dev->UpdateWireIns();
+    dev->ActivateTriggerIn(TrigInDacThresh, dacChannel + 8);
+}
+
+// Set the TTL output mode of the board.
+// mode = 0: All 16 TTL outputs are under manual control
+// mode = 1: Top 8 TTL outputs are under manual control;
+//           Bottom 8 TTL outputs are outputs of DAC comparators
+void Rhd2000EvalBoard::setTtlMode(int mode)
+{
+    if (mode < 0 || mode > 1) {
+        cerr << "Error in Rhd2000EvalBoard::setTtlMode: mode out of range." << endl;
+        return;
+    }
+
+    dev->SetWireInValue(WireInResetRun, mode << 3, 0x0008);
+    dev->UpdateWireIns();
+}
+
 // Is variable-frequency clock DCM programming done?
 bool Rhd2000EvalBoard::isDcmProgDone() const
 {
@@ -1232,7 +1429,7 @@ bool Rhd2000EvalBoard::readDataBlock(Rhd2000DataBlock* dataBlock)
 
 // Reads a certain number of USB data blocks, if the specified number is available, and appends them
 // to queue.  Returns true if data blocks were available.
-bool Rhd2000EvalBoard::readDataBlocks(int numBlocks, queue<Rhd2000DataBlock>& dataQueue)
+bool Rhd2000EvalBoard::readDataBlocks(int numBlocks, queue<Rhd2000DataBlock> &dataQueue)
 {
     unsigned int numWordsToRead, numBytesToRead;
     int i;
@@ -1269,7 +1466,7 @@ bool Rhd2000EvalBoard::readDataBlocks(int numBlocks, queue<Rhd2000DataBlock>& da
 
 // Writes the contents of a data block queue (dataQueue) to a binary output stream (saveOut).
 // Returns the number of data blocks written.
-int Rhd2000EvalBoard::queueToFile(queue<Rhd2000DataBlock>& dataQueue, ofstream& saveOut)
+int Rhd2000EvalBoard::queueToFile(queue<Rhd2000DataBlock> &dataQueue, ofstream& saveOut)
 {
     int count = 0;
 
@@ -1289,61 +1486,74 @@ string Rhd2000EvalBoard::opalKellyModelName(int model) const
     switch (model)
     {
         case OK_PRODUCT_XEM3001V1:
-            return ("XEM3001V1");
+            return("XEM3001V1");
         case OK_PRODUCT_XEM3001V2:
-            return ("XEM3001V2");
+            return("XEM3001V2");
         case OK_PRODUCT_XEM3010:
-            return ("XEM3010");
+            return("XEM3010");
         case OK_PRODUCT_XEM3005:
-            return ("XEM3005");
+            return("XEM3005");
         case OK_PRODUCT_XEM3001CL:
-            return ("XEM3001CL");
+            return("XEM3001CL");
         case OK_PRODUCT_XEM3020:
-            return ("XEM3020");
+            return("XEM3020");
         case OK_PRODUCT_XEM3050:
-            return ("XEM3050");
+            return("XEM3050");
         case OK_PRODUCT_XEM9002:
-            return ("XEM9002");
+            return("XEM9002");
         case OK_PRODUCT_XEM3001RB:
-            return ("XEM3001RB");
+            return("XEM3001RB");
         case OK_PRODUCT_XEM5010:
-            return ("XEM5010");
+            return("XEM5010");
         case OK_PRODUCT_XEM6110LX45:
-            return ("XEM6110LX45");
+            return("XEM6110LX45");
         case OK_PRODUCT_XEM6001:
-            return ("XEM6001");
+            return("XEM6001");
         case OK_PRODUCT_XEM6010LX45:
-            return ("XEM6010LX45");
+            return("XEM6010LX45");
         case OK_PRODUCT_XEM6010LX150:
-            return ("XEM6010LX150");
+            return("XEM6010LX150");
         case OK_PRODUCT_XEM6110LX150:
-            return ("XEM6110LX150");
+            return("XEM6110LX150");
         case OK_PRODUCT_XEM6006LX9:
-            return ("XEM6006LX9");
+            return("XEM6006LX9");
         case OK_PRODUCT_XEM6006LX16:
-            return ("XEM6006LX16");
+            return("XEM6006LX16");
         case OK_PRODUCT_XEM6006LX25:
-            return ("XEM6006LX25");
+            return("XEM6006LX25");
         case OK_PRODUCT_XEM5010LX110:
-            return ("XEM5010LX110");
+            return("XEM5010LX110");
         case OK_PRODUCT_ZEM4310:
-            return ("ZEM4310");
+            return("ZEM4310");
         case OK_PRODUCT_XEM6310LX45:
-            return ("XEM6310LX45");
+            return("XEM6310LX45");
         case OK_PRODUCT_XEM6310LX150:
-            return ("XEM6310LX150");
+            return("XEM6310LX150");
         case OK_PRODUCT_XEM6110V2LX45:
-            return ("XEM6110V2LX45");
+            return("XEM6110V2LX45");
         case OK_PRODUCT_XEM6110V2LX150:
-            return ("XEM6110V2LX150");
+            return("XEM6110V2LX150");
         case OK_PRODUCT_XEM6002LX9:
-            return ("XEM6002LX9");
+            return("XEM6002LX9");
         case OK_PRODUCT_XEM6310MTLX45:
-            return ("XEM6310MTLX45");
+            return("XEM6310MTLX45");
         case OK_PRODUCT_XEM6320LX130T:
-            return ("XEM6320LX130T");
+            return("XEM6320LX130T");
         default:
-            return ("UNKNOWN");
+            return("UNKNOWN");
     }
 }
 
+// Return 4-bit "board mode" input.
+int Rhd2000EvalBoard::getBoardMode()
+{
+    int mode;
+
+    dev->UpdateWireOuts();
+    mode = dev->GetWireOutValue(WireOutBoardMode);
+
+    cout << "Board mode: " << mode << endl << endl;
+
+    return mode;
+}
+
diff --git a/Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.h b/Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.h
index 5bc2749fa8ba775848e42cdf5c1d1223d30efb87..61b3aa0fb954a42959827d90215ab8afa623c90a 100755
--- a/Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.h
+++ b/Source/Processors/DataThreads/rhythm-api/rhd2000evalboard.h
@@ -84,27 +84,35 @@ public:
         PortD
     };
 
-    void uploadCommandList(const vector<int>& commandList, AuxCmdSlot auxCommandSlot, int bank);
-    void printCommandList(const vector<int>& commandList) const;
+    void uploadCommandList(const vector<int> &commandList, AuxCmdSlot auxCommandSlot, int bank);
+    void printCommandList(const vector<int> &commandList) const;
     void selectAuxCommandBank(BoardPort port, AuxCmdSlot auxCommandSlot, int bank);
     void selectAuxCommandLength(AuxCmdSlot auxCommandSlot, int loopIndex, int endIndex);
 
+    void runImpedance();
+    bool getExternalFastSettle();
+
+
     void resetBoard();
-    void resetFpga();
     void setContinuousRunMode(bool continuousMode);
     void setMaxTimeStep(unsigned int maxTimeStep);
     void run();
     bool isRunning() const;
     unsigned int numWordsInFifo() const;
     static unsigned int fifoCapacityInWords();
-
+    void setDacThresholdVoltage(int dacChannel, float voltage_threshold);
+    void setDacThreshold(int dacChannel, int threshold, bool trigPolarity);
+    void enableDacHighpassFilter(bool enable);
+    void setDacHighpassFilter(double cutoff);
     void setCableDelay(BoardPort port, int delay);
     void setCableLengthMeters(BoardPort port, double lengthInMeters);
     void setCableLengthFeet(BoardPort port, double lengthInFeet);
     double estimateCableLengthMeters(int delay) const;
     double estimateCableLengthFeet(int delay) const;
-
+    void setTtlMode(int mode);
     void setDspSettle(bool enabled);
+    int getBoardMode();
+    void getDacInformation(int *ch, float *th);
 
     enum BoardDataSource
     {
@@ -128,6 +136,7 @@ public:
 
     void setDataSource(int stream, BoardDataSource dataSource);
     void enableDataStream(int stream, bool enabled);
+    bool isStreamEnabled(int streamIndex);
     int getNumEnabledDataStreams() const;
 
     void clearTtlOut();
@@ -150,16 +159,28 @@ public:
     void selectDacDataStream(int dacChannel, int stream);
     void selectDacDataChannel(int dacChannel, int dataChannel);
 
+    int gecDacDataChannel(int dacChannel);
+    void updateDacAssignment(int dacChannel, int channel);
+    void enableExternalFastSettle(bool enable);
+    void setExternalFastSettleChannel(int channel);
+    void setFastSettleByTTL(bool state);
+    void setFastSettleByTTLchannel(int channel);
+
     void flush();
     bool readDataBlock(Rhd2000DataBlock* dataBlock);
-    bool readDataBlocks(int numBlocks, queue<Rhd2000DataBlock>& dataQueue);
-    int queueToFile(queue<Rhd2000DataBlock>& dataQueue, std::ofstream& saveOut);
+    bool readDataBlocks(int numBlocks, queue<Rhd2000DataBlock> &dataQueue);
+    int queueToFile(queue<Rhd2000DataBlock> &dataQueue, std::ofstream& saveOut);
+
+    void resetFpga();
 
 private:
     okCFrontPanel* dev;
     AmplifierSampleRate sampleRate;
     int numDataStreams; // total number of data streams currently enabled
     int dataStreamEnabled[MAX_NUM_DATA_STREAMS]; // 0 (disabled) or 1 (enabled)
+    int *dacChannelAssignment;
+    float *dacChannelThreshold;
+    bool fast_settle_enabled;
 
     // Buffer for reading bytes from USB interface
     unsigned char usbBuffer[USB_BUFFER_SIZE];
@@ -199,16 +220,23 @@ private:
         WireInDacSource8 = 0x1d,
         WireInDacManual1 = 0x1e,
         WireInDacManual2 = 0x1f,
+        WireInMultiUse = 0x1f, 
 
+        WireInTTLSettleChannel   = 0x16,
         TrigInDcmProg = 0x40,
         TrigInSpiStart = 0x41,
         TrigInRamWrite = 0x42,
+        TrigInDacThresh = 0x43,
+        TrigInDacHpf = 0x44,
+        TrigInExtFastSettle = 0x45,
+
 
         WireOutNumWordsLsb = 0x20,
         WireOutNumWordsMsb = 0x21,
         WireOutSpiRunning = 0x22,
         WireOutTtlIn = 0x23,
         WireOutDataClkLocked = 0x24,
+        WireOutBoardMode = 0x25,
         WireOutBoardId = 0x3e,
         WireOutBoardVersion = 0x3f,
 
diff --git a/Source/Dsp/Bessel.cpp b/Source/Processors/Dsp/Bessel.cpp
similarity index 100%
rename from Source/Dsp/Bessel.cpp
rename to Source/Processors/Dsp/Bessel.cpp
diff --git a/Source/Dsp/Bessel.h b/Source/Processors/Dsp/Bessel.h
similarity index 100%
rename from Source/Dsp/Bessel.h
rename to Source/Processors/Dsp/Bessel.h
diff --git a/Source/Dsp/Biquad.cpp b/Source/Processors/Dsp/Biquad.cpp
similarity index 100%
rename from Source/Dsp/Biquad.cpp
rename to Source/Processors/Dsp/Biquad.cpp
diff --git a/Source/Dsp/Biquad.h b/Source/Processors/Dsp/Biquad.h
similarity index 100%
rename from Source/Dsp/Biquad.h
rename to Source/Processors/Dsp/Biquad.h
diff --git a/Source/Dsp/Butterworth.cpp b/Source/Processors/Dsp/Butterworth.cpp
similarity index 100%
rename from Source/Dsp/Butterworth.cpp
rename to Source/Processors/Dsp/Butterworth.cpp
diff --git a/Source/Dsp/Butterworth.h b/Source/Processors/Dsp/Butterworth.h
similarity index 100%
rename from Source/Dsp/Butterworth.h
rename to Source/Processors/Dsp/Butterworth.h
diff --git a/Source/Dsp/Cascade.cpp b/Source/Processors/Dsp/Cascade.cpp
similarity index 100%
rename from Source/Dsp/Cascade.cpp
rename to Source/Processors/Dsp/Cascade.cpp
diff --git a/Source/Dsp/Cascade.h b/Source/Processors/Dsp/Cascade.h
similarity index 100%
rename from Source/Dsp/Cascade.h
rename to Source/Processors/Dsp/Cascade.h
diff --git a/Source/Dsp/ChebyshevI.cpp b/Source/Processors/Dsp/ChebyshevI.cpp
similarity index 100%
rename from Source/Dsp/ChebyshevI.cpp
rename to Source/Processors/Dsp/ChebyshevI.cpp
diff --git a/Source/Dsp/ChebyshevI.h b/Source/Processors/Dsp/ChebyshevI.h
similarity index 100%
rename from Source/Dsp/ChebyshevI.h
rename to Source/Processors/Dsp/ChebyshevI.h
diff --git a/Source/Dsp/ChebyshevII.cpp b/Source/Processors/Dsp/ChebyshevII.cpp
similarity index 100%
rename from Source/Dsp/ChebyshevII.cpp
rename to Source/Processors/Dsp/ChebyshevII.cpp
diff --git a/Source/Dsp/ChebyshevII.h b/Source/Processors/Dsp/ChebyshevII.h
similarity index 100%
rename from Source/Dsp/ChebyshevII.h
rename to Source/Processors/Dsp/ChebyshevII.h
diff --git a/Source/Dsp/Common.h b/Source/Processors/Dsp/Common.h
similarity index 100%
rename from Source/Dsp/Common.h
rename to Source/Processors/Dsp/Common.h
diff --git a/Source/Dsp/Custom.cpp b/Source/Processors/Dsp/Custom.cpp
similarity index 100%
rename from Source/Dsp/Custom.cpp
rename to Source/Processors/Dsp/Custom.cpp
diff --git a/Source/Dsp/Custom.h b/Source/Processors/Dsp/Custom.h
similarity index 100%
rename from Source/Dsp/Custom.h
rename to Source/Processors/Dsp/Custom.h
diff --git a/Source/Dsp/Design.cpp b/Source/Processors/Dsp/Design.cpp
similarity index 100%
rename from Source/Dsp/Design.cpp
rename to Source/Processors/Dsp/Design.cpp
diff --git a/Source/Dsp/Design.h b/Source/Processors/Dsp/Design.h
similarity index 100%
rename from Source/Dsp/Design.h
rename to Source/Processors/Dsp/Design.h
diff --git a/Source/Dsp/Documentation.cpp b/Source/Processors/Dsp/Documentation.cpp
similarity index 100%
rename from Source/Dsp/Documentation.cpp
rename to Source/Processors/Dsp/Documentation.cpp
diff --git a/Source/Dsp/Dsp.h b/Source/Processors/Dsp/Dsp.h
similarity index 100%
rename from Source/Dsp/Dsp.h
rename to Source/Processors/Dsp/Dsp.h
diff --git a/Source/Dsp/Elliptic.cpp b/Source/Processors/Dsp/Elliptic.cpp
similarity index 100%
rename from Source/Dsp/Elliptic.cpp
rename to Source/Processors/Dsp/Elliptic.cpp
diff --git a/Source/Dsp/Elliptic.h b/Source/Processors/Dsp/Elliptic.h
similarity index 100%
rename from Source/Dsp/Elliptic.h
rename to Source/Processors/Dsp/Elliptic.h
diff --git a/Source/Dsp/Filter.cpp b/Source/Processors/Dsp/Filter.cpp
similarity index 100%
rename from Source/Dsp/Filter.cpp
rename to Source/Processors/Dsp/Filter.cpp
diff --git a/Source/Dsp/Filter.h b/Source/Processors/Dsp/Filter.h
similarity index 100%
rename from Source/Dsp/Filter.h
rename to Source/Processors/Dsp/Filter.h
diff --git a/Source/Dsp/Layout.h b/Source/Processors/Dsp/Layout.h
similarity index 100%
rename from Source/Dsp/Layout.h
rename to Source/Processors/Dsp/Layout.h
diff --git a/Source/Dsp/Legendre.cpp b/Source/Processors/Dsp/Legendre.cpp
similarity index 100%
rename from Source/Dsp/Legendre.cpp
rename to Source/Processors/Dsp/Legendre.cpp
diff --git a/Source/Dsp/Legendre.h b/Source/Processors/Dsp/Legendre.h
similarity index 100%
rename from Source/Dsp/Legendre.h
rename to Source/Processors/Dsp/Legendre.h
diff --git a/Source/Dsp/MathSupplement.h b/Source/Processors/Dsp/MathSupplement.h
similarity index 100%
rename from Source/Dsp/MathSupplement.h
rename to Source/Processors/Dsp/MathSupplement.h
diff --git a/Source/Dsp/Param.cpp b/Source/Processors/Dsp/Param.cpp
similarity index 100%
rename from Source/Dsp/Param.cpp
rename to Source/Processors/Dsp/Param.cpp
diff --git a/Source/Dsp/Params.h b/Source/Processors/Dsp/Params.h
similarity index 100%
rename from Source/Dsp/Params.h
rename to Source/Processors/Dsp/Params.h
diff --git a/Source/Dsp/PoleFilter.cpp b/Source/Processors/Dsp/PoleFilter.cpp
similarity index 100%
rename from Source/Dsp/PoleFilter.cpp
rename to Source/Processors/Dsp/PoleFilter.cpp
diff --git a/Source/Dsp/PoleFilter.h b/Source/Processors/Dsp/PoleFilter.h
similarity index 100%
rename from Source/Dsp/PoleFilter.h
rename to Source/Processors/Dsp/PoleFilter.h
diff --git a/Source/Dsp/RBJ.cpp b/Source/Processors/Dsp/RBJ.cpp
similarity index 100%
rename from Source/Dsp/RBJ.cpp
rename to Source/Processors/Dsp/RBJ.cpp
diff --git a/Source/Dsp/RBJ.h b/Source/Processors/Dsp/RBJ.h
similarity index 100%
rename from Source/Dsp/RBJ.h
rename to Source/Processors/Dsp/RBJ.h
diff --git a/Source/Dsp/RootFinder.cpp b/Source/Processors/Dsp/RootFinder.cpp
similarity index 95%
rename from Source/Dsp/RootFinder.cpp
rename to Source/Processors/Dsp/RootFinder.cpp
index c1d1e428049f494f50a05bc18bb94f5566feadde..7bed63862cda6c8ef4e32aaeee9e4255b281ecf0 100644
--- a/Source/Dsp/RootFinder.cpp
+++ b/Source/Processors/Dsp/RootFinder.cpp
@@ -33,6 +33,8 @@ THE SOFTWARE.
 
 *******************************************************************************/
 
+#include <algorithm>
+
 #include "Common.h"
 #include "RootFinder.h"
 #include <stdexcept>
diff --git a/Source/Dsp/RootFinder.h b/Source/Processors/Dsp/RootFinder.h
similarity index 100%
rename from Source/Dsp/RootFinder.h
rename to Source/Processors/Dsp/RootFinder.h
diff --git a/Source/Dsp/SmoothedFilter.h b/Source/Processors/Dsp/SmoothedFilter.h
similarity index 96%
rename from Source/Dsp/SmoothedFilter.h
rename to Source/Processors/Dsp/SmoothedFilter.h
index 0625820e0172fdc3e3f3fe5b1ea2ae3f4b5868fa..11d99c7a3cbcb01cc0b57ee60017faf917c0ed91 100644
--- a/Source/Dsp/SmoothedFilter.h
+++ b/Source/Processors/Dsp/SmoothedFilter.h
@@ -36,6 +36,8 @@ THE SOFTWARE.
 #ifndef DSPFILTERS_SMOOTHEDFILTER_H
 #define DSPFILTERS_SMOOTHEDFILTER_H
 
+#include <algorithm>
+
 #include "Common.h"
 #include "Filter.h"
 
diff --git a/Source/Dsp/State.cpp b/Source/Processors/Dsp/State.cpp
similarity index 100%
rename from Source/Dsp/State.cpp
rename to Source/Processors/Dsp/State.cpp
diff --git a/Source/Dsp/State.h b/Source/Processors/Dsp/State.h
similarity index 100%
rename from Source/Dsp/State.h
rename to Source/Processors/Dsp/State.h
diff --git a/Source/Dsp/Types.h b/Source/Processors/Dsp/Types.h
similarity index 100%
rename from Source/Dsp/Types.h
rename to Source/Processors/Dsp/Types.h
diff --git a/Source/Dsp/Utilities.h b/Source/Processors/Dsp/Utilities.h
similarity index 100%
rename from Source/Dsp/Utilities.h
rename to Source/Processors/Dsp/Utilities.h
diff --git a/Source/Processors/Editors/ChannelSelector.cpp b/Source/Processors/Editors/ChannelSelector.cpp
index d860838c3bcf1a4b58af5af56328ce82abed327d..7a82ff1b3235619b3df7ce49476520aa9f22c9a5 100755
--- a/Source/Processors/Editors/ChannelSelector.cpp
+++ b/Source/Processors/Editors/ChannelSelector.cpp
@@ -24,16 +24,15 @@
 #include "ChannelSelector.h"
 #include <math.h>
 
-#include "../RecordNode.h"
-#include "../AudioNode.h"
-#include "../ProcessorGraph.h"
+#include "../RecordNode/RecordNode.h"
+#include "../AudioNode/AudioNode.h"
+#include "../ProcessorGraph/ProcessorGraph.h"
 #include "../../UI/GraphViewer.h"
 
 ChannelSelector::ChannelSelector(bool createButtons, Font& titleFont_) :
     eventsOnly(false), paramsToggled(true), paramsActive(true),
-    radioStatus(false), isNotSink(createButtons), moveRight(false),
-    moveLeft(false), offsetLR(0), offsetUD(0), desiredOffset(0),
-    titleFont(titleFont_), acquisitionIsActive(false)
+    recActive(true), radioStatus(false), isNotSink(createButtons),
+    moveRight(false), moveLeft(false), offsetLR(0), offsetUD(0), desiredOffset(0), titleFont(titleFont_), acquisitionIsActive(false)
 {
 
     // initialize buttons
@@ -341,6 +340,31 @@ void ChannelSelector::activateButtons()
 
 }
 
+void ChannelSelector::inactivateRecButtons()
+{
+
+	recActive = false;
+
+	for (int i = 0; i < recordButtons.size(); i++)
+    {
+        recordButtons[i]->setActive(false);
+        recordButtons[i]->repaint();
+    }
+}
+
+void ChannelSelector::activateRecButtons()
+{
+
+	recActive = true;
+
+    for (int i = 0; i < recordButtons.size(); i++)
+    {
+        recordButtons[i]->setActive(true);
+        recordButtons[i]->repaint();
+    }
+
+}
+
 void ChannelSelector::startAcquisition()
 {
     acquisitionIsActive = true;
diff --git a/Source/Processors/Editors/ChannelSelector.h b/Source/Processors/Editors/ChannelSelector.h
index e71ee2983a0db992fa4c024906832cab79f614d9..7db6ef2b4cd6da32aec68ecda17f6142b46e34fe 100755
--- a/Source/Processors/Editors/ChannelSelector.h
+++ b/Source/Processors/Editors/ChannelSelector.h
@@ -25,10 +25,10 @@
 #define __CHANNELSELECTOR_H_68124E35__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 #include "../../AccessClass.h"
 
-#include "../Channel.h"
+#include "../Channel/Channel.h"
 
 #include <stdio.h>
 
@@ -115,6 +115,12 @@ public:
     /** Activates all the ChannelSelectorButtons under the "param" tab.*/
     void activateButtons();
 
+	/** Inactivates all the ChannelSelectorButtons under the "rec" tab.*/
+    void inactivateRecButtons();
+
+    /** Activates all the ChannelSelectorButtons under the "rec" tab.*/
+    void activateRecButtons();
+
     /** Refreshes Parameter Colors on change*/
     void refreshParameterColors()
     {
@@ -160,6 +166,7 @@ private:
 
     bool paramsToggled;
     bool paramsActive;
+	bool recActive;
     bool radioStatus;
 
     bool isNotSink;
diff --git a/Source/Processors/Editors/ElectrodeButtons.cpp b/Source/Processors/Editors/ElectrodeButtons.cpp
index b7b9b6583705544da0f306e05545c19cfc8a586b..01fa726a165f8afae858bd863ef0db9b36d243a1 100644
--- a/Source/Processors/Editors/ElectrodeButtons.cpp
+++ b/Source/Processors/Editors/ElectrodeButtons.cpp
@@ -48,6 +48,11 @@ void ElectrodeButton::paintButton(Graphics& g, bool isMouseOver, bool isButtonDo
         g.setColour(Colours::grey);
     }
 
+    if (chan < 100)
+        g.setFont(10.f);
+    else
+        g.setFont(8.f);
+
     if (chan >= 0)
         g.drawText(getButtonText(),0,0,getWidth(),getHeight(),Justification::centred,true);
 }
@@ -78,4 +83,5 @@ void ElectrodeEditorButton::paintButton(Graphics& g, bool isMouseOver, bool isBu
     g.setFont(font);
 
     g.drawText(name,0,0,getWidth(),getHeight(),Justification::left,true);
-}
\ No newline at end of file
+}
+
diff --git a/Source/Processors/Editors/ElectrodeButtons.h b/Source/Processors/Editors/ElectrodeButtons.h
index 00b3f0427593fb5888564102a9f1321c2855d17b..31373746e1db3181c95607ad737f85ce2909014e 100644
--- a/Source/Processors/Editors/ElectrodeButtons.h
+++ b/Source/Processors/Editors/ElectrodeButtons.h
@@ -34,6 +34,7 @@
 
 */
 
+
 class ElectrodeButton : public Button
 {
 public:
diff --git a/Source/Processors/Editors/GenericEditor.cpp b/Source/Processors/Editors/GenericEditor.cpp
index 0079d14a90341a65fc866b612e814e352a63ea57..47e10ca283f4aee231ad38ca2b22e41ef906c4cb 100755
--- a/Source/Processors/Editors/GenericEditor.cpp
+++ b/Source/Processors/Editors/GenericEditor.cpp
@@ -23,10 +23,10 @@
 
 #include "GenericEditor.h"
 
-#include "ParameterEditor.h"
+#include "../Parameter/ParameterEditor.h"
 #include "ChannelSelector.h"
-#include "../ProcessorGraph.h"
-#include "../RecordNode.h"
+#include "../ProcessorGraph/ProcessorGraph.h"
+#include "../RecordNode/RecordNode.h"
 #include "../../UI/ProcessorList.h"
 
 #include "../../UI/EditorViewport.h"
@@ -39,8 +39,8 @@
 GenericEditor::GenericEditor(GenericProcessor* owner, bool useDefaultParameterEditors=true)
     : AudioProcessorEditor(owner),
       desiredWidth(150), isFading(false), accumulator(0.0), acquisitionIsActive(false),
-      drawerButton(0), channelSelector(0),drawerWidth(170),
-      isSelected(false),  isEnabled(true), isCollapsed(false), tNum(-1), drawerOpen(false)
+      drawerButton(0), drawerWidth(170),
+    drawerOpen(false), channelSelector(0), isSelected(false), isEnabled(true), isCollapsed(false), tNum(-1)
 {
     constructorInitialize(owner, useDefaultParameterEditors);
 }
@@ -280,6 +280,18 @@ void GenericEditor::setEnabledState(bool t)
     isEnabled = p->enabledState();
 }
 
+void GenericEditor::startRecording()
+{
+	if (channelSelector != 0)
+		channelSelector->inactivateRecButtons();
+}
+
+void GenericEditor::stopRecording()
+{
+	if (channelSelector != 0)
+		channelSelector->activateRecButtons();
+}
+
 void GenericEditor::startAcquisition()
 {
 
@@ -961,13 +973,13 @@ void TriangleButton::paintButton(Graphics& g, bool isMouseOver, bool isButtonDow
     x2 = getWidth()/2;
     x3 = getWidth()-inset;
 
-    if (direction == 1)
+    if (direction == 1) // up
     {
         y1 = getHeight()-inset;
         y2 = inset;
 
     }
-    else
+    else if (direction == 2) // down
     {
         y1 = inset;
         y2 = getHeight()-inset;
diff --git a/Source/Processors/Editors/GenericEditor.h b/Source/Processors/Editors/GenericEditor.h
index 71fdef743c10b3ef0cc2e88e1eb6365334fc836f..f335d7e29ff25ae5d6bdb68f5c7da59fc7809f21 100755
--- a/Source/Processors/Editors/GenericEditor.h
+++ b/Source/Processors/Editors/GenericEditor.h
@@ -25,10 +25,10 @@
 #define __GENERICEDITOR_H_DD406E71__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "../GenericProcessor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 #include "../../AccessClass.h"
 
-#include "../Channel.h"
+#include "../Channel/Channel.h"
 
 #include <stdio.h>
 
@@ -108,6 +108,12 @@ public:
     /** Used to enable or disable an editor's processor.*/
     void setEnabledState(bool);
 
+	/** Called at the start of a recording **/
+	void startRecording();
+
+	/** Called at the end of a recording **/
+	void stopRecording();
+
     /** Called just prior to the start of acquisition, to allow the editor to prepare.*/
     virtual void startAcquisition();
 
diff --git a/Source/Processors/EventDetector.cpp b/Source/Processors/EventDetector/EventDetector.cpp
similarity index 94%
rename from Source/Processors/EventDetector.cpp
rename to Source/Processors/EventDetector/EventDetector.cpp
index 32738b2c9af3a7407e17e28c6c166dc8c2ed991f..4afe33258a5e9c1c87e3c02bf39ea6cfa9532850 100755
--- a/Source/Processors/EventDetector.cpp
+++ b/Source/Processors/EventDetector/EventDetector.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/EventDetector.h b/Source/Processors/EventDetector/EventDetector.h
similarity index 88%
rename from Source/Processors/EventDetector.h
rename to Source/Processors/EventDetector/EventDetector.h
index 79ba743821441d1bfa41a6dfc4cc37311b565306..d99efdc26e54da857e02bda0ccdc926bab96c8d2 100755
--- a/Source/Processors/EventDetector.h
+++ b/Source/Processors/EventDetector/EventDetector.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,8 +24,8 @@
 #ifndef __EVENTDETECTOR_H_91811542__
 #define __EVENTDETECTOR_H_91811542__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "GenericProcessor.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 /**
 
diff --git a/Source/Processors/EventNode.cpp b/Source/Processors/EventNode/EventNode.cpp
similarity index 93%
rename from Source/Processors/EventNode.cpp
rename to Source/Processors/EventNode/EventNode.cpp
index a9a4e05a35b04fd6bc637256e6ae563027f86f66..4c96d18b78fa3e046efce1d9f889e78815ee94e9 100755
--- a/Source/Processors/EventNode.cpp
+++ b/Source/Processors/EventNode/EventNode.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,7 +24,7 @@
 #include <stdio.h>
 #include "EventNode.h"
 
-#include "Channel.h"
+#include "../Channel/Channel.h"
 
 EventNode::EventNode()
     : GenericProcessor("Event Generator"), accumulator(0), Hz(1)
diff --git a/Source/Processors/EventNode.h b/Source/Processors/EventNode/EventNode.h
similarity index 86%
rename from Source/Processors/EventNode.h
rename to Source/Processors/EventNode/EventNode.h
index 1f356c7f0df0ca8480ff3b5b2db37d8850da3cba..8f5e03f5fa582097972eb7afbe7960bcc9112162 100755
--- a/Source/Processors/EventNode.h
+++ b/Source/Processors/EventNode/EventNode.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,9 +24,9 @@
 #ifndef __EVENTNODE_H_9B67A789__
 #define __EVENTNODE_H_9B67A789__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "GenericProcessor.h"
-#include "Editors/EventNodeEditor.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "EventNodeEditor.h"
 
 /**
 
diff --git a/Source/Processors/Editors/EventNodeEditor.cpp b/Source/Processors/EventNode/EventNodeEditor.cpp
similarity index 93%
rename from Source/Processors/Editors/EventNodeEditor.cpp
rename to Source/Processors/EventNode/EventNodeEditor.cpp
index 21ef6bbb1b171fa0b10002ed09106eb151ba5bae..9a75f55ddc4b401d96a39a89de923e63c8bab134 100755
--- a/Source/Processors/Editors/EventNodeEditor.cpp
+++ b/Source/Processors/EventNode/EventNodeEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,7 +22,7 @@
 */
 
 #include "EventNodeEditor.h"
-#include "ChannelSelector.h"
+#include "../Editors/ChannelSelector.h"
 #include <stdio.h>
 
 
diff --git a/Source/Processors/Editors/EventNodeEditor.h b/Source/Processors/EventNode/EventNodeEditor.h
similarity index 91%
rename from Source/Processors/Editors/EventNodeEditor.h
rename to Source/Processors/EventNode/EventNodeEditor.h
index 4ee8c002b2aae2a58c5433a3b87226a3b0fbea8c..10440ff595e4161835cba0638fadfcbc25312ab6 100755
--- a/Source/Processors/Editors/EventNodeEditor.h
+++ b/Source/Processors/EventNode/EventNodeEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,7 +26,7 @@
 
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 class FilterViewport;
 
diff --git a/Source/Processors/ExampleProcessor.cpp b/Source/Processors/ExampleProcessor/ExampleProcessor.cpp
similarity index 98%
rename from Source/Processors/ExampleProcessor.cpp
rename to Source/Processors/ExampleProcessor/ExampleProcessor.cpp
index f90f90615939c2821c5c33e74d09aa8db0e4b9c6..2ebc64073b709fe6e2ef9a954e1bcd82139e285c 100644
--- a/Source/Processors/ExampleProcessor.cpp
+++ b/Source/Processors/ExampleProcessor/ExampleProcessor.cpp
@@ -3,7 +3,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/ExampleProcessor.h b/Source/Processors/ExampleProcessor/ExampleProcessor.h
similarity index 98%
rename from Source/Processors/ExampleProcessor.h
rename to Source/Processors/ExampleProcessor/ExampleProcessor.h
index cdc59987986a4c888e8f262941325bef7619bf36..7bf796cef1dd14f9eca571bacadad22ef1b11d1d 100644
--- a/Source/Processors/ExampleProcessor.h
+++ b/Source/Processors/ExampleProcessor/ExampleProcessor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/FPGAOutput.cpp b/Source/Processors/FPGAOutput/FPGAOutput.cpp
similarity index 94%
rename from Source/Processors/FPGAOutput.cpp
rename to Source/Processors/FPGAOutput/FPGAOutput.cpp
index 8f09a95cfe0d593181284bbd68e1e2e0b909391c..6e313cea80263e8b1158d592cb47fa93a3582125 100755
--- a/Source/Processors/FPGAOutput.cpp
+++ b/Source/Processors/FPGAOutput/FPGAOutput.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,7 +25,7 @@
 
 #include <stdio.h>
 #include "FPGAOutput.h"
-#include "SourceNode.h"
+#include "../SourceNode/SourceNode.h"
 
 FPGAOutput::FPGAOutput()
     : GenericProcessor("FPGA Output"), TTLchannel(3),
diff --git a/Source/Processors/FPGAOutput.h b/Source/Processors/FPGAOutput/FPGAOutput.h
similarity index 86%
rename from Source/Processors/FPGAOutput.h
rename to Source/Processors/FPGAOutput/FPGAOutput.h
index a973a6681346d2a4ef422714561b4134454f190d..8c1b3d5ae7f235f36acbf869b42da0866f8aabdd 100755
--- a/Source/Processors/FPGAOutput.h
+++ b/Source/Processors/FPGAOutput/FPGAOutput.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,10 +24,10 @@
 #ifndef __FPGAOUTPUT_H_33275017__
 #define __FPGAOUTPUT_H_33275017__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "GenericProcessor.h"
-#include "Editors/FPGAOutputEditor.h"
-#include "DataThreads/FPGAThread.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "FPGAOutputEditor.h"
+#include "../DataThreads/FPGAThread.h"
 
 
 /**
diff --git a/Source/Processors/Editors/FPGAOutputEditor.cpp b/Source/Processors/FPGAOutput/FPGAOutputEditor.cpp
similarity index 94%
rename from Source/Processors/Editors/FPGAOutputEditor.cpp
rename to Source/Processors/FPGAOutput/FPGAOutputEditor.cpp
index b3805b6e02f002ed20cc557fc71e062bbd7d55fc..d30630af179da390b7879705be25278ffd7396f7 100644
--- a/Source/Processors/Editors/FPGAOutputEditor.cpp
+++ b/Source/Processors/FPGAOutput/FPGAOutputEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/Editors/FPGAOutputEditor.h b/Source/Processors/FPGAOutput/FPGAOutputEditor.h
similarity index 89%
rename from Source/Processors/Editors/FPGAOutputEditor.h
rename to Source/Processors/FPGAOutput/FPGAOutputEditor.h
index 15a7f39a11306af830da125604cab0b9a1e461f2..de9239b8fc5375dbf8599cfd93f8a9a896369cd6 100644
--- a/Source/Processors/Editors/FPGAOutputEditor.h
+++ b/Source/Processors/FPGAOutput/FPGAOutputEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,8 +25,8 @@
 #define __FPGAOUTPUTEDITOR_H_5A646CD3__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
-#include "ImageIcon.h"
+#include "../Editors/GenericEditor.h"
+#include "../Editors/ImageIcon.h"
 
 class ImageIcon;
 
diff --git a/Source/Processors/FileReader.cpp b/Source/Processors/FileReader/FileReader.cpp
similarity index 94%
rename from Source/Processors/FileReader.cpp
rename to Source/Processors/FileReader/FileReader.cpp
index b4c239f9b70163c23684173e2bdc6d794ef88259..1e46bcfffee705c834cad1fb0784c303d60195b6 100644
--- a/Source/Processors/FileReader.cpp
+++ b/Source/Processors/FileReader/FileReader.cpp
@@ -22,7 +22,7 @@
 */
 
 #include "FileReader.h"
-#include "Editors/FileReaderEditor.h"
+#include "FileReaderEditor.h"
 #include <stdio.h>
 
 FileReader::FileReader()
diff --git a/Source/Processors/FileReader.h b/Source/Processors/FileReader/FileReader.h
similarity index 91%
rename from Source/Processors/FileReader.h
rename to Source/Processors/FileReader/FileReader.h
index 6195960fd3815911ec91d146916d3fd6e6f060d4..d5f0ca28cd0ffdd53726b3dbb125e7c681776014 100644
--- a/Source/Processors/FileReader.h
+++ b/Source/Processors/FileReader/FileReader.h
@@ -26,9 +26,9 @@
 #define __FILEREADER_H_B327D3D2__
 
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 
-#include "GenericProcessor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 #define BUFFER_SIZE 102400
 
diff --git a/Source/Processors/Editors/FileReaderEditor.cpp b/Source/Processors/FileReader/FileReaderEditor.cpp
similarity index 95%
rename from Source/Processors/Editors/FileReaderEditor.cpp
rename to Source/Processors/FileReader/FileReaderEditor.cpp
index 0a037164e06dd20d6f12a58b96cd5678f06157b8..c565aa3ec893b29b56f835fe923486ecc9bf4fb4 100644
--- a/Source/Processors/Editors/FileReaderEditor.cpp
+++ b/Source/Processors/FileReader/FileReaderEditor.cpp
@@ -23,7 +23,7 @@
 
 #include "FileReaderEditor.h"
 
-#include "../FileReader.h"
+#include "FileReader.h"
 
 #include <stdio.h>
 
diff --git a/Source/Processors/Editors/FileReaderEditor.h b/Source/Processors/FileReader/FileReaderEditor.h
similarity index 94%
rename from Source/Processors/Editors/FileReaderEditor.h
rename to Source/Processors/FileReader/FileReaderEditor.h
index 1e789d5ffa5ccc09473a39dc17dd30b5be086bc6..d359796c7a77afc7d4e96c2409e81aa5e8cceabe 100644
--- a/Source/Processors/Editors/FileReaderEditor.h
+++ b/Source/Processors/FileReader/FileReaderEditor.h
@@ -26,7 +26,7 @@
 #define __FILEREADEREDITOR_H_D6EC8B48__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 class FileReader;
 
diff --git a/Source/Processors/Editors/FilterEditor.cpp b/Source/Processors/FilterNode/FilterEditor.cpp
similarity index 96%
rename from Source/Processors/Editors/FilterEditor.cpp
rename to Source/Processors/FilterNode/FilterEditor.cpp
index 6609141f87ae08c6358f9de7cabc56c6b418d1b0..2ac69c04bc72aadcffdaa4036c61dd2f762d50d5 100755
--- a/Source/Processors/Editors/FilterEditor.cpp
+++ b/Source/Processors/FilterNode/FilterEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,7 +22,7 @@
 */
 
 #include "FilterEditor.h"
-#include "../FilterNode.h"
+#include "FilterNode.h"
 #include <stdio.h>
 
 
diff --git a/Source/Processors/Editors/FilterEditor.h b/Source/Processors/FilterNode/FilterEditor.h
similarity index 92%
rename from Source/Processors/Editors/FilterEditor.h
rename to Source/Processors/FilterNode/FilterEditor.h
index d691ad6f3793db445c3490278a5dbac7233e5eb4..717cfe874ef3847f9e4718b836eb6edeb4947550 100755
--- a/Source/Processors/Editors/FilterEditor.h
+++ b/Source/Processors/FilterNode/FilterEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,7 +26,7 @@
 
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 class FilterViewport;
 
diff --git a/Source/Processors/FilterNode.cpp b/Source/Processors/FilterNode/FilterNode.cpp
similarity index 95%
rename from Source/Processors/FilterNode.cpp
rename to Source/Processors/FilterNode/FilterNode.cpp
index 9c38eb22fa8080f921bf9af659897e57c9692455..04b92d3c607a4e16961349d47ff37e46424f0734 100755
--- a/Source/Processors/FilterNode.cpp
+++ b/Source/Processors/FilterNode/FilterNode.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -23,7 +23,7 @@
 
 #include <stdio.h>
 #include "FilterNode.h"
-#include "Editors/FilterEditor.h"
+#include "FilterEditor.h"
 
 FilterNode::FilterNode()
     : GenericProcessor("Bandpass Filter"), defaultLowCut(300.0f), defaultHighCut(6000.0f)
@@ -281,7 +281,7 @@ void FilterNode::setApplyOnADC(bool state)
 
     for (int n = 0; n < channels.size(); n++)
     {
-        if (channels[n]->isADCchannel)
+        if (channels[n]->getType() == ADC_CHANNEL)
         {
             setCurrentChannel(n);
 
diff --git a/Source/Processors/FilterNode.h b/Source/Processors/FilterNode/FilterNode.h
similarity index 90%
rename from Source/Processors/FilterNode.h
rename to Source/Processors/FilterNode/FilterNode.h
index b07818fc78d851d3fd402e04e17a71f1ed55b658..4a0b9886f5ccbd55caae574b493aa6ca59defff2 100755
--- a/Source/Processors/FilterNode.h
+++ b/Source/Processors/FilterNode/FilterNode.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,9 +24,9 @@
 #ifndef __FILTERNODE_H_CED428E__
 #define __FILTERNODE_H_CED428E__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 #include "../Dsp/Dsp.h"
-#include "GenericProcessor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 /**
 
diff --git a/Source/Processors/GenericProcessor.cpp b/Source/Processors/GenericProcessor/GenericProcessor.cpp
similarity index 94%
rename from Source/Processors/GenericProcessor.cpp
rename to Source/Processors/GenericProcessor/GenericProcessor.cpp
index 09a7e2e27f70fa965f4a94de3f3929e4c98d863b..73f6e3fdf1778ffab402ca09b67b95f470fce6d3 100755
--- a/Source/Processors/GenericProcessor.cpp
+++ b/Source/Processors/GenericProcessor/GenericProcessor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,12 +22,12 @@
 */
 
 #include "GenericProcessor.h"
-#include "../UI/UIComponent.h"
+#include "../../UI/UIComponent.h"
 
 GenericProcessor::GenericProcessor(const String& name_) : AccessClass(),
     sourceNode(0), destNode(0), isEnabled(true), wasConnected(false),
     nextAvailableChannel(0), saveOrder(-1), loadOrder(-1), currentChannel(-1),
-    parametersAsXml(nullptr),  name(name_), paramsWereLoaded(false), editor(0), sendSampleCount(true)
+     editor(0), parametersAsXml(nullptr), sendSampleCount(true), name(name_), paramsWereLoaded(false)
 {
     settings.numInputs = settings.numOutputs = settings.sampleRate = 0;
 
@@ -360,7 +360,7 @@ void GenericProcessor::update()
                 ch->setName("ADC"+String(1+i-(numChan-numADC_Chan)));
 
             if (i >= numChan-numADC_Chan)
-                ch->isADCchannel = true;
+                ch->getType() == ADC_CHANNEL;
 
 
             ch->sampleRate = getDefaultSampleRate();
@@ -412,6 +412,23 @@ void GenericProcessor::setAllChannelsToRecord()
 
 }
 
+void GenericProcessor::setRecording(bool state)
+{
+	GenericEditor* ed = getEditor();
+	if (state)
+	{
+		if (ed != 0)
+			ed->startRecording();
+		startRecording();
+	}
+	else
+	{
+		if (ed != 0)
+			ed->stopRecording();
+		stopRecording();
+	}
+}
+
 void GenericProcessor::enableEditor()
 {
 
diff --git a/Source/Processors/GenericProcessor.h b/Source/Processors/GenericProcessor/GenericProcessor.h
similarity index 90%
rename from Source/Processors/GenericProcessor.h
rename to Source/Processors/GenericProcessor/GenericProcessor.h
index c4e6a8aa64d65014d8a929599e96072a9ddac6cf..2719bdfd58fa91347623d5e9f7f6bdc971057d77 100755
--- a/Source/Processors/GenericProcessor.h
+++ b/Source/Processors/GenericProcessor/GenericProcessor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,11 +24,14 @@
 #ifndef __GENERICPROCESSOR_H_1F469DAF__
 #define __GENERICPROCESSOR_H_1F469DAF__
 
+enum channelType {DATA_CHANNEL = 0, AUX_CHANNEL = 1, ADC_CHANNEL = 2, EVENT_CHANNEL = 3};
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "Editors/GenericEditor.h"
-#include "Parameter.h"
-#include "../AccessClass.h"
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../Editors/GenericEditor.h"
+#include "../Parameter/Parameter.h"
+#include "../../AccessClass.h"
+#include "../Channel/Channel.h"
 
 #include <time.h>
 #include <stdio.h>
@@ -57,6 +60,7 @@ class Channel;
 
 */
 
+
 class GenericProcessor : public AudioProcessor,
     public AccessClass
 
@@ -128,12 +132,30 @@ public:
     {
         return GenericProcessor::unusedNameString;
     }
-
     /** Returns the name of the output channel with a given index.*/
     virtual const String getOutputChannelName(int channelIndex) const
     {
         return GenericProcessor::unusedNameString;
     }
+    
+    /** returns the names and types of all data, aux and adc channels */
+    virtual void getChannelsInfo(StringArray &Names, Array<channelType> &type, Array<int> &stream, Array<int> &originalChannelNumber, Array<float> &gains)
+    {
+
+    }
+
+    virtual int modifyChannelName(channelType t, int stream, int ch, String newName, bool updateSignalChain)
+    {
+        return -1;
+    }
+
+    virtual int modifyChannelGain(channelType t, int stream, int ch, float newGain, bool updateSignalChain)
+    {
+        return -1;
+    }
+    virtual void getEventChannelNames(StringArray &Names)
+    {
+    }
 
     /** Returns the name of the parameter with a given index.*/
     const String getParameterName(int parameterIndex);
@@ -277,7 +299,7 @@ public:
         return 2;
     }
 
-    virtual int getDefaultADCoutputs()
+      virtual int getDefaultADCoutputs()
     {
         return 0;
     }
@@ -365,7 +387,7 @@ public:
     {
         return false;
     }
-
+    
     /** Returns true if a processor is a utility (non-merger or splitter), false otherwise.*/
     virtual bool isUtility()
     {
@@ -399,10 +421,13 @@ public:
         return true;
     }
 
-    /** Called whenever recording has started. */
+	/** Called when recording starts/stops **/
+	void setRecording(bool state);
+    
+    /** Called from setRecording whenever recording has started. */
     virtual void startRecording() { }
 
-    /** Called whenever recording has stopped. */
+    /** Called from setRecording whenever recording has stopped. */
     virtual void stopRecording() { }
 
     /** Informs a processor's editor that data acquisition is about to begin. */
@@ -477,7 +502,8 @@ public:
         CONTINUOUS = 6,
         NETWORK = 7,
         EYE_POSITION = 8,
-        SERIAL = 9
+        SERIAL = 9,
+        MESSAGE = 10
     };
 
     enum eventChannelTypes
@@ -544,7 +570,6 @@ public:
 
     /** Toggles record ON for all channels */
     void setAllChannelsToRecord();
-
     /** Each processor has a unique integer ID that can be used to identify it.*/
     int nodeId;
 
@@ -585,10 +610,7 @@ public:
     virtual void loadCustomChannelParametersFromXml(XmlElement* channelElement, bool isEventChannel=false);
 
     /** handle messages from other processors */
-    virtual String interProcessorCommunication(String command)
-    {
-        return String("OK");
-    };
+    virtual String interProcessorCommunication(String command) { return String("OK"); };
 
     /** Holds loaded parameters */
     XmlElement* parametersAsXml;
@@ -596,8 +618,6 @@ public:
     /** When set to false, this disables the sending of sample counts through the event buffer. */
     bool sendSampleCount;
 
-    bool paramsWereLoaded;
-
 private:
 
     /** Automatically extracts the number of samples in the buffer, then
@@ -621,6 +641,7 @@ private:
     /** For getInputChannelName() and getOutputChannelName() */
     static const String unusedNameString;
 
+    bool paramsWereLoaded;
 
 
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(GenericProcessor);
diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.cpp b/Source/Processors/LfpDisplayNode/LfpDisplayCanvas.cpp
similarity index 89%
rename from Source/Processors/Visualization/LfpDisplayCanvas.cpp
rename to Source/Processors/LfpDisplayNode/LfpDisplayCanvas.cpp
index e3b567e11986d6e077be92c50d37d89dc5a48e46..15ad29b6a6cc22bc4ad3af2b322fd7688b4109ad 100755
--- a/Source/Processors/Visualization/LfpDisplayCanvas.cpp
+++ b/Source/Processors/LfpDisplayNode/LfpDisplayCanvas.cpp
@@ -105,11 +105,12 @@ LfpDisplayCanvas::LfpDisplayCanvas(LfpDisplayNode* processor_) :
 	spreads.add("30");
 	spreads.add("40");
 	spreads.add("50");
-	spreads.add("60");
-    spreads.add("70");
-    spreads.add("80");
-    spreads.add("90");
-    spreads.add("100");
+	spreads.add("60");
+        spreads.add("70");
+        spreads.add("80");
+        spreads.add("90");
+        spreads.add("100");
+	spreads.add("100");
 
 	colorGroupings.add("1");
 	colorGroupings.add("2");
@@ -365,22 +366,22 @@ void LfpDisplayCanvas::setParameter(int param, float val)
 
 void LfpDisplayCanvas:: setRangeSelection(float range)
 {
-			//rangeSelection->setItemEnabled(0,true); //keep custom range unavailable for direct selection
-			rangeSelection->setSelectedId(1,true);  // but show it for display
-			rangeSelection->changeItemText(1,String(int(range))); // and set to correct number
+	//rangeSelection->setItemEnabled(0,true); //keep custom range unavailable for direct selection
+	rangeSelection->setSelectedItemIndex(0, sendNotificationAsync);  // but show it for display
+	rangeSelection->changeItemText(1, String(int(range))); // and set to correct number
 
-			repaint();
-			refresh();
+	repaint();
+	refresh();
 			
 }
 
 void LfpDisplayCanvas:: setSpreadSelection(int spread)
 {
-			spreadSelection->setSelectedId(1,true);
-			spreadSelection->changeItemText(1,String(int(spread))); // and set to correct number
+	spreadSelection->setSelectedItemIndex(0, sendNotificationAsync);
+	spreadSelection->changeItemText(1, String(int(spread))); // and set to correct number
 
-			repaint();
-			refresh();
+	repaint();
+	refresh();
 			
 }
 
@@ -644,7 +645,7 @@ bool LfpDisplayCanvas::keyPressed(const KeyPress& key)
 {
 	if (key.getKeyCode() == key.spaceKey)
 	{
-		pauseButton->setToggleState(!pauseButton->getToggleState(),true);
+		pauseButton->setToggleState(!pauseButton->getToggleState(), sendNotification);
 		return true;
 	}
 
@@ -823,7 +824,7 @@ void LfpTimescale::setTimebase(float t)
 // ---------------------------------------------------------------
 
 LfpDisplay::LfpDisplay(LfpDisplayCanvas* c, Viewport* v) :
-	canvas(c), viewport(v), range(1000.0f), singleChan(-1)
+	  singleChan(-1), canvas(c), viewport(v), range(1000.0f)
 {
 
 	totalHeight = 0;
@@ -1170,13 +1171,14 @@ void LfpDisplay::mouseWheelMove(const MouseEvent&  e, const MouseWheelDetails&
 
 void LfpDisplay::toggleSingleChannel(int chan)
 {
-	std::cout << "Toggle channel " << chan << std::endl;
+	//std::cout << "Toggle channel " << chan << std::endl;
+
 	if (chan != singleChan)
 	{
 		singleChan = chan;
 		int newHeight = viewport->getHeight();
-		setChannelHeight(newHeight,false);
-		setSize(getWidth(),numChans*getChannelHeight());
+		setChannelHeight(newHeight, false);
+		setSize(getWidth(), numChans*getChannelHeight());
 		viewport->setScrollBarsShown(false,false);
 		//viewport->setViewPosition(Point<int>(0,chan*newHeight));
 		for (int n = 0; n < numChans; n++)
@@ -1204,22 +1206,22 @@ void LfpDisplay::mouseDown(const MouseEvent& event)
 	MouseEvent canvasevent = event.getEventRelativeTo(viewport);
 	int y = canvasevent.getMouseDownY() + viewport->getViewPositionY(); // need to account for scrolling
 
-	int dist=0;
-	int mindist=10000;
-	int closest=5;
+	int dist = 0;
+	int mindist = 10000;
+	int closest = 5;
 	for (int n = 0; n < numChans; n++) // select closest instead of relying ot eventComponent
 	{
 		channels[n]->deselect();
 
-		int cpos=(channels[n]->getY() + (channels[n]->getHeight()/2));
-		dist=int(abs(y - cpos));
+		int cpos = (channels[n]->getY() + (channels[n]->getHeight()/2));
+		dist = int(abs(y - cpos));
 
 		//std::cout << "Mouse down at " << y << " pos is "<< cpos << "n:" << n << "  dist " << dist << std::endl;
 
 		if (dist<mindist)
 		{
-			mindist=dist-1;
-			closest=n;
+			mindist = dist-1;
+			closest = n;
 		}
 	}
 
@@ -1227,7 +1229,9 @@ void LfpDisplay::mouseDown(const MouseEvent& event)
 	//lcd->select();
 
 	channels[closest]->select();
-	if (event.getNumberOfClicks() == 2) toggleSingleChannel(closest);
+
+	if (event.getNumberOfClicks() == 2)
+		toggleSingleChannel(closest);
 
 	canvas->fullredraw = true;//issue full redraw
 
@@ -1307,10 +1311,10 @@ LfpChannelDisplay::~LfpChannelDisplay()
 void LfpChannelDisplay::setEnabledState(bool state)
 {
 
-	if (state)
-		std::cout << "Setting channel " << name << " to true." << std::endl;
-	else
-		std::cout << "Setting channel " << name << " to false." << std::endl;
+	//if (state)
+		//std::cout << "Setting channel " << name << " to true." << std::endl;
+	//else
+		//std::cout << "Setting channel " << name << " to false." << std::endl;
 
 	isEnabled = state;
 
@@ -1325,8 +1329,6 @@ void LfpChannelDisplay::paint(Graphics& g)
 	g.drawLine(canvas->screenBufferIndex+1, 0, canvas->screenBufferIndex+1, getHeight());
 
 
-
-
 	//g.setColour(Colours::red); // draw oldest drawn sample position
 	//g.drawLine(canvas->lastScreenBufferIndex, 0, canvas->lastScreenBufferIndex, getHeight()-channelOverlap);
 
@@ -1343,9 +1345,33 @@ void LfpChannelDisplay::paint(Graphics& g)
 			g.drawLine(0,center+channelHeight/2,getWidth(),center+channelHeight/2);
 			g.drawLine(0,center-channelHeight/2,getWidth(),center-channelHeight/2);
 
-			g.setColour(Colour(25,25,25));
-			g.drawLine(0,center+channelHeight/4,10,center+channelHeight/4);
-			g.drawLine(0,center-channelHeight/4,10,center-channelHeight/4);
+			if (!display->getSingleChannelState())
+			{
+				g.setColour(Colour(25,25,25));
+				g.drawLine(0,center+channelHeight/4,10,center+channelHeight/4);
+				g.drawLine(0,center-channelHeight/4,10,center-channelHeight/4);
+			} else {
+				g.setColour(Colour(70,70,70));
+				g.drawLine(0,center+channelHeight/4,getWidth(),center+channelHeight/4);
+				g.drawLine(0,center-channelHeight/4,getWidth(),center-channelHeight/4);
+			}
+			
+
+		}
+
+		if (display->getSingleChannelState())
+		{
+
+			int leftEdge = 150;
+
+			g.setColour(Colours::lightgrey);
+			g.setFont(channelFont);
+			g.setFont(20);
+			g.drawText(String(0) + " uV", 20, center, leftEdge, 25, Justification::left, false);
+			g.drawText(String(range/2) + " uV", 20, center-channelHeight/2, leftEdge, 25, Justification::left, false);
+			g.drawText(String(-range/2) + " uV", 20, center+channelHeight/2-25, leftEdge, 25, Justification::left, false);
+			g.drawText(String(range/4) + " uV", 20, center-channelHeight/4, leftEdge, 25, Justification::left, false);
+			g.drawText(String(-range/4) + " uV", 20, center+channelHeight/4, leftEdge, 25, Justification::left, false);
 
 		}
 
@@ -1561,7 +1587,7 @@ LfpChannelDisplayInfo::LfpChannelDisplayInfo(LfpDisplayCanvas* canvas_, LfpDispl
 
 	chan = ch;
 
-	enableButton = new UtilityButton("CH"+String(ch+1), Font("Small Text", 13, Font::plain));
+	enableButton = new UtilityButton(String(ch+1), Font("Small Text", 13, Font::plain));
 	enableButton->setRadius(5.0f);
 
 	enableButton->setEnabledState(true);
@@ -1590,7 +1616,7 @@ void LfpChannelDisplayInfo::buttonClicked(Button* button)
 	//  b->setLabel("OFF");
 	// }
 
-	std::cout << "Turn channel " << chan << " to " << button->getToggleState() << std::endl;
+	//std::cout << "Turn channel " << chan << " to " << button->getToggleState() << std::endl;
 
 }
 
@@ -1606,7 +1632,10 @@ void LfpChannelDisplayInfo::paint(Graphics& g)
 
 	g.setColour(lineColour);
 
-	g.fillRoundedRectangle(5,center-8,41,22,8.0f);
+	//if (chan > 98)
+	//	g.fillRoundedRectangle(5,center-8,51,22,8.0f);
+	//else
+		g.fillRoundedRectangle(5,center-8,41,22,8.0f);
 
 	//  g.setFont(channelFont);
 	// g.setFont(channelHeightFloat*0.3);
@@ -1620,7 +1649,10 @@ void LfpChannelDisplayInfo::resized()
 
 	int center = getHeight()/2;
 
-	enableButton->setBounds(8,center-5,35,16);
+	//if (chan > 98)
+	//	enableButton->setBounds(8,center-5,45,16);
+	//else
+		enableButton->setBounds(8,center-5,35,16);
 }
 
 
diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.h b/Source/Processors/LfpDisplayNode/LfpDisplayCanvas.h
similarity index 95%
rename from Source/Processors/Visualization/LfpDisplayCanvas.h
rename to Source/Processors/LfpDisplayNode/LfpDisplayCanvas.h
index c22746500f63ebcb5089e79438f128a7531dd0fb..7f2064bb4adfc032041cd1b2dc85c5176aba495f 100755
--- a/Source/Processors/Visualization/LfpDisplayCanvas.h
+++ b/Source/Processors/LfpDisplayNode/LfpDisplayCanvas.h
@@ -24,8 +24,8 @@
 #define __LFPDISPLAYCANVAS_H_B711873A__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "../LfpDisplayNode.h"
-#include "Visualizer.h"
+#include "LfpDisplayNode.h"
+#include "../Visualization/Visualizer.h"
 
 class LfpDisplayNode;
 
diff --git a/Source/Processors/Editors/LfpDisplayEditor.cpp b/Source/Processors/LfpDisplayNode/LfpDisplayEditor.cpp
similarity index 100%
rename from Source/Processors/Editors/LfpDisplayEditor.cpp
rename to Source/Processors/LfpDisplayNode/LfpDisplayEditor.cpp
diff --git a/Source/Processors/Editors/LfpDisplayEditor.h b/Source/Processors/LfpDisplayNode/LfpDisplayEditor.h
similarity index 88%
rename from Source/Processors/Editors/LfpDisplayEditor.h
rename to Source/Processors/LfpDisplayNode/LfpDisplayEditor.h
index d93f94088db2ffff6af9e760ed2dd30639a36a20..c6fcf331ac2df106b37140c6f9bb2ca34269f3f8 100755
--- a/Source/Processors/Editors/LfpDisplayEditor.h
+++ b/Source/Processors/LfpDisplayNode/LfpDisplayEditor.h
@@ -25,13 +25,13 @@
 #define __LFPDISPLAYEDITOR_H_3438800D__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 #include "../../UI/UIComponent.h"
 #include "../../UI/DataViewport.h"
 #include "../Visualization/DataWindow.h"
-#include "../LfpDisplayNode.h"
-#include "../Visualization/LfpDisplayCanvas.h"
-#include "VisualizerEditor.h"
+#include "LfpDisplayNode.h"
+#include "LfpDisplayCanvas.h"
+#include "../Editors/VisualizerEditor.h"
 
 class Visualizer;
 
diff --git a/Source/Processors/LfpDisplayNode.cpp b/Source/Processors/LfpDisplayNode/LfpDisplayNode.cpp
similarity index 96%
rename from Source/Processors/LfpDisplayNode.cpp
rename to Source/Processors/LfpDisplayNode/LfpDisplayNode.cpp
index 577e140c05a190a1ebf6b3c965c05e716ff08f7e..bc6b8dd153d91e5791bc86c0cb24c7e274d84533 100755
--- a/Source/Processors/LfpDisplayNode.cpp
+++ b/Source/Processors/LfpDisplayNode/LfpDisplayNode.cpp
@@ -22,7 +22,7 @@
 */
 
 #include "LfpDisplayNode.h"
-#include "Visualization/LfpDisplayCanvas.h"
+#include "LfpDisplayCanvas.h"
 #include <stdio.h>
 
 LfpDisplayNode::LfpDisplayNode()
diff --git a/Source/Processors/LfpDisplayNode.h b/Source/Processors/LfpDisplayNode/LfpDisplayNode.h
similarity index 89%
rename from Source/Processors/LfpDisplayNode.h
rename to Source/Processors/LfpDisplayNode/LfpDisplayNode.h
index 0f9d8027af190297ef2e56129646fd82aecb5a76..6a061d44d482980328178747ec256ef5fe79480c 100755
--- a/Source/Processors/LfpDisplayNode.h
+++ b/Source/Processors/LfpDisplayNode/LfpDisplayNode.h
@@ -24,10 +24,10 @@
 #ifndef __LFPDISPLAYNODE_H_D969A379__
 #define __LFPDISPLAYNODE_H_D969A379__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "Editors/LfpDisplayEditor.h"
-#include "Editors/VisualizerEditor.h"
-#include "GenericProcessor.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "LfpDisplayEditor.h"
+#include "../Editors/VisualizerEditor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 class DataViewport;
 
diff --git a/Source/Processors/Visualization/LfpTriggeredAverageCanvas.cpp b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.cpp
similarity index 95%
rename from Source/Processors/Visualization/LfpTriggeredAverageCanvas.cpp
rename to Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.cpp
index f27016100e5e0a1f1527a8a4dda0ad968ef3aad9..413a7b7412c6a00721be2304366b3e4f4529b63b 100755
--- a/Source/Processors/Visualization/LfpTriggeredAverageCanvas.cpp
+++ b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.cpp
@@ -86,20 +86,20 @@ LfpTriggeredAverageCanvas::LfpTriggeredAverageCanvas(LfpTriggeredAverageNode* pr
 
     rangeSelection = new ComboBox("Voltage range");
     rangeSelection->addItemList(voltageRanges, 1);
-    rangeSelection->setSelectedId(4,false);
+    rangeSelection->setSelectedId(4, dontSendNotification);
     rangeSelection->addListener(this);
     addAndMakeVisible(rangeSelection);
 
     timebaseSelection = new ComboBox("Timebase");
     timebaseSelection->addItemList(timebases, 1);
-    timebaseSelection->setSelectedId(3,false);
+    timebaseSelection->setSelectedId(3, dontSendNotification);
     timebaseSelection->addListener(this);
     addAndMakeVisible(timebaseSelection);
 
 
     spreadSelection = new ComboBox("Spread");
     spreadSelection->addItemList(spreads, 1);
-    spreadSelection->setSelectedId(5,false);
+    spreadSelection->setSelectedId(5, dontSendNotification);
     spreadSelection->addListener(this);
     addAndMakeVisible(spreadSelection);
 
@@ -332,13 +332,13 @@ void LfpTriggeredAverageCanvas::updateScreenBuffer()
 
                 screenBuffer->addFrom(channel, // destChannel
                                       screenBufferIndex, // destStartSample
-                                      displayBuffer->getSampleData(channel, displayBufferIndex), // source
+                                      displayBuffer->getWritePointer(channel, displayBufferIndex), // source
                                       1, // numSamples
                                       invAlpha*gain); // gain
 
                 screenBuffer->addFrom(channel, // destChannel
                                       screenBufferIndex, // destStartSample
-                                      displayBuffer->getSampleData(channel, nextPos), // source
+                                      displayBuffer->getWritePointer(channel, nextPos), // source
                                       1, // numSamples
                                       alpha*gain); // gain
 
@@ -380,7 +380,7 @@ int LfpTriggeredAverageCanvas::getNumChannels()
 
 float LfpTriggeredAverageCanvas::getYCoord(int chan, int samp)
 {
-    return *screenBuffer->getSampleData(chan, samp);
+    return *screenBuffer->getReadPointer(chan, samp);
 }
 
 void LfpTriggeredAverageCanvas::paint(Graphics& g)
diff --git a/Source/Processors/Visualization/LfpTriggeredAverageCanvas.h b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.h
similarity index 94%
rename from Source/Processors/Visualization/LfpTriggeredAverageCanvas.h
rename to Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.h
index d4bfaee4b79da39fa2e51c28a29bd8f01a8d5dc6..94ba2623c88c4c71ebf70585f6c3b8020fe1edc2 100755
--- a/Source/Processors/Visualization/LfpTriggeredAverageCanvas.h
+++ b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.h
@@ -24,8 +24,8 @@
 #define __LfpTriggeredAverageCAVCAS_H_B711873A__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "../LfpTriggeredAverageNode.h"
-#include "Visualizer.h"
+#include "LfpTriggeredAverageNode.h"
+#include "../Visualization/Visualizer.h"
 
 class LfpTriggeredAverageNode;
 
diff --git a/Source/Processors/Editors/LfpTriggeredAverageEditor.cpp b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageEditor.cpp
similarity index 100%
rename from Source/Processors/Editors/LfpTriggeredAverageEditor.cpp
rename to Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageEditor.cpp
diff --git a/Source/Processors/Editors/LfpTriggeredAverageEditor.h b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageEditor.h
similarity index 88%
rename from Source/Processors/Editors/LfpTriggeredAverageEditor.h
rename to Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageEditor.h
index 34e0e043425ebacad39ff6e3f3c7d6c00466190a..8c2de426ecbb27bd84d6a129eea8ea0f185f29c3 100644
--- a/Source/Processors/Editors/LfpTriggeredAverageEditor.h
+++ b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageEditor.h
@@ -25,13 +25,13 @@
 #define __LfpTriggeredAverageEDITOR_H_3438800D__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 #include "../../UI/UIComponent.h"
 #include "../../UI/DataViewport.h"
 #include "../Visualization/DataWindow.h"
-#include "../LfpTriggeredAverageNode.h"
-#include "../Visualization/LfpTriggeredAverageCanvas.h"
-#include "VisualizerEditor.h"
+#include "LfpTriggeredAverageNode.h"
+#include "LfpTriggeredAverageCanvas.h"
+#include "../Editors/VisualizerEditor.h"
 
 class Visualizer;
 
diff --git a/Source/Processors/LfpTriggeredAverageNode.cpp b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.cpp
similarity index 96%
rename from Source/Processors/LfpTriggeredAverageNode.cpp
rename to Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.cpp
index 8de7d71c33022a5196e678d56c59f88c019350b2..8e9773c270c8a59f93b835915fba22f70115ffd0 100755
--- a/Source/Processors/LfpTriggeredAverageNode.cpp
+++ b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.cpp
@@ -22,7 +22,7 @@
 */
 
 #include "LfpTriggeredAverageNode.h"
-#include "Visualization/LfpTriggeredAverageCanvas.h"
+#include "LfpTriggeredAverageCanvas.h"
 #include <stdio.h>
 
 LfpTriggeredAverageNode::LfpTriggeredAverageNode()
diff --git a/Source/Processors/LfpTriggeredAverageNode.h b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.h
similarity index 89%
rename from Source/Processors/LfpTriggeredAverageNode.h
rename to Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.h
index b5ee62b66fa41841a487487fd5114aadef36bba9..413a1732323a19eb5933ad34c0cc1a17e83fa6cb 100755
--- a/Source/Processors/LfpTriggeredAverageNode.h
+++ b/Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.h
@@ -24,10 +24,10 @@
 #ifndef __LFPTRIGAVGNODE_H_D969A379__
 #define __LFPTRIGAVGNODE_H_D969A379__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "Editors/LfpTriggeredAverageEditor.h"
-#include "Editors/VisualizerEditor.h"
-#include "GenericProcessor.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "LfpTriggeredAverageEditor.h"
+#include "../Editors/VisualizerEditor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 class DataViewport;
 
diff --git a/Source/Processors/Utilities/Merger.cpp b/Source/Processors/Merger/Merger.cpp
similarity index 94%
rename from Source/Processors/Utilities/Merger.cpp
rename to Source/Processors/Merger/Merger.cpp
index fa88ecc55ad88a503fdbcfabd699109389193783..40ec6bc5439f0515bde717b2c5fdfcf073c02002 100755
--- a/Source/Processors/Utilities/Merger.cpp
+++ b/Source/Processors/Merger/Merger.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,11 +22,11 @@
 */
 
 #include "Merger.h"
-#include "../Editors/MergerEditor.h"
+#include "MergerEditor.h"
 
 #include "../../UI/EditorViewport.h"
 
-#include "../Channel.h"
+#include "../Channel/Channel.h"
 
 Merger::Merger()
     : GenericProcessor("Merger"),
diff --git a/Source/Processors/Utilities/Merger.h b/Source/Processors/Merger/Merger.h
similarity index 92%
rename from Source/Processors/Utilities/Merger.h
rename to Source/Processors/Merger/Merger.h
index 820684c1eed01f3e7aed0d4101e91871b7d3d25e..90699a154da90ffb9e21f928939ba030a346e7a8 100755
--- a/Source/Processors/Utilities/Merger.h
+++ b/Source/Processors/Merger/Merger.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,7 +25,7 @@
 #define __MERGER_H_ED548E77__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "../GenericProcessor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 #include <stdio.h>
 
diff --git a/Source/Processors/Editors/MergerEditor.cpp b/Source/Processors/Merger/MergerEditor.cpp
similarity index 95%
rename from Source/Processors/Editors/MergerEditor.cpp
rename to Source/Processors/Merger/MergerEditor.cpp
index 72d37a07fd8c3ca1ea24f4b5a52c158d647208c5..28cd7835464050faf7994f6560bdc3d669406ab0 100755
--- a/Source/Processors/Editors/MergerEditor.cpp
+++ b/Source/Processors/Merger/MergerEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,8 +22,8 @@
 */
 
 #include "MergerEditor.h"
-#include "../Utilities/Merger.h"
-#include "../ProcessorGraph.h"
+#include "Merger.h"
+#include "../ProcessorGraph/ProcessorGraph.h"
 #include "../../UI/EditorViewport.h"
 
 // PipelineSelectorButton::PipelineSelectorButton()
diff --git a/Source/Processors/Editors/MergerEditor.h b/Source/Processors/Merger/MergerEditor.h
similarity index 92%
rename from Source/Processors/Editors/MergerEditor.h
rename to Source/Processors/Merger/MergerEditor.h
index a9b6b7b3d95192974bac4bf43109be23b2b0523c..b312197abe8032d29b844591b33b0b224f980cd0 100755
--- a/Source/Processors/Editors/MergerEditor.h
+++ b/Source/Processors/Merger/MergerEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,7 +26,7 @@
 
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 /**
 
diff --git a/Source/Processors/MessageCenter/MessageCenter.cpp b/Source/Processors/MessageCenter/MessageCenter.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e07812744df37e0146153048db9617614c5649a8
--- /dev/null
+++ b/Source/Processors/MessageCenter/MessageCenter.cpp
@@ -0,0 +1,91 @@
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2014 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "MessageCenter.h"
+#include "MessageCenterEditor.h"
+
+//---------------------------------------------------------------------
+
+MessageCenter::MessageCenter() :
+    GenericProcessor("Message Center"), newEventAvailable(false), isRecording(false)
+{
+
+    setPlayConfigDetails(0, // number of inputs
+                         0, // number of outputs
+                         44100.0, // sampleRate
+                         128);    // blockSize
+
+}
+
+MessageCenter::~MessageCenter()
+{
+
+}
+
+AudioProcessorEditor* MessageCenter::createEditor()
+{
+
+    messageCenterEditor = new MessageCenterEditor(this);
+
+    return messageCenterEditor;
+
+}
+
+void MessageCenter::setParameter(int parameterIndex, float newValue)
+{
+    if (isRecording)
+    {
+        newEventAvailable = true;
+        messageCenterEditor->messageReceived(true);
+    }
+    else
+    {
+        messageCenterEditor->messageReceived(false);
+    }
+
+}
+
+void MessageCenter::process(AudioSampleBuffer& buffer, MidiBuffer& eventBuffer, int& nSamples)
+{
+
+    if (newEventAvailable)
+    {
+        int numBytes = 0;
+        
+        String eventString = messageCenterEditor->getLabelString();
+
+        CharPointer_UTF8 data = eventString.toUTF8();
+
+        addEvent(eventBuffer,
+                MESSAGE,
+                0,
+                0,
+                0,
+                data.length()+1, //It doesn't hurt to send the end-string null and can help avoid issues
+                (uint8*) data.getAddress());
+
+        newEventAvailable = false;
+    }
+
+  
+}
diff --git a/Source/UI/MessageCenter.h b/Source/Processors/MessageCenter/MessageCenter.h
old mode 100755
new mode 100644
similarity index 54%
rename from Source/UI/MessageCenter.h
rename to Source/Processors/MessageCenter/MessageCenter.h
index e47d4d2d2cb5a16350ff22b068a01d4e01f2fb95..ec4218ce6ef12ddf33c8520d076197b1c06b47ac
--- a/Source/UI/MessageCenter.h
+++ b/Source/Processors/MessageCenter/MessageCenter.h
@@ -2,7 +2,7 @@
     -----------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,7 +25,12 @@
 #define __MESSAGECENTER_H_2695FC38__
 
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include <stdio.h>
+
+#include "../GenericProcessor/GenericProcessor.h"
+
+class MessageCenterEditor;
 
 /**
 
@@ -37,30 +42,35 @@
 
 */
 
-class MessageCenter : public Component,
-    public ActionListener
+class MessageCenter : public GenericProcessor
 
 {
 public:
     MessageCenter();
     ~MessageCenter();
 
-    /** Draws the message center.*/
-    void paint(Graphics& g);
+    /** Handle incoming data and decide which files and events to write to disk. */
+    void process(AudioSampleBuffer& buffer, MidiBuffer& eventBuffer, int& nSamples);
 
-private:
+    /** Called when new events arrive. */
+    void setParameter(int parameterIndex, float newValue);
+
+    /** Creates the MessageCenterEditor (located in the UI component). */
+    AudioProcessorEditor* createEditor();
 
-    /** A JUCE label used to display message text. */
-    ScopedPointer<Label> messageDisplayArea;
+    /** A pointer to the Message Center editor. */
+    ScopedPointer<MessageCenterEditor> messageCenterEditor;
+
+    void startRecording() {isRecording = true;}
+    void stopRecording() {isRecording = false;}
+
+private:
 
-    /** Called when the boundaries of the MessageCenter are changed. */
-    void resized();
+    bool newEventAvailable;
 
-    /** Called when a new message is received. */
-    void actionListenerCallback(const String& message);
+    bool isRecording;
 
-    /** The background color (changes to yellow when a new message arrives). */
-    Colour messageBackground;
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MessageCenter);
 
 };
 
diff --git a/Source/Processors/MessageCenter/MessageCenterEditor.cpp b/Source/Processors/MessageCenter/MessageCenterEditor.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ab457e9906e0b7919189bf3ff7498e3f3bc6ca0d
--- /dev/null
+++ b/Source/Processors/MessageCenter/MessageCenterEditor.cpp
@@ -0,0 +1,177 @@
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2014 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "MessageCenterEditor.h"
+
+MessageCenterEditor::MessageCenterEditor(MessageCenter* owner) :
+	AudioProcessorEditor(owner),
+	messageCenter(owner),
+    incomingBackground(100, 100, 100),
+    outgoingBackground(100, 100, 100)
+{
+
+    incomingMessageDisplayArea = new Label("Message Display Area","No new messages.");
+    outgoingMessageDisplayArea = new Label("Message Display Area","Type a new message here.");
+    outgoingMessageDisplayArea->setEditable(true);
+
+    addAndMakeVisible(incomingMessageDisplayArea);
+    addAndMakeVisible(outgoingMessageDisplayArea);
+
+    sendMessageButton = new UtilityButton("Save", Font("Small Text", 0, Font::plain));
+    sendMessageButton->addListener(this);
+    sendMessageButton->setTooltip("Send a message to be saved by the record node");
+    addAndMakeVisible(sendMessageButton);
+
+}
+
+MessageCenterEditor::~MessageCenterEditor()
+{
+
+}
+
+
+void MessageCenterEditor::buttonClicked(Button* button)
+{
+	messageCenter->setParameter(1,1);
+
+}
+
+void MessageCenterEditor::labelTextChanged(Label* label)
+{
+
+}
+
+void MessageCenterEditor::timerCallback()
+{
+
+	bool shouldRepaint = false;
+
+	float incomingAlpha = incomingBackground.getFloatAlpha();
+
+	if (incomingAlpha > 0)
+	{
+		incomingAlpha -= 0.05;
+
+		if (incomingAlpha < 0)
+			incomingAlpha = 0;
+
+		incomingBackground = incomingBackground.withAlpha(incomingAlpha);
+
+		shouldRepaint = true;
+	}
+
+	if (shouldRepaint)
+		repaint();
+	else
+		stopTimer();
+
+}
+
+bool MessageCenterEditor::keyPressed(const KeyPress& key)
+{
+	return false;
+}
+
+String MessageCenterEditor::getLabelString()
+{
+	return outgoingMessageDisplayArea->getText();
+}
+
+
+void MessageCenterEditor::enable()
+{
+	//sendMessageButton->setVisible(true);
+}
+
+void MessageCenterEditor::disable()
+{
+	//sendMessageButton->setVisible(false);
+}
+
+void MessageCenterEditor::messageReceived(bool state)
+{
+	if (!state)
+	{
+		incomingMessageDisplayArea->setText("Cannot save messages when recording is not active.", sendNotification);
+		incomingBackground = Colours::red;
+	} else {
+		incomingMessageDisplayArea->setText("Message sent.", sendNotification);
+		incomingBackground = Colours::green;
+	}
+
+	startTimer(75);
+}
+
+void MessageCenterEditor::paint(Graphics& g)
+{
+
+    g.setColour(Colour(58,58,58));
+
+    g.fillRect(0, 0, getWidth(), getHeight());
+
+    g.setColour(Colour(100,100,100));
+
+    g.fillRect(5, 5, getWidth()/2-5, getHeight()-10);
+    g.fillRect(getWidth()/2+5, 5, getWidth()/2-60, getHeight()-10);
+
+    g.setColour(incomingBackground);
+
+    g.fillRect(5, 5, getWidth()/2-5, getHeight()-10);
+
+    g.setColour(outgoingBackground);
+
+    g.fillRect(getWidth()/2+5, 5, getWidth()/2-60, getHeight()-10);
+
+}
+
+void MessageCenterEditor::resized()
+{
+    if (incomingMessageDisplayArea != 0)
+        incomingMessageDisplayArea->setBounds(5,0,getWidth()/2-5,getHeight());
+
+    if (outgoingMessageDisplayArea != 0)
+        outgoingMessageDisplayArea->setBounds(getWidth()/2+5,0,getWidth()/2-60, getHeight());
+
+    if (sendMessageButton != 0)
+        sendMessageButton->setBounds(getWidth()-50, 5, 45, getHeight()-10);
+}
+
+void MessageCenterEditor::actionListenerCallback(const String& message)
+{
+
+    incomingMessageDisplayArea->setText(message, sendNotification);
+
+    incomingBackground = Colours::orange;
+    startTimer(75);
+
+}
+
+void MessageCenterEditor::saveStateToXml(XmlElement* xml)
+{
+
+}
+
+void MessageCenterEditor::loadStateFromXml(XmlElement* xml)
+{
+
+}
diff --git a/Source/Processors/MessageCenter/MessageCenterEditor.h b/Source/Processors/MessageCenter/MessageCenterEditor.h
new file mode 100644
index 0000000000000000000000000000000000000000..81df70a72fedf4335398efbfb9df21ff35b75ace
--- /dev/null
+++ b/Source/Processors/MessageCenter/MessageCenterEditor.h
@@ -0,0 +1,97 @@
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2014 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef MESSAGECENTEREDITOR_H_INCLUDED
+#define MESSAGECENTEREDITOR_H_INCLUDED
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "MessageCenter.h"
+#include <stdio.h>
+
+/**
+	Holds the interface for adding events to the message queue
+
+	@see MessageCenter
+
+*/
+
+class MessageCenterEditor : public AudioProcessorEditor,
+    public Button::Listener,
+    public Label::Listener,
+    public AccessClass,
+    public Timer,
+    public ActionListener
+
+{
+public:
+    MessageCenterEditor(MessageCenter* owner);
+    ~MessageCenterEditor();
+
+    void paint(Graphics& g);
+
+    bool keyPressed(const KeyPress& key);
+
+    void resized();
+
+    void enable();
+    void disable();
+
+    void messageReceived(bool state);
+
+    void saveStateToXml(XmlElement* xml);
+    void loadStateFromXml(XmlElement* xml);
+
+    String getLabelString();
+
+private:
+
+    void buttonClicked(Button* button);
+    void labelTextChanged(Label* slider);
+    void timerCallback();
+
+    bool isEnabled;
+
+    /** Called when a new message is received. */
+    void actionListenerCallback(const String& message);
+
+    /** A JUCE label used to display message text. */
+    ScopedPointer<Label> incomingMessageDisplayArea;
+
+    /** A JUCE label used to display message text. */
+    ScopedPointer<Label> outgoingMessageDisplayArea;
+
+    /** A JUCE button used to send messages. */
+    ScopedPointer<Button> sendMessageButton;
+
+    MessageCenter* messageCenter;
+
+    Colour incomingBackground;
+    Colour outgoingBackground;
+
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MessageCenterEditor);
+
+};
+
+
+
+#endif  // MESSAGECENTEREDITOR_H_INCLUDED
diff --git a/Source/Processors/Parameter.cpp b/Source/Processors/Parameter/Parameter.cpp
similarity index 94%
rename from Source/Processors/Parameter.cpp
rename to Source/Processors/Parameter/Parameter.cpp
index da0dc4444967296ccc077f52d700c9e914ba7d77..1fcd924ed5fb01726fc54a42ab59cd3dcc22117e 100755
--- a/Source/Processors/Parameter.cpp
+++ b/Source/Processors/Parameter/Parameter.cpp
@@ -2,7 +2,7 @@
 /*    ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/Parameter.h b/Source/Processors/Parameter/Parameter.h
similarity index 98%
rename from Source/Processors/Parameter.h
rename to Source/Processors/Parameter/Parameter.h
index 92ee5e7a588b2bfe900b06f5b90ee3ffb075d4ec..33cf68b40269bda6f2adb23f5a8bd914a209a95e 100755
--- a/Source/Processors/Parameter.h
+++ b/Source/Processors/Parameter/Parameter.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,7 +24,7 @@
 #ifndef __PARAMETER_H_62922AE5__
 #define __PARAMETER_H_62922AE5__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 // #include "Editors/GenericEditor.h"
 // #include "GenericProcessor.h"
 // #include "../AccessClass.h"
diff --git a/Source/Processors/Editors/ParameterEditor.cpp b/Source/Processors/Parameter/ParameterEditor.cpp
similarity index 96%
rename from Source/Processors/Editors/ParameterEditor.cpp
rename to Source/Processors/Parameter/ParameterEditor.cpp
index 9c139e065078e8b1c607db7e5423fa8eb730f261..29a03585dfee776aa573ef45e85bb5df2a71d8f7 100755
--- a/Source/Processors/Editors/ParameterEditor.cpp
+++ b/Source/Processors/Parameter/ParameterEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/Editors/ParameterEditor.h b/Source/Processors/Parameter/ParameterEditor.h
similarity index 92%
rename from Source/Processors/Editors/ParameterEditor.h
rename to Source/Processors/Parameter/ParameterEditor.h
index bb2fd13589caa3259c9ed30547267babd299cf8c..5f08bd2c99b137389a95f99e5ceecd1ea711ab49 100755
--- a/Source/Processors/Editors/ParameterEditor.h
+++ b/Source/Processors/Parameter/ParameterEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,9 +25,9 @@
 #define __PARAMETEREDITOR_H_44537DA9__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "../GenericProcessor.h"
-#include "ChannelSelector.h"
-#include "../Parameter.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "../Editors/ChannelSelector.h"
+#include "Parameter.h"
 #include <stdio.h>
 
 class ParameterButton;
diff --git a/Source/Processors/PhaseDetector.cpp b/Source/Processors/PhaseDetector/PhaseDetector.cpp
similarity index 95%
rename from Source/Processors/PhaseDetector.cpp
rename to Source/Processors/PhaseDetector/PhaseDetector.cpp
index 0a6d07df0749c013b21b62073549df5b47a5bb2d..069b76454b3786709a8fc7b15cc3101eba0f510b 100644
--- a/Source/Processors/PhaseDetector.cpp
+++ b/Source/Processors/PhaseDetector/PhaseDetector.cpp
@@ -23,7 +23,7 @@
 
 #include <stdio.h>
 #include "PhaseDetector.h"
-#include "Editors/PhaseDetectorEditor.h"
+#include "PhaseDetectorEditor.h"
 
 PhaseDetector::PhaseDetector()
     : GenericProcessor("Phase Detector"), activeModule(-1),
diff --git a/Source/Processors/PhaseDetector.h b/Source/Processors/PhaseDetector/PhaseDetector.h
similarity index 91%
rename from Source/Processors/PhaseDetector.h
rename to Source/Processors/PhaseDetector/PhaseDetector.h
index 21dddad125b7ddb3d83b7c6c29affeae39f545b0..6116e2f2fe6ef0de397f5ba3233a99659d7b5a28 100644
--- a/Source/Processors/PhaseDetector.h
+++ b/Source/Processors/PhaseDetector/PhaseDetector.h
@@ -25,8 +25,8 @@
 #define __PHASEDETECTOR_H_F411F29D__
 
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "GenericProcessor.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 #define NUM_INTERVALS 5
 
diff --git a/Source/Processors/Editors/PhaseDetectorEditor.cpp b/Source/Processors/PhaseDetector/PhaseDetectorEditor.cpp
similarity index 95%
rename from Source/Processors/Editors/PhaseDetectorEditor.cpp
rename to Source/Processors/PhaseDetector/PhaseDetectorEditor.cpp
index 2e26307e7a5916d5def2779c32e6ffc5f880523f..5551157a617633f121a39d179c0fd60305a59907 100644
--- a/Source/Processors/Editors/PhaseDetectorEditor.cpp
+++ b/Source/Processors/PhaseDetector/PhaseDetectorEditor.cpp
@@ -23,7 +23,7 @@
 
 
 #include "PhaseDetectorEditor.h"
-#include "../PhaseDetector.h"
+#include "PhaseDetector.h"
 
 #include <stdio.h>
 #include <cmath>
diff --git a/Source/Processors/Editors/PhaseDetectorEditor.h b/Source/Processors/PhaseDetector/PhaseDetectorEditor.h
similarity index 93%
rename from Source/Processors/Editors/PhaseDetectorEditor.h
rename to Source/Processors/PhaseDetector/PhaseDetectorEditor.h
index f7bafda19202ff40aae12557a9fd0ac74d48007c..0041d45129cfad99fe6a1afbea58b1cdee409bd4 100644
--- a/Source/Processors/Editors/PhaseDetectorEditor.h
+++ b/Source/Processors/PhaseDetector/PhaseDetectorEditor.h
@@ -27,8 +27,8 @@
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
 
-#include "GenericEditor.h"
-#include "ElectrodeButtons.h"
+#include "../Editors/GenericEditor.h"
+#include "../Editors/ElectrodeButtons.h"
 
 class DetectorInterface;
 class PhaseDetector;
diff --git a/Source/Processors/ProcessorGraph.cpp b/Source/Processors/ProcessorGraph/ProcessorGraph.cpp
similarity index 85%
rename from Source/Processors/ProcessorGraph.cpp
rename to Source/Processors/ProcessorGraph/ProcessorGraph.cpp
index bbec3de2ded58083b6de175517dff05a16dfa672..b12e4cbb2fbe4a56d1f21e2e285e2b4b458c22cd 100644
--- a/Source/Processors/ProcessorGraph.cpp
+++ b/Source/Processors/ProcessorGraph/ProcessorGraph.cpp
@@ -2,7 +2,7 @@
 ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,34 +24,36 @@
 #include <stdio.h>
 
 #include "ProcessorGraph.h"
-
-#include "AudioNode.h"
-#include "LfpDisplayNode.h"
-#include "SpikeDisplayNode.h"
-#include "EventNode.h"
-#include "FilterNode.h"
-#include "GenericProcessor.h"
-#include "RecordNode.h"
-#include "ResamplingNode.h"
-#include "ReferenceNode.h"
-#include "ChannelMappingNode.h"
-#include "AudioResamplingNode.h"
-#include "SignalGenerator.h"
-#include "SourceNode.h"
-#include "EventDetector.h"
-#include "SpikeDetector.h"
-#include "PhaseDetector.h"
-#include "WiFiOutput.h"
-#include "FileReader.h"
-#include "ArduinoOutput.h"
-#include "FPGAOutput.h"
-#include "PulsePalOutput.h"
-#include "SerialInput.h"
-#include "Utilities/RecordControl.h"
-#include "Utilities/Splitter.h"
-#include "Utilities/Merger.h"
-#include "../UI/UIComponent.h"
-#include "../UI/EditorViewport.h"
+#include "../GenericProcessor/GenericProcessor.h"
+
+#include "../AudioNode/AudioNode.h"
+#include "../LfpDisplayNode/LfpDisplayNode.h"
+#include "../SpikeDisplayNode/SpikeDisplayNode.h"
+#include "../EventNode/EventNode.h"
+#include "../FilterNode/FilterNode.h"
+#include "../RecordNode/RecordNode.h"
+#include "../ResamplingNode/ResamplingNode.h"
+#include "../ReferenceNode/ReferenceNode.h"
+#include "../ChannelMappingNode/ChannelMappingNode.h"
+#include "../AudioResamplingNode/AudioResamplingNode.h"
+#include "../SignalGenerator/SignalGenerator.h"
+#include "../SourceNode/SourceNode.h"
+#include "../EventDetector/EventDetector.h"
+#include "../SpikeDetector/SpikeDetector.h"
+#include "../SpikeSorter/SpikeSorter.h"
+#include "../PhaseDetector/PhaseDetector.h"
+#include "../WiFiOutput/WiFiOutput.h"
+#include "../FileReader/FileReader.h"
+#include "../ArduinoOutput/ArduinoOutput.h"
+#include "../FPGAOutput/FPGAOutput.h"
+#include "../PulsePalOutput/PulsePalOutput.h"
+#include "../SerialInput/SerialInput.h"
+#include "../MessageCenter/MessageCenter.h"
+#include "../RecordControl/RecordControl.h"
+#include "../Splitter/Splitter.h"
+#include "../Merger/Merger.h"
+#include "../../UI/UIComponent.h"
+#include "../../UI/EditorViewport.h"
 
 ProcessorGraph::ProcessorGraph() : currentNodeId(100)
 {
@@ -63,8 +65,6 @@ ProcessorGraph::ProcessorGraph() : currentNodeId(100)
                          44100.0, // sampleRate
                          1024);    // blockSize
 
-    createDefaultNodes();
-
 }
 
 ProcessorGraph::~ProcessorGraph()
@@ -88,15 +88,19 @@ void ProcessorGraph::createDefaultNodes()
     AudioNode* an = new AudioNode();
     an->setNodeId(AUDIO_NODE_ID);
 
-
     // add audio resampling node -- resamples continuous signals to 44.1kHz
     AudioResamplingNode* arn = new AudioResamplingNode();
     arn->setNodeId(RESAMPLING_NODE_ID);
 
+    // add message center
+    MessageCenter* msgCenter = new MessageCenter();
+    msgCenter->setNodeId(MESSAGE_CENTER_ID);
+
     addNode(on, OUTPUT_NODE_ID);
     addNode(recn, RECORD_NODE_ID);
     addNode(an, AUDIO_NODE_ID);
     addNode(arn, RESAMPLING_NODE_ID);
+    addNode(msgCenter, MESSAGE_CENTER_ID);
 
 }
 
@@ -105,13 +109,22 @@ void ProcessorGraph::updatePointers()
     getAudioNode()->setUIComponent(getUIComponent());
     getAudioNode()->updateBufferSize();
     getRecordNode()->setUIComponent(getUIComponent());
+    getMessageCenter()->setUIComponent(getUIComponent());
 }
 
 void* ProcessorGraph::createNewProcessor(String& description, int id)//,
 
 {
 
-    GenericProcessor* processor = createProcessorFromDescription(description);
+    GenericProcessor* processor = 0;
+    try // Try/catch block added by Michael Borisov
+    {
+        processor = createProcessorFromDescription(description);
+    }
+    catch (std::exception& e)
+    {
+        NativeMessageBox::showMessageBoxAsync(AlertWindow::WarningIcon, "OpenEphys", e.what());
+    }
 
     // int id = currentNodeId++;
 
@@ -175,7 +188,8 @@ void ProcessorGraph::refreshColors()
         if (nodeId != OUTPUT_NODE_ID &&
             nodeId != AUDIO_NODE_ID &&
             nodeId != RECORD_NODE_ID &&
-            nodeId != RESAMPLING_NODE_ID)
+            nodeId != RESAMPLING_NODE_ID &&
+            nodeId != MESSAGE_CENTER_ID)
         {
             GenericProcessor* p =(GenericProcessor*) node->getProcessor();
             GenericEditor* e = (GenericEditor*) p->getEditor();
@@ -198,7 +212,8 @@ void ProcessorGraph::restoreParameters()
         if (nodeId != OUTPUT_NODE_ID &&
             nodeId != AUDIO_NODE_ID &&
             nodeId != RECORD_NODE_ID &&
-            nodeId != RESAMPLING_NODE_ID)
+            nodeId != RESAMPLING_NODE_ID &&
+            nodeId != MESSAGE_CENTER_ID)
         {
             GenericProcessor* p =(GenericProcessor*) node->getProcessor();
             p->loadFromXml();
@@ -221,7 +236,8 @@ Array<GenericProcessor*> ProcessorGraph::getListOfProcessors()
         if (nodeId != OUTPUT_NODE_ID &&
             nodeId != AUDIO_NODE_ID &&
             nodeId != RECORD_NODE_ID &&
-            nodeId != RESAMPLING_NODE_ID)
+            nodeId != RESAMPLING_NODE_ID &&
+            nodeId != MESSAGE_CENTER_ID)
         {
             GenericProcessor* p =(GenericProcessor*) node->getProcessor();
             a.add(p);
@@ -269,6 +285,9 @@ void ProcessorGraph::clearConnections()
 
     addConnection(AUDIO_NODE_ID, midiChannelIndex,
                   RESAMPLING_NODE_ID, midiChannelIndex);
+
+    addConnection(MESSAGE_CENTER_ID, midiChannelIndex,
+                  RECORD_NODE_ID, midiChannelIndex);
 }
 
 
@@ -435,6 +454,7 @@ void ProcessorGraph::connectProcessorToAudioAndRecordNodes(GenericProcessor* sou
     if (source == nullptr)
         return;
 
+	getRecordNode()->registerProcessor(source);
     for (int chan = 0; chan < source->getNumOutputs(); chan++)
     {
 
@@ -491,6 +511,7 @@ GenericProcessor* ProcessorGraph::createProcessorFromDescription(String& descrip
         if (subProcessorType.equalsIgnoreCase("RHA2000-EVAL") ||
             // subProcessorType.equalsIgnoreCase("File Reader") ||
             subProcessorType.equalsIgnoreCase("Custom FPGA") ||
+            subProcessorType.equalsIgnoreCase("eCube") || // Added by Michael Borisov
             subProcessorType.equalsIgnoreCase("Rhythm FPGA"))
         {
 
@@ -547,6 +568,11 @@ GenericProcessor* ProcessorGraph::createProcessorFromDescription(String& descrip
             std::cout << "Creating a new spike detector." << std::endl;
             processor = new SpikeDetector();
         }
+        else if (subProcessorType.equalsIgnoreCase("Spike Sorter"))
+        {
+            std::cout << "Creating a new spike sorter." << std::endl;
+            processor = new SpikeSorter();
+        }
         else if (subProcessorType.equalsIgnoreCase("Event Detector"))
         {
             std::cout << "Creating a new event detector." << std::endl;
@@ -662,6 +688,7 @@ void ProcessorGraph::removeProcessor(GenericProcessor* processor)
 
     std::cout << "Removing processor with ID " << processor->getNodeId() << std::endl;
 
+    disconnectNode(processor->getNodeId());
     removeNode(processor->getNodeId());
 
 }
@@ -732,7 +759,7 @@ bool ProcessorGraph::disableProcessors()
     for (int i = 0; i < getNumNodes(); i++)
     {
         Node* node = getNode(i);
-        if (node->nodeId != OUTPUT_NODE_ID)
+        if (node->nodeId != OUTPUT_NODE_ID && node->nodeId != MESSAGE_CENTER_ID)
         {
             GenericProcessor* p = (GenericProcessor*) node->getProcessor();
             std::cout << "Disabling " << p->getName() << std::endl;
@@ -774,11 +801,7 @@ void ProcessorGraph::setRecordState(bool isRecording)
         {
             GenericProcessor* p = (GenericProcessor*) node->getProcessor();
 
-            if (isRecording)
-                p->startRecording();
-            else
-                p->stopRecording();
-
+			p->setRecording(isRecording);
         }
     }
 
@@ -802,3 +825,12 @@ RecordNode* ProcessorGraph::getRecordNode()
     return (RecordNode*) node->getProcessor();
 
 }
+
+
+MessageCenter* ProcessorGraph::getMessageCenter()
+{
+
+    Node* node = getNodeForId(MESSAGE_CENTER_ID);
+    return (MessageCenter*) node->getProcessor();
+
+}
diff --git a/Source/Processors/ProcessorGraph.h b/Source/Processors/ProcessorGraph/ProcessorGraph.h
similarity index 89%
rename from Source/Processors/ProcessorGraph.h
rename to Source/Processors/ProcessorGraph/ProcessorGraph.h
index 48919679b6b86a3644f6d5b55a66709aa110b764..2edbf0180db47e4d17f8f33022adfbbcfe75e5b3 100644
--- a/Source/Processors/ProcessorGraph.h
+++ b/Source/Processors/ProcessorGraph/ProcessorGraph.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,13 +24,14 @@
 #ifndef __PROCESSORGRAPH_H_124F8B50__
 #define __PROCESSORGRAPH_H_124F8B50__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 
-#include "../AccessClass.h"
+#include "../../AccessClass.h"
 
 class GenericProcessor;
 class RecordNode;
 class AudioNode;
+class MessageCenter;
 class SignalChainTabButton;
 
 /**
@@ -69,6 +70,7 @@ public:
 
     RecordNode* getRecordNode();
     AudioNode* getAudioNode();
+    MessageCenter* getMessageCenter();
 
     void updateConnections(Array<SignalChainTabButton*, CriticalSection>);
 
@@ -85,6 +87,8 @@ public:
 
     void refreshColors();
 
+    void createDefaultNodes();
+
 private:
 
     int currentNodeId;
@@ -94,11 +98,10 @@ private:
         RECORD_NODE_ID = 900,
         AUDIO_NODE_ID = 901,
         OUTPUT_NODE_ID = 902,
-        RESAMPLING_NODE_ID = 903
+        RESAMPLING_NODE_ID = 903,
+        MESSAGE_CENTER_ID = 904
     };
 
-    void createDefaultNodes();
-
     void clearConnections();
 
     void connectProcessors(GenericProcessor* source, GenericProcessor* dest);
diff --git a/Source/Processors/PulsePalOutput.cpp b/Source/Processors/PulsePalOutput/PulsePalOutput.cpp
similarity index 95%
rename from Source/Processors/PulsePalOutput.cpp
rename to Source/Processors/PulsePalOutput/PulsePalOutput.cpp
index 6cbfe51dc0598fee333d129c85c3ad9aed390b33..addb53f28b75ca92a542b4d319593c9a3c49cfe1 100644
--- a/Source/Processors/PulsePalOutput.cpp
+++ b/Source/Processors/PulsePalOutput/PulsePalOutput.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/PulsePalOutput.h b/Source/Processors/PulsePalOutput/PulsePalOutput.h
similarity index 86%
rename from Source/Processors/PulsePalOutput.h
rename to Source/Processors/PulsePalOutput/PulsePalOutput.h
index 85f192ccaf9b2b36bf88128b1cc6f335f9218131..e9f52a13b60178757136c5568e2db767424af58a 100644
--- a/Source/Processors/PulsePalOutput.h
+++ b/Source/Processors/PulsePalOutput/PulsePalOutput.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,10 +24,10 @@
 #ifndef __PULSEPALOUTPUT_H_A8BF66D6__
 #define __PULSEPALOUTPUT_H_A8BF66D6__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "GenericProcessor.h"
-#include "Editors/PulsePalOutputEditor.h"
-#include "Serial/PulsePal.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "PulsePalOutputEditor.h"
+#include "../Serial/PulsePal.h"
 
 /**
 
diff --git a/Source/Processors/Editors/PulsePalOutputEditor.cpp b/Source/Processors/PulsePalOutput/PulsePalOutputEditor.cpp
similarity index 95%
rename from Source/Processors/Editors/PulsePalOutputEditor.cpp
rename to Source/Processors/PulsePalOutput/PulsePalOutputEditor.cpp
index 443d5a8aec31525ea3d8ded3f67241fc37f180b2..f4f6648f38cb3c4230dd4da465231147a5fd6821 100644
--- a/Source/Processors/Editors/PulsePalOutputEditor.cpp
+++ b/Source/Processors/PulsePalOutput/PulsePalOutputEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,7 +24,7 @@
 #include <stdio.h>
 #include "PulsePalOutputEditor.h"
 
-#include "../PulsePalOutput.h"
+#include "PulsePalOutput.h"
 #include "../Serial/PulsePal.h"
 
 PulsePalOutputEditor::PulsePalOutputEditor(GenericProcessor* parentNode, PulsePal* pp, bool useDefaultParameterEditors=true)
diff --git a/Source/Processors/Editors/PulsePalOutputEditor.h b/Source/Processors/PulsePalOutput/PulsePalOutputEditor.h
similarity index 93%
rename from Source/Processors/Editors/PulsePalOutputEditor.h
rename to Source/Processors/PulsePalOutput/PulsePalOutputEditor.h
index a7036704d38740a221c44e3525f753daa8c966ef..9abc2a8903ce06df38733dbeb52cf3da0113260f 100644
--- a/Source/Processors/Editors/PulsePalOutputEditor.h
+++ b/Source/Processors/PulsePalOutput/PulsePalOutputEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,7 +25,7 @@
 #define __PULSEPALOUTPUTEDITOR_H_BB5F0ECC__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 /**
 
diff --git a/Source/Processors/Utilities/RecordControl.cpp b/Source/Processors/RecordControl/RecordControl.cpp
similarity index 82%
rename from Source/Processors/Utilities/RecordControl.cpp
rename to Source/Processors/RecordControl/RecordControl.cpp
index 8a440fd09f126569ae0ce5d3a63e6181b62129cf..b3ca5b019e3f32dc6a7252f140ed5f01a241a1ba 100644
--- a/Source/Processors/Utilities/RecordControl.cpp
+++ b/Source/Processors/RecordControl/RecordControl.cpp
@@ -28,7 +28,7 @@
 
 RecordControl::RecordControl()
     : GenericProcessor("Record Control"),
-      createNewFilesOnTrigger(false), triggerChannel(0), recordNode(0)
+     triggerChannel(0), recordNode(0)
 {
 
 }
@@ -50,21 +50,6 @@ void RecordControl::setParameter(int parameterIndex, float newValue)
     {
         updateTriggerChannel((int) newValue);
     }
-    else
-    {
-
-        if (newValue == 0.0)
-        {
-            createNewFilesOnTrigger = false;
-
-
-        }
-        else
-        {
-            createNewFilesOnTrigger = true;
-        }
-        //recordNode->appendTrialNumber(createNewFilesOnTrigger);
-    }
 }
 
 void RecordControl::updateTriggerChannel(int newChannel)
@@ -77,7 +62,7 @@ bool RecordControl::enable()
     if (recordNode == 0)
         recordNode = getProcessorGraph()->getRecordNode();
 
-    recordNode->appendTrialNumber(createNewFilesOnTrigger);
+    //recordNode->appendTrialNumber(createNewFilesOnTrigger);
 
     return true;
 }
@@ -108,10 +93,6 @@ void RecordControl::handleEvent(int eventType, MidiMessage& event, int)
 
         if (eventId == 1)
         {
-            if (createNewFilesOnTrigger)
-            {
-                recordNode->updateTrialNumber();
-            }
             getControlPanel()->setRecordState(true);
         }
         else
diff --git a/Source/Processors/Utilities/RecordControl.h b/Source/Processors/RecordControl/RecordControl.h
similarity index 92%
rename from Source/Processors/Utilities/RecordControl.h
rename to Source/Processors/RecordControl/RecordControl.h
index 594c8d04acb2eb421c592da49f0278de3f89d072..ffdfb4239694930dd6027cb8bace79c2216dc156 100644
--- a/Source/Processors/Utilities/RecordControl.h
+++ b/Source/Processors/RecordControl/RecordControl.h
@@ -25,9 +25,9 @@
 #define __RECORDCONTROL_H_120DD434__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "../GenericProcessor.h"
-#include "../Editors/RecordControlEditor.h"
-#include "../RecordNode.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "RecordControlEditor.h"
+#include "../RecordNode/RecordNode.h"
 
 /**
 
@@ -49,8 +49,6 @@ public:
     void handleEvent(int eventType, MidiMessage& event, int);
     bool enable();
 
-    bool createNewFilesOnTrigger;
-
     bool isUtility()
     {
         return true;
diff --git a/Source/Processors/Editors/RecordControlEditor.cpp b/Source/Processors/RecordControl/RecordControlEditor.cpp
similarity index 78%
rename from Source/Processors/Editors/RecordControlEditor.cpp
rename to Source/Processors/RecordControl/RecordControlEditor.cpp
index e97638e92e7ef4e9c97f9d67a6d9c47c78b12584..a8b0f3b3238db8de1db0e0f1579aab904bae7164 100644
--- a/Source/Processors/Editors/RecordControlEditor.cpp
+++ b/Source/Processors/RecordControl/RecordControlEditor.cpp
@@ -22,8 +22,8 @@
 */
 
 #include "RecordControlEditor.h"
-#include "../Utilities/RecordControl.h"
-#include "ChannelSelector.h"
+#include "RecordControl.h"
+#include "../Editors/ChannelSelector.h"
 #include <stdio.h>
 
 RecordControlEditor::RecordControlEditor(GenericProcessor* parentNode, bool useDefaultParameterEditors=true)
@@ -58,14 +58,6 @@ RecordControlEditor::RecordControlEditor(GenericProcessor* parentNode, bool useD
         channelName += i + 1;
         availableChans->addItem(channelName,i+2);
     }
-
-    newFileToggleButton = new UtilityButton("SPLIT FILES", Font("Small Text", 13, Font::plain));
-    newFileToggleButton->setRadius(3.0f);
-    newFileToggleButton->setBounds(35, 95, 90, 18);
-    newFileToggleButton->addListener(this);
-    newFileToggleButton->setClickingTogglesState(true);
-    addAndMakeVisible(newFileToggleButton);
-
 }
 
 RecordControlEditor::~RecordControlEditor()
@@ -82,18 +74,6 @@ void RecordControlEditor::comboBoxChanged(ComboBox* comboBox)
         getProcessor()->setParameter(0, -1);
 }
 
-void RecordControlEditor::buttonEvent(Button* button)
-{
-
-    if (button->getToggleState())
-    {
-        getProcessor()->setParameter(1, 1.0f);
-    }
-    else
-    {
-        getProcessor()->setParameter(1, 0.0f);
-    }
-}
 
 void RecordControlEditor::updateSettings()
 {
@@ -110,7 +90,6 @@ void RecordControlEditor::saveCustomParameters(XmlElement* xml)
 
     info->setAttribute("Type", "RecordControlEditor");
     info->setAttribute("Channel",availableChans->getSelectedId());
-    info->setAttribute("FileSaveOption",newFileToggleButton->getToggleState());
 
 }
 
@@ -122,7 +101,6 @@ void RecordControlEditor::loadCustomParameters(XmlElement* xml)
 
         if (xmlNode->hasTagName("PARAMETERS"))
         {
-            newFileToggleButton->setToggleState(xmlNode->getBoolAttribute("FileSaveOption"), sendNotification);
             availableChans->setSelectedId(xmlNode->getIntAttribute("Channel"), sendNotification);
         }
 
diff --git a/Source/Processors/Editors/RecordControlEditor.h b/Source/Processors/RecordControl/RecordControlEditor.h
similarity index 89%
rename from Source/Processors/Editors/RecordControlEditor.h
rename to Source/Processors/RecordControl/RecordControlEditor.h
index 0976ac133237f0e87964658d41e651269175f39c..792c3d5eb566ddf9815a0e5a5900aab48bed0e0e 100644
--- a/Source/Processors/Editors/RecordControlEditor.h
+++ b/Source/Processors/RecordControl/RecordControlEditor.h
@@ -25,7 +25,7 @@
 #define __RECORDCONTROLEDITOR_H_F9C69E2B__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 /**
 
@@ -43,16 +43,14 @@ public:
     ~RecordControlEditor();
     void comboBoxChanged(ComboBox* comboBox);
     void updateSettings();
-    void buttonEvent(Button* button);
     void loadCustomParameters(XmlElement*);
     void saveCustomParameters(XmlElement*);
 
 private:
     ScopedPointer<ComboBox> availableChans;
     ScopedPointer<Label> chanSel;
-    ScopedPointer<UtilityButton> newFileToggleButton;
 
-    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(RecordControlEditor);
+	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(RecordControlEditor);
 
 };
 
diff --git a/Source/Processors/RecordNode.cpp b/Source/Processors/RecordNode.cpp
deleted file mode 100755
index f66b720480293aed9206250a8ba2a8c7be33ec63..0000000000000000000000000000000000000000
--- a/Source/Processors/RecordNode.cpp
+++ /dev/null
@@ -1,864 +0,0 @@
-/*
-    ------------------------------------------------------------------
-
-    This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
-
-    ------------------------------------------------------------------
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include "RecordNode.h"
-#include "ProcessorGraph.h"
-#include "../UI/EditorViewport.h"
-#include "../UI/ControlPanel.h"
-
-#include "Channel.h"
-
-RecordNode::RecordNode()
-    : GenericProcessor("Record Node"),
-      newDirectoryNeeded(true),  zeroBuffer(1, 50000),  timestamp(0),
-      appendTrialNum(false), trialNum(0)
-{
-
-    isProcessing = false;
-    isRecording = false;
-    allFilesOpened = false;
-    blockIndex = 0;
-    signalFilesShouldClose = false;
-
-    continuousDataIntegerBuffer = new int16[10000];
-    continuousDataFloatBuffer = new float[10000];
-    signalFilesShouldClose = false;
-
-    settings.numInputs = 2048;
-    settings.numOutputs = 0;
-
-    eventChannel = new Channel(this, 0);
-    eventChannel->isEventChannel = true;
-
-    recordMarker = new char[10];
-    for (int i = 0; i < 9; i++)
-    {
-        recordMarker[i] = i;
-    }
-    recordMarker[9] = 255;
-
-    recordingNumber = 0;
-
-    // 128 inputs, 0 outputs
-    setPlayConfigDetails(getNumInputs(),getNumOutputs(),44100.0,128);
-
-    zeroBuffer.clear();
-
-}
-
-
-RecordNode::~RecordNode()
-{
-
-}
-
-void RecordNode::setChannel(Channel* ch)
-{
-
-    int channelNum = channelPointers.indexOf(ch);
-
-    std::cout << "Record node setting channel to " << channelNum << std::endl;
-
-    setCurrentChannel(channelNum);
-
-    // for (int i = 0; i < con.size(); i++)
-    // {
-
-    // 	if (continuousChannels[i].nodeId == id &&
-    // 		continuousChannels[i].chan == chan)
-    // 	{
-    // 		std::cout << "Found channel " << i << std::endl;
-    // 		setCurrentChannel(i);
-    // 		break;
-    // 	}
-
-    // }
-}
-
-void RecordNode::setChannelStatus(Channel* ch, bool status)
-{
-
-    //std::cout << "Setting channel status!" << std::endl;
-    setChannel(ch);
-
-    if (status)
-        setParameter(2, 1.0f);
-    else
-        setParameter(2, 0.0f);
-
-}
-
-// void RecordNode::enableCurrentChannel(bool state)
-// {
-// 	continuousChannels[nextAvailableChannel].isRecording = state;
-// }
-
-void RecordNode::resetConnections()
-{
-    //std::cout << "Resetting connections" << std::endl;
-    nextAvailableChannel = 0;
-    wasConnected = false;
-
-    channelPointers.clear();
-    eventChannelPointers.clear();
-
-
-
-}
-
-void RecordNode::filenameComponentChanged(FilenameComponent* fnc)
-{
-
-    //std::cout << "Got a new file" << std::endl;
-    dataDirectory = fnc->getCurrentFile();
-    // std::cout << "File name: " << dataDirectory.getFullPathName();
-    // if (dataDirectory.isDirectory())
-    //     std::cout << " is a directory." << std::endl;
-    // else
-    //     std::cout << " is NOT a directory." << std::endl;
-
-    //createNewDirectory();
-
-
-
-}
-
-
-void RecordNode::addInputChannel(GenericProcessor* sourceNode, int chan)
-{
-
-    if (chan != getProcessorGraph()->midiChannelIndex)
-    {
-
-        int channelIndex = getNextChannel(false);
-
-        setPlayConfigDetails(channelIndex+1,0,44100.0,128);
-
-        channelPointers.add(sourceNode->channels[chan]);
-
-        //   std::cout << channelIndex << std::endl;
-
-        updateFileName(channelPointers[channelIndex]);
-
-
-
-        //if (channelPointers[channelIndex]->isRecording)
-        //	std::cout << "  This channel will be recorded." << std::endl;
-        //else
-        //	std::cout << "  This channel will NOT be recorded." << std::endl;
-
-        //std::cout << "adding channel " << getNextChannel(false) << std::endl;
-
-        //std::pair<int, Channel> newPair (getNextChannel(false), newChannel);
-
-        //std::cout << "adding channel " << getNextChannel(false) << std::endl;
-
-        //continuouschannelPointers.insert(newPair);
-
-
-    }
-    else
-    {
-
-        for (int n = 0; n < sourceNode->eventChannels.size(); n++)
-        {
-
-            eventChannelPointers.add(sourceNode->eventChannels[n]);
-
-        }
-
-    }
-
-}
-
-void RecordNode::updateFileName(Channel* ch)
-{
-    String filename = rootFolder.getFullPathName();
-    filename += rootFolder.separatorString;
-
-    if (!ch->isEventChannel)
-    {
-        filename += ch->nodeId;
-        filename += "_";
-        filename += ch->name;
-
-        if (appendTrialNum)
-        {
-            filename += "_";
-            filename += trialNum;
-        }
-
-        filename += ".continuous";
-    }
-    else
-    {
-        filename += "all_channels.events";
-    }
-
-
-    ch->filename = filename;
-    ch->file = 0;
-
-
-    //std::cout << "Updating " << filename << std::endl;
-
-}
-
-void RecordNode::updateTrialNumber()
-{
-    trialNum++;
-}
-
-void RecordNode::appendTrialNumber(bool t)
-{
-    appendTrialNum = t;
-}
-
-void RecordNode::createNewDirectory()
-{
-    std::cout << "Creating new directory." << std::endl;
-
-    rootFolder = File(dataDirectory.getFullPathName() + File::separator + generateDirectoryName());
-
-    updateFileName(eventChannel);
-
-    for (int i = 0; i < channelPointers.size(); i++)
-    {
-        updateFileName(channelPointers[i]);
-    }
-
-    newDirectoryNeeded = false;
-
-    trialNum = 0;
-
-}
-
-void RecordNode::createNewFiles()
-{
-    for (int i = 0; i < channelPointers.size(); i++)
-    {
-        updateFileName(channelPointers[i]);
-    }
-
-}
-
-String RecordNode::generateDirectoryName()
-{
-    Time calendar = Time::getCurrentTime();
-
-    Array<int> t;
-    t.add(calendar.getYear());
-    t.add(calendar.getMonth()+1); // January = 0
-    t.add(calendar.getDayOfMonth());
-    t.add(calendar.getHours());
-    t.add(calendar.getMinutes());
-    t.add(calendar.getSeconds());
-
-    String filename = getControlPanel()->getTextToPrepend();
-
-    String datestring = "";
-
-    for (int n = 0; n < t.size(); n++)
-    {
-        if (t[n] < 10)
-            datestring += "0";
-
-        datestring += t[n];
-
-        if (n == 2)
-            datestring += "_";
-        else if (n < 5)
-            datestring += "-";
-    }
-
-    getControlPanel()->setDateText(datestring);
-
-    filename += datestring;
-    filename += getControlPanel()->getTextToAppend();
-
-    return filename;
-
-}
-
-String RecordNode::generateDateString()
-{
-    Time calendar = Time::getCurrentTime();
-
-    String datestring;
-
-    datestring += String(calendar.getDayOfMonth());
-    datestring += "-";
-    datestring += calendar.getMonthName(true);
-    datestring += "-";
-    datestring += String(calendar.getYear());
-    datestring += " ";
-
-    int hrs, mins, secs;
-    hrs = calendar.getHours();
-    mins = calendar.getMinutes();
-    secs = calendar.getSeconds();
-
-    datestring += hrs;
-
-    if (mins < 10)
-        datestring += 0;
-
-    datestring += mins;
-
-    if (secs < 0)
-        datestring += 0;
-
-    datestring += secs;
-
-    return datestring;
-
-}
-
-
-void RecordNode::setParameter(int parameterIndex, float newValue)
-{
-    //editor->updateParameterButtons(parameterIndex);
-
-    // 0 = stop recording
-    // 1 = start recording
-    // 2 = toggle individual channel (0.0f = OFF, anything else = ON)
-
-    if (parameterIndex == 1)
-    {
-
-        isRecording = true;
-        // std::cout << "START RECORDING." << std::endl;
-
-        if (newDirectoryNeeded)
-        {
-            createNewDirectory();
-            recordingNumber = 0;
-        }
-        else
-        {
-            recordingNumber++; // increment recording number within this directory
-        }
-
-        if (!rootFolder.exists())
-        {
-            rootFolder.createDirectory();
-            String settingsFileName = rootFolder.getFullPathName() + File::separator + "settings.xml";
-            getEditorViewport()->saveState(File(settingsFileName));
-        }
-
-        createNewFiles();
-
-        openFile(eventChannel);
-
-        blockIndex = 0; // reset index
-
-
-        // create / open necessary files
-        for (int i = 0; i < channelPointers.size(); i++)
-        {
-            // std::cout << "Checking channel " << i << std::endl;
-
-            if (channelPointers[i]->getRecordState())
-            {
-                openFile(channelPointers[i]);
-            }
-        }
-
-        allFilesOpened = true;
-
-    }
-    else if (parameterIndex == 0)
-    {
-
-
-        // std::cout << "STOP RECORDING." << std::endl;
-
-        if (isRecording)
-        {
-
-            // close necessary files
-            signalFilesShouldClose = true;
-
-        }
-
-        isRecording = false;
-
-
-    }
-    else if (parameterIndex == 2)
-    {
-
-        if (isProcessing)
-        {
-
-            std::cout << "Toggling channel " << currentChannel << std::endl;
-
-            if (newValue == 0.0f)
-            {
-                channelPointers[currentChannel]->setRecordState(false);
-
-                if (isRecording)
-                {
-
-                    if (blockIndex < BLOCK_LENGTH)
-                    {
-                        // fill out the rest of the current buffer
-                        writeContinuousBuffer(zeroBuffer.getReadPointer(0), BLOCK_LENGTH - blockIndex, currentChannel);
-                    }
-
-                    closeFile(channelPointers[currentChannel]);
-                }
-
-            }
-            else
-            {
-                channelPointers[currentChannel]->setRecordState(true);
-
-                if (isRecording)
-                {
-
-                    openFile(channelPointers[currentChannel]);
-
-                    if (blockIndex > 0)
-                    {
-                        writeTimestampAndSampleCount(channelPointers[currentChannel]->file);
-                        // fill up the first data block up to sample count
-                        writeContinuousBuffer(zeroBuffer.getReadPointer(0), blockIndex, currentChannel);
-                    }
-
-                }
-            }
-        }
-    }
-}
-
-void RecordNode::openFile(Channel* ch)
-{
-    std::cout << "OPENING FILE: " << ch->filename << std::endl;
-
-    File f = File(ch->filename);
-    FILE* chFile;
-
-    bool fileExists = f.exists();
-
-    diskWriteLock.enter();
-
-    chFile = fopen(ch->filename.toUTF8(), "ab");
-
-    if (!fileExists)
-    {
-        // create and write header
-        std::cout << "Writing header." << std::endl;
-        String header = generateHeader(ch);
-        //std::cout << header << std::endl;
-        std::cout << "File ID: " << chFile << ", number of bytes: " << header.getNumBytesAsUTF8() << std::endl;
-
-
-        fwrite(header.toUTF8(), 1, header.getNumBytesAsUTF8(), chFile);
-
-        std::cout << "Wrote header." << std::endl;
-
-        std::cout << "Block index: " << blockIndex << std::endl;
-
-    }
-    else
-    {
-        std::cout << "File already exists, just opening." << std::endl;
-    }
-
-    diskWriteLock.exit();
-
-    //To avoid a race condition resulting on data written before the header,
-    //do not assign the channel pointer until the header has been written
-    ch->file = chFile;
-
-
-}
-
-void RecordNode::closeFile(Channel* ch)
-{
-
-    diskWriteLock.enter();
-
-    std::cout << "CLOSING FILE: " << ch->filename << std::endl;
-    if (ch->file != NULL)
-        fclose(ch->file);
-
-    diskWriteLock.exit();
-}
-
-String RecordNode::generateHeader(Channel* ch)
-{
-
-    String header = "header.format = 'Open Ephys Data Format'; \n";
-
-    header += "header.version = 0.2;";
-    header += "header.header_bytes = ";
-    header += String(HEADER_SIZE);
-    header += ";\n";
-
-    if (ch->isEventChannel)
-    {
-        header += "header.description = 'each record contains one 64-bit timestamp, one 16-bit sample position, one uint8 event type, one uint8 processor ID, one uint8 event ID, one uint8 event channel, and one uint16 recordingNumber'; \n";
-
-    }
-    else
-    {
-        header += "header.description = 'each record contains one 64-bit timestamp, one 16-bit sample count (N), 1 uint16 recordingNumber, N 16-bit samples, and one 10-byte record marker (0 1 2 3 4 5 6 7 8 255)'; \n";
-    }
-
-
-    header += "header.date_created = '";
-    header += generateDateString();
-    header += "';\n";
-
-    header += "header.channel = '";
-    header += ch->name;
-    header += "';\n";
-
-    if (ch->isEventChannel)
-    {
-
-        header += "header.channelType = 'Event';\n";
-    }
-    else
-    {
-        header += "header.channelType = 'Continuous';\n";
-    }
-
-    header += "header.sampleRate = ";
-    // all channels need to have the same sample rate under the current scheme
-    header += String(channelPointers[0]->sampleRate);
-    header += ";\n";
-    header += "header.blockLength = ";
-    header += BLOCK_LENGTH;
-    header += ";\n";
-    header += "header.bufferSize = ";
-    header += getAudioComponent()->getBufferSize();
-    header += ";\n";
-    header += "header.bitVolts = ";
-    header += String(ch->bitVolts);
-    header += ";\n";
-
-    header = header.paddedRight(' ', HEADER_SIZE);
-
-    //std::cout << header << std::endl;
-
-    return header;
-
-}
-
-void RecordNode::closeAllFiles()
-{
-    if (allFilesOpened)
-    {
-        for (int i = 0; i < channelPointers.size(); i++)
-        {
-            if (channelPointers[i]->getRecordState())
-            {
-
-                if (blockIndex < BLOCK_LENGTH)
-                {
-                    // fill out the rest of the current buffer
-                    writeContinuousBuffer(zeroBuffer.getReadPointer(0), BLOCK_LENGTH - blockIndex, i);
-                }
-
-                closeFile(channelPointers[i]);
-            }
-        }
-
-        closeFile(eventChannel);
-        blockIndex = 0; // back to the beginning of the block
-        allFilesOpened = false;
-    }
-}
-
-bool RecordNode::enable()
-{
-
-    isProcessing = true;
-    return true;
-}
-
-
-bool RecordNode::disable()
-{
-    // close files if necessary
-    setParameter(0, 10.0f);
-
-    if (isProcessing)
-        closeAllFiles();
-
-    isProcessing = false;
-
-    return true;
-}
-
-float RecordNode::getFreeSpace()
-{
-    return 1.0f - float(dataDirectory.getBytesFreeOnVolume())/float(dataDirectory.getVolumeTotalSize());
-}
-
-void RecordNode::writeContinuousBuffer(const float* data, int nSamples, int channel)
-{
-
-    // check to see if the file exists
-    if (channelPointers[channel]->file == NULL)
-        return;
-
-    // scale the data back into the range of int16
-    float scaleFactor =  float(0x7fff) * channelPointers[channel]->bitVolts;
-    for (int n = 0; n < nSamples; n++)
-    {
-        *(continuousDataFloatBuffer+n) = *(data+n) / scaleFactor;
-    }
-    AudioDataConverters::convertFloatToInt16BE(continuousDataFloatBuffer, continuousDataIntegerBuffer, nSamples);
-
-    if (blockIndex == 0)
-    {
-        writeTimestampAndSampleCount(channelPointers[channel]->file);
-    }
-
-    diskWriteLock.enter();
-
-    size_t count = fwrite(continuousDataIntegerBuffer, // ptr
-                          2,                               // size of each element
-                          nSamples,                        // count
-                          channelPointers[channel]->file); // ptr to FILE object
-
-    jassert(count == nSamples); // make sure all the data was written
-
-    diskWriteLock.exit();
-
-    if (blockIndex + nSamples == BLOCK_LENGTH)
-    {
-        writeRecordMarker(channelPointers[channel]->file);
-    }
-
-}
-
-void RecordNode::writeTimestampAndSampleCount(FILE* file)
-{
-
-
-    diskWriteLock.enter();
-
-    uint16 samps = BLOCK_LENGTH;
-
-    fwrite(&timestamp,                       // ptr
-           8,                               // size of each element
-           1,                               // count
-           file); // ptr to FILE object
-
-    fwrite(&samps,                           // ptr
-           2,                               // size of each element
-           1,                               // count
-           file); // ptr to FILE object
-
-    fwrite(&recordingNumber,                         // ptr
-           2,                               // size of each element
-           1,                               // count
-           file); // ptr to FILE object
-
-    diskWriteLock.exit();
-
-}
-
-void RecordNode::writeRecordMarker(FILE* file)
-{
-    // write a 10-byte marker indicating the end of a record
-
-    diskWriteLock.enter();
-    fwrite(recordMarker,        // ptr
-           1,                   // size of each element
-           10,                  // count
-           file);               // ptr to FILE object
-
-    diskWriteLock.exit();
-
-}
-
-void RecordNode::writeEventBuffer(MidiMessage& event, int samplePosition) //, int node, int channel)
-{
-    // find file and write samples to disk
-    // std::cout << "Received event!" << std::endl;
-
-    if (eventChannel->file == NULL)
-        return;
-
-    const uint8* dataptr = event.getRawData();
-
-    if (event.getNoteNumber() > 0) // processor ID > 0
-    {
-        uint64 samplePos = (uint64) samplePosition;
-
-        int64 eventTimestamp = timestamp + samplePos; // add the sample position to the buffer timestamp
-
-        diskWriteLock.enter();
-
-        fwrite(&eventTimestamp,					// ptr
-               8,   							// size of each element
-               1, 		  						// count
-               eventChannel->file);   			// ptr to FILE object
-
-        fwrite(&samplePos,							// ptr
-               2,   							// size of each element
-               1, 		  						// count
-               eventChannel->file);   			// ptr to FILE object
-
-        // write 1st four bytes of event (type, nodeId, eventId, eventChannel)
-        fwrite(dataptr, 1, 4, eventChannel->file);
-
-        // write recording number
-        fwrite(&recordingNumber,                     // ptr
-               2,                               // size of each element
-               1,                               // count
-               eventChannel->file);             // ptr to FILE object
-
-        diskWriteLock.exit();
-    }
-
-}
-
-void RecordNode::handleEvent(int eventType, MidiMessage& event, int samplePosition)
-{
-    if (eventType == TTL)
-    {
-        writeEventBuffer(event, samplePosition);
-    }
-    else if (eventType == TIMESTAMP)
-    {
-        const uint8* dataptr = event.getRawData();
-
-        // // double-check buffer contents:s
-        // std::cout << (int) *(dataptr + 11) << " " <<
-        //             (int) *(dataptr + 10) << " " <<
-        //             (int) *(dataptr + 9) << " " <<
-        //             (int) *(dataptr + 8) << " " <<
-        //             (int) *(dataptr + 7) << " " <<
-        //             (int) *(dataptr + 6) << " " <<
-        //             (int) *(dataptr + 5) << " " <<
-        //             (int) *(dataptr + 4) << std::endl;
-
-        memcpy(&timestamp, dataptr + 4, 8); // remember to skip first four bytes
-    }
-
-}
-
-void RecordNode::process(AudioSampleBuffer& buffer,
-                         MidiBuffer& events,
-                         int& nSamples)
-{
-
-    // TERMINOLOGY:
-    // buffer -- incoming data stored in AudioSampleBuffer (nSamples long)
-    // block -- 1024-sample sequence for disk writing (BLOCK_LENGTH long)
-    // samplesWritten -- number of samples written from the current buffer
-    // blockIndex -- index within the current block (used outside this function)
-    // numSamplesToWrite -- number of unwritten samples from the buffer
-
-    // CONSTRAINTS:
-    // samplesWritten must equal nSamples by the end of the process() method
-
-    if (isRecording && allFilesOpened)
-    {
-
-        // FIRST: cycle through events -- extract the TTLs and the timestamps
-        checkForEvents(events);
-
-        // SECOND: cycle through buffer channels
-        int samplesWritten = 0;
-
-        if (channelPointers.size() > 0)
-        {
-
-            while (samplesWritten < nSamples) // there are still unwritten samples in the buffer
-            {
-
-                int numSamplesToWrite = nSamples - samplesWritten; // samples remaining in the buffer
-
-                if (blockIndex + numSamplesToWrite < BLOCK_LENGTH) // we still have space in this block
-                {
-
-                    for (int i = 0; i < buffer.getNumChannels(); i++)
-                    {
-
-                        if (channelPointers[i]->getRecordState())
-                        {
-                            // write buffer to disk!
-                            writeContinuousBuffer(buffer.getReadPointer(i,samplesWritten),
-                                                  numSamplesToWrite,
-                                                  i);
-
-                        }
-                    }
-
-                    // update our variables
-                    samplesWritten += numSamplesToWrite;
-                    timestamp += numSamplesToWrite;
-                    blockIndex += numSamplesToWrite;
-
-                }
-                else // there's not enough space left in this block for all remaining samples
-                {
-
-                    numSamplesToWrite = BLOCK_LENGTH - blockIndex;
-
-                    for (int i = 0; i < buffer.getNumChannels(); i++)
-                    {
-
-                        if (channelPointers[i]->getRecordState())
-                        {
-                            // write buffer to disk!
-                            writeContinuousBuffer(buffer.getReadPointer(i,samplesWritten),
-                                                  numSamplesToWrite,
-                                                  i);
-
-                            //std::cout << "Record channel " << i << std::endl;
-                        }
-                    }
-
-                    // update our variables
-                    samplesWritten += numSamplesToWrite;
-                    timestamp += numSamplesToWrite;
-                    blockIndex = 0; // back to the beginning of the block
-
-                }
-            }
-        }
-
-        //  std::cout << nSamples << " " << samplesWritten << " " << blockIndex << std::endl;
-
-        return;
-
-    }
-
-    // this is intended to prevent parameter changes from closing files
-    // before recording stops
-    if (signalFilesShouldClose)
-    {
-        closeAllFiles();
-        signalFilesShouldClose = false;
-    }
-
-}
diff --git a/Source/Processors/RecordNode/EngineConfigWindow.cpp b/Source/Processors/RecordNode/EngineConfigWindow.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d93b6428fc586dd454d05808e3e9ef824c7936e3
--- /dev/null
+++ b/Source/Processors/RecordNode/EngineConfigWindow.cpp
@@ -0,0 +1,189 @@
+/*
+ ------------------------------------------------------------------
+
+ This file is part of the Open Ephys GUI
+ Copyright (C) 2014 Florian Franzen
+
+ ------------------------------------------------------------------
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+#include "EngineConfigWindow.h"
+
+EngineParameterComponent::EngineParameterComponent(EngineParameter &param)
+	: Component(param.name), type(param.type), parameter(param)
+{
+	if (param.type == EngineParameter::BOOL)
+	{
+		ToggleButton* but = new ToggleButton();
+		but->setToggleState(param.boolParam.value,dontSendNotification);
+		but->setBounds(120,0,20,20);
+		addAndMakeVisible(but);
+		control = but;
+	}
+	else
+	{
+		Label* lab = new Label();
+		lab->setFont(Font("Small Text",10,Font::plain));
+		switch (param.type)
+		{
+		case EngineParameter::INT:
+			lab->setText(String(param.intParam.value),dontSendNotification);
+			lab->setBounds(120,0,50,20);
+			break;
+		case EngineParameter::FLOAT:
+			lab->setText(String(param.floatParam.value),dontSendNotification);
+			lab->setBounds(120,0,50,20);
+			break;
+		case EngineParameter::STR:
+			lab->setText(String(param.strParam.value),dontSendNotification);
+			lab->setBounds(120,0,150,20);
+		}
+		lab->setEditable(true);
+		lab->setColour(Label::ColourIds::backgroundColourId,Colours::lightgrey);
+		lab->setColour(Label::ColourIds::outlineColourId,Colours::black);
+		lab->addListener(this);
+		addAndMakeVisible(lab);
+		control = lab;
+	}
+}
+
+EngineParameterComponent::~EngineParameterComponent()
+{
+}
+
+void EngineParameterComponent::paint(Graphics& g)
+{
+	g.setColour(Colours::black);
+	g.setFont(13);
+	g.drawText(parameter.name+":",0,0,100,30,Justification::left,false);
+}
+
+void EngineParameterComponent::labelTextChanged(Label *l)
+{
+	if (parameter.type == EngineParameter::INT)
+	{
+		int value = l->getText().getIntValue();
+		if (value < parameter.intParam.min)
+			value = parameter.intParam.min;
+		if (value > parameter.intParam.max)
+			value = parameter.intParam.max;
+		l->setText(String(value),dontSendNotification);
+	}
+	else if (parameter.type == EngineParameter::FLOAT)
+	{
+		float value = l->getText().getFloatValue();
+		if (value < parameter.floatParam.min)
+			value = parameter.floatParam.min;
+		if (value > parameter.floatParam.max)
+			value = parameter.floatParam.max;
+		l->setText(String(value),dontSendNotification);
+	}
+}
+
+void EngineParameterComponent::saveValue()
+{
+	switch (parameter.type)
+	{
+	case EngineParameter::BOOL:
+		parameter.boolParam.value = ((ToggleButton*)control.get())->getToggleState();
+		break;
+	case EngineParameter::INT:
+		parameter.intParam.value = ((Label*)control.get())->getText().getIntValue();
+		if (parameter.intParam.value < parameter.intParam.min)
+			parameter.intParam.value = parameter.intParam.min;
+		if (parameter.intParam.value > parameter.intParam.max)
+			parameter.intParam.value = parameter.intParam.max;
+		break;
+	case EngineParameter::FLOAT:
+		parameter.floatParam.value = ((Label*)control.get())->getText().getFloatValue();
+		if (parameter.floatParam.value < parameter.floatParam.min)
+			parameter.floatParam.value = parameter.floatParam.min;
+		if (parameter.floatParam.value > parameter.floatParam.max)
+			parameter.floatParam.value = parameter.floatParam.max;
+		break;
+	case EngineParameter::STR:
+		parameter.strParam.value = ((Label*)control.get())->getText();
+		break;
+	}
+}
+
+EngineConfigComponent::EngineConfigComponent(RecordEngineManager* man, int height)
+	:  Component(man->getID())
+{
+	bool hasString = false;	
+	setName(man->getName()+" Recording Configuration");
+	
+	for (int i = 0; i < man->getNumParameters(); i++)
+	{
+		EngineParameterComponent* par = new EngineParameterComponent(man->getParameter(i));
+		if (man->getParameter(i).type == EngineParameter::STR)
+			hasString=true;
+		par->setBounds(10,10+40*i,300,30);
+		addAndMakeVisible(par);
+		parameters.add(par);
+	}
+	if (hasString)
+			this->setSize(300,height);
+	else
+		this->setSize(200,height);
+}
+
+EngineConfigComponent::~EngineConfigComponent()
+{
+}
+
+void EngineConfigComponent::saveParameters()
+{
+	for (int i=0; i < parameters.size(); i++)
+		parameters[i]->saveValue();
+}
+
+void EngineConfigComponent::paint(Graphics& g)
+{
+	g.setColour(Colours::darkgrey);
+	g.fillAll();
+}
+
+EngineConfigWindow::EngineConfigWindow(RecordEngineManager* man)
+	: DocumentWindow("RecordEngine Configuration", Colours::red,
+	DocumentWindow::closeButton), manager(man)
+{
+	int height = man->getNumParameters() * 50;
+	if (height == 0) 
+		height = 10;
+	centreWithSize(200,height);
+	setUsingNativeTitleBar(true);
+	setResizable(false,false);
+	setName(man->getName()+" recording configuration");
+
+	ui = new EngineConfigComponent(man,height);
+	setContentOwned(ui,true);
+}
+
+EngineConfigWindow::~EngineConfigWindow()
+{
+}
+
+void EngineConfigWindow::closeButtonPressed()
+{
+	manager->toggleConfigWindow();
+}
+
+void EngineConfigWindow::saveParameters()
+{
+	ui->saveParameters();
+}
\ No newline at end of file
diff --git a/Source/Processors/RecordNode/EngineConfigWindow.h b/Source/Processors/RecordNode/EngineConfigWindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..d45e062f094da6ac28a51b6f1fbc0b0270cc32c8
--- /dev/null
+++ b/Source/Processors/RecordNode/EngineConfigWindow.h
@@ -0,0 +1,81 @@
+/*
+ ------------------------------------------------------------------
+
+ This file is part of the Open Ephys GUI
+ Copyright (C) 2014 Florian Franzen
+
+ ------------------------------------------------------------------
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+#ifndef ENGINECONFIGWINDOW_H_INCLUDED
+#define ENGINECONFIGWINDOW_H_INCLUDED
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "RecordEngine.h"
+
+class EngineParameterComponent : public Component,
+	public Label::Listener
+{
+public:
+	EngineParameterComponent(EngineParameter& param);
+	~EngineParameterComponent();
+
+	void paint(Graphics& g);
+	void labelTextChanged(Label* lab);
+
+	void saveValue();
+
+private:
+	ScopedPointer<Component> control;
+	EngineParameter::EngineParameterType type;
+	EngineParameter& parameter;
+	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EngineParameterComponent);
+};
+
+class EngineConfigComponent : public Component
+{
+public:
+	EngineConfigComponent(RecordEngineManager *man, int height);
+	~EngineConfigComponent();
+	void paint(Graphics& g);
+	void saveParameters();
+
+private:
+	OwnedArray<EngineParameterComponent> parameters;
+	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EngineConfigComponent);
+};
+
+class EngineConfigWindow : public DocumentWindow
+{
+public:
+	EngineConfigWindow(RecordEngineManager* man);
+    ~EngineConfigWindow();
+	void saveParameters();
+
+private:
+	RecordEngineManager* manager;
+    void closeButtonPressed();
+	ScopedPointer<EngineConfigComponent> ui;
+	
+
+	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EngineConfigWindow);
+
+};
+
+
+
+#endif  // ENGINECONFIGWINDOW_H_INCLUDED
diff --git a/Source/Processors/RecordNode/HDF5FileFormat.cpp b/Source/Processors/RecordNode/HDF5FileFormat.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..62a7466c5079695a0dd4ffd445d506e9ed1eec26
--- /dev/null
+++ b/Source/Processors/RecordNode/HDF5FileFormat.cpp
@@ -0,0 +1,903 @@
+/*
+ ------------------------------------------------------------------
+
+ This file is part of the Open Ephys GUI
+ Copyright (C) 2014 Florian Franzen
+
+ ------------------------------------------------------------------
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+#include <H5Cpp.h>
+#include "HDF5FileFormat.h"
+
+#ifndef CHUNK_XSIZE
+#define CHUNK_XSIZE 256
+#endif
+
+#ifndef EVENT_CHUNK_SIZE
+#define EVENT_CHUNK_SIZE 8
+#endif
+
+#ifndef SPIKE_CHUNK_XSIZE
+#define SPIKE_CHUNK_XSIZE 8
+#endif
+
+#ifndef SPIKE_CHUNK_YSIZE
+#define SPIKE_CHUNK_YSIZE 40
+#endif
+
+#define MAX_TRANSFORM_SIZE 512
+
+#define MAX_STR_SIZE 256
+
+#define PROCESS_ERROR std::cerr << error.getCDetailMsg() << std::endl; return -1
+#define CHECK_ERROR(x) if (x) std::cerr << "Error at HDFRecording " << __LINE__ << std::endl;
+
+using namespace H5;
+
+//HDF5FileBase
+
+HDF5FileBase::HDF5FileBase() : readyToOpen(false), opened(false)
+{
+    Exception::dontPrint();
+};
+
+HDF5FileBase::~HDF5FileBase()
+{
+    close();
+}
+
+bool HDF5FileBase::isOpen() const
+{
+    return opened;
+}
+
+int HDF5FileBase::open()
+{
+    if (!readyToOpen) return -1;
+    if (File(getFileName()).existsAsFile())
+        return open(false);
+    else
+        return open(true);
+
+}
+
+int HDF5FileBase::open(bool newfile)
+{
+    int accFlags,ret=0;
+
+    if (opened) return -1;
+
+    try
+    {
+
+        if (newfile) accFlags = H5F_ACC_TRUNC;
+        else accFlags = H5F_ACC_RDWR;
+        file = new H5File(getFileName().toUTF8(),accFlags);
+        opened = true;
+        if (newfile)
+        {
+            ret = createFileStructure();
+        }
+
+        if (ret)
+        {
+            file = nullptr;
+            opened = false;
+            std::cerr << "Error creating file structure" << std::endl;
+        }
+
+
+        return ret;
+    }
+    catch (FileIException error)
+    {
+        PROCESS_ERROR;
+    }
+}
+
+void HDF5FileBase::close()
+{
+    file = nullptr;
+    opened = false;
+}
+
+int HDF5FileBase::setAttribute(DataTypes type, void* data, String path, String name)
+{
+    Group loc;
+    Attribute attr;
+    DataType H5type;
+    DataType origType;
+
+    if (!opened) return -1;
+    try
+    {
+        loc = file->openGroup(path.toUTF8());
+
+        H5type = getH5Type(type);
+        origType = getNativeType(type);
+
+        if (loc.attrExists(name.toUTF8()))
+        {
+            attr = loc.openAttribute(name.toUTF8());
+        }
+        else
+        {
+            DataSpace attr_dataspace(H5S_SCALAR);
+            attr = loc.createAttribute(name.toUTF8(),H5type,attr_dataspace);
+        }
+
+        attr.write(origType,data);
+
+    }
+    catch (GroupIException error)
+    {
+        PROCESS_ERROR;
+    }
+    catch (AttributeIException error)
+    {
+        PROCESS_ERROR;
+    }
+
+    return 0;
+}
+
+int HDF5FileBase::setAttributeStr(String value, String path, String name)
+{
+    Group loc;
+    Attribute attr;
+
+    if (!opened) return -1;
+
+    StrType type(PredType::C_S1, value.length());
+    try
+    {
+        loc = file->openGroup(path.toUTF8());
+
+        if (loc.attrExists(name.toUTF8()))
+        {
+            //attr = loc.openAttribute(name.toUTF8());
+            return -1; //string attributes cannot change size easily, better not allow overwritting.
+        }
+        else
+        {
+            DataSpace attr_dataspace(H5S_SCALAR);
+            attr = loc.createAttribute(name.toUTF8(), type, attr_dataspace);
+        }
+        attr.write(type,value.toUTF8());
+
+    }
+    catch (GroupIException error)
+    {
+        PROCESS_ERROR;
+    }
+    catch (AttributeIException error)
+    {
+        PROCESS_ERROR;
+    }
+    catch (FileIException error)
+    {
+        PROCESS_ERROR;
+    }
+
+    return 0;
+}
+
+int HDF5FileBase::createGroup(String path)
+{
+    if (!opened) return -1;
+    try
+    {
+        file->createGroup(path.toUTF8());
+    }
+    catch (FileIException error)
+    {
+        PROCESS_ERROR;
+    }
+    catch (GroupIException error)
+    {
+        PROCESS_ERROR;
+    }
+    return 0;
+}
+
+HDF5RecordingData* HDF5FileBase::getDataSet(String path)
+{
+    ScopedPointer<DataSet> data;
+
+    if (!opened) return nullptr;
+
+    try
+    {
+        data = new DataSet(file->openDataSet(path.toUTF8()));
+        return new HDF5RecordingData(data.release());
+    }
+    catch (DataSetIException error)
+    {
+        error.printError();
+        return nullptr;
+    }
+    catch (FileIException error)
+    {
+        error.printError();
+        return nullptr;
+    }
+    catch (DataSpaceIException error)
+    {
+        error.printError();
+        return nullptr;
+    }
+}
+
+HDF5RecordingData* HDF5FileBase::createDataSet(DataTypes type, int sizeX, int chunkX, String path)
+{
+    int chunks[3] = {chunkX, 0, 0};
+    return createDataSet(type,1,&sizeX,chunks,path);
+}
+
+HDF5RecordingData* HDF5FileBase::createDataSet(DataTypes type, int sizeX, int sizeY, int chunkX, String path)
+{
+    int size[2];
+    int chunks[3] = {chunkX, 0, 0};
+    size[0] = sizeX;
+    size[1] = sizeY;
+    return createDataSet(type,2,size,chunks,path);
+}
+
+HDF5RecordingData* HDF5FileBase::createDataSet(DataTypes type, int sizeX, int sizeY, int sizeZ, int chunkX, String path)
+{
+    int size[3];
+    int chunks[3] = {chunkX, 0, 0};
+    size[0] = sizeX;
+    size[1] = sizeY;
+    size[2] = sizeZ;
+    return createDataSet(type,2,size,chunks,path);
+}
+
+HDF5RecordingData* HDF5FileBase::createDataSet(DataTypes type, int sizeX, int sizeY, int sizeZ, int chunkX, int chunkY, String path)
+{
+    int size[3];
+    int chunks[3] = {chunkX, chunkY, 0};
+    size[0] = sizeX;
+    size[1] = sizeY;
+    size[2] = sizeZ;
+    return createDataSet(type,3,size,chunks,path);
+}
+
+HDF5RecordingData* HDF5FileBase::createDataSet(DataTypes type, int dimension, int* size, int* chunking, String path)
+{
+    ScopedPointer<DataSet> data;
+    DSetCreatPropList prop;
+    if (!opened) return nullptr;
+
+    //Right now this classes don't support datasets with rank > 3.
+    //If it's needed in the future we can extend them to be of generic rank
+    if ((dimension > 3) || (dimension < 1)) return nullptr;
+
+    DataType H5type = getH5Type(type);
+
+    hsize_t dims[3], chunk_dims[3], max_dims[3];
+
+    for (int i=0; i < dimension; i++)
+    {
+        dims[i] = size[i];
+        if (chunking[i] > 0)
+        {
+            chunk_dims[i] = chunking[i];
+            max_dims[i] = H5S_UNLIMITED;
+        }
+        else
+        {
+            chunk_dims[i] = size[i];
+            max_dims[i] = size[i];
+        }
+    }
+
+    try
+    {
+        DataSpace dSpace(dimension,dims,max_dims);
+        prop.setChunk(dimension,chunk_dims);
+
+        data = new DataSet(file->createDataSet(path.toUTF8(),H5type,dSpace,prop));
+        return new HDF5RecordingData(data.release());
+    }
+    catch (DataSetIException error)
+    {
+        error.printError();
+        return nullptr;
+    }
+    catch (FileIException error)
+    {
+        error.printError();
+        return nullptr;
+    }
+    catch (DataSpaceIException error)
+    {
+        error.printError();
+        return nullptr;
+    }
+
+
+}
+
+H5::DataType HDF5FileBase::getNativeType(DataTypes type)
+{
+    switch (type)
+    {
+        case I8:
+            return PredType::NATIVE_INT8;
+            break;
+        case I16:
+            return PredType::NATIVE_INT16;
+            break;
+        case I32:
+            return PredType::NATIVE_INT32;
+            break;
+        case I64:
+            return PredType::NATIVE_INT64;
+            break;
+        case U8:
+            return PredType::NATIVE_UINT8;
+            break;
+        case U16:
+            return PredType::NATIVE_UINT16;
+            break;
+        case U32:
+            return PredType::NATIVE_UINT32;
+            break;
+        case U64:
+            return PredType::NATIVE_UINT64;
+            break;
+        case F32:
+            return PredType::NATIVE_FLOAT;
+            break;
+		case STR:
+			return StrType(PredType::C_S1,MAX_STR_SIZE);
+			break;
+    }
+    return PredType::NATIVE_INT32;
+}
+
+H5::DataType HDF5FileBase::getH5Type(DataTypes type)
+{
+    switch (type)
+    {
+        case I8:
+            return PredType::STD_I8LE;
+            break;
+        case I16:
+            return PredType::STD_I16LE;
+            break;
+        case I32:
+            return PredType::STD_I32LE;
+            break;
+        case I64:
+            return PredType::STD_I64LE;
+            break;
+        case U8:
+            return PredType::STD_U8LE;
+            break;
+        case U16:
+            return PredType::STD_U16LE;
+            break;
+        case U32:
+            return PredType::STD_U32LE;
+            break;
+        case U64:
+            return PredType::STD_U64LE;
+            break;
+        case F32:
+            return PredType::IEEE_F32LE;
+            break;
+		case STR:
+			return StrType(PredType::C_S1,MAX_STR_SIZE);
+			break;
+    }
+    return PredType::STD_I32LE;
+}
+
+HDF5RecordingData::HDF5RecordingData(DataSet* data)
+{
+    DataSpace dSpace;
+    DSetCreatPropList prop;
+    ScopedPointer<DataSet> dataSet = data;
+    hsize_t dims[3], chunk[3];
+
+    dSpace = dataSet->getSpace();
+    prop = dataSet->getCreatePlist();
+
+    dimension = dSpace.getSimpleExtentDims(dims);
+    prop.getChunk(dimension,chunk);
+
+    this->size[0] = dims[0];
+    if (dimension > 1)
+        this->size[1] = dims[1];
+    else
+        this->size[1] = 1;
+    if (dimension > 1)
+        this->size[2] = dims[2];
+    else
+        this->size[2] = 1;
+
+    this->xChunkSize = chunk[0];
+    this->xPos = dims[0];
+    this->dSet = dataSet;
+    this->rowXPos = 0;
+    this->rowDataSize = 0;
+}
+
+HDF5RecordingData::~HDF5RecordingData()
+{
+}
+int HDF5RecordingData::writeDataBlock(int xDataSize, HDF5FileBase::DataTypes type, void* data)
+{
+    return writeDataBlock(xDataSize,size[1],type,data);
+}
+
+int HDF5RecordingData::writeDataBlock(int xDataSize, int yDataSize, HDF5FileBase::DataTypes type, void* data)
+{
+    hsize_t dim[3],offset[3];
+    DataSpace fSpace;
+    DataType nativeType;
+
+    dim[2] = size[2];
+    //only modify y size if new required size is larger than what we had.
+    if (yDataSize > size[1])
+        dim[1] = yDataSize;
+    else
+        dim[1] = size[1];
+    dim[0] = xPos + xDataSize;
+    try
+    {
+        //First be sure that we have enough space
+        dSet->extend(dim);
+
+        fSpace = dSet->getSpace();
+        fSpace.getSimpleExtentDims(dim);
+        size[0]=dim[0];
+        if (dimension > 1)
+            size[1]=dim[1];
+
+        //Create memory space
+        dim[0]=xDataSize;
+        dim[1]=yDataSize;
+        dim[2] = size[2];
+
+        DataSpace mSpace(dimension,dim);
+        //select where to write
+        offset[0]=xPos;
+        offset[1]=0;
+        offset[2]=0;
+		
+        fSpace.selectHyperslab(H5S_SELECT_SET, dim, offset);
+
+        nativeType = HDF5FileBase::getNativeType(type);
+
+        dSet->write(data,nativeType,mSpace,fSpace);
+        xPos += xDataSize;
+    }
+    catch (DataSetIException error)
+    {
+        PROCESS_ERROR;
+    }
+    catch (DataSpaceIException error)
+    {
+        PROCESS_ERROR;
+    }
+    return 0;
+}
+
+int HDF5RecordingData::prepareDataBlock(int xDataSize)
+{
+    hsize_t dim[3];
+    DataSpace fSpace;
+    if (dimension > 2) return -4; //We're not going to write rows in datasets bigger than 2d.
+
+    dim[2] = size[2];
+    dim[1] = size[1];
+    dim[0] = xPos + xDataSize;
+    try
+    {
+        dSet->extend(dim);
+
+        fSpace = dSet->getSpace();
+        fSpace.getSimpleExtentDims(dim);
+        size[0]=dim[0];
+    }
+    catch (DataSetIException error)
+    {
+        PROCESS_ERROR;
+    }
+    rowXPos = xPos;
+    rowDataSize = xDataSize;
+    xPos += xDataSize;
+    return 0;
+}
+
+int HDF5RecordingData::writeDataRow(int yPos, int xDataSize, HDF5FileBase::DataTypes type, void* data)
+{
+    hsize_t dim[2],offset[2];
+    DataSpace fSpace;
+    DataType nativeType;
+    if (dimension > 2) return -4; //We're not going to write rows in datasets bigger than 2d.
+    if (xDataSize != rowDataSize) return -2;
+    if ((yPos < 0) || (yPos >= size[1])) return -3;
+
+    try
+    {
+        dim[0] = xDataSize;
+        dim[1] = 1;
+        DataSpace mSpace(dimension,dim);
+
+        fSpace = dSet->getSpace();
+        offset[0] = rowXPos;
+        offset[1] = yPos;
+        fSpace.selectHyperslab(H5S_SELECT_SET, dim, offset);
+
+        nativeType = HDF5FileBase::getNativeType(type);
+
+
+        dSet->write(data,nativeType,mSpace,fSpace);
+    }
+    catch (DataSetIException error)
+    {
+        PROCESS_ERROR;
+    }
+    catch (DataSpaceIException error)
+    {
+        PROCESS_ERROR;
+    }
+    catch (FileIException error)
+    {
+        PROCESS_ERROR;
+    }
+    return 0;
+}
+
+//KWD File
+
+KWDFile::KWDFile(int processorNumber, String basename) : HDF5FileBase()
+{
+    initFile(processorNumber, basename);
+}
+
+KWDFile::KWDFile() : HDF5FileBase()
+{
+}
+
+KWDFile::~KWDFile() {}
+
+String KWDFile::getFileName()
+{
+    return filename;
+}
+
+void KWDFile::initFile(int processorNumber, String basename)
+{
+    if (isOpen()) return;
+    filename = basename + "_" + String(processorNumber) + ".raw.kwd";
+    readyToOpen=true;
+}
+
+void KWDFile::startNewRecording(int recordingNumber, int nChannels, HDF5RecordingInfo* info)
+{
+    this->recordingNumber = recordingNumber;
+    this->nChannels = nChannels;
+
+    String recordPath = String("/recordings/")+String(recordingNumber);
+    CHECK_ERROR(createGroup(recordPath));
+    CHECK_ERROR(setAttributeStr(info->name,recordPath,String("name")));
+    CHECK_ERROR(setAttribute(U64,&(info->start_time),recordPath,String("start_time")));
+    //	CHECK_ERROR(setAttribute(U32,&(info->start_sample),recordPath,String("start_sample")));
+    CHECK_ERROR(setAttribute(F32,&(info->sample_rate),recordPath,String("sample_rate")));
+    CHECK_ERROR(setAttribute(U32,&(info->bit_depth),recordPath,String("bit_depth")));
+    recdata = createDataSet(I16,0,nChannels,CHUNK_XSIZE,recordPath+"/data");
+    if (!recdata.get())
+        std::cerr << "Error creating data set" << std::endl;
+    curChan = nChannels;
+}
+
+void KWDFile::stopRecording()
+{
+    //ScopedPointer does the deletion and destructors the closings
+    recdata = nullptr;
+}
+
+int KWDFile::createFileStructure()
+{
+    const uint16 ver = 2;
+    if (createGroup("/recordings")) return -1;
+    if (setAttribute(U16,(void*)&ver,"/","kwik_version")) return -1;
+    return 0;
+}
+
+void KWDFile::writeBlockData(int16* data, int nSamples)
+{
+    CHECK_ERROR(recdata->writeDataBlock(nSamples,I16,data));
+}
+
+void KWDFile::writeRowData(int16* data, int nSamples)
+{
+    if (curChan >= nChannels)
+    {
+        CHECK_ERROR(recdata->prepareDataBlock(nSamples));
+        curChan=0;
+    }
+    CHECK_ERROR(recdata->writeDataRow(curChan,nSamples,I16,data));
+    curChan++;
+}
+
+//KWIK File
+
+KWIKFile::KWIKFile(String basename) : HDF5FileBase()
+{
+    initFile(basename);
+}
+
+KWIKFile::KWIKFile() : HDF5FileBase()
+{
+
+}
+
+KWIKFile::~KWIKFile() {}
+
+String KWIKFile::getFileName()
+{
+    return filename;
+}
+
+void KWIKFile::initFile(String basename)
+{
+    if (isOpen()) return;
+    filename = basename + ".kwik";
+    readyToOpen=true;
+}
+
+int KWIKFile::createFileStructure()
+{
+    const uint16 ver = 2;
+    if (createGroup("/recordings")) return -1;
+    if (createGroup("/event_types")) return -1;
+    for (int i=0; i < eventNames.size(); i++)
+    {
+        ScopedPointer<HDF5RecordingData> dSet;
+        String path = "/event_types/" + eventNames[i];
+        if (createGroup(path)) return -1;
+        path += "/events";
+        if (createGroup(path)) return -1;
+        dSet = createDataSet(U64,0,EVENT_CHUNK_SIZE,path + "/time_samples");
+        if (!dSet) return -1;
+        dSet = createDataSet(U16,0,EVENT_CHUNK_SIZE,path + "/recording");
+        if (!dSet) return -1;
+        path += "/user_data";
+        if (createGroup(path)) return -1;
+        dSet = createDataSet(U8,0,EVENT_CHUNK_SIZE,path + "/eventID");
+        if (!dSet) return -1;
+        dSet = createDataSet(U8,0,EVENT_CHUNK_SIZE,path + "/nodeID");
+        if (!dSet) return -1;
+		dSet = createDataSet(eventTypes[i],0,EVENT_CHUNK_SIZE,path + "/" + eventDataNames[i]);
+        if (!dSet) return -1;
+    }
+    if (setAttribute(U16,(void*)&ver,"/","kwik_version")) return -1;
+    return 0;
+}
+
+void KWIKFile::startNewRecording(int recordingNumber, HDF5RecordingInfo* info)
+{
+    this->recordingNumber = recordingNumber;
+    kwdIndex=0;
+    String recordPath = String("/recordings/")+String(recordingNumber);
+    CHECK_ERROR(createGroup(recordPath));
+    CHECK_ERROR(setAttributeStr(info->name,recordPath,String("name")));
+    CHECK_ERROR(setAttribute(U64,&(info->start_time),recordPath,String("start_time")));
+    //	CHECK_ERROR(setAttribute(U32,&(info->start_sample),recordPath,String("start_sample")));
+    CHECK_ERROR(setAttribute(F32,&(info->sample_rate),recordPath,String("sample_rate")));
+    CHECK_ERROR(setAttribute(U32,&(info->bit_depth),recordPath,String("bit_depth")));
+    CHECK_ERROR(createGroup(recordPath + "/raw"));
+    CHECK_ERROR(createGroup(recordPath + "/raw/hdf5_paths"));
+
+    for (int i = 0; i < eventNames.size(); i++)
+    {
+        HDF5RecordingData* dSet;
+        String path = "/event_types/" + eventNames[i] + "/events";
+        dSet = getDataSet(path + "/time_samples");
+        if (!dSet)
+            std::cerr << "Error loading event timestamps dataset for type " << i << std::endl;
+        timeStamps.add(dSet);
+        dSet = getDataSet(path + "/recording");
+        if (!dSet)
+            std::cerr << "Error loading event recordings dataset for type " << i << std::endl;
+        recordings.add(dSet);
+        dSet = getDataSet(path + "/user_data/eventID");
+        if (!dSet)
+            std::cerr << "Error loading event ID dataset for type " << i << std::endl;
+        eventID.add(dSet);
+        dSet = getDataSet(path + "/user_data/nodeID");
+        if (!dSet)
+            std::cerr << "Error loading event node ID dataset for type " << i << std::endl;
+        nodeID.add(dSet);
+		dSet = getDataSet(path + "/user_data/" + eventDataNames[i]);
+        if (!dSet)
+            std::cerr << "Error loading event channel dataset for type " << i << std::endl;
+        eventData.add(dSet);
+    }
+}
+
+void KWIKFile::stopRecording()
+{
+    timeStamps.clear();
+    recordings.clear();
+    eventID.clear();
+	nodeID.clear();
+	eventData.clear();
+}
+
+void KWIKFile::writeEvent(int type, uint8 id, uint8 processor, void* data, uint64 timestamp)
+{
+    if (type > eventNames.size() || type < 0)
+    {
+        std::cerr << "HDF5::writeEvent Invalid event type " << type << std::endl;
+        return;
+    }
+    CHECK_ERROR(timeStamps[type]->writeDataBlock(1,U64,&timestamp));
+    CHECK_ERROR(recordings[type]->writeDataBlock(1,I32,&recordingNumber));
+    CHECK_ERROR(eventID[type]->writeDataBlock(1,U8,&id));
+    CHECK_ERROR(nodeID[type]->writeDataBlock(1,U8,&processor));
+	CHECK_ERROR(eventData[type]->writeDataBlock(1,eventTypes[type],data));
+}
+
+void KWIKFile::addKwdFile(String filename)
+{
+    CHECK_ERROR(setAttributeStr(filename + "/recordings/" + String(recordingNumber),"/recordings/" + String(recordingNumber) +
+                                "/raw/hdf5_paths",String(kwdIndex)));
+    kwdIndex++;
+}
+
+void KWIKFile::addEventType(String name, DataTypes type, String dataName)
+{
+    eventNames.add(name);
+	eventTypes.add(type);
+	eventDataNames.add(dataName);
+}
+
+//KWX File
+
+KWXFile::KWXFile(String basename) : HDF5FileBase()
+{
+    initFile(basename);
+    numElectrodes=0;
+    transformVector = new int16[MAX_TRANSFORM_SIZE];
+}
+
+KWXFile::KWXFile() : HDF5FileBase()
+{
+    numElectrodes=0;
+    transformVector = new int16[MAX_TRANSFORM_SIZE];
+}
+
+KWXFile::~KWXFile()
+{
+    delete transformVector;
+}
+
+String KWXFile::getFileName()
+{
+    return filename;
+}
+
+void KWXFile::initFile(String basename)
+{
+    if (isOpen()) return;
+    filename = basename + ".kwx";
+    readyToOpen=true;
+}
+
+int KWXFile::createFileStructure()
+{
+    const uint16 ver = 2;
+    if (createGroup("/channel_groups")) return -1;
+    if (setAttribute(U16,(void*)&ver,"/","kwik_version")) return -1;
+    for (int i=0; i < channelArray.size(); i++)
+    {
+        int res = createChannelGroup(i);
+        if (res) return -1;
+    }
+    return 0;
+}
+
+void KWXFile::addChannelGroup(int nChannels)
+{
+    channelArray.add(nChannels);
+    numElectrodes++;
+}
+
+int KWXFile::createChannelGroup(int index)
+{
+    ScopedPointer<HDF5RecordingData> dSet;
+    int nChannels = channelArray[index];
+    String path("/channel_groups/"+String(index));
+    CHECK_ERROR(createGroup(path));
+    dSet = createDataSet(I16,0,0,nChannels,SPIKE_CHUNK_XSIZE,SPIKE_CHUNK_YSIZE,path+"/waveforms_filtered");
+    if (!dSet) return -1;
+    dSet = createDataSet(U64,0,SPIKE_CHUNK_XSIZE,path+"/time_samples");
+    if (!dSet) return -1;
+    dSet = createDataSet(U16,0,SPIKE_CHUNK_XSIZE,path+"/recordings");
+    if (!dSet) return -1;
+    return 0;
+}
+
+void KWXFile::startNewRecording(int recordingNumber)
+{
+    HDF5RecordingData* dSet;
+    String path;
+    this->recordingNumber = recordingNumber;
+
+    for (int i=0; i < channelArray.size(); i++)
+    {
+        path = "/channel_groups/"+String(i);
+        dSet=getDataSet(path+"/waveforms_filtered");
+        if (!dSet)
+            std::cerr << "Error loading spikes dataset for group " << i << std::endl;
+        spikeArray.add(dSet);
+        dSet=getDataSet(path+"/time_samples");
+        if (!dSet)
+            std::cerr << "Error loading spike timestamp dataset for group " << i << std::endl;
+        timeStamps.add(dSet);
+        dSet=getDataSet(path+"/recordings");
+        if (!dSet)
+            std::cerr << "Error loading spike recordings dataset for group " << i << std::endl;
+        recordingArray.add(dSet);
+    }
+}
+
+void KWXFile::stopRecording()
+{
+    spikeArray.clear();
+    timeStamps.clear();
+    recordingArray.clear();
+}
+
+void KWXFile::resetChannels()
+{
+    stopRecording(); //Just in case
+    channelArray.clear();
+}
+
+void KWXFile::writeSpike(int groupIndex, int nSamples, const uint16* data, uint64 timestamp)
+{
+    if ((groupIndex < 0) || (groupIndex >= numElectrodes))
+    {
+        std::cerr << "HDF5::writeSpike Electrode index out of bounds " << groupIndex << std::endl;
+        return;
+    }
+    int nChans= channelArray[groupIndex];
+    int16* dst=transformVector;
+
+    //Given the way we store spike data, we need to transpose it to store in
+    //N x NSAMPLES x NCHANNELS as well as convert from u16 to i16
+    for (int i = 0; i < nSamples; i++)
+    {
+        for (int j = 0; j < nChans; j++)
+        {
+            *(dst++) = *(data+j*nSamples+i)-32768;
+        }
+    }
+
+    CHECK_ERROR(spikeArray[groupIndex]->writeDataBlock(1,nSamples,I16,transformVector));
+    CHECK_ERROR(recordingArray[groupIndex]->writeDataBlock(1,I32,&recordingNumber));
+    CHECK_ERROR(timeStamps[groupIndex]->writeDataBlock(1,U64,&timestamp));
+}
diff --git a/Source/Processors/RecordNode/HDF5FileFormat.h b/Source/Processors/RecordNode/HDF5FileFormat.h
new file mode 100644
index 0000000000000000000000000000000000000000..1fc8e675fb5d9c5d9dae130ec4fc0317e5f14f86
--- /dev/null
+++ b/Source/Processors/RecordNode/HDF5FileFormat.h
@@ -0,0 +1,203 @@
+/*
+ ------------------------------------------------------------------
+
+ This file is part of the Open Ephys GUI
+ Copyright (C) 2014 Florian Franzen
+
+ ------------------------------------------------------------------
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+#ifndef HDF5FILEFORMAT_H_INCLUDED
+#define HDF5FILEFORMAT_H_INCLUDED
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+
+class HDF5RecordingData;
+namespace H5
+{
+class DataSet;
+class H5File;
+class DataType;
+}
+
+struct HDF5RecordingInfo
+{
+    String name;
+    int64 start_time;
+    uint32 start_sample;
+    float sample_rate;
+    uint32 bit_depth;
+};
+
+class HDF5FileBase
+{
+public:
+    HDF5FileBase();
+    virtual ~HDF5FileBase();
+
+    int open();
+    void close();
+    virtual String getFileName() = 0;
+    bool isOpen() const;
+    typedef enum DataTypes { U8, U16, U32, U64, I8, I16, I32, I64, F32, STR} DataTypes;
+
+    static H5::DataType getNativeType(DataTypes type);
+    static H5::DataType getH5Type(DataTypes type);
+
+protected:
+
+    virtual int createFileStructure() = 0;
+
+    int setAttribute(DataTypes type, void* data, String path, String name);
+    int setAttributeStr(String value, String path, String name);
+    int createGroup(String path);
+
+    HDF5RecordingData* getDataSet(String path);
+
+    //aliases for createDataSet
+    HDF5RecordingData* createDataSet(DataTypes type, int sizeX, int chunkX, String path);
+    HDF5RecordingData* createDataSet(DataTypes type, int sizeX, int sizeY, int chunkX, String path);
+    HDF5RecordingData* createDataSet(DataTypes type, int sizeX, int sizeY, int sizeZ, int chunkX, String path);
+    HDF5RecordingData* createDataSet(DataTypes type, int sizeX, int sizeY, int sizeZ, int chunkX, int chunkY, String path);
+
+    bool readyToOpen;
+
+private:
+    //create an extendable dataset
+    HDF5RecordingData* createDataSet(DataTypes type, int dimension, int* size, int* chunking, String path);
+    int open(bool newfile);
+    ScopedPointer<H5::H5File> file;
+    bool opened;
+
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(HDF5FileBase);
+};
+
+class HDF5RecordingData
+{
+public:
+    HDF5RecordingData(H5::DataSet* data);
+    ~HDF5RecordingData();
+
+    int writeDataBlock(int xDataSize, HDF5FileBase::DataTypes type, void* data);
+    int writeDataBlock(int xDataSize, int yDataSize, HDF5FileBase::DataTypes type, void* data);
+
+    int prepareDataBlock(int xDataSize);
+    int writeDataRow(int yPos, int xDataSize, HDF5FileBase::DataTypes type, void* data);
+
+private:
+    int xPos;
+    int xChunkSize;
+    int size[3];
+    int dimension;
+    int rowXPos;
+    int rowDataSize;
+    ScopedPointer<H5::DataSet> dSet;
+
+	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(HDF5RecordingData);
+};
+
+class KWDFile : public HDF5FileBase
+{
+public:
+    KWDFile(int processorNumber, String basename);
+    KWDFile();
+    virtual ~KWDFile();
+    void initFile(int processorNumber, String basename);
+    void startNewRecording(int recordingNumber, int nChannels, HDF5RecordingInfo* info);
+    void stopRecording();
+    void writeBlockData(int16* data, int nSamples);
+    void writeRowData(int16* data, int nSamples);
+    String getFileName();
+
+protected:
+    int createFileStructure();
+
+private:
+    int recordingNumber;
+    int nChannels;
+    int curChan;
+    String filename;
+    ScopedPointer<HDF5RecordingData> recdata;
+
+	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(KWDFile);
+};
+
+class KWIKFile : public HDF5FileBase
+{
+public:
+    KWIKFile(String basename);
+    KWIKFile();
+    virtual ~KWIKFile();
+    void initFile(String basename);
+    void startNewRecording(int recordingNumber, HDF5RecordingInfo* info);
+    void stopRecording();
+    void writeEvent(int type, uint8 id, uint8 processor, void* data, uint64 timestamp);
+    void addKwdFile(String filename);
+    void addEventType(String name, DataTypes type, String dataName);
+    String getFileName();
+
+protected:
+    int createFileStructure();
+
+private:
+    int recordingNumber;
+    String filename;
+    OwnedArray<HDF5RecordingData> timeStamps;
+    OwnedArray<HDF5RecordingData> recordings;
+    OwnedArray<HDF5RecordingData> eventID;
+    OwnedArray<HDF5RecordingData> nodeID;
+    OwnedArray<HDF5RecordingData> eventData;
+    Array<String> eventNames;
+	Array<DataTypes> eventTypes;
+	Array<String> eventDataNames;
+    int kwdIndex;
+
+	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(KWIKFile);
+};
+
+class KWXFile : public HDF5FileBase
+{
+public:
+    KWXFile(String basename);
+    KWXFile();
+    virtual ~KWXFile();
+    void initFile(String basename);
+    void startNewRecording(int recordingNumber);
+    void stopRecording();
+    void addChannelGroup(int nChannels);
+    void resetChannels();
+    void writeSpike(int groupIndex, int nSamples, const uint16* data, uint64 timestamp);
+    String getFileName();
+
+protected:
+    int createFileStructure();
+
+private:
+    int createChannelGroup(int index);
+    int recordingNumber;
+    String filename;
+    OwnedArray<HDF5RecordingData> spikeArray;
+    OwnedArray<HDF5RecordingData> recordingArray;
+    OwnedArray<HDF5RecordingData> timeStamps;
+    Array<int> channelArray;
+    int numElectrodes;
+    int16* transformVector;
+
+	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(KWXFile);
+};
+
+#endif  // HDF5FILEFORMAT_H_INCLUDED
diff --git a/Source/Processors/RecordNode/HDF5Recording.cpp b/Source/Processors/RecordNode/HDF5Recording.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..31ad28329d580eeb6cdf83c24ed47717b1052b72
--- /dev/null
+++ b/Source/Processors/RecordNode/HDF5Recording.cpp
@@ -0,0 +1,184 @@
+/*
+ ------------------------------------------------------------------
+
+ This file is part of the Open Ephys GUI
+ Copyright (C) 2014 Florian Franzen
+
+ ------------------------------------------------------------------
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+#include "HDF5Recording.h"
+#define MAX_BUFFER_SIZE 10000
+
+HDF5Recording::HDF5Recording() : processorIndex(-1)
+{
+    timestamp = 0;
+    scaledBuffer = new float[MAX_BUFFER_SIZE];
+    intBuffer = new int16[MAX_BUFFER_SIZE];
+}
+
+HDF5Recording::~HDF5Recording()
+{
+    delete scaledBuffer;
+    delete intBuffer;
+}
+
+String HDF5Recording::getEngineID()
+{
+	return "KWIK";
+}
+
+void HDF5Recording::updateTimeStamp(int64 timestamp)
+{
+    this->timestamp = timestamp;
+}
+
+void HDF5Recording::registerProcessor(GenericProcessor* proc)
+{
+    HDF5RecordingInfo* info = new HDF5RecordingInfo();
+    info->sample_rate = proc->getSampleRate();
+    info->bit_depth = 16;
+    infoArray.add(info);
+    fileArray.add(new KWDFile());
+    activeChannelCount.add(0);
+    processorIndex++;
+}
+
+void HDF5Recording::resetChannels()
+{
+    processorIndex = -1;
+    fileArray.clear();
+    activeChannelCount.clear();
+    processorMap.clear();
+    infoArray.clear();
+    if (spikesFile)
+        spikesFile->resetChannels();
+}
+
+void HDF5Recording::addChannel(int index, Channel* chan)
+{
+    processorMap.add(processorIndex);
+}
+
+void HDF5Recording::openFiles(File rootFolder,  int experimentNumber, int recordingNumber)
+{
+    String basepath = rootFolder.getFullPathName() + rootFolder.separatorString + "experiment" + String(experimentNumber);
+    //KWIK file
+    mainFile->initFile(basepath);
+    mainFile->open();
+
+    //KWX file
+    spikesFile->initFile(basepath);
+    spikesFile->open();
+    spikesFile->startNewRecording(recordingNumber);
+
+    //Let's just put the first processor (usually the source node) on the KWIK for now
+    infoArray[0]->name = String("Open-Ephys Recording #") + String(recordingNumber);
+    infoArray[0]->start_time = timestamp;
+    infoArray[0]->start_sample = 0;
+    mainFile->startNewRecording(recordingNumber,infoArray[0]);
+
+    //KWD files
+    for (int i = 0; i < processorMap.size(); i++)
+    {
+        int index = processorMap[i];
+        if (getChannel(i)->getRecordState())
+        {
+            if (!fileArray[index]->isOpen())
+            {
+                fileArray[index]->initFile(getChannel(i)->nodeId,basepath);
+                fileArray[index]->open();
+            }
+            activeChannelCount.set(index,activeChannelCount[index]+1);
+        }
+    }
+    for (int i = 0; i < fileArray.size(); i++)
+    {
+        if (fileArray[i]->isOpen())
+        {
+            File f(fileArray[i]->getFileName());
+            mainFile->addKwdFile(f.getFileName());
+
+            infoArray[i]->name = String("Open-Ephys Recording #") + String(recordingNumber);
+            infoArray[i]->start_time = timestamp;
+            infoArray[i]->start_sample = 0;
+            fileArray[i]->startNewRecording(recordingNumber,activeChannelCount[i],infoArray[i]);
+        }
+    }
+}
+
+void HDF5Recording::closeFiles()
+{
+    mainFile->stopRecording();
+    mainFile->close();
+    spikesFile->stopRecording();
+    spikesFile->close();
+    for (int i = 0; i < fileArray.size(); i++)
+    {
+        fileArray[i]->stopRecording();
+        fileArray[i]->close();
+        activeChannelCount.set(i,0);
+    }
+}
+
+void HDF5Recording::writeData(AudioSampleBuffer& buffer, int nSamples)
+{
+    int index;
+    for (int i = 0; i < buffer.getNumChannels(); i++)
+    {
+        if (getChannel(i)->getRecordState())
+        {
+            double multFactor = 1/(float(0x7fff) * getChannel(i)->bitVolts);
+            int index = processorMap[getChannel(i)->recordIndex];
+            FloatVectorOperations::copyWithMultiply(scaledBuffer,buffer.getReadPointer(i,0),multFactor,nSamples);
+            AudioDataConverters::convertFloatToInt16LE(scaledBuffer,intBuffer,nSamples);
+            fileArray[index]->writeRowData(intBuffer,nSamples);
+        }
+    }
+}
+
+void HDF5Recording::writeEvent(int eventType, MidiMessage& event, int samplePosition)
+{
+    const uint8* dataptr = event.getRawData();
+	if (eventType == GenericProcessor::TTL)
+		mainFile->writeEvent(0,*(dataptr+2),*(dataptr+1),(void*)(dataptr+3),timestamp+samplePosition);
+	else if (eventType == GenericProcessor::MESSAGE)
+		mainFile->writeEvent(1,*(dataptr+2),*(dataptr+1),(void*)(dataptr+4),timestamp+samplePosition);
+}
+
+void HDF5Recording::addSpikeElectrode(int index, SpikeRecordInfo* elec)
+{
+    spikesFile->addChannelGroup(elec->numChannels);
+}
+void HDF5Recording::writeSpike(const SpikeObject& spike, int electrodeIndex)
+{
+    spikesFile->writeSpike(electrodeIndex,spike.nSamples,spike.data,spike.timestamp);
+}
+
+void HDF5Recording::startAcquisition()
+{
+    mainFile = new KWIKFile();
+	mainFile->addEventType("TTL",HDF5FileBase::U8,"event_channels");
+	mainFile->addEventType("Messages",HDF5FileBase::STR,"Text");
+    spikesFile = new KWXFile();
+}
+
+RecordEngineManager* HDF5Recording::getEngineManager()
+{
+	RecordEngineManager* man = new RecordEngineManager("KWIK","Kwik",nullptr);
+	return man;
+}
\ No newline at end of file
diff --git a/Source/Processors/RecordNode/HDF5Recording.h b/Source/Processors/RecordNode/HDF5Recording.h
new file mode 100644
index 0000000000000000000000000000000000000000..50a2657348bbac75fcdec3f8f1a21924b932fffc
--- /dev/null
+++ b/Source/Processors/RecordNode/HDF5Recording.h
@@ -0,0 +1,67 @@
+/*
+ ------------------------------------------------------------------
+
+ This file is part of the Open Ephys GUI
+ Copyright (C) 2014 Florian Franzen
+
+ ------------------------------------------------------------------
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+#ifndef HDF5RECORDING_H_INCLUDED
+#define HDF5RECORDING_H_INCLUDED
+
+#include "RecordEngine.h"
+#include "HDF5FileFormat.h"
+
+class HDF5Recording : public RecordEngine
+{
+public:
+    HDF5Recording();
+    ~HDF5Recording();
+	String getEngineID();
+    void openFiles(File rootFolder, int experimentNumber, int recordingNumber);
+    void closeFiles();
+    void writeData(AudioSampleBuffer& buffer, int nSamples);
+    void writeEvent(int eventType, MidiMessage& event, int samplePosition);
+    void addChannel(int index, Channel* chan);
+    void addSpikeElectrode(int index, SpikeRecordInfo* elec);
+    void writeSpike(const SpikeObject& spike, int electrodeIndex);
+    void registerProcessor(GenericProcessor* processor);
+    void resetChannels();
+    void updateTimeStamp(int64 timestamp);
+    void startAcquisition();
+
+	static RecordEngineManager* getEngineManager();
+private:
+
+    int processorIndex;
+
+    Array<int> processorMap;
+    Array<int> activeChannelCount;
+    OwnedArray<KWDFile> fileArray;
+    OwnedArray<HDF5RecordingInfo> infoArray;
+    ScopedPointer<KWIKFile> mainFile;
+    ScopedPointer<KWXFile> spikesFile;
+    float* scaledBuffer;
+    int16* intBuffer;
+    int64 timestamp;
+
+	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(HDF5Recording);
+};
+
+
+#endif  // HDF5RECORDING_H_INCLUDED
diff --git a/Source/Processors/RecordNode/OriginalRecording.cpp b/Source/Processors/RecordNode/OriginalRecording.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9ef5d8762f0d08a8efd51d007625412f10e2ce8d
--- /dev/null
+++ b/Source/Processors/RecordNode/OriginalRecording.cpp
@@ -0,0 +1,634 @@
+/*
+------------------------------------------------------------------
+
+This file is part of the Open Ephys GUI
+Copyright (C) 2013 Florian Franzen
+
+------------------------------------------------------------------
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "OriginalRecording.h"
+#include "../../Audio/AudioComponent.h"
+
+OriginalRecording::OriginalRecording() : separateFiles(false),
+    blockIndex(0), recordingNumber(0), experimentNumber(0),  zeroBuffer(1, 50000), eventFile(nullptr), messageFile(nullptr)
+{
+    continuousDataIntegerBuffer = new int16[10000];
+    continuousDataFloatBuffer = new float[10000];
+
+    recordMarker = new char[10];
+    for (int i = 0; i < 9; i++)
+    {
+        recordMarker[i] = i;
+    }
+    recordMarker[9] = 255;
+
+    zeroBuffer.clear();
+}
+
+OriginalRecording::~OriginalRecording()
+{
+    //Cleanup just in case
+    for (int i=0; i < fileArray.size(); i++)
+    {
+        if (fileArray[i] != nullptr) fclose(fileArray[i]);
+    }
+    for (int i=0; i < spikeFileArray.size(); i++)
+    {
+        if (spikeFileArray[i] != nullptr) fclose(spikeFileArray[i]);
+    }
+    delete continuousDataFloatBuffer;
+    delete continuousDataIntegerBuffer;
+    delete recordMarker;
+}
+
+String OriginalRecording::getEngineID()
+{
+    return "OPENEPHYS";
+}
+
+void OriginalRecording::addChannel(int index, Channel* chan)
+{
+    //Just populate the file array with null so we can address it by index afterwards
+    fileArray.add(nullptr);
+}
+
+void OriginalRecording::addSpikeElectrode(int index, SpikeRecordInfo* elec)
+{
+    spikeFileArray.add(nullptr);
+}
+
+void OriginalRecording::resetChannels()
+{
+    fileArray.clear();
+    spikeFileArray.clear();
+}
+
+void OriginalRecording::openFiles(File rootFolder, int experimentNumber, int recordingNumber)
+{
+    this->recordingNumber = recordingNumber;
+    this->experimentNumber = experimentNumber;
+    openFile(rootFolder,nullptr);
+    openMessageFile(rootFolder);
+    for (int i = 0; i < fileArray.size(); i++)
+    {
+        if (getChannel(i)->getRecordState())
+        {
+            openFile(rootFolder,getChannel(i));
+        }
+    }
+    for (int i = 0; i < spikeFileArray.size(); i++)
+    {
+        openSpikeFile(rootFolder,getSpikeElectrode(i));
+    }
+    blockIndex = 0;
+}
+
+void OriginalRecording::openFile(File rootFolder, Channel* ch)
+{
+    FILE* chFile;
+    bool isEvent;
+    String fullPath(rootFolder.getFullPathName() + rootFolder.separatorString);
+
+    std::cout << "OPENING FILE: " << fullPath << std::endl;
+
+    isEvent = (ch == nullptr) ? true : false;
+    if (isEvent)
+    {
+        if (experimentNumber > 1)
+            fullPath += "all_channels_" + String(experimentNumber) + ".events";
+        else
+            fullPath += "all_channels.events";
+    }
+    else
+    {
+        fullPath += getFileName(ch);
+    }
+
+    File f = File(fullPath);
+
+    bool fileExists = f.exists();
+
+    diskWriteLock.enter();
+
+    chFile = fopen(fullPath.toUTF8(), "ab");
+
+    if (!fileExists)
+    {
+        // create and write header
+        std::cout << "Writing header." << std::endl;
+        String header = generateHeader(ch);
+        //std::cout << header << std::endl;
+        std::cout << "File ID: " << chFile << ", number of bytes: " << header.getNumBytesAsUTF8() << std::endl;
+
+
+        fwrite(header.toUTF8(), 1, header.getNumBytesAsUTF8(), chFile);
+
+        std::cout << "Wrote header." << std::endl;
+
+        std::cout << "Block index: " << blockIndex << std::endl;
+
+    }
+    else
+    {
+        std::cout << "File already exists, just opening." << std::endl;
+    }
+
+    diskWriteLock.exit();
+
+    if (isEvent)
+        eventFile = chFile;
+    else
+        fileArray.set(ch->recordIndex,chFile);
+
+}
+
+void OriginalRecording::openSpikeFile(File rootFolder, SpikeRecordInfo* elec)
+{
+
+    FILE* spFile;
+    String fullPath(rootFolder.getFullPathName() + rootFolder.separatorString);
+    fullPath += elec->name.removeCharacters(" ");
+
+    if (experimentNumber > 1)
+    {
+        fullPath += "_" + String(experimentNumber);
+    }
+
+    fullPath += ".spikes";
+
+    std::cout << "OPENING FILE: " << fullPath << std::endl;
+
+    File f = File(fullPath);
+
+    bool fileExists = f.exists();
+
+    diskWriteLock.enter();
+
+    spFile = fopen(fullPath.toUTF8(),"ab");
+
+    if (!fileExists)
+    {
+        String header = generateSpikeHeader(elec);
+        fwrite(header.toUTF8(), 1, header.getNumBytesAsUTF8(), spFile);
+    }
+    diskWriteLock.exit();
+    spikeFileArray.set(elec->recordIndex,spFile);
+
+}
+
+void OriginalRecording::openMessageFile(File rootFolder)
+{
+    FILE* mFile;
+    String fullPath(rootFolder.getFullPathName() + rootFolder.separatorString);
+    fullPath += "messages.events";
+
+    std::cout << "OPENING FILE: " << fullPath << std::endl;
+
+    File f = File(fullPath);
+
+    bool fileExists = f.exists();
+
+    diskWriteLock.enter();
+
+    mFile = fopen(fullPath.toUTF8(),"ab");
+
+    //If this file needs a header, it goes here
+
+    diskWriteLock.exit();
+    messageFile = mFile;
+
+}
+
+String OriginalRecording::getFileName(Channel* ch)
+{
+    String filename;
+
+    filename += ch->nodeId;
+    filename += "_";
+    filename += ch->name;
+
+    if (experimentNumber > 1)
+    {
+        filename += "_" + String(experimentNumber);
+    }
+
+    if (separateFiles)
+    {
+        filename += "_";
+        filename += recordingNumber;
+    }
+    filename += ".continuous";
+
+    return filename;
+}
+
+String OriginalRecording::generateHeader(Channel* ch)
+{
+
+    String header = "header.format = 'Open Ephys Data Format'; \n";
+
+    header += "header.version = 0.4; \n";
+    header += "header.header_bytes = ";
+    header += String(HEADER_SIZE);
+    header += ";\n";
+
+    if (ch == nullptr)
+    {
+        header += "header.description = 'each record contains one 64-bit timestamp, one 16-bit sample position, one uint8 event type, one uint8 processor ID, one uint8 event ID, one uint8 event channel, and one uint16 recordingNumber'; \n";
+
+    }
+    else
+    {
+        header += "header.description = 'each record contains one 64-bit timestamp, one 16-bit sample count (N), 1 uint16 recordingNumber, N 16-bit samples, and one 10-byte record marker (0 1 2 3 4 5 6 7 8 255)'; \n";
+    }
+
+
+    header += "header.date_created = '";
+    header += generateDateString();
+    header += "';\n";
+
+    header += "header.channel = '";
+    header += (ch != nullptr) ? ch->name : "Events";
+    header += "';\n";
+
+    if (ch == nullptr)
+    {
+
+        header += "header.channelType = 'Event';\n";
+    }
+    else
+    {
+        header += "header.channelType = 'Continuous';\n";
+    }
+
+    header += "header.sampleRate = ";
+    // all channels need to have the same sample rate under the current scheme
+    header += String(getChannel(0)->sampleRate);
+    header += ";\n";
+    header += "header.blockLength = ";
+    header += BLOCK_LENGTH;
+    header += ";\n";
+    header += "header.bufferSize = ";
+    header += getAudioComponent()->getBufferSize();
+    header += ";\n";
+    header += "header.bitVolts = ";
+    header += (ch != nullptr) ? String(ch->bitVolts) : "1";
+    header += ";\n";
+
+    header = header.paddedRight(' ', HEADER_SIZE);
+
+    //std::cout << header << std::endl;
+
+    return header;
+
+}
+
+String OriginalRecording::generateSpikeHeader(SpikeRecordInfo* elec)
+{
+    String header = "header.format = 'Open Ephys Data Format'; \n";
+    header += "header.version = 0.4; \n";
+    header += "header.header_bytes = ";
+    header += String(HEADER_SIZE);
+    header += ";\n";
+
+    header += "header.description = 'Each record contains 1 uint8 eventType, 1 uint64 timestamp, 1 uint16 electrodeID, 1 uint16 numChannels (n), 1 uint16 numSamples (m), n*m uint16 samples, n uint16 channelGains, n uint16 thresholds, and 1 uint16 recordingNumber'; \n";
+
+    header += "header.date_created = '";
+    header += generateDateString();
+    header += "';\n";
+
+    header += "header.electrode = '";
+    header += elec->name;
+    header += "';\n";
+
+    header += "header.num_channels = ";
+    header += elec->numChannels;
+    header += ";\n";
+
+    header += "header.sampleRate = ";
+    header += String(elec->sampleRate);
+    header += ";\n";
+
+    header = header.paddedRight(' ', HEADER_SIZE);
+
+    //std::cout << header << std::endl;
+
+    return header;
+}
+
+void OriginalRecording::writeEvent(int eventType, MidiMessage& event, int samplePosition)
+{
+    if (eventType == GenericProcessor::TTL)
+        writeTTLEvent(event,samplePosition);
+    else if (eventType == GenericProcessor::MESSAGE)
+        writeMessage(event,samplePosition);
+}
+
+void OriginalRecording::writeMessage(MidiMessage& event, int samplePosition)
+{
+    if (messageFile == nullptr)
+        return;
+    uint64 samplePos = (uint64) samplePosition;
+
+    int64 eventTimestamp = timestamp + samplePos;
+
+    int msgLength = event.getRawDataSize() - 5;
+    const char* dataptr = (const char*)event.getRawData() + 4;
+
+    String timestampText(eventTimestamp);
+
+    diskWriteLock.enter();
+    fwrite(timestampText.toUTF8(),1,timestampText.length(),messageFile);
+    fwrite(" ",1,1,messageFile);
+    fwrite(dataptr,1,msgLength,messageFile);
+    fwrite("\n",1,1,messageFile);
+    diskWriteLock.exit();
+
+}
+
+void OriginalRecording::writeTTLEvent(MidiMessage& event, int samplePosition)
+{
+    // find file and write samples to disk
+    // std::cout << "Received event!" << std::endl;
+
+    if (eventFile == nullptr)
+        return;
+
+    const uint8* dataptr = event.getRawData();
+
+    uint64 samplePos = (uint64) samplePosition;
+
+    int64 eventTimestamp = timestamp + samplePos; // add the sample position to the buffer timestamp
+
+    diskWriteLock.enter();
+
+    fwrite(&eventTimestamp,					// ptr
+           8,   							// size of each element
+           1, 		  						// count
+           eventFile);   			// ptr to FILE object
+
+    fwrite(&samplePos,							// ptr
+           2,   							// size of each element
+           1, 		  						// count
+           eventFile);   			// ptr to FILE object
+
+    // write 1st four bytes of event (type, nodeId, eventId, eventChannel)
+    fwrite(dataptr, 1, 4, eventFile);
+
+    // write recording number
+    fwrite(&recordingNumber,                     // ptr
+           2,                               // size of each element
+           1,                               // count
+           eventFile);             // ptr to FILE object
+
+    diskWriteLock.exit();
+}
+
+void OriginalRecording::writeData(AudioSampleBuffer& buffer, int nSamples)
+{
+    int samplesWritten = 0;
+
+    while (samplesWritten < nSamples) // there are still unwritten samples in the buffer
+    {
+
+        int numSamplesToWrite = nSamples - samplesWritten; // samples remaining in the buffer
+
+        if (blockIndex + numSamplesToWrite < BLOCK_LENGTH) // we still have space in this block
+        {
+            for (int i = 0; i < buffer.getNumChannels(); i++)
+            {
+
+                if (getChannel(i)->getRecordState())
+                {
+                    // write buffer to disk!
+                    writeContinuousBuffer(buffer.getReadPointer(i,samplesWritten),
+                                          numSamplesToWrite,
+                                          i);
+
+
+                }
+            }
+
+            // update our variables
+            samplesWritten += numSamplesToWrite;
+            timestamp += numSamplesToWrite;
+            blockIndex += numSamplesToWrite;
+
+        }
+        else // there's not enough space left in this block for all remaining samples
+        {
+
+            numSamplesToWrite = BLOCK_LENGTH - blockIndex;
+
+            for (int i = 0; i < buffer.getNumChannels(); i++)
+            {
+
+                if (getChannel(i)->getRecordState())
+                {
+                    // write buffer to disk!
+                    writeContinuousBuffer(buffer.getReadPointer(i,samplesWritten),
+                                          numSamplesToWrite,
+                                          i);
+
+                    //std::cout << "Record channel " << i << std::endl;
+                }
+            }
+
+            // update our variables
+            samplesWritten += numSamplesToWrite;
+            timestamp += numSamplesToWrite;
+            blockIndex = 0; // back to the beginning of the block
+
+        }
+    }
+}
+
+void OriginalRecording::writeContinuousBuffer(const float* data, int nSamples, int channel)
+{
+    // check to see if the file exists
+    if (fileArray[channel] == nullptr)
+        return;
+
+    // scale the data back into the range of int16
+    float scaleFactor =  float(0x7fff) * getChannel(channel)->bitVolts;
+    for (int n = 0; n < nSamples; n++)
+    {
+        *(continuousDataFloatBuffer+n) = *(data+n) / scaleFactor;
+    }
+    AudioDataConverters::convertFloatToInt16BE(continuousDataFloatBuffer, continuousDataIntegerBuffer, nSamples);
+
+    if (blockIndex == 0)
+    {
+        writeTimestampAndSampleCount(fileArray[channel]);
+    }
+
+    diskWriteLock.enter();
+
+    size_t count = fwrite(continuousDataIntegerBuffer, // ptr
+                          2,                               // size of each element
+                          nSamples,                        // count
+                          fileArray[channel]); // ptr to FILE object
+
+    jassert(count == nSamples); // make sure all the data was written
+
+    diskWriteLock.exit();
+
+    if (blockIndex + nSamples == BLOCK_LENGTH)
+    {
+        writeRecordMarker(fileArray[channel]);
+    }
+}
+
+void OriginalRecording::writeTimestampAndSampleCount(FILE* file)
+{
+    diskWriteLock.enter();
+
+    uint16 samps = BLOCK_LENGTH;
+
+    fwrite(&timestamp,                       // ptr
+           8,                               // size of each element
+           1,                               // count
+           file); // ptr to FILE object
+
+    fwrite(&samps,                           // ptr
+           2,                               // size of each element
+           1,                               // count
+           file); // ptr to FILE object
+
+    fwrite(&recordingNumber,                         // ptr
+           2,                               // size of each element
+           1,                               // count
+           file); // ptr to FILE object
+
+    diskWriteLock.exit();
+}
+
+void OriginalRecording::writeRecordMarker(FILE* file)
+{
+    // write a 10-byte marker indicating the end of a record
+
+    diskWriteLock.enter();
+    fwrite(recordMarker,        // ptr
+           1,                   // size of each element
+           10,                  // count
+           file);               // ptr to FILE object
+
+    diskWriteLock.exit();
+}
+
+void OriginalRecording::closeFiles()
+{
+    for (int i = 0; i < fileArray.size(); i++)
+    {
+        if (fileArray[i] != nullptr)
+        {
+            if (blockIndex < BLOCK_LENGTH)
+            {
+                // fill out the rest of the current buffer
+                writeContinuousBuffer(zeroBuffer.getReadPointer(0), BLOCK_LENGTH - blockIndex, i);
+                diskWriteLock.enter();
+                fclose(fileArray[i]);
+                fileArray.set(i,nullptr);
+                diskWriteLock.exit();
+            }
+        }
+    }
+    for (int i = 0; i < spikeFileArray.size(); i++)
+    {
+        if (spikeFileArray[i] != nullptr)
+        {
+            diskWriteLock.enter();
+            fclose(spikeFileArray[i]);
+            spikeFileArray.set(i,nullptr);
+            diskWriteLock.exit();
+        }
+    }
+    if (eventFile != nullptr)
+    {
+        diskWriteLock.enter();
+        fclose(eventFile);
+        eventFile = nullptr;
+        diskWriteLock.exit();
+    }
+    if (messageFile != nullptr)
+    {
+        diskWriteLock.enter();
+        fclose(messageFile);
+        messageFile = nullptr;
+        diskWriteLock.exit();
+    }
+    blockIndex = 0;
+}
+
+void OriginalRecording::updateTimeStamp(int64 timestamp)
+{
+    this->timestamp = timestamp;
+}
+
+void OriginalRecording::writeSpike(const SpikeObject& spike, int electrodeIndex)
+{
+    uint8_t spikeBuffer[MAX_SPIKE_BUFFER_LEN];
+
+    if (spikeFileArray[electrodeIndex] == nullptr)
+        return;
+
+    packSpike(&spike, spikeBuffer, MAX_SPIKE_BUFFER_LEN);
+
+    int totalBytes = spike.nSamples * spike.nChannels * 2 + // account for samples
+                     spike.nChannels * 4 +            // acount for gain
+                     spike.nChannels * 2 +            // account for thresholds
+                     SPIKE_METADATA_SIZE;             // 42, from SpikeObject.h
+
+
+    // format:
+    // 1 byte of event type (always = 4 for spikes)
+    // 8 bytes for 64-bit timestamp
+    // 2 bytes for 16-bit electrode ID
+    // 2 bytes for 16-bit number of channels (n)
+    // 2 bytes for 16-bit number of samples (m)
+    // 2*n*m bytes for 16-bit samples
+    // 2*n bytes for 16-bit gains
+    // 2*n bytes for 16-bit thresholds
+
+    // const MessageManagerLock mmLock;
+
+    diskWriteLock.enter();
+
+    fwrite(spikeBuffer, 1, totalBytes, spikeFileArray[electrodeIndex]);
+
+    fwrite(&recordingNumber,                         // ptr
+           2,                               // size of each element
+           1,                               // count
+           spikeFileArray[electrodeIndex]); // ptr to FILE object
+
+    diskWriteLock.exit();
+}
+
+void OriginalRecording::setParameter(EngineParameter& parameter)
+{
+    boolParameter(0, separateFiles);
+}
+
+RecordEngineManager* OriginalRecording::getEngineManager()
+{
+    RecordEngineManager* man = new RecordEngineManager("OPENEPHYS","Open Ephys",nullptr);
+    EngineParameter* param;
+    param = new EngineParameter(EngineParameter::BOOL,0,"Separate Files",false);
+    man->addParameter(param);
+    return man;
+}
\ No newline at end of file
diff --git a/Source/Processors/RecordNode/OriginalRecording.h b/Source/Processors/RecordNode/OriginalRecording.h
new file mode 100644
index 0000000000000000000000000000000000000000..97c63b915b5fe172dc6f287db16408dfbb01c8c5
--- /dev/null
+++ b/Source/Processors/RecordNode/OriginalRecording.h
@@ -0,0 +1,100 @@
+/*
+ ------------------------------------------------------------------
+
+ This file is part of the Open Ephys GUI
+ Copyright (C) 2014 Florian Franzen
+
+ ------------------------------------------------------------------
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+#ifndef ORIGINALRECORDING_H_INCLUDED
+#define ORIGINALRECORDING_H_INCLUDED
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+
+#include "RecordEngine.h"
+#include <stdio.h>
+
+#define HEADER_SIZE 1024
+#define BLOCK_LENGTH 1024
+
+class OriginalRecording : public RecordEngine
+{
+public:
+    OriginalRecording();
+    ~OriginalRecording();
+
+    void setParameter(EngineParameter& parameter);
+    String getEngineID();
+    void openFiles(File rootFolder, int experimentNumber, int recordingNumber);
+    void closeFiles();
+    void writeData(AudioSampleBuffer& buffer, int nSamples);
+    void writeEvent(int eventType, MidiMessage& event, int samplePosition);
+    void addChannel(int index, Channel* chan);
+    void resetChannels();
+    void updateTimeStamp(int64 timestamp);
+    void addSpikeElectrode(int index, SpikeRecordInfo* elec);
+    void writeSpike(const SpikeObject& spike, int electrodeIndex);
+
+    static RecordEngineManager* getEngineManager();
+
+private:
+    String getFileName(Channel* ch);
+    void openFile(File rootFolder, Channel* ch);
+    String generateHeader(Channel* ch);
+    void writeContinuousBuffer(const float* data, int nSamples, int channel);
+    void writeTimestampAndSampleCount(FILE* file);
+    void writeRecordMarker(FILE* file);
+
+    void openSpikeFile(File rootFolder, SpikeRecordInfo* elec);
+    String generateSpikeHeader(SpikeRecordInfo* elec);
+
+    void openMessageFile(File rootFolder);
+    void writeTTLEvent(MidiMessage& event, int samplePosition);
+    void writeMessage(MidiMessage& event, int samplePosition);
+
+    bool separateFiles;
+    int blockIndex;
+    int recordingNumber;
+    int experimentNumber;
+
+    /** Holds data that has been converted from float to int16 before
+        saving.
+    */
+    int16* continuousDataIntegerBuffer;
+
+    /** Holds data that has been converted from float to int16 before
+        saving.
+    */
+    float* continuousDataFloatBuffer;
+
+    /** Used to indicate the end of each record */
+    char* recordMarker;
+
+    AudioSampleBuffer zeroBuffer;
+    int64 timestamp;
+
+    FILE* eventFile;
+    FILE* messageFile;
+    Array<FILE*> fileArray;
+    Array<FILE*> spikeFileArray;
+    CriticalSection diskWriteLock;
+
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(OriginalRecording);
+};
+
+#endif  // ORIGINALRECORDING_H_INCLUDED
diff --git a/Source/Processors/RecordNode/RecordEngine.cpp b/Source/Processors/RecordNode/RecordEngine.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3d187092502ecfb2dc987d5ff8c55b1147424de1
--- /dev/null
+++ b/Source/Processors/RecordNode/RecordEngine.cpp
@@ -0,0 +1,260 @@
+/*
+ ------------------------------------------------------------------
+
+ This file is part of the Open Ephys GUI
+ Copyright (C) 2014 Florian Franzen
+
+ ------------------------------------------------------------------
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+#include "RecordEngine.h"
+#include "RecordNode.h"
+#include "../ProcessorGraph/ProcessorGraph.h"
+
+#include "EngineConfigWindow.h"
+#include "HDF5Recording.h"
+#include "OriginalRecording.h"
+
+RecordEngine::RecordEngine()
+    : manager(nullptr)
+{
+}
+
+RecordEngine::~RecordEngine() {}
+
+void RecordEngine::setParameter(EngineParameter& parameter) {}
+
+void RecordEngine::resetChannels() {}
+
+void RecordEngine::registerProcessor(GenericProcessor* processor) {}
+
+Channel* RecordEngine::getChannel(int index)
+{
+    return getProcessorGraph()->getRecordNode()->getDataChannel(index);
+}
+
+String RecordEngine::generateDateString()
+{
+    return getProcessorGraph()->getRecordNode()->generateDateString();
+}
+
+SpikeRecordInfo* RecordEngine::getSpikeElectrode(int index)
+{
+    return getProcessorGraph()->getRecordNode()->getSpikeElectrode(index);
+}
+
+void RecordEngine::updateTimeStamp(int64 timestamp) {}
+
+void RecordEngine::registerSpikeSource(GenericProcessor* processor) {}
+
+void RecordEngine::startAcquisition() {}
+
+void RecordEngine::directoryChanged() {}
+
+void RecordEngine::registerManager(RecordEngineManager* recordManager)
+{
+    manager = recordManager;
+}
+
+void RecordEngine::configureEngine()
+{
+    if (!manager)
+        return;
+
+    for (int i=0; i < manager->getNumParameters(); i++)
+        setParameter(manager->getParameter(i));
+}
+
+//Manager
+
+EngineParameter::EngineParameter(EngineParameter::EngineParameterType paramType, int paramId, String paramName, var defaultValue, var min, var max)
+    : type(paramType), name(paramName), id(paramId), def(defaultValue)
+{
+    if (paramType == BOOL && defaultValue.isBool())
+        boolParam.value = defaultValue;
+    else if (paramType == INT)
+    {
+        intParam.value = defaultValue;
+        intParam.min= min;
+        intParam.max= max;
+    }
+    else if (paramType == FLOAT)
+    {
+        floatParam.value = defaultValue;
+        floatParam.min= min;
+        floatParam.max= max;
+    }
+    else if (paramType == STR)
+        strParam.value = defaultValue;
+}
+
+
+void EngineParameter::restoreDefault()
+{
+    switch (type)
+    {
+        case INT:
+            intParam.value = def;
+            break;
+        case FLOAT:
+            floatParam.value = def;
+            break;
+        case BOOL:
+            boolParam.value = def;
+            break;
+        case STR:
+            strParam.value = def;
+    }
+}
+
+RecordEngineManager::RecordEngineManager(String engineID, String engineName, EngineCreator creatorFunc) :
+    creator(creatorFunc), id(engineID), name(engineName), window(nullptr)
+{
+}
+
+RecordEngineManager::~RecordEngineManager()
+{
+}
+
+void RecordEngineManager::addParameter(EngineParameter* param)
+{
+    parameters.add(param);
+}
+
+RecordEngine* RecordEngineManager::instantiateEngine()
+{
+    if (creator)
+        return creator();
+
+    //Built-in engines
+    if (id == "KWIK")
+        return new HDF5Recording();
+
+    if (id == "OPENEPHYS")
+        return new OriginalRecording();
+
+    return nullptr;
+}
+
+int RecordEngineManager::getNumParameters()
+{
+    return parameters.size();
+}
+
+EngineParameter& RecordEngineManager::getParameter(int index)
+{
+    return *(parameters[index]);
+}
+
+String RecordEngineManager::getName()
+{
+    return name;
+}
+
+String RecordEngineManager::getID()
+{
+    return id;
+}
+
+bool RecordEngineManager::isWindowOpen()
+{
+    return window ? true : false;
+}
+
+void RecordEngineManager::toggleConfigWindow()
+{
+    if (window)
+    {
+        window->saveParameters();
+        window->setVisible(false);
+        window = nullptr;
+    }
+    else
+    {
+        window = new EngineConfigWindow(this);
+        window->setVisible(true);
+    }
+}
+
+void RecordEngineManager::saveParametersToXml(XmlElement* xml)
+{
+    for (int i=0; i < parameters.size(); i++)
+    {
+        XmlElement* param = xml->createNewChildElement("PARAMETER");
+        param->setAttribute("id",parameters[i]->id);
+        switch (parameters[i]->type)
+        {
+            case EngineParameter::BOOL:
+                param->setAttribute("type","bool");
+                param->setAttribute("value",parameters[i]->boolParam.value);
+                break;
+            case EngineParameter::INT:
+                param->setAttribute("type","int");
+                param->setAttribute("value",parameters[i]->intParam.value);
+                break;
+            case EngineParameter::FLOAT:
+                param->setAttribute("type","float");
+                param->setAttribute("value",parameters[i]->floatParam.value);
+                break;
+            case EngineParameter::STR:
+                param->setAttribute("type","string");
+                param->setAttribute("value",parameters[i]->strParam.value);
+                break;
+        }
+    }
+}
+
+void RecordEngineManager::loadParametersFromXml(XmlElement* xml)
+{
+    for (int i=0; i < parameters.size(); i++)
+    {
+        forEachXmlChildElementWithTagName(*xml,xmlNode,"PARAMETER")
+        {
+            if (xmlNode->getIntAttribute("id") == parameters[i]->id)
+            {
+                if ((xmlNode->getStringAttribute("type") == "bool") && (parameters[i]->type == EngineParameter::BOOL))
+                    parameters[i]->boolParam.value = xmlNode->getBoolAttribute("value");
+                else if ((xmlNode->getStringAttribute("type") == "int") && (parameters[i]->type == EngineParameter::INT))
+                    parameters[i]->intParam.value = xmlNode->getIntAttribute("value");
+                else if ((xmlNode->getStringAttribute("type") == "float") && (parameters[i]->type == EngineParameter::FLOAT))
+                    parameters[i]->floatParam.value = xmlNode->getDoubleAttribute("value");
+                else if ((xmlNode->getStringAttribute("type") == "string") && (parameters[i]->type == EngineParameter::STR))
+                    parameters[i]->strParam.value = xmlNode->getStringAttribute("value");
+            }
+        }
+    }
+}
+
+int RecordEngineManager::getNumOfBuiltInEngines()
+{
+    return 2;
+}
+
+RecordEngineManager* RecordEngineManager::createBuiltInEngineManager(int index)
+{
+    switch (index)
+    {
+        case 0:
+            return OriginalRecording::getEngineManager();
+            break;
+        case 1:
+            return HDF5Recording::getEngineManager();
+            break;
+        default:
+            return nullptr;
+    }
+}
\ No newline at end of file
diff --git a/Source/Processors/RecordNode/RecordEngine.h b/Source/Processors/RecordNode/RecordEngine.h
new file mode 100644
index 0000000000000000000000000000000000000000..2afd58d39fe5dfa2d1b1d0e7ba28d34d444e9343
--- /dev/null
+++ b/Source/Processors/RecordNode/RecordEngine.h
@@ -0,0 +1,239 @@
+/*
+ ------------------------------------------------------------------
+
+ This file is part of the Open Ephys GUI
+ Copyright (C) 2014 Florian Franzen
+
+ ------------------------------------------------------------------
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+#ifndef RECORDENGINE_H_INCLUDED
+#define RECORDENGINE_H_INCLUDED
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../Channel/Channel.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "../Visualization/SpikeObject.h"
+
+//Handy macros for setParameter
+#define boolParameter(i,v) if ((parameter.id == i) && (parameter.type == EngineParameter::BOOL)) \
+        v = parameter.boolParam.value
+#define intParameter(i,v) if ((parameter.id == i) && (parameter.type == EngineParameter::INT)) \
+        v = parameter.intParam.value
+#define floatParameter(i,v) if ((parameter.id == i) && (parameter.type == EngineParameter::FLOAT)) \
+        v = parameter.floatParam.value
+#define strParameter(i,v) if ((parameter.id == i) && (parameter.type == EngineParameter::STR)) \
+        v = parameter.strParam.value
+
+struct SpikeRecordInfo
+{
+    String name;
+    int numChannels;
+    int sampleRate;
+
+    int recordIndex;
+};
+
+class EngineParameter;
+class RecordNode;
+class RecordEngineManager;
+
+class RecordEngine : public AccessClass
+{
+public:
+    RecordEngine();
+    ~RecordEngine();
+    virtual String getEngineID() =0;
+
+    /** All the public methods (except registerManager) are called by RecordNode:
+    When acquisition starts (in the specified order):
+    	1-resetChannels
+    	2-registerProcessor, addChannel, registerSpikeSource, addspikeelectrode
+    	3-configureEngine (which calls setParameter)
+    	3-startAcquisition
+    When recording starts (in the specified order):
+    	1-directoryChanged (if needed)
+    	2-openFiles
+    During recording:
+    	writeData, writeEvent, writeSpike, updateTimeStamp
+    When recording stops:
+    	closeFiles
+    */
+
+    /** Called for registering parameters
+    */
+    virtual void setParameter(EngineParameter& parameter);
+
+    /** Called when recording starts to open all needed files
+    */
+    virtual void openFiles(File rootFolder, int experimentNumber, int recordingNumber) = 0;
+
+    /** Called when recording stops to close all files
+    	and do all the necessary cleanups
+    */
+    virtual void closeFiles() = 0;
+
+    /** Write continuous data.
+    	This method gets the full data buffer, it must query getRecordState for
+    	each registered channel to determine which channels to actually write to disk
+    */
+    virtual void writeData(AudioSampleBuffer& buffer, int nSamples) = 0;
+
+    /** Write a single event to disk.
+    */
+    virtual void writeEvent(int eventType, MidiMessage& event, int samplePosition) = 0;
+
+    /** Called when acquisition starts once for each processor that might record continuous data
+    */
+    virtual void registerProcessor(GenericProcessor* processor);
+
+    /** Called after registerProcessor, once for each output
+    	channel of the processor
+    */
+    virtual void addChannel(int index, Channel* chan) = 0;
+
+    /** Called when acquisition starts once for each processor that might record spikes
+    */
+    virtual void registerSpikeSource(GenericProcessor* processor);
+
+    /** Called after registerSpikesource, once for each channel group
+    */
+    virtual void addSpikeElectrode(int index, SpikeRecordInfo* elec) = 0;
+
+    /** Write a spike to disk
+    */
+    virtual void writeSpike(const SpikeObject& spike, int electrodeIndex) = 0;
+
+    /** Called when a new acquisition starts, to clean all channel data
+    	before registering the processors
+    */
+    virtual void resetChannels();
+
+    /** Called every time a new timestamp event is received
+    */
+    virtual void updateTimeStamp(int64 timestamp);
+
+    /** Called after all channels and spike groups have been registered,
+    	just before acquisition starts
+    */
+    virtual void startAcquisition();
+
+    /** Called when the recording directory changes during an acquisition
+    */
+    virtual void directoryChanged();
+
+
+    void registerManager(RecordEngineManager* engineManager);
+    void configureEngine();
+
+protected:
+    /** Functions to access RecordNode arrays and utilities
+    */
+
+    /** Gets the specified channel from the channel array stored in RecordNode
+    */
+    Channel* getChannel(int index);
+
+    /** Gets the specified channel group info structure from the array stored in RecordNode
+    */
+    SpikeRecordInfo* getSpikeElectrode(int index);
+
+    /** Generate a Matlab-compatible datestring
+    */
+    String generateDateString();
+
+private:
+    RecordEngineManager* manager;
+
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(RecordEngine);
+};
+
+typedef RecordEngine* (*EngineCreator)();
+
+struct EngineParameter
+{
+public:
+    enum EngineParameterType {STR, INT, FLOAT, BOOL};
+    EngineParameter(EngineParameterType paramType, int paramId, String paramName, var defaultValue, var min = 0, var max = 100);
+    void restoreDefault();
+
+    union
+    {
+        struct
+        {
+            int min;
+            int max;
+            int value;
+        } intParam;
+        struct
+        {
+            float min;
+            float max;
+            float value;
+        } floatParam;
+        struct
+        {
+            bool value;
+        } boolParam;
+    };
+    //Strings can't be inside an union. This means wasting a bit of memory, but adds more safety than using char*
+    struct
+    {
+        String value;
+    } strParam;
+
+    const EngineParameterType type;
+    const String name;
+    const int id;
+private:
+    var def;
+};
+
+class EngineConfigWindow;
+class RecordEngineManager
+{
+public:
+    RecordEngineManager(String engineID, String engineName, EngineCreator creatorFunc);
+    ~RecordEngineManager();
+    void addParameter(EngineParameter* param);
+
+    RecordEngine* instantiateEngine();
+    void toggleConfigWindow();
+    bool isWindowOpen();
+
+    void saveParametersToXml(XmlElement* xml);
+    void loadParametersFromXml(XmlElement* xml);
+
+    EngineParameter& getParameter(int index);
+    int getNumParameters();
+
+    String getID();
+    String getName();
+
+    static int getNumOfBuiltInEngines();
+    static RecordEngineManager* createBuiltInEngineManager(int index);
+
+private:
+    EngineCreator creator;
+    String id;
+    String name;
+    OwnedArray<EngineParameter> parameters;
+    ScopedPointer<EngineConfigWindow> window;
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(RecordEngineManager);
+};
+
+#endif  // RECORDENGINE_H_INCLUDED
diff --git a/Source/Processors/RecordNode/RecordNode.cpp b/Source/Processors/RecordNode/RecordNode.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..be85f4f21a78aa61205be4080daec55b662431cd
--- /dev/null
+++ b/Source/Processors/RecordNode/RecordNode.cpp
@@ -0,0 +1,519 @@
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2014 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "RecordNode.h"
+#include "../ProcessorGraph/ProcessorGraph.h"
+#include "../../UI/EditorViewport.h"
+#include "../../UI/ControlPanel.h"
+
+#define EVERY_ENGINE for(int eng = 0; eng < engineArray.size(); eng++) engineArray[eng]
+
+
+
+#include "../Channel/Channel.h"
+
+RecordNode::RecordNode()
+    : GenericProcessor("Record Node"),
+      newDirectoryNeeded(true),  timestamp(0)
+{
+
+    isProcessing = false;
+    isRecording = false;
+    allFilesOpened = false;
+    signalFilesShouldClose = false;
+
+    signalFilesShouldClose = false;
+
+    settings.numInputs = 2048;
+    settings.numOutputs = 0;
+
+    eventChannel = new Channel(this, 0);
+    eventChannel->setType(EVENT_CHANNEL);
+    recordingNumber = 0;
+
+
+    spikeElectrodeIndex = 0;
+
+    experimentNumber = 0;
+    hasRecorded = false;
+
+    // 128 inputs, 0 outputs
+    setPlayConfigDetails(getNumInputs(),getNumOutputs(),44100.0,128);
+
+}
+
+
+RecordNode::~RecordNode()
+{
+
+}
+
+void RecordNode::setChannel(Channel* ch)
+{
+
+    int channelNum = channelPointers.indexOf(ch);
+
+    std::cout << "Record node setting channel to " << channelNum << std::endl;
+
+    setCurrentChannel(channelNum);
+
+}
+
+void RecordNode::setChannelStatus(Channel* ch, bool status)
+{
+
+    //std::cout << "Setting channel status!" << std::endl;
+    setChannel(ch);
+
+    if (status)
+        setParameter(2, 1.0f);
+    else
+        setParameter(2, 0.0f);
+
+}
+
+
+void RecordNode::resetConnections()
+{
+    //std::cout << "Resetting connections" << std::endl;
+    nextAvailableChannel = 0;
+    wasConnected = false;
+    spikeElectrodeIndex = 0;
+
+    channelPointers.clear();
+    eventChannelPointers.clear();
+    spikeElectrodePointers.clear();
+
+    EVERY_ENGINE->resetChannels();
+
+}
+
+void RecordNode::filenameComponentChanged(FilenameComponent* fnc)
+{
+
+    dataDirectory = fnc->getCurrentFile();
+
+
+}
+
+void RecordNode::updateChannelName(int channelIndex, String newname)
+{
+    /*  if (channelPointers[channelIndex] != nullptr && channelIndex < channelPointers.size())
+        {
+            channelPointers[channelIndex]->name = newname;
+            updateFileName(channelPointers[channelIndex]);
+        } else*/
+    {
+        // keep name and do the change when the pointer actually points to something... ?
+        modifiedChannelNames.add(newname);
+        modifiedChannelInd.add(channelIndex);
+    }
+}
+
+void RecordNode::getChannelNamesAndRecordingStatus(StringArray& names, Array<bool>& recording)
+{
+    names.clear();
+    recording.clear();
+
+    for (int k = 0; k < channelPointers.size(); k++)
+    {
+        if (channelPointers[k] == nullptr)
+        {
+            names.add("not allocated");
+            recording.add(false);
+
+        }
+        else
+        {
+            Channel* ch = channelPointers[k];
+            String n = ch->name;
+            names.add(n);
+            recording.add(channelPointers[k]->getRecordState());
+        }
+    }
+}
+
+void RecordNode::addInputChannel(GenericProcessor* sourceNode, int chan)
+{
+
+    if (chan != getProcessorGraph()->midiChannelIndex)
+    {
+
+        int channelIndex = getNextChannel(false);
+
+        channelPointers.add(sourceNode->channels[chan]);
+        setPlayConfigDetails(channelIndex+1,0,44100.0,128);
+
+        //   std::cout << channelIndex << std::endl;
+
+        channelPointers[channelIndex]->recordIndex = channelIndex;
+
+        EVERY_ENGINE->addChannel(channelIndex,channelPointers[channelIndex]);
+
+    }
+    else
+    {
+
+        for (int n = 0; n < sourceNode->eventChannels.size(); n++)
+        {
+
+            eventChannelPointers.add(sourceNode->eventChannels[n]);
+
+        }
+
+    }
+
+}
+
+void RecordNode::updateTrialNumber()
+{
+    trialNum++;
+}
+
+void RecordNode::appendTrialNumber(bool t)
+{
+    appendTrialNum = t;
+}
+
+
+void RecordNode::createNewDirectory()
+{
+    std::cout << "Creating new directory." << std::endl;
+
+    rootFolder = File(dataDirectory.getFullPathName() + File::separator + generateDirectoryName());
+    newDirectoryNeeded = false;
+
+}
+
+String RecordNode::generateDirectoryName()
+{
+    Time calendar = Time::getCurrentTime();
+
+    Array<int> t;
+    t.add(calendar.getYear());
+    t.add(calendar.getMonth()+1); // January = 0
+    t.add(calendar.getDayOfMonth());
+    t.add(calendar.getHours());
+    t.add(calendar.getMinutes());
+    t.add(calendar.getSeconds());
+
+    String filename = getControlPanel()->getTextToPrepend();
+
+    String datestring = "";
+
+    for (int n = 0; n < t.size(); n++)
+    {
+        if (t[n] < 10)
+            datestring += "0";
+
+        datestring += t[n];
+
+        if (n == 2)
+            datestring += "_";
+        else if (n < 5)
+            datestring += "-";
+    }
+
+    getControlPanel()->setDateText(datestring);
+
+    filename += datestring;
+    filename += getControlPanel()->getTextToAppend();
+
+    return filename;
+
+}
+
+String RecordNode::generateDateString()
+{
+    Time calendar = Time::getCurrentTime();
+
+    String datestring;
+
+    datestring += String(calendar.getDayOfMonth());
+    datestring += "-";
+    datestring += calendar.getMonthName(true);
+    datestring += "-";
+    datestring += String(calendar.getYear());
+    datestring += " ";
+
+    int hrs, mins, secs;
+    hrs = calendar.getHours();
+    mins = calendar.getMinutes();
+    secs = calendar.getSeconds();
+
+    datestring += hrs;
+
+    if (mins < 10)
+        datestring += 0;
+
+    datestring += mins;
+
+    if (secs < 0)
+        datestring += 0;
+
+    datestring += secs;
+
+    return datestring;
+
+}
+
+
+void RecordNode::setParameter(int parameterIndex, float newValue)
+{
+    //editor->updateParameterButtons(parameterIndex);
+
+    // 0 = stop recording
+    // 1 = start recording
+    // 2 = toggle individual channel (0.0f = OFF, anything else = ON)
+
+    if (parameterIndex == 1)
+    {
+
+        isRecording = true;
+        hasRecorded = true;
+        // std::cout << "START RECORDING." << std::endl;
+
+        if (newDirectoryNeeded)
+        {
+            createNewDirectory();
+            recordingNumber = 0;
+            experimentNumber = 1;
+            EVERY_ENGINE->directoryChanged();
+        }
+        else
+        {
+            recordingNumber++; // increment recording number within this directory
+        }
+
+        if (!rootFolder.exists())
+        {
+            rootFolder.createDirectory();
+            String settingsFileName = rootFolder.getFullPathName() + File::separator + "settings.xml";
+            getEditorViewport()->saveState(File(settingsFileName));
+        }
+
+        EVERY_ENGINE->openFiles(rootFolder, experimentNumber, recordingNumber);
+
+        allFilesOpened = true;
+
+    }
+    else if (parameterIndex == 0)
+    {
+
+
+        // std::cout << "STOP RECORDING." << std::endl;
+
+        if (isRecording)
+        {
+
+            // close necessary files
+            signalFilesShouldClose = true;
+
+        }
+
+        isRecording = false;
+
+
+    }
+    else if (parameterIndex == 2)
+    {
+
+        if (isProcessing)
+        {
+
+            std::cout << "Toggling channel " << currentChannel << std::endl;
+
+            if (isRecording)
+            {
+                //Toggling channels while recording isn't allowed. Code shouldn't reach here.
+                //In case it does, display an error and exit.
+                sendActionMessage("Toggling record channels while recording is not allowed");
+                std::cout << "ERROR: Wrong code section reached\n Toggling record channels while recording is not allowed." << std::endl;
+                return;
+            }
+
+            if (newValue == 0.0f)
+            {
+                channelPointers[currentChannel]->setRecordState(false);
+            }
+            else
+            {
+                channelPointers[currentChannel]->setRecordState(true);
+            }
+        }
+    }
+}
+
+void RecordNode::closeAllFiles()
+{
+    if (allFilesOpened)
+    {
+        EVERY_ENGINE->closeFiles();
+        allFilesOpened = false;
+    }
+}
+
+bool RecordNode::enable()
+{
+    if (hasRecorded)
+    {
+        hasRecorded = false;
+        experimentNumber++;
+    }
+
+    //When starting a recording, if a new directory is needed it gets rewritten. Else is incremented by one.
+    recordingNumber = -1;
+    EVERY_ENGINE->configureEngine();
+    EVERY_ENGINE->startAcquisition();
+    isProcessing = true;
+    return true;
+}
+
+
+bool RecordNode::disable()
+{
+    // close files if necessary
+    setParameter(0, 10.0f);
+
+    if (isProcessing)
+        closeAllFiles();
+
+    isProcessing = false;
+
+    return true;
+}
+
+float RecordNode::getFreeSpace()
+{
+    return 1.0f - float(dataDirectory.getBytesFreeOnVolume())/float(dataDirectory.getVolumeTotalSize());
+}
+
+
+void RecordNode::handleEvent(int eventType, MidiMessage& event, int samplePosition)
+{
+    if ((eventType == TTL) || (eventType == MESSAGE))
+    {
+        if (event.getNoteNumber() > 0) // processor ID > 0
+        {
+            EVERY_ENGINE->writeEvent(eventType, event, samplePosition);
+        }
+    }
+    else if (eventType == TIMESTAMP)
+    {
+        const uint8* dataptr = event.getRawData();
+
+        // // double-check buffer contents:s
+        // std::cout << (int) *(dataptr + 11) << " " <<
+        //             (int) *(dataptr + 10) << " " <<
+        //             (int) *(dataptr + 9) << " " <<
+        //             (int) *(dataptr + 8) << " " <<
+        //             (int) *(dataptr + 7) << " " <<
+        //             (int) *(dataptr + 6) << " " <<
+        //             (int) *(dataptr + 5) << " " <<
+        //             (int) *(dataptr + 4) << std::endl;
+
+        memcpy(&timestamp, dataptr + 4, 8); // remember to skip first four bytes
+        EVERY_ENGINE->updateTimeStamp(timestamp);
+    }
+    else if (eventType == MESSAGE)
+    {
+        std::cout << "Received event!" << std::endl;
+    }
+
+}
+
+void RecordNode::process(AudioSampleBuffer& buffer,
+                         MidiBuffer& events,
+                         int& nSamples)
+{
+
+    if (isRecording && allFilesOpened)
+    {
+
+        // FIRST: cycle through events -- extract the TTLs and the timestamps
+        checkForEvents(events);
+
+        // SECOND: write channel data
+        if (channelPointers.size() > 0)
+        {
+            EVERY_ENGINE->writeData(buffer,nSamples);
+        }
+
+        //  std::cout << nSamples << " " << samplesWritten << " " << blockIndex << std::endl;
+
+        return;
+
+    }
+
+    // this is intended to prevent parameter changes from closing files
+    // before recording stops
+    if (signalFilesShouldClose)
+    {
+        closeAllFiles();
+        signalFilesShouldClose = false;
+    }
+
+}
+
+void RecordNode::registerProcessor(GenericProcessor* sourceNode)
+{
+    EVERY_ENGINE->registerProcessor(sourceNode);
+}
+
+Channel* RecordNode::getDataChannel(int index)
+{
+    return channelPointers[index];
+}
+
+void RecordNode::registerRecordEngine(RecordEngine* engine)
+{
+    engineArray.add(engine);
+}
+
+void RecordNode::registerSpikeSource(GenericProcessor* processor)
+{
+    EVERY_ENGINE->registerSpikeSource(processor);
+}
+
+int RecordNode::addSpikeElectrode(SpikeRecordInfo* elec)
+{
+    elec->recordIndex=spikeElectrodeIndex;
+    spikeElectrodePointers.add(elec);
+    EVERY_ENGINE->addSpikeElectrode(spikeElectrodeIndex,elec);
+    return spikeElectrodeIndex++;
+}
+
+void RecordNode::writeSpike(SpikeObject& spike, int electrodeIndex)
+{
+    EVERY_ENGINE->writeSpike(spike,electrodeIndex);
+}
+
+SpikeRecordInfo* RecordNode::getSpikeElectrode(int index)
+{
+    return spikeElectrodePointers[index];
+}
+
+void RecordNode::clearRecordEngines()
+{
+    engineArray.clear();
+}
diff --git a/Source/Processors/RecordNode.h b/Source/Processors/RecordNode/RecordNode.h
similarity index 72%
rename from Source/Processors/RecordNode.h
rename to Source/Processors/RecordNode/RecordNode.h
index 39b3c1d031b7ebf0786b0f17c326c88745ed5a5d..446ba15968ced19e3c20a4330d1f07958c46da3e 100755
--- a/Source/Processors/RecordNode.h
+++ b/Source/Processors/RecordNode/RecordNode.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -23,15 +23,16 @@
 
 #ifndef __RECORDNODE_H_FB9B1CA7__
 #define __RECORDNODE_H_FB9B1CA7__
-
-
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 #include <stdio.h>
 #include <map>
 
 
-#include "GenericProcessor.h"
-#include "Channel.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "../Channel/Channel.h"
+#include "RecordEngine.h"
+
+
 
 #define HEADER_SIZE 1024
 #define BLOCK_LENGTH 1024
@@ -71,11 +72,26 @@ public:
     */
     void setParameter(int parameterIndex, float newValue);
 
+	/** Called by the processor graph for each processor that could record data
+	*/
+    void registerProcessor(GenericProcessor* sourceNode);
+	/** Called by the processor graph for each recordable channel
+	*/
     void addInputChannel(GenericProcessor* sourceNode, int chan);
 
     bool enable();
     bool disable();
 
+    /** returns channel names and whether we record them */
+    void getChannelNamesAndRecordingStatus(StringArray &names, Array<bool> &recording);
+
+    /** update channel name */
+    void updateChannelName(int channelIndex, String newname);
+
+	/** Get channel stored in channelPointers array
+	*/
+    Channel* getDataChannel(int index);
+
     /** Called by the ControlPanel to determine the amount of space
         left in the current dataDirectory.
     */
@@ -103,21 +119,40 @@ public:
     */
     void createNewDirectory();
 
-    /** Creates a new data file for each channel.
-     */
-    void createNewFiles();
-
-    /** Creates a new data file for each channel.
-     */
-    void appendTrialNumber(bool);
-
-    void updateTrialNumber();
 
     File getDataDirectory()
     {
         return rootFolder;
     }
 
+    void appendTrialNumber(bool);
+    
+    void updateTrialNumber();
+
+	/** Adds a Record Engine to use
+	*/
+    void registerRecordEngine(RecordEngine* engine);
+
+	/** Clears the list of active Record Engines
+	*/
+	void clearRecordEngines();
+
+	/** Must be called by a spike recording source on the "enable" method
+	*/
+    void registerSpikeSource(GenericProcessor* processor);
+
+	/** Registers an electrode group for spike recording
+	Must be called by a spike recording source on the "enable" method
+	after the call to registerSpikeSource 
+	*/
+    int addSpikeElectrode(SpikeRecordInfo* elec);
+
+	/** Called by a spike recording source to write a spike to file
+	*/
+    void writeSpike(SpikeObject& spike, int electrodeIndex);
+
+    SpikeRecordInfo* getSpikeElectrode(int index);
+
     /** Signals when to create a new data directory when recording starts.*/
     bool newDirectoryNeeded;
 
@@ -127,12 +162,6 @@ public:
     /** Generate a Matlab-compatible datestring */
     String generateDateString();
 
-    CriticalSection* getLock()
-    {
-        return &diskWriteLock;
-    }
-
-
 private:
 
     /** Keep the RecordNode informed of acquisition and record states.
@@ -148,25 +177,11 @@ private:
     */
     File rootFolder;
 
-    /** Holds data that has been converted from float to int16 before
-        saving.
-    */
-    int16* continuousDataIntegerBuffer;
-
-    /** Holds data that has been converted from float to int16 before
-        saving.
-    */
-    float* continuousDataFloatBuffer;
-
-    AudioSampleBuffer zeroBuffer;
 
     /** Integer timestamp saved for each buffer.
     */
     int64 timestamp;
 
-    /** Integer to keep track of the number samples written in each block */
-    int blockIndex;
-
     /** Integer to keep track of number of recording sessions in the same file */
     uint16 recordingNumber;
 
@@ -174,12 +189,6 @@ private:
     */
     Time timer;
 
-    /** Opens a single file */
-    void openFile(Channel* ch);
-
-    /** Closes a single file */
-    void closeFile(Channel* ch);
-
     /** Closes all open files after recording has finished.
     */
     void closeAllFiles();
@@ -190,16 +199,17 @@ private:
     /** Pointers to all event channels */
     Array<Channel*> eventChannelPointers;
 
-    /** Generates a header for a given channel */
-    String generateHeader(Channel* ch);
+    OwnedArray<SpikeRecordInfo> spikeElectrodePointers;
+
+    int spikeElectrodeIndex;
+
+    int experimentNumber;
+    bool hasRecorded;
 
     /** Generates a default directory name, based on the current date and time */
     String generateDirectoryName();
 
 
-    /** Generate filename for a given channel */
-    void updateFileName(Channel* ch);
-
     /** Cycle through the event buffer, looking for data to save */
     void handleEvent(int eventType, MidiMessage& event, int samplePos);
 
@@ -222,9 +232,16 @@ private:
 
     CriticalSection diskWriteLock;
 
+    Array<String> modifiedChannelNames;
+    Array<int> modifiedChannelInd;
+
     bool appendTrialNum;
     int trialNum;
 
+    /**RecordEngines loaded**/
+    OwnedArray<RecordEngine> engineArray;
+
+
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(RecordNode);
 
 };
diff --git a/Source/Processors/ReferenceNode.cpp b/Source/Processors/ReferenceNode/ReferenceNode.cpp
similarity index 93%
rename from Source/Processors/ReferenceNode.cpp
rename to Source/Processors/ReferenceNode/ReferenceNode.cpp
index fc87145ba62053a5b0a01cd9b4b6ef9d982d7011..b162d8b42d619a820491c8be70e5c6f9b4871da6 100644
--- a/Source/Processors/ReferenceNode.cpp
+++ b/Source/Processors/ReferenceNode/ReferenceNode.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -23,7 +23,7 @@
 
 #include <stdio.h>
 #include "ReferenceNode.h"
-#include "Editors/ReferenceNodeEditor.h"
+#include "ReferenceNodeEditor.h"
 
 
 
diff --git a/Source/Processors/ReferenceNode.h b/Source/Processors/ReferenceNode/ReferenceNode.h
similarity index 88%
rename from Source/Processors/ReferenceNode.h
rename to Source/Processors/ReferenceNode/ReferenceNode.h
index 6f78e4196d08f8ff966a2e1d88aa754e576833c3..15038e72a5d824c7c2a9af0ccbbdb4c31d14f599 100644
--- a/Source/Processors/ReferenceNode.h
+++ b/Source/Processors/ReferenceNode/ReferenceNode.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,9 +25,9 @@
 #define __REFERENCENODE_H_786EA929__
 
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 
-#include "GenericProcessor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 
 /**
diff --git a/Source/Processors/Editors/ReferenceNodeEditor.cpp b/Source/Processors/ReferenceNode/ReferenceNodeEditor.cpp
similarity index 93%
rename from Source/Processors/Editors/ReferenceNodeEditor.cpp
rename to Source/Processors/ReferenceNode/ReferenceNodeEditor.cpp
index 0dc80bff2ff439dbce5602cf82f9315cd75a6cf8..25054001c1b7bb6746648e3911703623663aa857 100644
--- a/Source/Processors/Editors/ReferenceNodeEditor.cpp
+++ b/Source/Processors/ReferenceNode/ReferenceNodeEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -23,7 +23,7 @@
 
 
 #include "ReferenceNodeEditor.h"
-#include "../ReferenceNode.h"
+#include "ReferenceNode.h"
 #include <stdio.h>
 
 
diff --git a/Source/Processors/Editors/ReferenceNodeEditor.h b/Source/Processors/ReferenceNode/ReferenceNodeEditor.h
similarity index 92%
rename from Source/Processors/Editors/ReferenceNodeEditor.h
rename to Source/Processors/ReferenceNode/ReferenceNodeEditor.h
index 7ae0f9a5de24865e06b096d5de429a1156a0ee43..efce3f1a014f384e3fab2a6a805c88d8b7571f6c 100644
--- a/Source/Processors/Editors/ReferenceNodeEditor.h
+++ b/Source/Processors/ReferenceNode/ReferenceNodeEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,7 +25,7 @@
 #define __REFERENCENODEEDITOR_H_370C056D__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 /**
 
diff --git a/Source/Processors/ResamplingNode.cpp b/Source/Processors/ResamplingNode/ResamplingNode.cpp
similarity index 95%
rename from Source/Processors/ResamplingNode.cpp
rename to Source/Processors/ResamplingNode/ResamplingNode.cpp
index cb595dc4c7c2cc537f9181b7adc4595e65ac751c..af68d740f32b795fe7d12dc0fc20536766e1e4ea 100755
--- a/Source/Processors/ResamplingNode.cpp
+++ b/Source/Processors/ResamplingNode/ResamplingNode.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,7 +22,7 @@
 */
 
 #include "ResamplingNode.h"
-#include "Editors/ResamplingNodeEditor.h"
+#include "ResamplingNodeEditor.h"
 
 #include <stdio.h>
 
diff --git a/Source/Processors/ResamplingNode.h b/Source/Processors/ResamplingNode/ResamplingNode.h
similarity index 90%
rename from Source/Processors/ResamplingNode.h
rename to Source/Processors/ResamplingNode/ResamplingNode.h
index 9cd95c4c183b12f6ad652b18063204d43b864d7c..0b864eade577f5f8fcf20df097be62e1d84db291 100755
--- a/Source/Processors/ResamplingNode.h
+++ b/Source/Processors/ResamplingNode/ResamplingNode.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,9 +25,9 @@
 #define __RESAMPLINGNODE_H_79663B0__
 
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 #include "../Dsp/Dsp.h"
-#include "GenericProcessor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 #define TEMP_BUFFER_WIDTH 5000
 
diff --git a/Source/Processors/Editors/ResamplingNodeEditor.cpp b/Source/Processors/ResamplingNode/ResamplingNodeEditor.cpp
similarity index 94%
rename from Source/Processors/Editors/ResamplingNodeEditor.cpp
rename to Source/Processors/ResamplingNode/ResamplingNodeEditor.cpp
index f18846b7ded9387c74f10192dad777be1d464d30..6437754e30819ecd5f4692612b3cbace7640886f 100644
--- a/Source/Processors/Editors/ResamplingNodeEditor.cpp
+++ b/Source/Processors/ResamplingNode/ResamplingNodeEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/Editors/ResamplingNodeEditor.h b/Source/Processors/ResamplingNode/ResamplingNodeEditor.h
similarity index 91%
rename from Source/Processors/Editors/ResamplingNodeEditor.h
rename to Source/Processors/ResamplingNode/ResamplingNodeEditor.h
index 9e347e62b696f8911113b45e0093233bb8bc1471..2cc8d380d1e6658abcea6c9feeb516f2ad079be3 100644
--- a/Source/Processors/Editors/ResamplingNodeEditor.h
+++ b/Source/Processors/ResamplingNode/ResamplingNodeEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,7 +26,7 @@
 
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 /**
 
diff --git a/Source/Processors/Serial/PulsePal.cpp b/Source/Processors/Serial/PulsePal.cpp
index 8dccb1fbb41558a669f5e9f4e242dd1362953048..f1b745892122b9786a5a2e819d961c732951a6cb 100644
--- a/Source/Processors/Serial/PulsePal.cpp
+++ b/Source/Processors/Serial/PulsePal.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/Serial/PulsePal.h b/Source/Processors/Serial/PulsePal.h
index 819f2c4d59a957e2135d72e5858a2052e7d2e8d7..fc3cad7bde23d513c25324922fb0b10876bf915b 100644
--- a/Source/Processors/Serial/PulsePal.h
+++ b/Source/Processors/Serial/PulsePal.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/Serial/ofConstants.h b/Source/Processors/Serial/ofConstants.h
index f8179b25d922de782362171a5bcac6a772886a18..1be50a332e8f1cbb8da325607765398eb1e16639 100755
--- a/Source/Processors/Serial/ofConstants.h
+++ b/Source/Processors/Serial/ofConstants.h
@@ -47,9 +47,6 @@
 
 #include <windows.h>
 #define GLEW_STATIC
-//#include "GL\glew.h"
-//#include "GL\wglew.h"
-//#include "glu.h"
 #define __WINDOWS_DS__
 #define __WINDOWS_MM__
 #if (_MSC_VER)       // microsoft visual studio
@@ -91,9 +88,6 @@
 #define __MACOSX_CORE__
 #endif
 #include <unistd.h>
-//#include "GL/glew.h"
-//#include <OpenGL/gl.h>
-//#include <ApplicationServices/ApplicationServices.h>
 
 #if defined(__LITTLE_ENDIAN__)
 #define TARGET_LITTLE_ENDIAN		// intel cpu
@@ -103,9 +97,6 @@
 #ifdef TARGET_LINUX
 #define GL_GLEXT_PROTOTYPES
 #include <unistd.h>
-//#include <GL/glew.h>
-//#include <GL/gl.h>
-//#include <GL/glx.h>
 
 // for some reason, this isn't defined at compile time,
 // so this hack let's us work
@@ -124,29 +115,15 @@
 
 
 #ifdef TARGET_OF_IPHONE
-//#import <OpenGLES/ES1/gl.h>
-//#import <OpenGLES/ES1/glext.h>
-
 #define TARGET_LITTLE_ENDIAN		// arm cpu	
 #endif
 
 #ifdef TARGET_ANDROID
 #include <typeinfo>
 #include <unistd.h>
-//#include <GLES/gl.h>
-//#define GL_GLEXT_PROTOTYPES
-//#include <GLES/glext.h>
-
 #define TARGET_LITTLE_ENDIAN
 #endif
 
-#ifdef TARGET_OPENGLES
-#include "glu.h"
-//typedef GLushort ofIndexType ;
-#else
-//typedef GLuint ofIndexType;
-#endif
-
 
 #ifndef __MWERKS__
 #include <cstdlib>
diff --git a/Source/Processors/SerialInput.cpp b/Source/Processors/SerialInput/SerialInput.cpp
similarity index 95%
rename from Source/Processors/SerialInput.cpp
rename to Source/Processors/SerialInput/SerialInput.cpp
index 4946179ffb22247f8ea5cb1eddb8223d7b7bc52d..3664068bd1e8dd7d479c9d913fdc65c3b7add50a 100644
--- a/Source/Processors/SerialInput.cpp
+++ b/Source/Processors/SerialInput/SerialInput.cpp
@@ -2,7 +2,7 @@
  ------------------------------------------------------------------
 
  This file is part of the Open Ephys GUI
- Copyright (C) 2013 Florian Franzen
+ Copyright (C) 2014 Florian Franzen
 
  ------------------------------------------------------------------
 
diff --git a/Source/Processors/SerialInput.h b/Source/Processors/SerialInput/SerialInput.h
similarity index 91%
rename from Source/Processors/SerialInput.h
rename to Source/Processors/SerialInput/SerialInput.h
index 44b14d36595071478cb76b17542813d5448d2157..96f8292d47409ec5f64595db38db4813f6e2bca2 100644
--- a/Source/Processors/SerialInput.h
+++ b/Source/Processors/SerialInput/SerialInput.h
@@ -2,7 +2,7 @@
  ------------------------------------------------------------------
 
  This file is part of the Open Ephys GUI
- Copyright (C) 2013 Florian Franzen
+ Copyright (C) 2014 Florian Franzen
 
  ------------------------------------------------------------------
 
@@ -28,11 +28,11 @@
 #include <Windows.h>
 #endif
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "GenericProcessor.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
-#include "Editors/SerialInputEditor.h"
-#include "Serial/ofSerial.h"
+#include "SerialInputEditor.h"
+#include "../Serial/ofSerial.h"
 
 /**
 
diff --git a/Source/Processors/Editors/SerialInputEditor.cpp b/Source/Processors/SerialInput/SerialInputEditor.cpp
similarity index 94%
rename from Source/Processors/Editors/SerialInputEditor.cpp
rename to Source/Processors/SerialInput/SerialInputEditor.cpp
index 9fbf677b81bc37ae4b31a619e7c469ef8b6a52d6..6488366d94947caea8b7ab9a4c7da580c3c42b86 100644
--- a/Source/Processors/Editors/SerialInputEditor.cpp
+++ b/Source/Processors/SerialInput/SerialInputEditor.cpp
@@ -2,7 +2,7 @@
  ------------------------------------------------------------------
 
  This file is part of the Open Ephys GUI
- Copyright (C) 2013 Florian Franzen
+ Copyright (C) 2014 Florian Franzen
 
  ------------------------------------------------------------------
 
@@ -22,7 +22,7 @@
  */
 
 #include "SerialInputEditor.h"
-#include "../SerialInput.h"
+#include "SerialInput.h"
 
 #include <string>
 #include <iostream>
diff --git a/Source/Processors/Editors/SerialInputEditor.h b/Source/Processors/SerialInput/SerialInputEditor.h
similarity index 93%
rename from Source/Processors/Editors/SerialInputEditor.h
rename to Source/Processors/SerialInput/SerialInputEditor.h
index ef3fd40c46c5322dce7708c49804a6172a70af6c..49a40a3774738515250723e074864e272f0a399f 100644
--- a/Source/Processors/Editors/SerialInputEditor.h
+++ b/Source/Processors/SerialInput/SerialInputEditor.h
@@ -2,7 +2,7 @@
  ------------------------------------------------------------------
 
  This file is part of the Open Ephys GUI
- Copyright (C) 2013 Florian Franzen
+ Copyright (C) 2014 Florian Franzen
 
  ------------------------------------------------------------------
 
@@ -29,7 +29,7 @@
 #endif
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 class SerialInput;
 
diff --git a/Source/Processors/SignalGenerator.cpp b/Source/Processors/SignalGenerator/SignalGenerator.cpp
similarity index 96%
rename from Source/Processors/SignalGenerator.cpp
rename to Source/Processors/SignalGenerator/SignalGenerator.cpp
index 63091f84ffa9219ec0205f3e8770f56fd40eada7..43c320fbe062b94ce743ac608f46bfbb5a567ef3 100755
--- a/Source/Processors/SignalGenerator.cpp
+++ b/Source/Processors/SignalGenerator/SignalGenerator.cpp
@@ -25,7 +25,7 @@
 #include "SignalGenerator.h"
 #include <stdio.h>
 #include <math.h>
-#include "Visualization/SpikeObject.h"
+#include "../Visualization/SpikeObject.h"
 
 #ifdef WIN32
 #define copysign(x,y) _copysign(x,y)
diff --git a/Source/Processors/SignalGenerator.h b/Source/Processors/SignalGenerator/SignalGenerator.h
similarity index 90%
rename from Source/Processors/SignalGenerator.h
rename to Source/Processors/SignalGenerator/SignalGenerator.h
index 7e19e74aea60e39e6f3884b1613aa31e4b464e04..eef1de4ee0e9202ab9a493196d0737a048b33fd3 100755
--- a/Source/Processors/SignalGenerator.h
+++ b/Source/Processors/SignalGenerator/SignalGenerator.h
@@ -25,9 +25,9 @@
 #define __SIGNALGENERATOR_H_EAA44B0B__
 
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "GenericProcessor.h"
-#include "Editors/SignalGeneratorEditor.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "SignalGeneratorEditor.h"
 
 /**
 
diff --git a/Source/Processors/Editors/SignalGeneratorEditor.cpp b/Source/Processors/SignalGenerator/SignalGeneratorEditor.cpp
similarity index 96%
rename from Source/Processors/Editors/SignalGeneratorEditor.cpp
rename to Source/Processors/SignalGenerator/SignalGeneratorEditor.cpp
index f4a12a9150bea9d0dc25cf0b3401b440408e8b95..8998f0aeb5a619d8de9a9c1673e8faa6bd210611 100755
--- a/Source/Processors/Editors/SignalGeneratorEditor.cpp
+++ b/Source/Processors/SignalGenerator/SignalGeneratorEditor.cpp
@@ -23,7 +23,7 @@
 
 
 #include "SignalGeneratorEditor.h"
-#include "../SignalGenerator.h"
+#include "SignalGenerator.h"
 #include "../../UI/EditorViewport.h"
 #include <stdio.h>
 
diff --git a/Source/Processors/Editors/SignalGeneratorEditor.h b/Source/Processors/SignalGenerator/SignalGeneratorEditor.h
similarity index 94%
rename from Source/Processors/Editors/SignalGeneratorEditor.h
rename to Source/Processors/SignalGenerator/SignalGeneratorEditor.h
index d4c7ddcc20eb2962df4d3e0e9e0fd678b82f012e..69d39d0d1be607ee8232286d5bbd7794f0088aec 100755
--- a/Source/Processors/Editors/SignalGeneratorEditor.h
+++ b/Source/Processors/SignalGenerator/SignalGeneratorEditor.h
@@ -25,7 +25,7 @@
 #define __SIGNALGENERATOREDITOR_H_841A7078__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 class FilterViewport;
 class WaveformSelector;
diff --git a/Source/Processors/SourceNode.cpp b/Source/Processors/SourceNode/SourceNode.cpp
similarity index 73%
rename from Source/Processors/SourceNode.cpp
rename to Source/Processors/SourceNode/SourceNode.cpp
index b93733cc3ac78235606544384d0e3b661639224f..4fc33fac0e7c1bad823a43b761dd79663af90c58 100755
--- a/Source/Processors/SourceNode.cpp
+++ b/Source/Processors/SourceNode/SourceNode.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,15 +22,17 @@
 */
 
 #include "SourceNode.h"
-#include "DataThreads/DataBuffer.h"
+#include "../DataThreads/DataBuffer.h"
 //#include "DataThreads/IntanThread.h"
-#include "DataThreads/FPGAThread.h"
-#include "DataThreads/FileReaderThread.h"
-#include "DataThreads/RHD2000Thread.h"
-#include "Editors/SourceNodeEditor.h"
-#include "Editors/FileReaderEditor.h"
-#include "Editors/RHD2000Editor.h"
-#include "Channel.h"
+#include "../DataThreads/FPGAThread.h"
+#include "../DataThreads/FileReaderThread.h"
+#include "../DataThreads/RHD2000Thread.h"
+#include "../DataThreads/EcubeThread.h" // Added by Michael Borisov
+#include "../SourceNode/SourceNodeEditor.h"
+#include "../FileReader/FileReaderEditor.h"
+#include "../DataThreads/RHD2000Editor.h"
+#include "../DataThreads/EcubeEditor.h" // Added by Michael Borisov
+#include "../Channel/Channel.h"
 #include <stdio.h>
 
 SourceNode::SourceNode(const String& name_)
@@ -43,7 +45,7 @@ SourceNode::SourceNode(const String& name_)
 
     if (getName().equalsIgnoreCase("RHA2000-EVAL"))
     {
-        // dataThread = new IntanThread(this);
+        // dataThread = new IntanThread(this);o
     }
     else if (getName().equalsIgnoreCase("Custom FPGA"))
     {
@@ -57,6 +59,12 @@ SourceNode::SourceNode(const String& name_)
     {
         dataThread = new RHD2000Thread(this);
     }
+#if ECUBE_COMPILE
+    else if (getName().equalsIgnoreCase("eCube"))
+    {
+        dataThread = new EcubeThread(this);
+    }
+#endif
 
     if (dataThread != 0)
     {
@@ -108,6 +116,85 @@ DataThread* SourceNode::getThread()
     return dataThread;
 }
 
+int SourceNode::modifyChannelName(channelType t, int str, int ch, String newName, bool updateSignalChain)
+{
+    if (dataThread != 0) {
+        int channel_index = dataThread->modifyChannelName(t, str, ch, newName);
+        if (channel_index >= 0 && channel_index < channels.size())
+        {
+            if (channels[channel_index]->getChannelName() != newName)
+            {
+                channels[channel_index]->setName(newName);
+                // propagate this information...
+                
+                if (updateSignalChain)
+                    getEditorViewport()->makeEditorVisible(getEditor(), false, true);
+                    
+            }
+        }
+        return channel_index;
+    }
+    return -1;
+}
+
+int SourceNode::modifyChannelGain(int stream, int channel,channelType type, float gain, bool updateSignalChain)
+{
+    if (dataThread != 0) 
+    {
+        
+        int channel_index = dataThread->modifyChannelGain(type, stream, channel, gain);
+        
+        if (channel_index >= 0 && channel_index < channels.size())
+        {
+            // we now need to update the signal chain to propagate this change.....
+            if (channels[channel_index]->getChannelGain() != gain) 
+            {
+                channels[channel_index]->setGain(gain);
+                
+                if (updateSignalChain)
+                    getEditorViewport()->makeEditorVisible(getEditor(), false, true);
+                
+                return channel_index;
+            }
+        }
+    }
+
+    return -1;
+}
+
+void SourceNode::getChannelsInfo(StringArray &names, Array<channelType> &types, Array<int> &stream, Array<int> &originalChannelNumber, Array<float> &gains)
+{
+    if (dataThread != 0)
+        dataThread->getChannelsInfo(names, types,stream,originalChannelNumber,gains);
+}
+
+void SourceNode::setDefaultNamingScheme(int scheme)
+{
+    if (dataThread != 0) 
+    {
+        dataThread->setDefaultNamingScheme(scheme);
+
+        StringArray names;
+        Array<channelType> types;
+        Array<int> stream;
+        Array<int> originalChannelNumber;
+        Array<float> gains;
+        getChannelsInfo(names, types, stream, originalChannelNumber, gains);
+        for (int k=0;k<names.size();k++)
+        {
+            modifyChannelName(types[k],stream[k],originalChannelNumber[k], names[k],false);
+        }
+    }
+
+}
+
+void SourceNode::getEventChannelNames(StringArray &names)
+{
+    if (dataThread != 0)
+        dataThread->getEventChannelNames(names);
+
+}
+
 void SourceNode::updateSettings()
 {
     if (inputBuffer == 0 && dataThread != 0)
@@ -122,7 +209,7 @@ void SourceNode::updateSettings()
     {
         Channel* ch = new Channel(this, i);
         ch->eventType = TTL;
-        ch->isEventChannel = true;
+        ch->getType() == EVENT_CHANNEL;
         eventChannels.add(ch);
     }
 
diff --git a/Source/Processors/SourceNode.h b/Source/Processors/SourceNode/SourceNode.h
similarity index 76%
rename from Source/Processors/SourceNode.h
rename to Source/Processors/SourceNode/SourceNode.h
index 286bfd4ca10806c7bfd4e8f6ad08707fd8901d74..3e92609d9a268a913c8ee5b3b2f6d108d11ef9bb 100755
--- a/Source/Processors/SourceNode.h
+++ b/Source/Processors/SourceNode/SourceNode.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,11 +24,11 @@
 #ifndef __SOURCENODE_H_DCE798F1__
 #define __SOURCENODE_H_DCE798F1__
 
-#include "../../JuceLibraryCode/JuceHeader.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
 #include <stdio.h>
-#include "DataThreads/DataThread.h"
-#include "GenericProcessor.h"
-#include "../UI/UIComponent.h"
+#include "../DataThreads/DataThread.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "../../UI/UIComponent.h"
 
 /**
 
@@ -60,6 +60,13 @@ public:
     int getDefaultNumOutputs();
     float getDefaultBitVolts();
 
+    int modifyChannelGain(int stream, int channel,channelType type, float gain, bool updateSignalChain);
+    int modifyChannelName(channelType t, int str, int ch, String newName, bool updateSignalChain);
+
+    void getChannelsInfo(StringArray &Names, Array<channelType> &type, Array<int> &stream, Array<int> &originalChannelNumber, Array<float> &gains);
+    void setDefaultNamingScheme(int scheme);
+    void getEventChannelNames(StringArray &names);
+
     AudioProcessorEditor* createEditor();
     bool hasEditor() const
     {
diff --git a/Source/Processors/Editors/SourceNodeEditor.cpp b/Source/Processors/SourceNode/SourceNodeEditor.cpp
similarity index 93%
rename from Source/Processors/Editors/SourceNodeEditor.cpp
rename to Source/Processors/SourceNode/SourceNodeEditor.cpp
index c2c52adda4b5407d7b4ea3f5158d81acb3706a91..808534a3c4aa05d1ceb7e0ad46830113a9139587 100755
--- a/Source/Processors/Editors/SourceNodeEditor.cpp
+++ b/Source/Processors/SourceNode/SourceNodeEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -23,7 +23,7 @@
 
 
 #include "SourceNodeEditor.h"
-#include "../SourceNode.h"
+#include "../SourceNode/SourceNode.h"
 #include <stdio.h>
 
 
diff --git a/Source/Processors/Editors/SourceNodeEditor.h b/Source/Processors/SourceNode/SourceNodeEditor.h
similarity index 89%
rename from Source/Processors/Editors/SourceNodeEditor.h
rename to Source/Processors/SourceNode/SourceNodeEditor.h
index 8425717a3fa02a8b56d2bb263be31bdf01c1c3ad..f4a94262e8fe999403d82b40048a3d38efff8768 100755
--- a/Source/Processors/Editors/SourceNodeEditor.h
+++ b/Source/Processors/SourceNode/SourceNodeEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,8 +25,8 @@
 #define __SOURCENODEEDITOR_H_A1B19E1E__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
-#include "ImageIcon.h"
+#include "../Editors/GenericEditor.h"
+#include "../Editors/ImageIcon.h"
 
 class ImageIcon;
 
diff --git a/Source/Processors/SpikeDetector.cpp b/Source/Processors/SpikeDetector/SpikeDetector.cpp
similarity index 84%
rename from Source/Processors/SpikeDetector.cpp
rename to Source/Processors/SpikeDetector/SpikeDetector.cpp
index 534a84734f123d51ddaa8b982365542c9e85952f..2328994d82785c6a654fa41da3b3cc3651e0a992 100755
--- a/Source/Processors/SpikeDetector.cpp
+++ b/Source/Processors/SpikeDetector/SpikeDetector.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -24,7 +24,7 @@
 #include <stdio.h>
 #include "SpikeDetector.h"
 
-#include "Channel.h"
+#include "../Channel/Channel.h"
 
 SpikeDetector::SpikeDetector()
     : GenericProcessor("Spike Detector"),
@@ -89,7 +89,7 @@ void SpikeDetector::updateSettings()
     {
 
         Channel* ch = new Channel(this, i);
-        ch->isEventChannel = true;
+        //ch->isEventChannel = true;
         ch->eventType = SPIKE_BASE_CODE + electrodes[i]->numChannels;
         ch->name = electrodes[i]->name;
 
@@ -111,7 +111,7 @@ bool SpikeDetector::addElectrode(int nChans)
     }
     else
     {
-        Electrode* e = electrodes.getLast();
+        SimpleElectrode* e = electrodes.getLast();
         firstChan = *(e->channels+(e->numChannels-1))+1;
     }
 
@@ -138,7 +138,7 @@ bool SpikeDetector::addElectrode(int nChans)
     newName += " ";
     newName += electrodeCounter[nChans];
 
-    Electrode* newElectrode = new Electrode();
+    SimpleElectrode* newElectrode = new SimpleElectrode();
 
     newElectrode->name = newName;
     newElectrode->numChannels = nChans;
@@ -183,7 +183,7 @@ StringArray SpikeDetector::getElectrodeNames()
     return names;
 }
 
-void SpikeDetector::resetElectrode(Electrode* e)
+void SpikeDetector::resetElectrode(SimpleElectrode* e)
 {
     e->lastBufferIndex = 0;
 }
@@ -228,19 +228,19 @@ int SpikeDetector::getChannel(int index, int i)
     return *(electrodes[index]->channels+i);
 }
 
-Array<Electrode*> SpikeDetector::getElectrodes()
+Array<SimpleElectrode*> SpikeDetector::getElectrodes()
 {
     return electrodes;
 }
 
-Electrode* SpikeDetector::setCurrentElectrodeIndex(int i)
+SimpleElectrode* SpikeDetector::setCurrentElectrodeIndex(int i)
 {
     jassert(i >= 0 & i < electrodes.size());
     currentElectrode = i;
     return electrodes[i];
 }
 
-Electrode* SpikeDetector::getActiveElectrode()
+SimpleElectrode* SpikeDetector::getActiveElectrode()
 {
     if (electrodes.size() == 0)
         return nullptr;
@@ -304,6 +304,7 @@ void SpikeDetector::setParameter(int parameterIndex, float newValue)
 bool SpikeDetector::enable()
 {
 
+    sampleRateForElectrode = (uint16_t) getSampleRate();
     useOverflowBuffer = false;
     return true;
 }
@@ -344,7 +345,24 @@ void SpikeDetector::addWaveformToSpikeObject(SpikeObject* s,
     int spikeLength = electrodes[electrodeNumber]->prePeakSamples +
                       + electrodes[electrodeNumber]->postPeakSamples;
 
+//    uint8_t     eventType;
+//    int64_t    timestamp;
+//    int64_t    timestamp_software;
+//    uint16_t    source; // used internally, the index of the electrode in the electrode array
+//    uint16_t    nChannels;
+//    uint16_t    nSamples;
+//    uint16_t    sortedId;   // sorted unit ID (or 0 if unsorted)
+//    uint16_t    electrodeID; // unique electrode ID (regardless electrode position in the array)
+//    uint16_t    channel; // the channel in which threshold crossing was detected (index in channel array, not absolute channel number).
+//    uint8_t     color[3];
+//    float       pcProj[2];
+//    uint16_t    samplingFrequencyHz;
+//    uint16_t    data[MAX_NUMBER_OF_SPIKE_CHANNELS* MAX_NUMBER_OF_SPIKE_CHANNEL_SAMPLES];
+//    float       gain[MAX_NUMBER_OF_SPIKE_CHANNELS];
+//    uint16_t    threshold[MAX_NUMBER_OF_SPIKE_CHANNELS];
+    
     s->timestamp = timestamp + peakIndex;
+    
 
     s->nSamples = spikeLength;
 
@@ -411,7 +429,7 @@ void SpikeDetector::process(AudioSampleBuffer& buffer,
 {
 
     // cycle through electrodes
-    Electrode* electrode;
+    SimpleElectrode* electrode;
     dataBuffer = &buffer;
 
     checkForEvents(events); // need to find any timestamp events before extracting spikes
@@ -432,24 +450,17 @@ void SpikeDetector::process(AudioSampleBuffer& buffer,
         // cycle through samples
         while (samplesAvailable(nSamples))
         {
-
             sampleIndex++;
-
-
             // cycle through channels
             for (int chan = 0; chan < electrode->numChannels; chan++)
             {
-
                 // std::cout << "  channel " << chan << std::endl;
-
                 if (*(electrode->isActive+chan))
                 {
-
                     int currentChannel = *(electrode->channels+chan);
 
                     if (-getNextSample(currentChannel) > *(electrode->thresholds+chan)) // trigger spike
                     {
-
                         //std::cout << "Spike detected on electrode " << i << std::endl;
                         // find the peak
                         int peakIndex = sampleIndex;
@@ -463,11 +474,32 @@ void SpikeDetector::process(AudioSampleBuffer& buffer,
 
                         peakIndex = sampleIndex;
                         sampleIndex -= (electrode->prePeakSamples+1);
+                        
+//                        uint8_t     eventType;
+//                        int64_t    timestamp;
+//                        int64_t    timestamp_software;
+//                        uint16_t    source; // used internally, the index of the electrode in the electrode array
+//                        uint16_t    nChannels;
+//                        uint16_t    nSamples;
+//                        uint16_t    sortedId;   // sorted unit ID (or 0 if unsorted)
+//                        uint16_t    electrodeID; // unique electrode ID (regardless electrode position in the array)
+//                        uint16_t    channel; // the channel in which threshold crossing was detected (index in channel array, not absolute channel number).
+//                        uint8_t     color[3];
+//                        float       pcProj[2];
+//                        uint16_t    samplingFrequencyHz;
+//                        uint16_t    data[MAX_NUMBER_OF_SPIKE_CHANNELS* MAX_NUMBER_OF_SPIKE_CHANNEL_SAMPLES];
+//                        float       gain[MAX_NUMBER_OF_SPIKE_CHANNELS];
+//                        uint16_t    threshold[MAX_NUMBER_OF_SPIKE_CHANNELS];
 
                         SpikeObject newSpike;
                         newSpike.timestamp = peakIndex;
+                        newSpike.timestamp_software = -1;
                         newSpike.source = i;
                         newSpike.nChannels = electrode->numChannels;
+                        newSpike.sortedId = 0;
+                        newSpike.electrodeID = 0;
+                        newSpike.channel = 0;
+                        newSpike.samplingFrequencyHz = sampleRateForElectrode;
 
                         currentIndex = 0;
 
diff --git a/Source/Processors/SpikeDetector.h b/Source/Processors/SpikeDetector/SpikeDetector.h
similarity index 88%
rename from Source/Processors/SpikeDetector.h
rename to Source/Processors/SpikeDetector/SpikeDetector.h
index c84ec682b8962b9cc479a28f0a33d019c45e8a98..8c5292c999f0a475ef3ac5e9b001a866aa0e34bf 100755
--- a/Source/Processors/SpikeDetector.h
+++ b/Source/Processors/SpikeDetector/SpikeDetector.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,12 +26,12 @@
 
 #include "../../JuceLibraryCode/JuceHeader.h"
 
-#include "GenericProcessor.h"
-#include "Editors/SpikeDetectorEditor.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "SpikeDetectorEditor.h"
 
-#include "Visualization/SpikeObject.h"
+#include "../Visualization/SpikeObject.h"
 
-struct Electrode
+struct SimpleElectrode
 {
 
     String name;
@@ -136,13 +136,13 @@ public:
     StringArray getElectrodeNames();
 
     /** Returns array of electrodes. */
-    Array<Electrode*> getElectrodes();
+    Array<SimpleElectrode*> getElectrodes();
 
     /** Returns array of electrodes. */
-    Electrode* getActiveElectrode();
+    SimpleElectrode* getActiveElectrode();
 
     /** Sets the current electrode index */
-    Electrode* setCurrentElectrodeIndex(int);
+    SimpleElectrode* setCurrentElectrodeIndex(int);
 
     /** Returns a list of possible electrode types (e.g., stereotrode, tetrode). */
     StringArray electrodeTypes;
@@ -179,7 +179,7 @@ private:
     uint8_t* spikeBuffer;///[256];
     int64 timestamp;
 
-    Array<Electrode*> electrodes;
+    Array<SimpleElectrode*> electrodes;
 
     // void createSpikeEvent(int& peakIndex,
     // 					  int& electrodeNumber,
@@ -194,7 +194,9 @@ private:
                                   int& electrodeNumber,
                                   int& currentChannel);
 
-    void resetElectrode(Electrode*);
+    void resetElectrode(SimpleElectrode*);
+    
+    uint16_t sampleRateForElectrode;
 
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SpikeDetector);
 
diff --git a/Source/Processors/Editors/SpikeDetectorEditor.cpp b/Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp
similarity index 91%
rename from Source/Processors/Editors/SpikeDetectorEditor.cpp
rename to Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp
index da6f70061b6fe3101300ce83c85aa9d57e4374dd..75ca82c4522c76d9bb3316383a8c524484ca74f2 100755
--- a/Source/Processors/Editors/SpikeDetectorEditor.cpp
+++ b/Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,8 +22,8 @@
 */
 
 #include "SpikeDetectorEditor.h"
-#include "../SpikeDetector.h"
-#include "ChannelSelector.h"
+#include "SpikeDetector.h"
+#include "../Editors/ChannelSelector.h"
 #include "../../UI/EditorViewport.h"
 #include <stdio.h>
 
@@ -332,15 +332,15 @@ void SpikeDetectorEditor::buttonEvent(Button* button)
 
         SpikeDetector* processor = (SpikeDetector*) getProcessor();
 
-        Array<Electrode*> electrodes = processor->getElectrodes();
+        Array<SimpleElectrode*> electrodes = processor->getElectrodes();
 
         for (int i = 0; i < electrodes.size(); i++)
         {
-            Electrode* e = electrodes[i];
+            SimpleElectrode* e = electrodes[i];
             e->isMonitored = false;
         }
 
-        Electrode* e = processor->getActiveElectrode();
+        SimpleElectrode* e = processor->getActiveElectrode();
 
         if (e != nullptr)
         {
@@ -509,14 +509,16 @@ void SpikeDetectorEditor::comboBoxChanged(ComboBox* comboBox)
     {
         int ID = comboBox->getSelectedId();
 
+        std::cout << "ID: " << ID << std::endl;
+
         if (ID == 0)
         {
-            SpikeDetector* processor = (SpikeDetector*) getProcessor();
+            //SpikeDetector* processor = (SpikeDetector*) getProcessor();
 
-            processor->setElectrodeName(lastId, comboBox->getText());
-            comboBox->changeItemText(lastId, comboBox->getText());
+            //processor->setElectrodeName(lastId, comboBox->getText());
+            //comboBox->changeItemText(lastId, comboBox->getText());
             //electrodeList->setText(comboBox->getText());
-            //refreshElectrodeList();
+            refreshElectrodeList();
 
         }
         else
@@ -525,7 +527,7 @@ void SpikeDetectorEditor::comboBoxChanged(ComboBox* comboBox)
             lastId = ID;
 
             SpikeDetector* processor = (SpikeDetector*) getProcessor();
-            Electrode* e = processor->setCurrentElectrodeIndex(ID-1);
+            SimpleElectrode* e = processor->setCurrentElectrodeIndex(ID-1);
 
             electrodeEditorButtons[1]->setToggleState(e->isMonitored, dontSendNotification);
 
@@ -608,8 +610,8 @@ ThresholdSlider::ThresholdSlider(Font f) : Slider("name"), font(f)
 {
 
     setSliderStyle(Slider::Rotary);
-    setRange(25.0f,400.0f,5.0f);
-    // setValue(75.0f);
+    setRange(-400,400.0f,10.0f);
+    setValue(-20.0f);
     setTextBoxStyle(Slider::NoTextBox, false, 40, 20);
 
 }
@@ -667,10 +669,17 @@ Path ThresholdSlider::makeRotaryPath(double min, double max, double val)
 
     Path p;
 
-    double start = 5*double_Pi/4 - 0.11;
-
-    double range = (val-min)/(max - min)*1.5*double_Pi + start + 0.22;
-
+    double start;
+    double range;
+    if (val > 0)
+    {
+        start = 0;
+        range = (val)/(1.3*max )*double_Pi ;
+    }
+    if (val < 0) {
+        start = -(val)/(1.3*min)*double_Pi ;
+        range = 0;
+    }
     p.addPieSegment(6,6, getWidth()-12, getHeight()-12, start, range, 0.65);
 
     return p;
diff --git a/Source/Processors/Editors/SpikeDetectorEditor.h b/Source/Processors/SpikeDetector/SpikeDetectorEditor.h
similarity index 92%
rename from Source/Processors/Editors/SpikeDetectorEditor.h
rename to Source/Processors/SpikeDetector/SpikeDetectorEditor.h
index 6a4b44cf375a880399d543e32328e2998ec43b8a..919c9642150a99671d870e78de5d6e2a975940d0 100755
--- a/Source/Processors/Editors/SpikeDetectorEditor.h
+++ b/Source/Processors/SpikeDetector/SpikeDetectorEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,8 +26,8 @@
 
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
-#include "ElectrodeButtons.h"
+#include "../Editors/GenericEditor.h"
+#include "../Editors/ElectrodeButtons.h"
 
 class TriangleButton;
 class UtilityButton;
diff --git a/Source/Processors/Visualization/SpikeDisplayCanvas.cpp b/Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.cpp
similarity index 98%
rename from Source/Processors/Visualization/SpikeDisplayCanvas.cpp
rename to Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.cpp
index a2dcf5bda7aef0477cc095b0d6ea53a7b3aeba11..14233600abafe3c209f0251f9be80a82d809cc3f 100755
--- a/Source/Processors/Visualization/SpikeDisplayCanvas.cpp
+++ b/Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -267,7 +267,7 @@ void SpikeDisplayCanvas::loadVisualizerParameters(XmlElement* xml)
 // ----------------------------------------------------------------
 
 SpikeDisplay::SpikeDisplay(SpikeDisplayCanvas* sdc, Viewport* v) :
-    canvas(sdc), viewport(v), thresholdCoordinator(nullptr), shouldInvert(false)
+    canvas(sdc), viewport(v), shouldInvert(false), thresholdCoordinator(nullptr)
 {
 
     totalHeight = 1000;
@@ -486,12 +486,14 @@ float SpikeDisplay::getRangeForWaveAxis(int plotNum, int axisNum)
 
 void SpikeDisplay::setThresholdForWaveAxis(int plotNum, int axisNum, float range)
 {
-    return spikePlots[plotNum]->setDisplayThresholdForChannel(axisNum, range);
+    if (spikePlots.size() > plotNum)
+        return spikePlots[plotNum]->setDisplayThresholdForChannel(axisNum, range);
 }
 
 void SpikeDisplay::setRangeForWaveAxis(int plotNum, int axisNum, float range)
 {
-    return spikePlots[plotNum]->setRangeForChannel(axisNum, range);
+    if (spikePlots.size() > plotNum)
+        return spikePlots[plotNum]->setRangeForChannel(axisNum, range);
 }
 
 // ----------------------------------------------------------------
@@ -882,7 +884,7 @@ WaveAxes::WaveAxes(int channel) : GenericAxes(channel),
     for (int n = 0; n < bufferSize; n++)
     {
         SpikeObject so;
-        generateEmptySpike(&so, 4);
+        generateEmptySpike(&so, 4, 40);
 
         spikeBuffer.add(so);
     }
@@ -1087,7 +1089,7 @@ void WaveAxes::clear()
     for (int n = 0; n < bufferSize; n++)
     {
         SpikeObject so;
-        generateEmptySpike(&so, 4);
+        generateEmptySpike(&so, 4, 40);
 
         spikeBuffer.add(so);
     }
diff --git a/Source/Processors/Visualization/SpikeDisplayCanvas.h b/Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.h
similarity index 98%
rename from Source/Processors/Visualization/SpikeDisplayCanvas.h
rename to Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.h
index 2a1f6e33a1991b667e307e1f69bac0a4fce725b9..78bfc189978b29bf065db5f74f53b020da0af19a 100755
--- a/Source/Processors/Visualization/SpikeDisplayCanvas.h
+++ b/Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,10 +26,10 @@
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
 
-#include "../SpikeDisplayNode.h"
-#include "SpikeObject.h"
+#include "SpikeDisplayNode.h"
+#include "../Visualization/SpikeObject.h"
 
-#include "Visualizer.h"
+#include "../Visualization/Visualizer.h"
 #include <vector>
 
 #define WAVE1 0
diff --git a/Source/Processors/Editors/SpikeDisplayEditor.cpp b/Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.cpp
similarity index 99%
rename from Source/Processors/Editors/SpikeDisplayEditor.cpp
rename to Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.cpp
index 17bc397322b92b7d23263fe594d2ba24a3c606cf..8444f842e2d7d50f49915c5d26f48be2a0069804 100755
--- a/Source/Processors/Editors/SpikeDisplayEditor.cpp
+++ b/Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/Editors/SpikeDisplayEditor.h b/Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.h
similarity index 92%
rename from Source/Processors/Editors/SpikeDisplayEditor.h
rename to Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.h
index e8b6294df825e9122864772313af42cdc5075b40..8bf9df9ef876c175adb200d11da1cb095c315666 100755
--- a/Source/Processors/Editors/SpikeDisplayEditor.h
+++ b/Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,13 +25,13 @@
 #define SPIKEDISPLAYEDITOR_H_
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 #include "../../UI/UIComponent.h"
 #include "../../UI/DataViewport.h"
 #include "../Visualization/DataWindow.h"
-#include "../SpikeDisplayNode.h"
-#include "../Visualization/SpikeDisplayCanvas.h"
-#include "VisualizerEditor.h"
+#include "SpikeDisplayNode.h"
+#include "SpikeDisplayCanvas.h"
+#include "../Editors/VisualizerEditor.h"
 
 #define MAX_N_SUB_CHAN 8
 class Visualizer;
diff --git a/Source/Processors/SpikeDisplayNode.cpp b/Source/Processors/SpikeDisplayNode/SpikeDisplayNode.cpp
similarity index 60%
rename from Source/Processors/SpikeDisplayNode.cpp
rename to Source/Processors/SpikeDisplayNode/SpikeDisplayNode.cpp
index acad76c45a52e01186c98a093ee21bfd7d7bbecd..4502ea5fae2bdfe396d75662833e774c2c69f895 100755
--- a/Source/Processors/SpikeDisplayNode.cpp
+++ b/Source/Processors/SpikeDisplayNode/SpikeDisplayNode.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,23 +22,19 @@
 */
 
 #include "SpikeDisplayNode.h"
-#include "RecordNode.h"
-#include "Visualization/SpikeDisplayCanvas.h"
-#include "Channel.h"
+#include "../RecordNode/RecordNode.h"
+#include "SpikeDisplayCanvas.h"
+#include "../Channel/Channel.h"
 
 #include <stdio.h>
 
 
 SpikeDisplayNode::SpikeDisplayNode()
-    : GenericProcessor("Spike Viewer"), displayBufferSize(5),  redrawRequested(false), isRecording(false),
-      signalFilesShouldClose(false)
+    : GenericProcessor("Spike Viewer"), displayBufferSize(5),  redrawRequested(false),
+	isRecording(false)
 {
 
 
-    spikeBuffer = new uint8_t[MAX_SPIKE_BUFFER_LEN]; // MAX_SPIKE_BUFFER_LEN defined in SpikeObject.h
-
-    recordingNumber = -1;
-
 }
 
 SpikeDisplayNode::~SpikeDisplayNode()
@@ -60,7 +56,6 @@ void SpikeDisplayNode::updateSettings()
     //std::cout << "Setting num inputs on SpikeDisplayNode to " << getNumInputs() << std::endl;
 
     electrodes.clear();
-
     for (int i = 0; i < eventChannels.size(); i++)
     {
         if ((eventChannels[i]->eventType < 999) && (eventChannels[i]->eventType > SPIKE_BASE_CODE))
@@ -79,12 +74,10 @@ void SpikeDisplayNode::updateSettings()
             }
 
             electrodes.add(elec);
+
         }
     }
 
-    recordNode = getProcessorGraph()->getRecordNode();
-    diskWriteLock = recordNode->getLock();
-
 }
 
 // void SpikeDisplayNode::updateVisualizer()
@@ -96,6 +89,18 @@ bool SpikeDisplayNode::enable()
 {
     std::cout << "SpikeDisplayNode::enable()" << std::endl;
     SpikeDisplayEditor* editor = (SpikeDisplayEditor*) getEditor();
+
+	getProcessorGraph()->getRecordNode()->registerSpikeSource(this);
+	for (int i = 0; i < electrodes.size(); i ++)
+	{
+		Electrode& elec = electrodes.getReference(i);
+		SpikeRecordInfo *recElec = new SpikeRecordInfo();
+		recElec->name = elec.name;
+		recElec->numChannels = elec.numChannels;
+		recElec->sampleRate = settings.sampleRate;
+		elec.recordIndex = getProcessorGraph()->getRecordNode()->addSpikeElectrode(recElec);
+	}
+
     editor->enable();
     return true;
 
@@ -175,28 +180,12 @@ void SpikeDisplayNode::setParameter(int param, float val)
     if (param == 0) // stop recording
     {
         isRecording = false;
-        signalFilesShouldClose = true;
 
     }
     else if (param == 1)   // start recording
     {
         isRecording = true;
 
-        dataDirectory = recordNode->getDataDirectory();
-
-        if (dataDirectory.getFullPathName().length() == 0)
-        {
-            // temporary fix in case nothing is returned by the record node.
-            dataDirectory = File::getSpecialLocation(File::userHomeDirectory);
-        }
-
-        baseDirectory = dataDirectory.getFullPathName();
-
-        for (int i = 0; i < getNumElectrodes(); i++)
-        {
-            openFile(i);
-        }
-
     }
     else if (param == 2)   // redraw
     {
@@ -213,16 +202,6 @@ void SpikeDisplayNode::process(AudioSampleBuffer& buffer, MidiBuffer& events, in
 
     checkForEvents(events); // automatically calls 'handleEvent
 
-    if (signalFilesShouldClose)
-    {
-        for (int i = 0; i < getNumElectrodes(); i++)
-        {
-            closeFile(i);
-        }
-
-        signalFilesShouldClose = false;
-    }
-
     if (redrawRequested)
     {
         // update incoming thresholds
@@ -304,7 +283,7 @@ void SpikeDisplayNode::handleEvent(int eventType, MidiMessage& event, int sample
                     // save spike
                     if (isRecording)
                     {
-                        writeSpike(newSpike, electrodeNum);
+						getProcessorGraph()->getRecordNode()->writeSpike(newSpike,e.recordIndex);
                     }
                 }
 
@@ -333,139 +312,3 @@ bool SpikeDisplayNode::checkThreshold(int chan, float thresh, SpikeObject& s)
 
     return false;
 }
-
-void SpikeDisplayNode::openFile(int i)
-{
-
-    String filename = baseDirectory;
-    filename += File::separator;
-    filename += getNameForElectrode(i).removeCharacters(" ");
-    filename += ".spikes";
-
-    std::cout << "OPENING FILE: " << filename << std::endl;
-
-    File fileToUse = File(filename);
-
-    diskWriteLock->enter();
-    //const MessageManagerLock mmLock;
-
-    Electrode& e = electrodes.getReference(i);
-
-    FILE* file;
-
-    if (!fileToUse.exists())
-    {
-        // open it and write header
-
-        if (i == 0)
-        {
-            recordingNumber = 0;
-        }
-
-        file = fopen(filename.toUTF8(), "ab");
-        String header = generateHeader(i);
-        fwrite(header.toUTF8(), 1, header.getNumBytesAsUTF8(), file);
-
-    }
-    else
-    {
-        // append it
-        if (i == 0)
-        {
-            recordingNumber++;
-        }
-
-        file = fopen(filename.toUTF8(), "ab");
-    }
-
-    diskWriteLock->exit();
-
-    e.file = file;
-}
-
-void SpikeDisplayNode::closeFile(int i)
-{
-
-    Electrode& e = electrodes.getReference(i);
-
-    std::cout << "CLOSING FILE for " << e.name << std::endl;
-
-    diskWriteLock->enter();
-
-    if (e.file != NULL)
-    {
-        fclose(e.file);
-    }
-
-    diskWriteLock->exit();
-
-}
-
-void SpikeDisplayNode::writeSpike(const SpikeObject& s, int i)
-{
-
-    packSpike(&s, spikeBuffer, MAX_SPIKE_BUFFER_LEN);
-
-    int totalBytes = s.nSamples * s.nChannels * 2 + // account for samples
-                     s.nChannels * 4 +            // acount for threshold and gain
-                     15;                        // 15 bytes in every SpikeObject
-
-
-    // format:
-    // 1 byte of event type (always = 4 for spikes)
-    // 8 bytes for 64-bit timestamp
-    // 2 bytes for 16-bit electrode ID
-    // 2 bytes for 16-bit number of channels (n)
-    // 2 bytes for 16-bit number of samples (m)
-    // 2*n*m bytes for 16-bit samples
-    // 2*n bytes for 16-bit gains
-    // 2*n bytes for 16-bit thresholds
-
-    // const MessageManagerLock mmLock;
-
-    diskWriteLock->enter();
-
-    fwrite(spikeBuffer, 1, totalBytes, electrodes[i].file);
-
-    fwrite(&recordingNumber,                         // ptr
-           2,                               // size of each element
-           1,                               // count
-           electrodes[i].file); // ptr to FILE object
-
-    diskWriteLock->exit();
-
-
-}
-
-String SpikeDisplayNode::generateHeader(int electrodeNum)
-{
-    String header = "header.format = 'Open Ephys Data Format'; \n";
-    header += "header.version = 0.2;";
-    header += "header.header_bytes = ";
-    header += String(HEADER_SIZE);
-    header += ";\n";
-
-    header += "header.description = 'Each record contains 1 uint8 eventType, 1 uint64 timestamp, 1 uint16 electrodeID, 1 uint16 numChannels (n), 1 uint16 numSamples (m), n*m uint16 samples, n uint16 channelGains, n uint16 thresholds, and 1 uint16 recordingNumber'; \n";
-
-    header += "header.date_created = '";
-    header += recordNode->generateDateString();
-    header += "';\n";
-
-    header += "header.electrode = '";
-    header += electrodes[electrodeNum].name;
-    header += "';\n";
-
-    header += "header.num_channels = ";
-    header += electrodes[electrodeNum].numChannels;
-    header += ";\n";
-
-    header += "header.sampleRate = ";
-    header += String(settings.sampleRate);
-    header += ";\n";
-
-    header = header.paddedRight(' ', HEADER_SIZE);
-
-    //std::cout << header << std::endl;
-
-    return header;
-}
\ No newline at end of file
diff --git a/Source/Processors/SpikeDisplayNode.h b/Source/Processors/SpikeDisplayNode/SpikeDisplayNode.h
similarity index 80%
rename from Source/Processors/SpikeDisplayNode.h
rename to Source/Processors/SpikeDisplayNode/SpikeDisplayNode.h
index cbd08ce92b51b858b2662286e46806c1a6251b06..2b630f7cd528e69656aa4eda757d92423435ef66 100755
--- a/Source/Processors/SpikeDisplayNode.h
+++ b/Source/Processors/SpikeDisplayNode/SpikeDisplayNode.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,10 +25,10 @@
 #define SPIKEDISPLAYNODE_H_
 
 #include "../../JuceLibraryCode/JuceHeader.h"
-#include "Editors/SpikeDisplayEditor.h"
-#include "Editors/VisualizerEditor.h"
-#include "GenericProcessor.h"
-#include "Visualization/SpikeObject.h"
+#include "SpikeDisplayEditor.h"
+#include "../Editors/VisualizerEditor.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "../Visualization/SpikeObject.h"
 
 class DataViewport;
 class SpikePlot;
@@ -95,7 +95,7 @@ private:
 
         SpikePlot* spikePlot;
 
-        FILE* file;
+        int recordIndex;
 
     };
 
@@ -104,24 +104,18 @@ private:
     int displayBufferSize;
     bool redrawRequested;
 
-    // methods for recording:
-    void openFile(int index);
-    void closeFile(int index);
-    void writeSpike(const SpikeObject& s, int index);
-    String generateHeader(int index);
-
     // members for recording
     bool isRecording;
-    bool signalFilesShouldClose;
-    RecordNode* recordNode;
-    String baseDirectory;
-    File dataDirectory;
-    uint8_t* spikeBuffer;
-    SpikeObject currentSpike;
+ //   bool signalFilesShouldClose;
+ //   RecordNode* recordNode;
+ //   String baseDirectory;
+ //   File dataDirectory;
+ //   uint8_t* spikeBuffer;
+ //   SpikeObject currentSpike;
 
-    uint16 recordingNumber;
+ //   uint16 recordingNumber;
 
-    CriticalSection* diskWriteLock;
+//    CriticalSection* diskWriteLock;
 
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SpikeDisplayNode);
 
diff --git a/Source/Processors/SpikeSorter/SpikeSortBoxes.cpp b/Source/Processors/SpikeSorter/SpikeSortBoxes.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6689fedadf6b6d167aca8c9c8231c310c05d96df
--- /dev/null
+++ b/Source/Processors/SpikeSorter/SpikeSortBoxes.cpp
@@ -0,0 +1,2139 @@
+/*
+------------------------------------------------------------------
+
+This file is part of the Open Ephys GUI
+Copyright (C) 2013 Open Ephys
+
+------------------------------------------------------------------
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <stdio.h>
+#include <algorithm>
+#include "SpikeSortBoxes.h"
+#include "SpikeSorter.h"
+
+PointD::PointD()
+{
+	X = Y = 0;
+}
+
+
+PointD::PointD(float x, float y)
+{
+	X = x;
+	Y = y;
+}
+
+PointD::PointD(const PointD &P)
+{
+	X = P.X;
+	Y = P.Y;
+}
+
+PointD& PointD::operator+=(const PointD &rhs)
+{
+	X += rhs.X;
+	Y += rhs.Y;
+	return *this;
+}
+
+PointD& PointD::operator-=(const PointD &rhs)
+{
+	X -= rhs.X;
+	Y -= rhs.Y;
+	return *this;
+}
+
+const PointD PointD::operator+(const PointD &other) const 
+{
+	PointD result = *this;     
+	result += other;            
+	return result;             
+}
+
+
+const PointD PointD::operator-(const PointD &other) const 
+{
+	PointD result = *this;     
+	result -= other;            
+	return result;             
+}
+
+
+const PointD PointD::operator*(const PointD &other) const 
+{
+	PointD result = *this;     
+	result.X *= other.X;
+	result.Y *= other.Y;
+	return result;             
+
+}
+
+float PointD::cross(PointD c) const
+{
+	return X*c.Y-Y*c.X;
+}
+
+/**************************************/
+
+
+Box::Box()
+{
+	x = -0.2; // in ms
+	y = -10; // in uV
+	w = 0.5; // in ms
+	h = 70; // in uV
+	channel=0;
+}
+
+
+Box::Box(int ch)
+{
+	x = -0.2; // in ms
+	y = -10; // in uV
+	w = 0.5; // in ms
+	h = 70; // in uV
+	channel = ch;
+}
+
+Box::Box(float X, float Y, float W, float H, int ch)
+{
+	x = X;
+	y = Y;
+	w = W;
+	h = H;
+	channel = ch;
+}
+
+bool Box::LineSegmentIntersection(PointD p11, PointD p12, PointD p21, PointD p22)
+{
+	PointD r = (p12 - p11);
+	PointD s = (p22 - p21);
+	PointD q = p21;
+	PointD p = p11;
+	double rs = r.cross(s);
+	double eps = 1e-6;
+	if (fabs(rs) < eps)
+		return false; // lines are parallel
+	double t = (q - p).cross(s) / rs;
+	double u = (q - p).cross(r) / rs;
+	return (t>=0&&t<=1 &&u>0&&u<=1);
+}
+
+#ifndef MAX
+#define MAX(x,y)((x)>(y))?(x):(y)
+#endif 
+
+#ifndef MIN
+#define MIN(x,y)((x)<(y))?(x):(y)
+#endif 
+
+bool Box::isWaveFormInside(SpikeObject *so)
+{
+	PointD BoxTopLeft(x, y);
+	PointD BoxBottomLeft(x, (y - h));
+
+	PointD BoxTopRight(x + w, y);
+	PointD BoxBottomRight(x + w, (y - h));
+
+	// y,and h are given in micro volts.
+	// x and w and given in micro seconds.
+
+	// no point testing all wave form points. Just ones that are between x and x+w...
+	int BinLeft = microSecondsToSpikeTimeBin(so,x);
+	int BinRight = microSecondsToSpikeTimeBin(so,x+w);
+
+	/*
+	float minValue=1e10, maxValue=1e-10;
+	for (int pt = 0; pt < so->nSamples; pt++)
+	{
+		float v = spikeDataBinToMicrovolts(so, pt, channel);
+		minValue = MIN(minValue,v);
+		maxValue = MAX(maxValue,v);
+	}
+	*/
+
+	for (int pt = BinLeft; pt < BinRight; pt++)
+	{
+		PointD Pwave1(spikeTimeBinToMicrosecond(so,pt),spikeDataBinToMicrovolts(so, pt, channel));
+		PointD Pwave2(spikeTimeBinToMicrosecond(so,pt+1),spikeDataBinToMicrovolts(so, pt+1, channel));
+
+		bool bLeft = LineSegmentIntersection(Pwave1,Pwave2,BoxTopLeft,BoxBottomLeft) ;
+		bool bRight = LineSegmentIntersection(Pwave1,Pwave2,BoxTopRight,BoxBottomRight);
+		bool bTop = LineSegmentIntersection(Pwave1,Pwave2,BoxTopLeft,BoxTopRight);
+		bool bBottom = LineSegmentIntersection(Pwave1, Pwave2, BoxBottomLeft, BoxBottomRight);
+		if (bLeft || bRight || bTop || bBottom)
+		{
+			return true;
+		}
+
+	}
+	return false;
+}
+
+
+BoxUnit::BoxUnit()
+{
+
+}
+/**************************************/
+void BoxUnit::setDefaultColors(uint8_t col[3], int ID)
+{
+	int IDmodule = (ID-1) % 6; // ID can't be zero
+	const int colors[6][3] = {
+		{0xFF,0xFF,0x00}, 
+		{0x00,0xFF,0x00}, 
+		{0x00, 0xFF, 0xFF},
+		{0xFF, 0x00, 0x00},
+		{0x00,0x00,0xFF},
+		{0xFF,0x00,0xFF}};
+	col[0] = colors[IDmodule][0];
+	col[1] = colors[IDmodule][1];
+	col[2] = colors[IDmodule][2];
+}
+
+BoxUnit::BoxUnit(int ID, int localID_): UnitID(ID), localID(localID_)
+{
+	std::cout << "Adding new box unit." << std::endl;
+	Active = false;
+	Activated_TS_S = -1;
+	setDefaultColors(ColorRGB, localID);
+	Box B(50, -20 - localID*20, 300, 40);
+	addBox(B);
+}
+
+void BoxUnit::resizeWaveform(int newlength)
+{
+	WaveformStat.resizeWaveform(newlength);
+}
+
+BoxUnit::BoxUnit(Box B, int ID, int localID_) : UnitID(ID), localID(localID_)
+{
+	addBox(B);
+}
+
+bool BoxUnit::isWaveFormInsideAllBoxes(SpikeObject *so)
+{
+	for (int k=0;k< lstBoxes.size();k++) 
+	{
+		if (!lstBoxes[k].isWaveFormInside(so))
+			return false;
+	}
+	return lstBoxes.size() == 0 ? false : true;
+}
+
+bool BoxUnit::isActivated()
+{
+	return Active;
+}
+
+void BoxUnit::activateUnit()
+{
+	Active = true;
+	Activated_TS_S = timer.getHighResolutionTicks();
+}
+
+void BoxUnit::deactivateUnit()
+{
+	Active = false;
+	Activated_TS_S = timer.getHighResolutionTicks();
+
+}
+
+double BoxUnit::getNumSecondsActive()
+{
+	if (!Active)
+		return 0;
+	else
+		return (timer.getHighResolutionTicks() - Activated_TS_S) / timer.getHighResolutionTicksPerSecond();
+}
+
+void BoxUnit::toggleActive()
+{
+	if (Active)
+		deactivateUnit();
+	else
+		activateUnit();
+}
+
+void BoxUnit::addBox(Box b)
+{
+	lstBoxes.push_back(b);
+}
+
+void BoxUnit::addBox()
+{
+	Box B(50 + 350 * lstBoxes.size(), -20 - UnitID * 20, 300, 40);
+	lstBoxes.push_back(B);
+}
+
+int BoxUnit::getNumBoxes()
+{
+	return lstBoxes.size();
+}
+
+void BoxUnit::modifyBox(int boxindex, Box b)
+{
+	lstBoxes[boxindex] = b;
+}
+
+
+bool BoxUnit::deleteBox(int boxindex)
+{
+
+	if (lstBoxes.size() > boxindex) {
+		lstBoxes.erase(lstBoxes.begin()+boxindex);
+		return true;
+	}
+	return false;
+}
+
+Box BoxUnit::getBox(int box)
+{
+	return lstBoxes[box];
+}
+
+void BoxUnit::setBox(int boxid, Box B)
+{
+	lstBoxes[boxid].x = B.x;
+	lstBoxes[boxid].y = B.y;
+	lstBoxes[boxid].w = B.w;
+	lstBoxes[boxid].h = B.h;
+}
+
+
+void BoxUnit::setBoxPos(int boxid, PointD P)
+{
+	lstBoxes[boxid].x = P.X;
+	lstBoxes[boxid].y = P.Y;
+}
+
+void BoxUnit::setBoxSize(int boxid, double W, double H)
+{
+	lstBoxes[boxid].w = W;
+	lstBoxes[boxid].h = H;
+}
+
+void BoxUnit::MoveBox(int boxid, int dx, int dy)
+{
+	lstBoxes[boxid].x += dx;
+	lstBoxes[boxid].y += dy;
+}
+
+std::vector<Box> BoxUnit::getBoxes()
+{
+	return lstBoxes;
+}
+
+// Members
+int BoxUnit::getUnitID()
+{
+	return UnitID;
+}
+
+int BoxUnit::getLocalID()
+{
+	return localID;
+}
+
+
+/************************/
+
+Histogram::~Histogram()
+{
+	Time.clear();
+	Counter.clear();
+}
+
+Histogram::Histogram()
+{
+
+}
+
+void Histogram::setParameters(int N, double T0, double T1)
+{
+
+	t0 = T0;
+	t1 = T1;
+	numBins = N;
+	Time.resize(N);
+	Counter.resize(N);
+	for (int k = 0; k < N; k++)
+	{
+		Time[k] = (double)k / (N - 1) * (T1 - T0) + T0;
+		Counter[k] = 0;
+	}
+}
+
+Histogram::Histogram(int N, double T0, double T1)
+{
+	t0 = T0;
+	t1 = T1;
+	numBins = N;
+	Time.resize(N);
+	Counter.resize(N);
+	for (int k = 0; k < N; k++)
+	{
+		Time[k] = (double)k / (N - 1) * (T1 - T0) + T0;
+		Counter[k] = 0;
+	}
+}
+
+void Histogram::update(double x) {
+	int Bin = ((x - t0) / (t1 - t0) * (numBins-1));
+	if (Bin >= 0 && Bin < numBins)
+	{
+		Counter[Bin]++;
+		if (Counter[Bin] > Max)
+		{
+			Max = Counter[Bin];
+		}
+	}
+}
+
+void Histogram::reset() 
+{
+	Max = 0;
+	for (int k = 0; k < numBins; k++)
+		Counter[k] = 0;
+}
+
+std::vector<int> Histogram::getCounter()
+{
+	return Counter;
+}
+
+
+/**********************/
+// computes statistics about the unit (non-trial related statistics)
+
+
+
+// Running variance...
+//Mk = Mk-1+ (xk - Mk-1)/k 
+//Sk = Sk-1 + (xk - Mk-1)*(xk - Mk).
+//For 2 ≤ k ≤ n, the kth estimate of the variance is s2 = Sk/(k - 1).
+RunningStats::~RunningStats()
+{
+}
+RunningStats::RunningStats()
+{
+	hist.setParameters(101, 0, 100); // Inter spike histogram. Fixed range [0..100 ms]
+	numSamples = 0;
+}
+
+void RunningStats::reset()
+{
+	numSamples = 0;
+	hist.reset();
+}
+
+Histogram RunningStats::getHistogram()
+{
+	return hist;
+}
+
+std::vector<double> RunningStats::getMean(int index)
+{
+	std::vector<double> m;
+
+	if (numSamples == 0)
+	{
+		return m;
+	}
+
+	int numSamplesInWaveForm = WaveFormMean[0].size();
+	m.resize(numSamplesInWaveForm);
+
+	for (int k = 0; k < numSamplesInWaveForm; k++)
+		m[k] = WaveFormMean[index][k];
+	return m;
+}
+
+std::vector<double> RunningStats::getStandardDeviation(int index)
+{
+	std::vector<double> WaveFormVar;
+
+	if (numSamples == 0)
+	{
+		return WaveFormVar;
+	}
+	int numSamplesInWaveForm = WaveFormMean[0].size();
+	WaveFormVar.resize(numSamplesInWaveForm);
+
+	for (int j = 0; j < numSamplesInWaveForm; j++)
+	{
+		if (numSamples - 1 == 0)
+			WaveFormVar[j] = 0;
+		else
+			WaveFormVar[j] = sqrt(WaveFormSk[index][j] / (numSamples - 1));
+	}
+	return WaveFormVar;
+}
+
+
+void RunningStats::resizeWaveform(int newlength)
+{
+	numSamples = 0; // this should ensure that update reallocates upon the next update.
+}
+
+void RunningStats::update(SpikeObject *so)
+{
+	double ts = so->timestamp/so->samplingFrequencyHz;
+	if (numSamples == 0)
+	{
+		LastSpikeTime = ts;
+	}
+	else
+	{
+		hist.update(1000.0 * (ts - LastSpikeTime));
+		LastSpikeTime = ts;
+	}
+	
+	newData = true;
+	if (numSamples == 0)
+	{
+		// allocate
+		WaveFormMean.resize(so->nChannels);
+		WaveFormSk.resize(so->nChannels);
+		WaveFormMk.resize(so->nChannels);
+		for (int k=0;k<so->nChannels;k++) 
+		{
+			WaveFormMean[k].resize(so->nSamples);
+			WaveFormSk[k].resize(so->nSamples);
+			WaveFormMk[k].resize(so->nSamples);
+		}
+
+		for (int i = 0; i < so->nChannels; i++)
+		{
+			for (int j = 0; j < so->nSamples; j++)
+			{
+				WaveFormMean[i][j] = so->data[j + i*so->nSamples];
+				WaveFormSk[i][j] = 0;
+				WaveFormMk[i][j] = so->data[j + i*so->nSamples];
+			}
+		}
+		numSamples += 1.0F;
+		return;
+	}
+	// running mean
+	for (int i = 0; i < so->nChannels; i++)
+	{
+		for (int j = 0; j < so->nSamples; j++)
+		{
+			WaveFormMean[i][j] = (numSamples * WaveFormMean[i][j] + so->data[j + i*so->nSamples]) / (numSamples + 1);
+			WaveFormMk[i][j] += (so->data[j + i*so->nSamples] - WaveFormMk[i][j]) / numSamples;
+			WaveFormSk[i][j] += (so->data[j + i*so->nSamples] - WaveFormMk[i][j]) * (so->data[j + i*so->nSamples] - WaveFormMk[i][j]);
+		}
+	}
+	numSamples += 1.0F;
+}
+
+
+bool RunningStats::queryNewData()
+{
+	if (newData == false)
+		return false;
+	newData = false;
+	return true;
+}
+
+void BoxUnit::updateWaveform(SpikeObject *so)
+{
+	WaveformStat.update(so);
+}
+
+		
+/*
+        public bool QueryNewData()
+        {
+            return WaveFormStat.QueryNewData();
+        }
+
+        public Histogram GetInterSpikeHistogram()
+        {
+            return WaveFormStat.GetHistogram();
+        }
+
+        public void GetWaveFormMeanStd(out double[] Mean, out double[] Std, int index)
+        {
+            Mean = WaveFormStat.GetMean(index);
+            Std = WaveFormStat.GetStandardDeviation(index);
+        }
+
+        public void ResetWaveForm()
+        {
+            WaveFormStat.Reset();
+        }
+		
+
+    }
+	*/
+
+/***********************************************/
+
+  SpikeSortBoxes::SpikeSortBoxes(UniqueIDgenerator *uniqueIDgenerator_,PCAcomputingThread *pth, int numch, double SamplingRate, int WaveFormLength)
+  {
+	 uniqueIDgenerator = uniqueIDgenerator_;
+	 computingThread = pth;
+	 pc1 = pc2 = nullptr;
+	 bufferSize = 200;
+	 spikeBufferIndex = -1;
+	 bPCAcomputed = false;
+	 bPCAJobSubmitted = false;
+	 bPCAjobFinished = false;
+	 selectedUnit = -1;
+	 selectedBox = -1;
+	 bRePCA = false;
+	 pc1min = -1;
+	 pc2min = -1;
+	 pc1max = 1;
+	 pc2max = 1;
+	 numChannels = numch;
+	 waveformLength = WaveFormLength;
+
+	 pc1 = new float[numChannels * waveformLength];
+	 pc2 = new float[numChannels * waveformLength];
+    for (int n = 0; n < bufferSize; n++)
+    {
+        SpikeObject so;
+        generateEmptySpike(&so, 4,waveformLength);
+
+        spikeBuffer.add(so);
+    }
+  }
+
+  	void SpikeSortBoxes::resizeWaveform(int numSamples)
+	{
+		const ScopedLock myScopedLock (mut);
+		//StartCriticalSection();
+		waveformLength = numSamples;
+		delete pc1;
+		delete pc2;
+		pc1 = new float[numChannels * waveformLength];
+		pc2 = new float[numChannels * waveformLength];
+        spikeBuffer.clear();
+	    for (int n = 0; n < bufferSize; n++)
+	    {
+		    SpikeObject so;
+	        generateEmptySpike(&so, 4,waveformLength);
+	        spikeBuffer.add(so);
+	    }
+		bPCAcomputed = false;
+		spikeBufferIndex = 0;
+		for (int k=0;k<pcaUnits.size();k++)
+		{
+			pcaUnits[k].resizeWaveform(waveformLength);
+		}
+		for (int k=0;k<boxUnits.size();k++)
+		{
+			boxUnits[k].resizeWaveform(waveformLength);
+		}
+  	    //EndCriticalSection();
+	}
+
+
+
+  void SpikeSortBoxes::loadCustomParametersFromXml(XmlElement *electrodeNode)
+  {
+
+		forEachXmlChildElement(*electrodeNode, spikesortNode)
+		{
+			if (spikesortNode->hasTagName("SPIKESORTING"))
+			{
+				int numBoxUnit  = spikesortNode->getIntAttribute("numBoxUnits");
+				int numPCAUnit  = spikesortNode->getIntAttribute("numPCAUnits");
+				selectedUnit  = spikesortNode->getIntAttribute("selectedUnit");
+				selectedBox =  spikesortNode->getIntAttribute("selectedBox");
+  
+
+				pcaUnits.clear();
+				boxUnits.clear();
+
+				forEachXmlChildElement(*spikesortNode, UnitNode)
+				{
+					if (UnitNode->hasTagName("PCA"))
+					{
+						numChannels = UnitNode->getIntAttribute("numChannels");
+						waveformLength = UnitNode->getIntAttribute("waveformLength");
+
+						pc1min = UnitNode->getDoubleAttribute("pc1min");
+						pc2min = UnitNode->getDoubleAttribute("pc2min");
+						pc1max = UnitNode->getDoubleAttribute("pc1max");
+						pc2max = UnitNode->getDoubleAttribute("pc2max");
+
+						bPCAjobFinished = UnitNode->getBoolAttribute("PCAjobFinished");
+						bPCAcomputed = UnitNode->getBoolAttribute("PCAcomputed");
+
+						delete(pc1);
+						delete(pc2);
+
+						pc1 = new float[waveformLength*numChannels];
+						pc2 = new float[waveformLength*numChannels];
+						int dimcounter = 0;
+						forEachXmlChildElement(*UnitNode, dimNode)
+						{
+							if (dimNode->hasTagName("PCA_DIM"))
+							{
+								pc1[dimcounter]=dimNode->getDoubleAttribute("pc1");
+								pc2[dimcounter]=dimNode->getDoubleAttribute("pc2");
+								dimcounter++;
+							}
+						}
+					}
+				
+				if (UnitNode->hasTagName("BOXUNIT"))
+					{
+						BoxUnit boxUnit;
+						boxUnit.UnitID = UnitNode->getIntAttribute("UnitID");
+						boxUnit.ColorRGB[0] = UnitNode->getIntAttribute("ColorR");
+						boxUnit.ColorRGB[1] = UnitNode->getIntAttribute("ColorG");
+						boxUnit.ColorRGB[2] = UnitNode->getIntAttribute("ColorB");
+						int numBoxes = UnitNode->getIntAttribute("NumBoxes");
+						boxUnit.lstBoxes.resize(numBoxes);
+						int boxCounter = 0;
+						forEachXmlChildElement(*UnitNode, boxNode)
+						{
+							if (boxNode->hasTagName("BOX"))
+							{
+								Box box; 
+								box.channel = boxNode->getIntAttribute("ch");
+								box.x = boxNode->getDoubleAttribute("x");
+								box.y = boxNode->getDoubleAttribute("y");
+								box.w = boxNode->getDoubleAttribute("w");
+								box.h = boxNode->getDoubleAttribute("h");
+								boxUnit.lstBoxes[boxCounter++] = box;
+							}
+						}
+						// add box unit
+						boxUnits.push_back(boxUnit);
+					}
+					if (UnitNode->hasTagName("PCAUNIT"))
+					{
+						PCAUnit pcaUnit;
+
+						pcaUnit.UnitID = UnitNode->getIntAttribute("UnitID");
+						pcaUnit.ColorRGB[0] = UnitNode->getIntAttribute("ColorR");
+						pcaUnit.ColorRGB[1] = UnitNode->getIntAttribute("ColorG");
+						pcaUnit.ColorRGB[2] = UnitNode->getIntAttribute("ColorB");
+
+						int numPolygonPoints = UnitNode->getIntAttribute("PolygonNumPoints");
+						pcaUnit.poly.pts.resize(numPolygonPoints);
+						pcaUnit.poly.offset.X = UnitNode->getDoubleAttribute("PolygonOffsetX");
+						pcaUnit.poly.offset.Y = UnitNode->getDoubleAttribute("PolygonOffsetY");
+						// read polygon
+						int pointCounter = 0;
+						forEachXmlChildElement(*UnitNode, polygonPoint)
+						{
+							if (polygonPoint->hasTagName("POLYGON_POINT"))
+							{
+								pcaUnit.poly.pts[pointCounter].X =  polygonPoint->getDoubleAttribute("pointX");
+								pcaUnit.poly.pts[pointCounter].Y =  polygonPoint->getDoubleAttribute("pointY");
+								pointCounter++;
+							}
+						}
+						// add polygon unit	
+						pcaUnits.push_back(pcaUnit);
+					}
+				}
+			}
+		}
+  }
+
+  void SpikeSortBoxes::saveCustomParametersToXml(XmlElement *electrodeNode)
+  {
+
+	  XmlElement* spikesortNode = electrodeNode->createNewChildElement("SPIKESORTING");
+	  spikesortNode->setAttribute("numBoxUnits", (int)boxUnits.size());
+	  spikesortNode->setAttribute("numPCAUnits", (int)pcaUnits.size());
+	  spikesortNode->setAttribute("selectedUnit",selectedUnit);
+	  spikesortNode->setAttribute("selectedBox",selectedBox);
+
+
+	  XmlElement* pcaNode = electrodeNode->createNewChildElement("PCA");
+	  pcaNode->setAttribute("numChannels",numChannels);
+	  pcaNode->setAttribute("waveformLength",waveformLength);
+	  pcaNode->setAttribute("pc1min", pc1min);
+	  pcaNode->setAttribute("pc2min", pc2min);
+	  pcaNode->setAttribute("pc1max", pc1max);
+	  pcaNode->setAttribute("pc2max", pc2max);
+
+	  pcaNode->setAttribute("PCAjobFinished", bPCAjobFinished);
+	  pcaNode->setAttribute("PCAcomputed", bPCAcomputed);
+
+	  for (int k=0;k<numChannels*waveformLength;k++)
+	  {
+		  XmlElement* dimNode = pcaNode->createNewChildElement("PCA_DIM");
+		  dimNode->setAttribute("pc1",pc1[k]);
+		  dimNode->setAttribute("pc2",pc2[k]);
+	  }
+
+	  for (int boxUnitIter=0;boxUnitIter<boxUnits.size();boxUnitIter++)
+	  {
+		  XmlElement* BoxUnitNode = spikesortNode->createNewChildElement("BOXUNIT");
+
+		  BoxUnitNode->setAttribute("UnitID",boxUnits[boxUnitIter].UnitID);
+		  BoxUnitNode->setAttribute("ColorR",boxUnits[boxUnitIter].ColorRGB[0]);
+		  BoxUnitNode->setAttribute("ColorG",boxUnits[boxUnitIter].ColorRGB[1]);
+		  BoxUnitNode->setAttribute("ColorB",boxUnits[boxUnitIter].ColorRGB[2]);
+		  BoxUnitNode->setAttribute("NumBoxes", (int)boxUnits[boxUnitIter].lstBoxes.size());
+		  for (int boxIter=0;boxIter<boxUnits[boxUnitIter].lstBoxes.size();boxIter++)
+		  {
+			  XmlElement* BoxNode = BoxUnitNode->createNewChildElement("BOX");
+			  BoxNode->setAttribute("ch", (int)boxUnits[boxUnitIter].lstBoxes[boxIter].channel);
+			  BoxNode->setAttribute("x", (int)boxUnits[boxUnitIter].lstBoxes[boxIter].x);
+			  BoxNode->setAttribute("y", (int)boxUnits[boxUnitIter].lstBoxes[boxIter].y);
+			  BoxNode->setAttribute("w", (int)boxUnits[boxUnitIter].lstBoxes[boxIter].w);
+			  BoxNode->setAttribute("h", (int)boxUnits[boxUnitIter].lstBoxes[boxIter].h);
+		  }
+	  }
+
+	  for (int pcaUnitIter=0;pcaUnitIter<pcaUnits.size();pcaUnitIter++)
+	  {
+		  XmlElement* PcaUnitNode = spikesortNode->createNewChildElement("PCAUNIT");
+
+		  PcaUnitNode->setAttribute("UnitID",pcaUnits[pcaUnitIter].UnitID);
+		  PcaUnitNode->setAttribute("ColorR",pcaUnits[pcaUnitIter].ColorRGB[0]);
+		  PcaUnitNode->setAttribute("ColorG",pcaUnits[pcaUnitIter].ColorRGB[1]);
+		  PcaUnitNode->setAttribute("ColorB",pcaUnits[pcaUnitIter].ColorRGB[2]);
+		  PcaUnitNode->setAttribute("PolygonNumPoints",(int)pcaUnits[pcaUnitIter].poly.pts.size());
+		  PcaUnitNode->setAttribute("PolygonOffsetX",(int)pcaUnits[pcaUnitIter].poly.offset.X);
+		  PcaUnitNode->setAttribute("PolygonOffsetY",(int)pcaUnits[pcaUnitIter].poly.offset.Y);
+
+		  for (int p=0;p<pcaUnits[pcaUnitIter].poly.pts.size();p++)
+		  {
+			  XmlElement* PolygonNode = PcaUnitNode->createNewChildElement("POLYGON_POINT");
+			  PolygonNode->setAttribute("pointX", pcaUnits[pcaUnitIter].poly.pts[p].X);
+			  PolygonNode->setAttribute("pointY", pcaUnits[pcaUnitIter].poly.pts[p].Y);
+		  }
+	  }
+    
+
+	//float *pc1, *pc2;
+	
+
+  }
+  
+SpikeSortBoxes::~SpikeSortBoxes()
+{
+	// wait until PCA job is done (if one was submitted).
+	delete pc1;
+	delete pc2;
+	pc1 = nullptr;
+	pc2 = nullptr;
+}
+
+void SpikeSortBoxes::setSelectedUnitAndBox(int unitID, int boxID)
+{
+	selectedUnit = unitID;
+	selectedBox = boxID;
+}
+
+void SpikeSortBoxes::getSelectedUnitAndBox(int &unitID, int &boxid)
+{
+  unitID = selectedUnit;
+  boxid = selectedBox;
+}
+  
+void SpikeSortBoxes::projectOnPrincipalComponents(SpikeObject *so)
+{
+	SpikeObject copySpike = *so;
+	spikeBufferIndex++;
+	spikeBufferIndex %= bufferSize;
+	spikeBuffer.set(spikeBufferIndex, copySpike);
+	if (bPCAjobFinished)
+	{
+		bPCAcomputed = true;
+	}
+
+	if (bPCAcomputed)
+	{
+		  so->pcProj[0] = so->pcProj[1] = 0;
+		  for (int k=0;k<so->nChannels*so->nSamples;k++)
+		  {
+			  float v = spikeDataIndexToMicrovolts(so, k);
+			  so->pcProj[0] += pc1[k]* v;
+			  so->pcProj[1] += pc2[k]* v;
+		  }
+		  if (so->pcProj[0] > 1e5 || so->pcProj[0] < -1e5 || so->pcProj[1] > 1e5 || so->pcProj[1] < -1e5)
+		  {
+			 int dbg = 1;
+		  }
+		} else
+		{
+		  // add a spike object to the buffer.
+		  // if we have enough spikes, start the PCA computation thread.
+		if ((spikeBufferIndex == bufferSize -1 && !bPCAcomputed && !bPCAJobSubmitted) || bRePCA)
+		{
+			bPCAJobSubmitted = true;
+			bRePCA = false;
+			// submit a new job to compute the spike buffer.
+			PCAjob job(spikeBuffer,pc1,pc2, &pc1min, &pc2min, &pc1max, &pc2max, &bPCAjobFinished);
+			computingThread->addPCAjob(job);
+		}
+	}
+}
+
+  void SpikeSortBoxes::getPCArange(float &p1min,float &p2min, float &p1max,  float &p2max)
+  {
+	  p1min = pc1min;
+	  p2min = pc2min;
+	  p1max = pc1max;
+	  p2max = pc2max;
+  }
+
+  void SpikeSortBoxes::setPCArange(float p1min,float p2min, float p1max,  float p2max)
+  {
+	  pc1min=p1min;
+	  pc2min=p2min;
+	  pc1max=p1max;
+	  pc2max=p2max;
+  }
+
+
+  void SpikeSortBoxes::resetJobStatus()
+  {
+	  bPCAjobFinished = false;
+  }
+
+  bool SpikeSortBoxes::isPCAfinished()
+  {
+	  return bPCAjobFinished;
+  }
+  void SpikeSortBoxes::RePCA()
+  {
+	  bPCAcomputed = false;
+	  bPCAJobSubmitted = false;
+	  bRePCA = true;
+  }
+
+  void SpikeSortBoxes::addPCAunit(PCAUnit unit)
+  {
+	  const ScopedLock myScopedLock (mut);
+	  //StartCriticalSection();
+	  pcaUnits.push_back(unit);
+	  //EndCriticalSection();
+  }
+
+  // Adds a new unit with a single box at some default location.
+  // returns the unit id
+  int SpikeSortBoxes::addBoxUnit(int channel)
+  {
+	  const ScopedLock myScopedLock (mut);
+  	  //StartCriticalSection();
+	  int unusedID = uniqueIDgenerator->generateUniqueID(); //generateUnitID();
+	  BoxUnit unit(unusedID, generateLocalID());
+	  boxUnits.push_back(unit);
+	  setSelectedUnitAndBox(unusedID, 0);
+	  //EndCriticalSection();
+	  return unusedID;
+  }
+/*
+void  SpikeSortBoxes::StartCriticalSection()
+{
+	mut.enter();
+}
+
+void  SpikeSortBoxes::EndCriticalSection()
+{
+	mut.exit();
+}
+*/
+  int SpikeSortBoxes::addBoxUnit(int channel, Box B)
+  {
+	  const ScopedLock myScopedLock (mut);
+	  //StartCriticalSection();
+	  int unusedID = uniqueIDgenerator->generateUniqueID(); //generateUnitID();
+	  BoxUnit unit(B, unusedID,generateLocalID());
+	  boxUnits.push_back(unit);
+	  setSelectedUnitAndBox(unusedID, 0);
+	  //EndCriticalSection();
+	  return unusedID;
+  }
+
+  void SpikeSortBoxes::getUnitColor(int UnitID, uint8 &R, uint8 &G, uint8 &B)
+  {
+		for (int k = 0; k < boxUnits.size(); k++)
+		{
+			if (boxUnits[k].getUnitID() == UnitID)
+			{
+				R = boxUnits[k].ColorRGB[0];
+				G = boxUnits[k].ColorRGB[1];
+				B = boxUnits[k].ColorRGB[2];
+				break;
+			}
+		}
+		for (int k = 0; k < pcaUnits.size(); k++)
+		{
+			if (pcaUnits[k].getUnitID() == UnitID)
+			{
+				R = pcaUnits[k].ColorRGB[0];
+				G = pcaUnits[k].ColorRGB[1];
+				B = pcaUnits[k].ColorRGB[2];
+				break;
+			}
+		}
+  }
+
+    int SpikeSortBoxes::generateLocalID()
+	{
+	  // finds the first unused ID and return it
+	  
+	  int ID = 1;
+
+	  while (true)
+	  {
+		  bool used=false;
+		for (int k = 0; k < boxUnits.size(); k++)
+		{
+			if (boxUnits[k].getLocalID() == ID)
+			{
+				used = true;
+				break;
+			}
+		}
+		for (int k = 0; k < pcaUnits.size(); k++)
+		{
+			if (pcaUnits[k].getLocalID() == ID)
+			{
+				used = true;
+				break;
+			}
+		}
+
+		if (used)
+			ID++;
+		else
+			break;
+	  }
+	  return ID;
+	}
+
+  int SpikeSortBoxes::generateUnitID()
+  {
+	
+	  int ID = uniqueIDgenerator->generateUniqueID();
+	  return ID;
+}
+
+
+ void SpikeSortBoxes::generateNewIDs()
+ {
+	const ScopedLock myScopedLock (mut);
+	for (int k=0;k<boxUnits.size();k++)
+	  {
+		  boxUnits[k].UnitID = generateUnitID();
+	}
+	for (int k=0;k<pcaUnits.size();k++)
+	{
+		pcaUnits[k].UnitID = generateUnitID();
+	}
+ }
+
+void SpikeSortBoxes::removeAllUnits()
+{
+	const ScopedLock myScopedLock (mut);
+	boxUnits.clear();
+	pcaUnits.clear();
+}
+
+bool SpikeSortBoxes::removeUnit(int unitID)
+{
+	const ScopedLock myScopedLock (mut);
+	 //StartCriticalSection();
+	for (int k=0;k<boxUnits.size();k++)
+	  {
+		  if ( boxUnits[k].getUnitID() == unitID)
+		  {
+			  boxUnits.erase(boxUnits.begin()+k);
+			  //EndCriticalSection();
+			  return true;
+		  }
+	  }
+
+	for (int k=0;k<pcaUnits.size();k++)
+	{
+		if ( pcaUnits[k].getUnitID() == unitID)
+		{
+			pcaUnits.erase(pcaUnits.begin()+k);
+			//EndCriticalSection();
+			return true;
+		}
+	}
+
+	// EndCriticalSection();
+	return false;
+
+}
+
+bool SpikeSortBoxes::addBoxToUnit(int channel, int unitID)
+{
+	const ScopedLock myScopedLock (mut);
+
+	 //StartCriticalSection();
+	
+	for (int k = 0; k < boxUnits.size(); k++)
+	{
+	  if (boxUnits[k].getUnitID() == unitID)
+	  {
+		  Box B = boxUnits[k].lstBoxes[boxUnits[k].lstBoxes.size() - 1];
+		  B.x += 100;
+		  B.y -= 30;
+		  B.channel = channel;
+		  boxUnits[k].addBox(B);
+		  setSelectedUnitAndBox(unitID, boxUnits[k].lstBoxes.size() - 1);
+		  // EndCriticalSection();
+		  return true;
+	  }
+	}
+// EndCriticalSection();
+	return false;
+}
+
+		
+bool SpikeSortBoxes::addBoxToUnit(int channel, int unitID, Box B)
+{
+	const ScopedLock myScopedLock (mut);
+	 //StartCriticalSection();
+      for (int k=0;k<boxUnits.size();k++)
+	  {
+		  if ( boxUnits[k].getUnitID() == unitID)
+		  {
+			  boxUnits[k].addBox(B);
+			  // EndCriticalSection();
+			  return true;
+		  }
+	  }
+ //EndCriticalSection();
+	  return false;
+}
+
+std::vector<BoxUnit> SpikeSortBoxes::getBoxUnits()
+{
+	//StartCriticalSection();
+	const ScopedLock myScopedLock (mut);
+	std::vector<BoxUnit> unitsCopy = boxUnits;
+	//EndCriticalSection();
+	return unitsCopy;
+}
+
+
+std::vector<PCAUnit> SpikeSortBoxes::getPCAUnits()
+{
+	//StartCriticalSection();
+	const ScopedLock myScopedLock (mut);
+	std::vector<PCAUnit> unitsCopy = pcaUnits;
+	//EndCriticalSection();
+	return unitsCopy;
+}
+
+void SpikeSortBoxes::updatePCAUnits(std::vector<PCAUnit> _units)
+{
+	//StartCriticalSection();
+	const ScopedLock myScopedLock (mut);
+	pcaUnits = _units;
+	//EndCriticalSection();
+}
+
+void SpikeSortBoxes::updateBoxUnits(std::vector<BoxUnit> _units)
+{
+	const ScopedLock myScopedLock (mut);
+	//StartCriticalSection();
+	boxUnits = _units;
+	//EndCriticalSection();
+}
+
+
+
+
+// tests whether a candidate spike belongs to one of the defined units
+bool SpikeSortBoxes::sortSpike(SpikeObject *so, bool PCAfirst)
+{
+	const ScopedLock myScopedLock (mut);
+  if (PCAfirst) {
+
+	  for (int k=0;k<pcaUnits.size();k++)
+	  {
+		  if (pcaUnits[k].isWaveFormInsidePolygon(so)) 
+		  {
+			  so->sortedId = pcaUnits[k].getUnitID();
+			  so->color[0] = pcaUnits[k].ColorRGB[0];
+			  so->color[1] = pcaUnits[k].ColorRGB[1];
+			  so->color[2] = pcaUnits[k].ColorRGB[2];
+			  return true;
+		  }
+	  }
+
+	  for (int k=0;k<boxUnits.size();k++)
+	  {
+		  if ( boxUnits[k].isWaveFormInsideAllBoxes(so)) {
+			  so->sortedId = boxUnits[k].getUnitID();
+			  so->color[0] = boxUnits[k].ColorRGB[0];
+			  so->color[1] = boxUnits[k].ColorRGB[1];
+			  so->color[2] = boxUnits[k].ColorRGB[2];
+			  boxUnits[k].updateWaveform(so);
+			  return true;
+		  }
+	  }
+  } else 
+  {
+
+	  for (int k=0;k<boxUnits.size();k++)
+	  {
+		  if ( boxUnits[k].isWaveFormInsideAllBoxes(so)) {
+			  so->sortedId = boxUnits[k].getUnitID();
+			  so->color[0] = boxUnits[k].ColorRGB[0];
+			  so->color[1] = boxUnits[k].ColorRGB[1];
+			  so->color[2] = boxUnits[k].ColorRGB[2];
+			  boxUnits[k].updateWaveform(so);
+			  return true;
+		  }
+	  }
+	   for (int k=0;k<pcaUnits.size();k++)
+	  {
+		  if (pcaUnits[k].isWaveFormInsidePolygon(so)) 
+		  {
+			  so->sortedId = pcaUnits[k].getUnitID();
+			  so->color[0] = pcaUnits[k].ColorRGB[0];
+			  so->color[1] = pcaUnits[k].ColorRGB[1];
+			  so->color[2] = pcaUnits[k].ColorRGB[2];
+			  pcaUnits[k].updateWaveform(so);
+			  return true;
+		  }
+	  }
+
+  }
+
+  return false;	
+}
+
+
+bool  SpikeSortBoxes::removeBoxFromUnit(int unitID, int boxIndex)
+{
+	const ScopedLock myScopedLock (mut);
+	 //StartCriticalSection();
+	for (int k=0;k<boxUnits.size();k++)
+	{
+		  if ( boxUnits[k].getUnitID() == unitID)
+		  {
+			  bool s= boxUnits[k].deleteBox(boxIndex);
+			  setSelectedUnitAndBox(-1,-1);
+			  //EndCriticalSection();  
+			  return s;
+		  }
+
+	}
+	
+ //EndCriticalSection();            
+ return false;
+}
+
+std::vector<Box> SpikeSortBoxes::getUnitBoxes(int unitID)
+{
+	std::vector<Box> boxes;
+	const ScopedLock myScopedLock (mut);
+	 //StartCriticalSection();
+	for (int k=0;k< boxUnits.size();k++)
+	{
+		  if ( boxUnits[k].getUnitID() == unitID)
+		  {
+			  
+			  boxes = boxUnits[k].getBoxes();
+			 // EndCriticalSection();
+			  return boxes;
+		  }
+	}
+	//EndCriticalSection();
+	return boxes;
+}
+
+
+int SpikeSortBoxes::getNumBoxes(int unitID)
+{
+	const ScopedLock myScopedLock (mut);
+		// StartCriticalSection();
+	for (int k=0;k< boxUnits.size();k++)
+	{
+		  if ( boxUnits[k].getUnitID() == unitID)
+		  {
+			  
+			  int n =boxUnits[k].getNumBoxes();
+			 // EndCriticalSection();
+			  return n;
+		  }
+	}
+	//EndCriticalSection();
+	return -1;
+}
+        
+/*
+        public void DrawBoxes(BufferedGraphics buf, int channel, int SelectedUnit, int SelectedBox, 
+            double XScale, double XOffset, double YScale, double YOffset)
+        {
+            mut.WaitOne();
+            int unitcounter=0;
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+            {
+                Pen myPen = new Pen(unit.ColorRGB);
+                int boxcounter =0;
+                foreach (Box b in unit.getBoxes())
+                {
+                    if (unit.GetUnitID() == SelectedUnit && SelectedBox == boxcounter)
+                    {
+                        myPen.Width = 3;
+                        
+                    }
+                    else
+                    {
+                        myPen.Width = 1;
+                    }
+
+                   buf.Graphics.DrawRectangle(myPen, (float)(b.x * XScale + XOffset), 
+                                                      (float)(YOffset-YScale*b.y), 
+                                                      (float)((b.w) * XScale), 
+                                                      (float)(YScale*b.h));
+                    boxcounter++;
+                }
+                unitcounter++;
+            }
+            mut.ReleaseMutex();
+        }
+
+        public bool IsUnitActivated(int channel, int unitID)
+        {
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+                if (unit.GetUnitID() == unitID)
+                    return unit.IsActivated();
+            return false;
+        }
+
+        public void ActivateUnit(int channel, int unitID)
+        {
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+                if (unit.GetUnitID() == unitID)
+                     unit.ActivateUnit();
+        }
+        public void DectivateUnit(int channel, int unitID)
+        {
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+                if (unit.GetUnitID() == unitID)
+                    unit.DeactivateUnit();
+        }
+        public double GetNumSecUnitActive(int channel, int unitID)
+        {
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+                if (unit.GetUnitID() == unitID)
+                    return unit.GetNumSecondsActive();
+
+            return 0;
+        }
+        public void ToggleActivate(int channel, int unitID)
+        {
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+                if (unit.GetUnitID() == unitID)
+                    unit.ToggleActive();
+        }
+		
+
+        public void UpdateUnitBoxPos(int channel, int unitID, int boxID, PointD P)
+        {
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+            if (unit.GetUnitID() == unitID)
+                unit.SetBoxPos(boxID,P);
+        }
+
+        public void UpdateUnitBoxPosAndSize(int channel, int unitID, int boxID, Box B)
+        {
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+                if (unit.GetUnitID() == unitID)
+                    unit.SetBox(boxID, B);
+        }
+
+
+        //YScaleFactors[yScaleIndex]
+        public void DrawWavesInBuffer(BufferedGraphics buf, int channel, double XScale, double YScale, double YOffset)
+        {
+            mut.WaitOne();
+            foreach (WaveForm wf in WaveFormBuffer[channel])
+            {
+                Pen myPen = new Pen(wf.colorRGB);
+                for (int j = 0; j < wf.numpts - 1; j++)
+                {
+                    buf.Graphics.DrawLine(myPen,
+                        (float)(XScale * j),
+                        (float)(YOffset - YScale * wf.Wave[wf.detected_on_channel_index, j]),
+                        (float)(XScale * (j + 1)), (float)(YOffset - YScale * wf.Wave[wf.detected_on_channel_index, j + 1]));
+                }
+            }
+            mut.ReleaseMutex();
+        }
+
+         public void ClearAvgWaveForm(int channel, int UnitID)
+        {
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+            {
+                if (unit.GetUnitID() == UnitID)
+                {
+                    unit.ResetWaveForm();
+                    return;
+                }
+            }
+        }
+
+        public void GetWaveFormsMeanVar(int Channel, out double[,] Mean, out double[,] Std, out int[] UnitIDs, out Boolean[] HasData)
+        {
+            mut.WaitOne();
+            int Counter=0,dim1;
+            if (WaveFormBuffer[0].Count == 0)
+                dim1 = 62;
+            else
+                dim1 = WaveFormBuffer[0][0].Wave.GetLength(1);
+
+            HasData = new Boolean[lstChannelUnits[Channel].Count];
+            Mean = new double[lstChannelUnits[Channel].Count,dim1];
+            Std =  new double[lstChannelUnits[Channel].Count,dim1];
+            UnitIDs = new int[lstChannelUnits[Channel].Count];
+            foreach (BoxUnit unit in lstChannelUnits[Channel])
+            {
+                double[] MeanUnit, StdUnit;
+                HasData[Counter] = false;
+                UnitIDs[Counter] = unit.GetUnitID();
+                unit.GetWaveFormMeanStd(out MeanUnit, out StdUnit, 0);
+                if (MeanUnit == null)
+                {
+                    Counter++;
+                    continue;
+                }
+                HasData[Counter] = true;
+                for (int j = 0; j < dim1; j++)
+                {
+                    Mean[Counter,j] = MeanUnit[j];
+                    Std[Counter, j] = StdUnit[j];
+                }
+               
+                Counter++;
+            }
+            mut.ReleaseMutex();
+        }
+
+
+        private bool GetUnit(int Channel, int UnitID, out BoxUnit box)
+        {
+            box = new BoxUnit(0);
+            foreach (BoxUnit unit in lstChannelUnits[Channel])
+            {
+                if (unit.GetUnitID() == UnitID)
+                {
+                    box = unit;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public void DrawInterSpikeHistogram(int channel, int UnitID, BufferedGraphics buf, int Width, int Height)
+        {
+            mut.WaitOne();
+            BoxUnit unit;
+            if (!GetUnit(channel, UnitID, out unit))
+            {
+                mut.ReleaseMutex();
+                return;
+            }
+
+            Color FadedColor = Color.FromArgb(unit.ColorRGB.A, unit.ColorRGB.R / 2, unit.ColorRGB.G / 2, unit.ColorRGB.B / 2);
+            Pen myPen = new Pen(FadedColor);
+
+            int NumPointsToDraw = 30;
+            float XScale = (float)Width / NumPointsToDraw;
+            Histogram hist = unit.GetInterSpikeHistogram();
+            SolidBrush myBrush = new SolidBrush(FadedColor);
+            SolidBrush myRedBrush = new SolidBrush(Color.Red);
+            if (hist.Max > 0)
+            {
+                float YScale = (float)Height / hist.Max;
+
+                 for (int j = 0; j < NumPointsToDraw - 1; j++)
+                {
+                     if (j > 2)
+                        buf.Graphics.FillRectangle(myBrush, new Rectangle((int)(XScale * (j + 0.5)), (int)(Height - YScale * hist.Counter[j]), (int)(Width / NumPointsToDraw), (int)(YScale * hist.Counter[j])));
+                     else
+                         buf.Graphics.FillRectangle(myRedBrush, new Rectangle((int)(XScale * (j + 0.5)), (int)(Height - YScale * hist.Counter[j]), (int)(Width / NumPointsToDraw), (int)(YScale * hist.Counter[j])));
+               
+                }
+            }
+            mut.ReleaseMutex();
+        }
+
+
+        public void DrawAvgWaveForm(int channel, int UnitID, BufferedGraphics buf, int Width, int Height, double YScale )
+        {
+            BoxUnit unit;
+            mut.WaitOne();
+            if (!GetUnit(channel, UnitID, out unit))
+            {
+                mut.ReleaseMutex();
+                return;
+            }
+
+            double [] Mean;
+            double [] Std;
+            unit.GetWaveFormMeanStd(out Mean, out Std, 0);
+            if (Mean == null)
+            {
+                mut.ReleaseMutex();
+                return;
+            }
+
+
+            Pen myPen = new Pen(unit.ColorRGB);
+            Pen myDashPen = new Pen(unit.ColorRGB);
+            myDashPen.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot;
+
+            int WaveFormLength = Mean.Length;
+            float XScale = (float)Width / 62.0F;
+            float YOffset = (float)Height / 2.0F;
+
+            for (int j = 0; j < WaveFormLength - 1; j++)
+            {
+                buf.Graphics.DrawLine(myPen,
+                    (float)(XScale * j),
+                    (float)(YOffset - YScale * Mean[j]),
+                    (float)(XScale * (j + 1)), (float)(YOffset - YScale * Mean[j + 1]));
+
+                buf.Graphics.DrawLine(myDashPen,
+                                   (float)(XScale * j),
+                                   (float)(YOffset - YScale * (Std[ j] + Mean[ j])),
+                                   (float)(XScale * (j + 1)), (float)(YOffset - YScale * (Std[ j + 1] +Mean[ j + 1])));
+
+                buf.Graphics.DrawLine(myDashPen,
+                                   (float)(XScale * j),
+                                   (float)(YOffset - YScale * (-Std[ j] + Mean[ j])),
+                                   (float)(XScale * (j + 1)), (float)(YOffset - YScale * (-Std[j + 1] + Mean[ j + 1])));
+
+            }
+            mut.ReleaseMutex();
+        }
+
+
+        public Histogram GetInterSpikeHistogram(int channel, int unitID)
+        {
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+            {
+                if (unit.GetUnitID() == unitID)
+                {
+                    return unit.GetInterSpikeHistogram();
+                }
+            }
+            return new Histogram(0,0,0);
+        }
+
+        public bool QueryNewData(int channel, int unitID)
+        {
+            foreach (BoxUnit unit in lstChannelUnits[channel])
+            {
+                if (unit.GetUnitID() == unitID)
+                {
+                    return unit.QueryNewData();
+                }
+            }
+            return false;
+        }
+
+        public void ClearBuffer(int ch)
+        {
+            WaveFormBuffer[ch].Clear();
+        }
+
+        public WaveForm GetLastWaveForm(int channel)
+        {
+            mut.WaitOne();
+            WaveForm wf ;
+            if (WaveFormBuffer[channel].Count > 0)
+                wf = WaveFormBuffer[channel][WaveFormBuffer[channel].Count - 1];
+            else
+                wf = new WaveForm();
+
+            mut.ReleaseMutex();
+            return wf;
+        }
+
+		*/
+
+/**************************/
+
+cPolygon::cPolygon()
+{
+};
+
+bool cPolygon::isPointInside(PointD p) 
+{
+	PointD p1, p2;
+
+	bool inside = false;
+
+	if (pts.size() < 3)
+	{
+		return inside;
+	}
+
+	PointD oldPoint(pts[pts.size()- 1].X + offset.X, pts[pts.size()- 1].Y + offset.Y);
+
+	for (int i = 0; i < pts.size(); i++)
+	{
+		PointD newPoint(pts[i].X + offset.X, pts[i].Y + offset.Y);
+
+		if (newPoint.X > oldPoint.X)
+		{
+			p1 = oldPoint;
+			p2 = newPoint;
+		}
+		else
+		{
+			p1 = newPoint;
+			p2 = oldPoint;
+		}
+
+		if ((newPoint.X < p.X) == (p.X <= oldPoint.X)
+			&& ((p.Y - p1.Y) * (p2.X - p1.X)	< (p2.Y - p1.Y) * (p.X - p1.X)))
+		{
+			inside = !inside;
+		}
+
+		oldPoint = newPoint;
+	}
+
+	return inside;
+}
+
+
+
+
+
+
+
+
+
+/*****************/
+
+
+/*************************/
+PCAUnit::PCAUnit()
+{
+
+}
+
+PCAUnit::PCAUnit(int ID, int localID_): UnitID(ID),localID(localID_)
+{
+	BoxUnit::setDefaultColors(ColorRGB, localID);
+};
+
+PCAUnit::~PCAUnit()
+{
+}
+
+PCAUnit::PCAUnit(cPolygon B, int ID, int localID_) : UnitID(ID), localID(localID_)
+{
+	poly = B;
+}
+
+int PCAUnit::getUnitID()
+{
+	return UnitID;
+}
+int PCAUnit::getLocalID()
+{
+	return localID;
+}
+
+bool PCAUnit::isPointInsidePolygon(PointD p)
+{
+		return poly.isPointInside(p);
+}
+
+bool PCAUnit::isWaveFormInsidePolygon(SpikeObject *so)
+{
+	return poly.isPointInside(PointD(so->pcProj[0],so->pcProj[1]));
+}
+
+void PCAUnit::resizeWaveform(int newlength)
+{
+}
+
+
+void PCAUnit::updateWaveform(SpikeObject *so)
+{
+	WaveformStat.update(so);
+}
+
+/***************************/
+
+
+/*
+  An implementation of SVD from Numerical Recipes in C and Mike Erhdmann's lectures
+*/
+
+
+#define SIGN(a,b) ((b) > 0.0 ? fabs(a) : - fabs(a))
+
+static double maxarg1,maxarg2;
+#define FMAX(a,b) (maxarg1 = (a),maxarg2 = (b),(maxarg1) > (maxarg2) ? (maxarg1) : (maxarg2))
+
+static int iminarg1,iminarg2;
+#define IMIN(a,b) (iminarg1 = (a),iminarg2 = (b),(iminarg1 < (iminarg2) ? (iminarg1) : iminarg2))
+
+static double sqrarg;
+#define SQR(a) ((sqrarg = (a)) == 0.0 ? 0.0 : sqrarg * sqrarg)
+
+PCAjob::PCAjob(Array<SpikeObject> _spikes, float *_pc1, float *_pc2,
+			float *pc1Min, float *pc2Min, float *pc1Max, float *pc2Max, bool *_reportDone) : spikes(_spikes), reportDone(_reportDone)
+{
+	cov = nullptr;
+	pc1 = _pc1;
+	pc2 = _pc2;
+	pc1min = pc1Min;
+	pc2min = pc2Min;
+	pc1max = pc1Max;
+	pc2max = pc2Max;
+    dim = spikes[0].nChannels*spikes[0].nSamples;
+
+};
+
+ PCAjob::~PCAjob()
+{
+	
+}
+
+
+
+// calculates sqrt( a^2 + b^2 ) with decent precision
+float PCAjob::pythag(float a, float b) {
+  float absa,absb;
+
+  absa = fabs(a);
+  absb = fabs(b);
+
+  if(absa > absb)
+    return(absa * sqrt(1.0 + SQR(absb/absa)));
+  else
+    return(absb == 0.0 ? 0.0 : absb * sqrt(1.0 + SQR(absa / absb)));
+}
+
+/*
+  Modified from Numerical Recipes in C
+  Given a matrix a[nRows][nCols], svdcmp() computes its singular value 
+  decomposition, A = U * W * Vt.  A is replaced by U when svdcmp 
+  returns.  The diagonal matrix W is output as a vector w[nCols].
+  V (not V transpose) is output as the matrix V[nCols][nCols].
+*/
+int PCAjob::svdcmp(float **a, int nRows, int nCols, float *w, float **v) {
+ 
+  int flag, i, its, j, jj, k, l, nm;
+  float anorm, c, f, g, h, s, scale, x, y, z, *rv1;
+
+  rv1 = new float[nCols];
+  if(rv1 == NULL) {
+  	printf("svdcmp(): Unable to allocate vector\n");
+  	return(-1);
+  }
+
+  g = scale = anorm = 0.0;
+  for(i = 0; i < nCols; i++) {
+    l = i+1;
+    rv1[i] = scale*g;
+    g = s = scale = 0.0;
+    if (i < nRows) 
+    {
+      for(k = i; k < nRows; k++)
+      {
+      	//std::cout << k << " " << i << std::endl;
+      	scale += fabs(a[k][i]);
+      }
+      
+      if(scale) 
+      {
+		for(k = i; k < nRows; k++) 
+		{
+	  		a[k][i] /= scale;
+	  		s += a[k][i] * a[k][i];
+		}
+		f = a[i][i];
+		g = -SIGN(sqrt(s),f);
+		h = f * g - s;
+		a[i][i] = f - g;
+		
+		for(j = l; j < nCols; j++) 
+		{
+		  for(s = 0.0, k = i; k < nRows; k++) s += a[k][i] * a[k][j];
+		  f = s / h;
+		  for(k = i; k < nRows; k++) a[k][j] += f * a[k][i];
+		}
+		
+		for(k = i; k < nRows; k++)
+			a[k][i] *= scale;
+	   } // end if (scale)
+    } // end if (i < nRows)
+    w[i] = scale * g;
+    g = s = scale = 0.0;
+    if(i < nRows && i != nCols-1) {
+      for(k = l; k < nCols; k++) scale += fabs(a[i][k]);
+      if(scale)  {
+	for(k = l; k < nCols; k++)
+	{
+	  a[i][k] /= scale;
+	  s += a[i][k] * a[i][k];
+	}
+	f = a[i][l];
+	g = - SIGN(sqrt(s),f);
+	h = f * g - s;
+	a[i][l] = f - g;
+	for(k=l;k<nCols;k++) rv1[k] = a[i][k] / h;
+	for(j=l;j<nRows;j++) {
+	  for(s=0.0,k=l;k<nCols;k++) s += a[j][k] * a[i][k];
+	  for(k=l;k<nCols;k++) a[j][k] += s * rv1[k];
+	}
+	for(k=l;k<nCols;k++) a[i][k] *= scale;
+      }
+    }
+    anorm = FMAX(anorm, (fabs(w[i]) + fabs(rv1[i])));
+
+  
+  }
+
+  for(i=nCols-1;i>=0;i--) {
+    if(i < nCols-1) {
+      if(g) {
+	for(j=l;j<nCols;j++)
+	  v[j][i] = (a[i][j] / a[i][l]) / g;
+	for(j=l;j<nCols;j++) {
+	  for(s=0.0,k=l;k<nCols;k++) s += a[i][k] * v[k][j];
+	  for(k=l;k<nCols;k++) v[k][j] += s * v[k][i];
+	}
+      }
+      for(j=l;j<nCols;j++) v[i][j] = v[j][i] = 0.0;
+    }
+    v[i][i] = 1.0;
+    g = rv1[i];
+    l = i;
+  }
+
+  for(i=IMIN(nRows,nCols) - 1;i >= 0;i--) {
+    l = i + 1;
+    g = w[i];
+    for(j=l;j<nCols;j++) a[i][j] = 0.0;
+    if(g) {
+      g = 1.0 / g;
+      for(j=l;j<nCols;j++) {
+	for(s=0.0,k=l;k<nRows;k++) s += a[k][i] * a[k][j];
+	f = (s / a[i][i]) * g;
+	for(k=i;k<nRows;k++) a[k][j] += f * a[k][i];
+      }
+      for(j=i;j<nRows;j++) a[j][i] *= g;
+    }
+    else
+      for(j=i;j<nRows;j++) a[j][i] = 0.0;
+    ++a[i][i];
+  }
+
+  for(k=nCols-1;k>=0;k--) {
+    for(its=0;its<30;its++) {
+      flag = 1;
+      for(l=k;l>=0;l--) {
+	nm = l-1;
+	if((fabs(rv1[l]) + anorm) == anorm) {
+	  flag =  0;
+	  break;
+	}
+	if((fabs(w[nm]) + anorm) == anorm) break;
+      }
+      if(flag) {
+	c = 0.0;
+	s = 1.0;
+	for(i=l;i<=k;i++) {
+	  f = s * rv1[i];
+	  rv1[i] = c * rv1[i];
+	  if((fabs(f) + anorm) == anorm) break;
+	  g = w[i];
+	  h = pythag(f,g);
+	  w[i] = h;
+	  h = 1.0 / h;
+	  c = g * h;
+	  s = -f * h;
+	  for(j=0;j<nRows;j++) {
+	    y = a[j][nm];
+	    z = a[j][i];
+	    a[j][nm] = y * c + z * s;
+	    a[j][i] = z * c - y * s;
+	  }
+	}
+      }
+      z = w[k];
+      if(l == k) {
+	if(z < 0.0) {
+	  w[k] = -z;
+	  for(j=0;j<nCols;j++) v[j][k] = -v[j][k];
+	}
+	break;
+      }
+      //if(its == 29) printf("no convergence in 30 svdcmp iterations\n");
+      x = w[l];
+      nm = k-1;
+      y = w[nm];
+      g = rv1[nm];
+      h = rv1[k];
+      f = ((y - z) * (y + z) + (g - h) * (g + h)) / (2.0 * h * y);
+      g = pythag(f,1.0);
+      f = ((x - z) * (x + z) + h * ((y / (f + SIGN(g,f))) - h)) / x;
+      c = s = 1.0;
+      for(j=l;j<=nm;j++) {
+	i = j+1;
+	g = rv1[i];
+	y = w[i];
+	h = s * g;
+	g = c * g;
+	z = pythag(f,h);
+	rv1[j] = z;
+	c = f/z;
+	s = h/z;
+	f = x * c + g * s;
+	g = g * c - x * s;
+	h = y * s;
+	y *= c;
+	for(jj=0;jj<nCols;jj++) {
+	  x = v[jj][j];
+	  z = v[jj][i];
+	  v[jj][j] = x * c + z * s;
+	  v[jj][i] = z * c - x * s;
+	}
+	z = pythag(f,h);
+	w[j] = z;
+	if(z) {
+	  z = 1.0 / z;
+	  c = f * z;
+	  s = h * z;
+	}
+	f = c * g + s * y;
+	x = c * y - s * g;
+	for(jj=0;jj < nRows;jj++) {
+	  y = a[jj][j];
+	  z = a[jj][i];
+	  a[jj][j] = y * c + z * s;
+	  a[jj][i] = z * c - y * s;
+	}
+      }
+      rv1[l] = 0.0;
+      rv1[k] = f;
+      w[k] = x;
+    }
+  }
+  
+  delete rv1;
+  
+  return(0);
+} 
+
+
+void PCAjob::computeCov()
+{
+	// allocate and zero
+	cov = new float*[dim];
+	float* mean  = new float[dim];
+	for (int k = 0;k < dim; k++) {
+		cov[k] = new float[dim];
+		for (int j=0;j<dim;j++)
+		{
+			cov[k][j] = 0;
+		}
+	}
+	// compute mean
+	
+	for (int j=0;j<dim;j++)
+	{
+		mean[j] = 0;
+		for (int i=0;i<spikes.size();i++) 
+		{
+            SpikeObject spike = spikes[i];
+			float v = spikeDataIndexToMicrovolts(&spike, j) ;
+			mean[j] += v / dim;
+		}
+	}
+	// aggregate
+
+
+	for (int i=0;i<dim;i++) {
+		for (int j=i;j<dim;j++)
+		{
+			// cov[i][j] = sum_k[ (X(i,:)) * (Xj-mue(j) ]
+			float sum = 0 ;
+			for (int k=0;k<spikes.size();k++) 
+			{
+
+                SpikeObject spike = spikes[k];
+				float vi = spikeDataIndexToMicrovolts(&spike, i);
+				float vj = spikeDataIndexToMicrovolts(&spike, j);
+				sum += (vi-mean[i]) * (vj-mean[j]);
+			}
+			cov[i][j] = sum / (dim-1); 
+			cov[j][i] = sum / (dim-1);
+		}
+	}
+	delete mean;
+
+	// delete covariances
+	//for (int k = 0; k < dim; k++)
+	 	//delete cov[k];
+
+	//delete(cov);
+	//cov = nullptr;
+
+}
+
+std::vector<int> sort_indexes( std::vector<float> v) 
+{
+	// initialize original index locations
+	std::vector<int> idx(v.size());
+
+	for (int i = 0; i != idx.size(); ++i) 
+	{ 
+		idx[i] = i;
+	}
+
+	//sort indexes based on comparing values in v
+	sort(
+		idx.begin(), 
+		idx.end()//, 
+		//[&v](size_t i1, size_t i2) 
+		//{
+		//	return v[i1] > v[i2];
+		//}
+	);
+
+	return idx;
+}
+
+void PCAjob::computeSVD()
+{
+	
+
+	float **eigvec, *sigvalues;
+	sigvalues = new float[dim];
+
+	eigvec = new float*[dim];
+	for (int k = 0; k < dim; k++) {
+		eigvec[k] = new float[dim];
+		for (int j=0;j<dim;j++)
+		{
+			eigvec[k][j] = 0;
+		}
+	}
+
+	svdcmp(cov, dim, dim, sigvalues, eigvec);
+	
+	std::vector<float> sig;
+	sig.resize(dim);
+	for (int k = 0; k < dim; k++)
+	    sig[k] = sigvalues[k];
+
+	std::vector<int> sortind = sort_indexes(sig);
+
+	for (int k = 0; k < dim; k++)
+	{
+		pc1[k] = eigvec[k][sortind[0]];
+		pc2[k] = eigvec[k][sortind[1]];
+	}
+	// project samples to find the display range
+	float min1 = 1e10, min2 = 1e10, max1 = -1e10, max2 = -1e10;
+	
+	for (int j = 0; j < spikes.size(); j++)
+	{
+		float sum1 = 0, sum2=0;
+		for (int k = 0; k < dim; k++)
+		{
+            SpikeObject spike = spikes[j];
+			sum1 += spikeDataIndexToMicrovolts(&spike,k) * pc1[k];
+			sum2 += spikeDataIndexToMicrovolts(&spike,k) * pc2[k];
+		}
+		if (sum1 < min1)
+			min1 = sum1;
+		if (sum2 < min2)
+			min2 = sum2;
+		if (sum1 > max1)
+			max1 = sum1;
+		if (sum2 > max2)
+			max2 = sum2;
+	}
+	
+
+	 *pc1min = min1 - 1.5 * (max1-min1);
+	 *pc2min = min2 - 1.5 * (max2-min2);
+	 *pc1max = max1 + 1.5 * (max1-min1);
+	 *pc2max = max2 + 1.5 * (max2-min2);
+
+	// clear memory
+	for (int k = 0; k < dim; k++)
+	{
+		delete eigvec[k];
+	}
+	delete eigvec;
+	delete sigvalues;
+
+	// delete covariances
+	for (int k = 0; k < dim; k++)
+	 	delete cov[k];
+
+	delete(cov);
+	cov = nullptr;
+	
+}
+
+
+/**********************/
+
+
+void PCAcomputingThread::addPCAjob(PCAjob job)
+{
+	jobs.push(job);
+	if (!isThreadRunning()) 
+	{
+		startThread();
+	}
+}
+
+void PCAcomputingThread::run()
+{
+	while (jobs.size() > 0)
+	{
+		PCAjob J = jobs.front();
+		jobs.pop();
+		// compute PCA
+		// 1. Compute Covariance matrix
+		// 2. Apply SVD on covariance matrix
+		// 3. Extract the two principal components corresponding to the largest singular values
+		
+		J.computeCov();
+		J.computeSVD();
+		
+		// 4. Report to the spike sorting electrode that PCA is finished 
+		*(J.reportDone) = true;
+	}
+}
+
+
+PCAcomputingThread::PCAcomputingThread() : Thread("PCA")
+{
+
+}
diff --git a/Source/Processors/SpikeSorter/SpikeSortBoxes.h b/Source/Processors/SpikeSorter/SpikeSortBoxes.h
new file mode 100644
index 0000000000000000000000000000000000000000..1af4e2352668a1d6016b02ec284abbcd2150dcc0
--- /dev/null
+++ b/Source/Processors/SpikeSorter/SpikeSortBoxes.h
@@ -0,0 +1,292 @@
+/*
+------------------------------------------------------------------
+
+This file is part of the Open Ephys GUI
+Copyright (C) 2013 Open Ephys
+
+------------------------------------------------------------------
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef __SPIKESORTBOXES_H
+#define __SPIKESORTBOXES_H
+
+#include "../../JuceLibraryCode/JuceHeader.h"
+
+#include "../GenericProcessor/GenericProcessor.h"
+#include "SpikeSorterEditor.h"
+#include "../Visualization/SpikeObject.h"
+#include <algorithm>    // std::sort
+#include <list>
+#include <queue>
+
+class PCAcomputingThread;
+class UniqueIDgenerator;
+class PointD
+{
+public:
+
+	PointD();
+	PointD(float x, float y);
+	PointD(const PointD &P);
+	const PointD operator+(const PointD &c1) const;
+	PointD& operator+=(const PointD &rhs);
+	PointD& operator-=(const PointD &rhs);
+
+
+	const PointD operator-(const PointD &c1) const;
+	const PointD operator*(const PointD &c1) const;
+
+	float cross(PointD c) const;
+	float X,Y;
+};
+
+
+class Box 
+{
+public:
+	Box();
+	Box(int channel);
+	Box(float X, float Y, float W, float H, int ch=0);
+	bool LineSegmentIntersection(PointD p11, PointD p12, PointD p21, PointD p22);
+	bool isWaveFormInside(SpikeObject *so);
+	double x,y,w,h; // x&w and specified in microseconds. y&h in microvolts
+	int channel;
+};
+
+
+/************************/
+class Histogram
+{
+public:
+	Histogram();
+	Histogram(int N, double T0, double T1);
+	~Histogram();
+
+	void setParameters(int N, double T0, double T1);
+	std::vector<int> getCounter();
+	void reset();
+	void update(double x);
+
+	int Max;
+	double t0, t1;
+	std::vector<double> Time;
+	int numBins;
+	std::vector<int> Counter;
+
+};
+
+class RunningStats
+{
+public:
+	RunningStats();
+	~RunningStats();
+	void resizeWaveform(int newlength);
+	void reset();
+	Histogram getHistogram();
+	std::vector<double> getMean(int index);
+	std::vector<double> getStandardDeviation(int index);
+	void update(SpikeObject *so);
+	bool queryNewData();
+
+	double LastSpikeTime;
+	bool newData;
+	Histogram hist;
+	std::vector<std::vector<double> > WaveFormMean,WaveFormSk,WaveFormMk;
+	double numSamples;
+ 
+
+};
+
+// Box unit defines a single unit (with multiple boxes)
+// Each box can be on a different channel 
+class BoxUnit
+{
+public:
+	BoxUnit();
+	BoxUnit(int ID, int localID);
+	BoxUnit(Box B, int ID, int localID);
+	bool isWaveFormInsideAllBoxes(SpikeObject *so);
+	bool isActivated();
+	void activateUnit();
+	void deactivateUnit();
+	double getNumSecondsActive();
+	void toggleActive();
+	void addBox(Box b);
+	void addBox();
+	int getNumBoxes();
+	void modifyBox(int boxindex, Box b);
+	bool deleteBox(int boxindex);
+	Box getBox(int box);
+	void setBox(int boxid, Box B);
+	void setBoxPos(int boxid, PointD P);
+	void setBoxSize(int boxid, double W, double H);
+	void MoveBox(int boxid, int dx, int dy);
+	std::vector<Box> getBoxes();
+	int getUnitID();
+	int getLocalID();
+	void updateWaveform(SpikeObject *so);
+	static void setDefaultColors(uint8_t col[3], int ID);
+	void resizeWaveform(int newlength);
+public:
+	int UnitID;
+	int localID; // used internally, for colors and position.
+	std::vector<Box> lstBoxes;
+	uint8_t ColorRGB[3];
+	RunningStats WaveformStat;
+	bool Active;
+	juce::int64 Activated_TS_S;
+	Time timer;
+
+};
+
+/*
+class PCAjob
+{
+public:
+PCAjob();
+};*/
+class PCAjob
+{
+public:
+	PCAjob(Array<SpikeObject> _spikes, float *_pc1, float *_pc2,
+			float *, float *, float *, float *, bool *_reportDone);
+	~PCAjob();
+	void computeCov();
+	void computeSVD();
+
+	float **cov;
+	Array<SpikeObject> spikes;
+	float *pc1, *pc2;
+	float *pc1min, *pc2min, *pc1max, *pc2max;
+	bool *reportDone;
+private:
+	int svdcmp(float **a, int nRows, int nCols, float *w, float **v);
+	float pythag(float a, float b);
+	int dim;
+};
+
+
+class cPolygon
+{
+public:
+	cPolygon();
+	bool isPointInside(PointD p);
+	std::vector<PointD> pts;
+	PointD offset;
+};
+
+
+
+class PCAcomputingThread : juce::Thread
+{
+public:
+	PCAcomputingThread();
+	void run(); // computes PCA on waveforms
+	void addPCAjob(PCAjob job);
+
+	std::queue<PCAjob> jobs;
+};
+
+class PCAUnit
+{
+public:
+	PCAUnit();
+	PCAUnit(int ID, int localID);
+	PCAUnit(cPolygon B, int ID, int localID_);
+	~PCAUnit();
+	int getUnitID();
+	int getLocalID();
+	bool isWaveFormInsidePolygon(SpikeObject *so);
+	bool isPointInsidePolygon(PointD p);
+	void resizeWaveform(int newlength);
+	void updateWaveform(SpikeObject *so);
+public:
+	int UnitID;
+	int localID; // used internally, for colors and position.
+	cPolygon poly;
+	uint8_t ColorRGB[3];
+	RunningStats WaveformStat;
+	bool Active;
+	juce::int64 Activated_TS_S;
+	Time timer;
+};
+
+// Sort spikes from a single electrode (which could have any number of channels)
+// using the box method. Any electrode could have an arbitrary number of units specified.
+// Each unit is defined by a set of boxes, which can be placed on any of the given channels.
+class SpikeSortBoxes
+{
+public:
+	SpikeSortBoxes(UniqueIDgenerator *uniqueIDgenerator_, PCAcomputingThread *pth, int numch, double SamplingRate, int WaveFormLength);
+	~SpikeSortBoxes();
+
+	void resizeWaveform(int numSamples);
+	
+	
+	void projectOnPrincipalComponents(SpikeObject *so);
+	bool sortSpike(SpikeObject *so, bool PCAfirst);
+	void RePCA();
+	void addPCAunit(PCAUnit unit);
+	int addBoxUnit(int channel); 
+	int addBoxUnit(int channel, Box B);
+
+    void getPCArange(float &p1min,float &p2min, float &p1max,  float &p2max);
+	void setPCArange(float p1min,float p2min, float p1max,  float p2max);
+	void resetJobStatus();
+	bool isPCAfinished();
+
+	bool removeUnit(int unitID);
+	
+	void removeAllUnits();
+	bool addBoxToUnit(int channel, int unitID);
+	bool addBoxToUnit(int channel, int unitID, Box B);
+	bool removeBoxFromUnit(int unitID, int boxIndex);
+	int getNumBoxes(int unitID);
+	std::vector<Box> getUnitBoxes(int unitID);
+	std::vector<BoxUnit> getBoxUnits();
+	std::vector<PCAUnit> getPCAUnits();
+
+	void getUnitColor(int UnitID, uint8 &R, uint8 &G, uint8 &B);
+	void updateBoxUnits(std::vector<BoxUnit> _units);
+	void updatePCAUnits(std::vector<PCAUnit> _units);
+	int generateUnitID();
+    int generateLocalID();
+	void generateNewIDs();
+    void setSelectedUnitAndBox(int unitID, int boxID);
+	void getSelectedUnitAndBox(int &unitID, int &boxid);
+	void saveCustomParametersToXml(XmlElement *electrodeNode);
+	void loadCustomParametersFromXml(XmlElement *electrodeNode);
+private:
+	//void  StartCriticalSection();
+	//void  EndCriticalSection();
+	UniqueIDgenerator* uniqueIDgenerator;
+	int numChannels, waveformLength;
+	int selectedUnit, selectedBox;
+	CriticalSection mut;
+	std::vector<BoxUnit> boxUnits;
+	std::vector<PCAUnit> pcaUnits;
+	float *pc1, *pc2;
+	float pc1min, pc2min, pc1max, pc2max;
+	Array<SpikeObject> spikeBuffer;
+	int bufferSize,spikeBufferIndex;
+	PCAcomputingThread *computingThread;
+	bool bPCAJobSubmitted,bPCAcomputed,bRePCA,bPCAjobFinished ;
+	
+
+};
+
+#endif // __SPIKESORTBOXES_H
diff --git a/Source/Processors/SpikeSorter/SpikeSorter.cpp b/Source/Processors/SpikeSorter/SpikeSorter.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ffbc1bd466cab205055211fb93f972c6f0c6e48f
--- /dev/null
+++ b/Source/Processors/SpikeSorter/SpikeSorter.cpp
@@ -0,0 +1,1804 @@
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2013 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <stdio.h>
+#include "SpikeSorter.h"
+#include "SpikeSortBoxes.h"
+#include "SpikeSorterCanvas.h"
+#include "../Channel/Channel.h"
+#include "../SpikeDisplayNode/SpikeDisplayNode.h"
+
+class spikeSorter;
+
+SpikeSorter::SpikeSorter()
+    : GenericProcessor("Spike Sorter"),
+	overflowBuffer(2,100), dataBuffer(nullptr),
+      overflowBufferSize(100), currentElectrode(-1),
+	  numPreSamples(8),numPostSamples(32)
+{
+	uniqueID = 0; // for electrode count
+	uniqueSpikeID = 0;
+	juce::Time timer;
+	ticksPerSec = (float) timer.getHighResolutionTicksPerSecond();
+	electrodeTypes.clear();
+	electrodeCounter.clear();
+    spikeBuffer = new uint8_t[MAX_SPIKE_BUFFER_LEN]; // MAX_SPIKE_BUFFER_LEN defined in SpikeObject.h
+	channelBuffers=nullptr;
+	PCAbeforeBoxes = true;
+	autoDACassignment = true;
+	syncThresholds = false;
+	flipSignal = false;
+}
+
+bool SpikeSorter::getFlipSignalState()
+{
+	return flipSignal;
+}
+
+
+void SpikeSorter::setFlipSignalState(bool state)
+{
+	flipSignal = state;
+
+	mut.enter();
+	if (currentElectrode >= 0)
+	{
+	if (electrodes[currentElectrode]->spikePlot != nullptr)
+		electrodes[currentElectrode]->spikePlot->setFlipSignal(state);
+
+	}
+	mut.exit();
+
+}
+
+int SpikeSorter::getNumPreSamples()
+{
+	return numPreSamples;
+}
+
+int SpikeSorter::getNumPostSamples()
+{
+	return numPostSamples;
+}
+
+bool SpikeSorter::getAutoDacAssignmentStatus()
+{
+	return autoDACassignment;
+}
+
+bool SpikeSorter::getThresholdSyncStatus()
+{
+	return syncThresholds;
+}
+
+void SpikeSorter::setThresholdSyncStatus(bool status)
+{
+	syncThresholds= status;
+}
+
+
+void SpikeSorter::seteAutoDacAssignment(bool status)
+{
+	autoDACassignment = status;
+}
+
+void SpikeSorter::setNumPreSamples(int numSamples)
+{
+	// we need to update all electrodes, and also inform other modules that this has happened....
+	numPreSamples = numSamples;
+
+	for (int k = 0; k < electrodes.size(); k++)
+	{
+		electrodes[k]->resizeWaveform(numPreSamples,numPostSamples);
+	}
+	
+}
+
+void SpikeSorter::setNumPostSamples(int numSamples)
+{
+	numPostSamples = numSamples;
+	for (int k = 0; k < electrodes.size(); k++)
+	{
+		electrodes[k]->resizeWaveform(numPreSamples,numPostSamples);
+	}
+}
+
+
+int SpikeSorter::getUniqueProbeID(String type)
+{
+    for (int i = 0; i < electrodeTypes.size(); i++)
+    {
+        if (electrodeTypes[i] == type)
+		{
+			return electrodeCounter[i];
+		}
+    }
+	// if we reached here, we didn't find the type. Add it.
+	electrodeTypes.push_back(type);
+	electrodeCounter.push_back(1);
+	return 1;
+}
+
+
+void SpikeSorter::increaseUniqueProbeID(String type)
+{
+    for (int i = 0; i < electrodeTypes.size(); i++)
+    {
+        if (electrodeTypes[i] == type)
+		{
+			electrodeCounter[i]++;
+		}
+    }
+}
+
+
+
+SpikeSorter::~SpikeSorter()
+{
+	delete spikeBuffer;
+	spikeBuffer = nullptr;
+
+	if (channelBuffers != nullptr)
+		delete channelBuffers;
+
+}
+
+
+
+AudioProcessorEditor* SpikeSorter::createEditor()
+{
+    editor = new SpikeSorterEditor(this, true);
+	
+    return editor;
+}
+
+void SpikeSorter::updateSettings()
+{
+	 
+	mut.enter();
+	int numChannels = getNumInputs();
+    if (numChannels > 0)
+        overflowBuffer.setSize(getNumInputs(), overflowBufferSize);
+
+	if (channelBuffers != nullptr)
+		delete channelBuffers;
+
+	double SamplingRate = getSampleRate();;
+	double ContinuousBufferLengthSec = 5;
+	channelBuffers = new ContinuousCircularBuffer(numChannels,SamplingRate,1, ContinuousBufferLengthSec);
+	 
+	for (int i = 0; i < electrodes.size(); i++)
+	{
+
+		Channel* ch = new Channel(this, i);
+        //ch->isEventChannel = true;
+        ch->eventType = SPIKE_BASE_CODE + electrodes[i]->numChannels;
+        ch->name = electrodes[i]->name;
+
+        eventChannels.add(ch);
+		// String eventlog = "NewElectrode "+String(electrodes[k]->electrodeID) + " "+String(electrodes[k]->numChannels)+" ";
+		// for (int j=0;j<electrodes[k]->numChannels;j++)
+		// 	eventlog += String(electrodes[k]->channels[j])+ " "+electrodes[k]->name;
+		// //addNetworkEventToQueue(StringTS(eventlog));
+	}
+	
+	mut.exit();
+}
+
+
+Electrode::~Electrode()
+{
+	delete thresholds;
+    delete isActive;
+	delete voltageScale;
+    delete channels;
+	delete spikeSort;
+}
+
+Electrode::Electrode(int ID, UniqueIDgenerator *uniqueIDgenerator_, PCAcomputingThread *pth, String _name, int _numChannels, int *_channels, float default_threshold, int pre, int post, float samplingRate )
+{
+	electrodeID = ID;
+	computingThread = pth;
+	uniqueIDgenerator = uniqueIDgenerator_;
+	name = _name;
+
+    numChannels = _numChannels;
+    prePeakSamples = pre;
+    postPeakSamples = post;
+
+    thresholds = new double[numChannels];
+    isActive = new bool[numChannels];
+    channels = new int[numChannels];
+	voltageScale = new double[numChannels];
+	depthOffsetMM = 0.0;
+
+	advancerID = -1;
+
+    for (int i = 0; i < numChannels; i++)
+    {
+        channels[i] = _channels[i];
+		thresholds[i] = default_threshold;
+		isActive[i] = true;
+		voltageScale[i] = 500;
+    }
+	spikePlot = nullptr;
+
+	if (computingThread != nullptr)
+		spikeSort = new SpikeSortBoxes(uniqueIDgenerator, computingThread, numChannels, samplingRate, pre+post);
+	else
+		spikeSort = nullptr;
+	
+    isMonitored = false;
+}
+
+void Electrode::resizeWaveform(int numPre, int numPost)
+{
+	// update electrode and all sorted units....
+	// we can't keep pca space anymore, so we discard of all pca units (?)
+    prePeakSamples = numPre;
+    postPeakSamples = numPost;
+
+	//spikePlot = nullptr;
+	spikeSort->resizeWaveform(prePeakSamples+postPeakSamples);
+
+}
+
+void SpikeSorter::setElectrodeVoltageScale(int electrodeID, int index, float newvalue)
+{
+	std::vector<float> values;
+	mut.enter();
+	for (int k=0;k<electrodes.size();k++)
+	{
+		if (electrodes[k]->electrodeID == electrodeID)
+		{
+			electrodes[k]->voltageScale[index] = newvalue;
+			mut.exit();
+			return;
+		}
+	}
+	mut.exit();
+}
+
+std::vector<float> SpikeSorter::getElectrodeVoltageScales(int electrodeID)
+{
+	std::vector<float> values;
+	mut.enter();
+	for (int k=0;k<electrodes.size();k++)
+	{
+		if (electrodes[k]->electrodeID == electrodeID)
+		{
+			values.resize(electrodes[k]->numChannels);
+			for (int i=0;i<electrodes[k]->numChannels;i++)
+			{
+				values[i] = electrodes[k]->voltageScale[i];
+			}
+			mut.exit();
+			return values;
+		}
+	}
+	mut.exit();
+	return values;
+}
+
+// void SpikeSorter::setElectrodeAdvancerOffset(int i, double v)
+// {
+// 	mut.enter();
+// 	if (i >= 0) 
+// 	{
+// 		electrodes[i]->depthOffsetMM = v;
+// 		addNetworkEventToQueue(StringTS("NewElectrodeDepthOffset "+String(electrodes[i]->electrodeID)+" "+String(v,4)));
+// 	}
+// 	mut.exit();
+// }
+
+// void SpikeSorter::setElectrodeAdvancer(int i, int ID)
+// {
+// 	mut.enter();
+// 	if (i >= 0) 
+// 	{
+// 		electrodes[i]->advancerID = ID;
+// 	}
+// 	mut.exit();
+// }
+
+void SpikeSorter::addNewUnit(int electrodeID, int newUnitID, uint8 r, uint8 g, uint8 b)
+{
+	String eventlog = "NewUnit "+String(electrodeID) + " "+String(newUnitID)+" "+String(r)+" "+String(g)+" "+String(b);
+	//addNetworkEventToQueue(StringTS(eventlog));
+	//updateSinks( electrodeID,  newUnitID, r,g,b,true);
+}
+
+void SpikeSorter::removeUnit(int electrodeID, int unitID)
+{
+	String eventlog = "RemoveUnit "+String(electrodeID) + " "+String(unitID);
+	//addNetworkEventToQueue(StringTS(eventlog));
+	//updateSinks( electrodeID,  unitID, 0,0,0,false);
+	
+}
+
+
+void SpikeSorter::removeAllUnits(int electrodeID)
+{
+	String eventlog = "RemoveAllUnits "+String(electrodeID);
+	//addNetworkEventToQueue(StringTS(eventlog));
+	//updateSinks( electrodeID,true);
+}
+
+RHD2000Thread* SpikeSorter::getRhythmAccess()
+{
+
+	ProcessorGraph *gr = getProcessorGraph();
+	Array<GenericProcessor*> p = gr->getListOfProcessors();
+	for (int k=0;k<p.size();k++)
+	{
+		if (p[k]->getName() == "Rhythm FPGA")
+		{
+			SourceNode* src = (SourceNode* )p[k];
+			return (RHD2000Thread*)src->getThread();
+		}
+	}
+	return nullptr;
+}
+
+void SpikeSorter::updateDACthreshold(int dacChannel, float threshold)
+{
+	RHD2000Thread* th = getRhythmAccess();
+	if (th != nullptr)
+	{
+		th->setDACthreshold(dacChannel,threshold);
+	}
+}
+
+Array<int> SpikeSorter::getDACassignments()
+{
+	Array<int> dacChannels ;
+	RHD2000Thread* th = getRhythmAccess();
+	if (th != nullptr)
+	{
+		dacChannels = th->getDACchannels();
+	}
+	return dacChannels;
+}
+
+int SpikeSorter::getDACassignment(int dacchannel)
+{
+	RHD2000Thread* th = getRhythmAccess();
+	if (th != nullptr)
+	{
+		Array<int> dacChannels = th->getDACchannels();
+		return dacChannels[dacchannel];
+	}
+	
+	return -1; // not assigned
+}
+
+void SpikeSorter::assignDACtoChannel(int dacOutput, int channel)
+{
+	// inform sinks about a new unit
+	//getSourceNode()
+	RHD2000Thread* th = getRhythmAccess();
+	if (th != nullptr)
+	{
+		th->setDACchannel(dacOutput, channels[channel]->originalStream, channels[channel]->originalChannel);
+	}
+}
+
+void SpikeSorter::addElectrode(Electrode* newElectrode)
+{
+	mut.enter();
+    resetElectrode(newElectrode);
+    electrodes.add(newElectrode);
+	// inform PSTH sink, if it exists, about this new electrode.
+	//updateSinks(newElectrode);
+	mut.exit();
+}
+
+bool SpikeSorter::addElectrode(int nChans, String name, double Depth)
+{
+
+	mut.enter();
+    int firstChan;
+
+    if (electrodes.size() == 0)
+    {
+        firstChan = 0;
+    }
+    else
+    {
+        Electrode* e = electrodes.getLast();
+        firstChan = *(e->channels + (e->numChannels - 1)) + 1;
+    }
+
+    if (firstChan + nChans > getNumInputs())
+    {
+		mut.exit();
+        return false;
+    }
+	
+	int *channels = new int[nChans];
+	for (int k = 0; k < nChans; k++)
+		channels[k] = firstChan + k;
+
+	Electrode* newElectrode = new Electrode(++uniqueID, &uniqueIDgenerator, &computingThread, name, nChans, channels, getDefaultThreshold(), 
+		numPreSamples, numPostSamples, getSampleRate());
+
+	newElectrode->depthOffsetMM = Depth;
+	String log = "Added electrode (ID "+ String(uniqueID)+") with " + String(nChans) + " channels." ;
+    std::cout << log << std::endl;
+	String eventlog = "NewElectrode "+ String(uniqueID) + " " + String(nChans) + " ";
+	for (int k = 0; k < nChans; k++)
+		eventlog += String(channels[k])+ " " + name;
+
+	//addNetworkEventToQueue(StringTS(eventlog));
+
+    resetElectrode(newElectrode);
+    electrodes.add(newElectrode);
+	//updateSinks(newElectrode);
+	setCurrentElectrodeIndex(electrodes.size()-1);
+	mut.exit();
+    return true;
+
+}
+
+float SpikeSorter::getDefaultThreshold()
+{
+    return -20.0f;
+}
+
+StringArray SpikeSorter::getElectrodeNames()
+{
+    StringArray names;
+	mut.enter();
+    for (int i = 0; i < electrodes.size(); i++)
+    {
+        names.add(electrodes[i]->name);
+    }
+	mut.exit();
+    return names;
+}
+
+void SpikeSorter::resetElectrode(Electrode* e)
+{
+    e->lastBufferIndex = 0;
+}
+
+bool SpikeSorter::removeElectrode(int index)
+{
+	mut.enter();
+    // std::cout << "Spike detector removing electrode" << std::endl;
+
+    if (index > electrodes.size() || index < 0) {
+        mut.exit();
+		return false;
+	}
+
+	
+	String log = "Removing electrode (ID " + String(electrodes[index]->electrodeID)+")";
+	std::cout << log <<std::endl;
+
+	String eventlog = "RemoveElectrode " + String(electrodes[index]->electrodeID);
+	//addNetworkEventToQueue(StringTS(eventlog));
+	
+	int idToRemove = electrodes[index]->electrodeID;
+    electrodes.remove(index);
+
+	//(idToRemove);
+
+	if (electrodes.size() > 0)
+		currentElectrode = electrodes.size()-1;
+	else
+		currentElectrode = -1;
+	
+	mut.exit();
+    return true;
+}
+
+void SpikeSorter::setElectrodeName(int index, String newName)
+{
+	mut.enter();
+	if ((electrodes.size() > 0) && (index > 0))
+		electrodes[index-1]->name = newName;
+	//updateSinks(electrodes[index-1]->electrodeID, newName);
+	mut.exit();
+}
+
+void SpikeSorter::setChannel(int electrodeIndex, int channelNum, int newChannel)
+{
+	mut.enter();
+	String log = "Setting electrode " + String(electrodeIndex) + " channel " + String( channelNum )+
+              " to " + String( newChannel );
+    std::cout << log<< std::endl;
+
+
+	
+	String eventlog = "ChanelElectrodeChannel " + String(electrodes[electrodeIndex]->electrodeID) + " " + String(channelNum) + " " + String(newChannel);
+	//addNetworkEventToQueue(StringTS(eventlog));
+	
+	//updateSinks(electrodes[electrodeIndex]->electrodeID, channelNum,newChannel);
+
+    *(electrodes[electrodeIndex]->channels+channelNum) = newChannel;
+	mut.exit();
+}
+
+int SpikeSorter::getNumChannels(int index)
+{
+	mut.enter();
+    int i=electrodes[index]->numChannels;
+	mut.exit();
+	return i;
+}
+
+int SpikeSorter::getChannel(int index, int i)
+{
+	mut.enter();
+    int ii=*(electrodes[index]->channels+i);
+	mut.exit();
+	return ii;
+}
+
+
+void SpikeSorter::setChannelActive(int electrodeIndex, int subChannel, bool active)
+{
+
+    currentElectrode = electrodeIndex;
+    currentChannelIndex = subChannel;
+
+    if (active)
+        setParameter(98, 1);
+    else
+        setParameter(98, 0);
+	
+	//getEditorViewport()->makeEditorVisible(this, true, true);
+}
+
+bool SpikeSorter::isChannelActive(int electrodeIndex, int i)
+{
+	mut.enter();
+	bool b= *(electrodes[electrodeIndex]->isActive+i);
+	mut.exit();
+	return b;
+}
+
+
+void SpikeSorter::setChannelThreshold(int electrodeNum, int channelNum, float thresh)
+{
+	mut.enter();
+    currentElectrode = electrodeNum;
+    currentChannelIndex = channelNum;
+	electrodes[electrodeNum]->thresholds[channelNum] = thresh;
+	if (electrodes[electrodeNum]->spikePlot != nullptr)
+		electrodes[electrodeNum]->spikePlot->setDisplayThresholdForChannel(channelNum,thresh);
+
+	if (syncThresholds)
+	{
+		for (int k=0;k<electrodes.size();k++)
+		{
+			for (int i=0;i<electrodes[k]->numChannels;i++)
+			{
+				electrodes[k]->thresholds[i] = thresh;
+			}
+		}
+	}
+
+	mut.exit();
+    setParameter(99, thresh);
+}
+
+double SpikeSorter::getChannelThreshold(int electrodeNum, int channelNum)
+{
+    mut.enter();
+	double f= *(electrodes[electrodeNum]->thresholds+channelNum);
+	mut.exit();
+	return f;
+}
+
+void SpikeSorter::setParameter(int parameterIndex, float newValue)
+{
+    //editor->updateParameterButtons(parameterIndex);
+	mut.enter();
+    if (parameterIndex == 99 && currentElectrode > -1)
+    {
+        *(electrodes[currentElectrode]->thresholds+currentChannelIndex) = newValue;
+    }
+    else if (parameterIndex == 98 && currentElectrode > -1)
+    {
+        if (newValue == 0.0f)
+            *(electrodes[currentElectrode]->isActive+currentChannelIndex) = false;
+        else
+            *(electrodes[currentElectrode]->isActive+currentChannelIndex) = true;
+    }
+	mut.exit();
+}
+
+
+bool SpikeSorter::enable()
+{
+
+    useOverflowBuffer = false;
+	SpikeSorterEditor* editor = (SpikeSorterEditor*) getEditor();
+	 editor->enable();
+	
+    return true;
+}
+
+
+bool SpikeSorter::isReady()
+{
+    return true;
+}
+
+
+bool SpikeSorter::disable()
+{
+	mut.enter();
+    for (int n = 0; n < electrodes.size(); n++)
+    {
+        resetElectrode(electrodes[n]);
+    }
+	//editor->disable();
+	mut.exit();
+    return true;
+}
+
+Electrode* SpikeSorter::getActiveElectrode()
+{
+    if (electrodes.size() == 0)
+    	return nullptr;
+
+    return electrodes[currentElectrode];
+}
+
+
+void SpikeSorter::addSpikeEvent(SpikeObject* s, MidiBuffer& eventBuffer, int peakIndex)
+{
+
+    // std::cout << "Adding spike event for index " << peakIndex << std::endl;
+	
+    s->eventType = SPIKE_EVENT_CODE;
+
+    int numBytes = packSpike(s,                        // SpikeObject
+                             spikeBuffer,              // uint8_t*
+                             MAX_SPIKE_BUFFER_LEN);    // int
+
+    if (numBytes > 0)
+        eventBuffer.addEvent(spikeBuffer, numBytes, peakIndex);
+    
+    //std::cout << "Adding spike" << std::endl;
+}
+
+void SpikeSorter::addWaveformToSpikeObject(SpikeObject* s,
+                                             int& peakIndex,
+                                             int& electrodeNumber,
+                                             int& currentChannel)
+{
+	mut.enter();
+    int spikeLength = electrodes[electrodeNumber]->prePeakSamples +
+                      + electrodes[electrodeNumber]->postPeakSamples;
+	
+    s->timestamp = hardware_timestamp + peakIndex;
+
+	// convert sample offset to software ticks
+	float samplesPerSec = getSampleRate();
+	s->timestamp_software = software_timestamp + int64( ticksPerSec*float(peakIndex)/samplesPerSec);
+    s->nSamples = spikeLength;
+
+    int chan = *(electrodes[electrodeNumber]->channels+currentChannel);
+
+	s->gain[currentChannel] = (1.0f / channels[chan]->getChannelGain())*1000;
+    s->threshold[currentChannel] = (int) electrodes[electrodeNumber]->thresholds[currentChannel]; 
+
+    // cycle through buffer
+
+    if (isChannelActive(electrodeNumber, currentChannel))
+    {
+
+        for (int sample = 0; sample < spikeLength; sample++)
+        { 
+
+            // warning -- be careful of bitvolts conversion
+			// do not flip signal (!).
+			float value = getNextSample(electrodes[electrodeNumber]->channels[currentChannel]);
+			s->data[currentIndex] = uint16(jmin(65535,jmax(0, int(value / channels[chan]->getChannelGain()) + 32768)));
+ 			// recovered data
+			//float value2 = (s->data[currentIndex]-32768) /float(s->gain[currentChannel])*1000.0f;
+
+            currentIndex++;
+            sampleIndex++;
+
+            //std::cout << currentIndex << std::endl;
+
+        }
+    }
+    else
+    {
+        for (int sample = 0; sample < spikeLength; sample++)
+        {
+
+            // insert a blank spike if the
+            s->data[currentIndex] = 0;
+            currentIndex++;
+            sampleIndex++;
+
+            //std::cout << currentIndex << std::endl;
+
+        }
+    }
+
+
+    sampleIndex -= spikeLength; // reset sample index
+	mut.exit();
+
+}
+
+void SpikeSorter::startRecording()
+{
+	// send status messages about which electrodes and units are available.
+	mut.enter();
+	for (int k=0;k<electrodes.size();k++)
+	{
+		String eventlog = "CurrentElectrodes "+String(electrodes[k]->electrodeID) + " "+ String(electrodes[k]->advancerID) + " "+String(electrodes[k]->depthOffsetMM) + " "+
+			String(electrodes[k]->numChannels) + " ";
+		for (int i=0;i<electrodes[k]->numChannels;i++)
+		{
+			eventlog += String(electrodes[k]->channels[i])+ " " + electrodes[k]->name;
+		}
+		//addNetworkEventToQueue(StringTS(eventlog));
+
+		std::vector<BoxUnit> boxUnits = electrodes[k]->spikeSort->getBoxUnits();
+		for (int i=0;i<boxUnits.size();i++)
+		{
+			String eventlog = "CurrentElectrodeUnits "+String(electrodes[k]->electrodeID) + " " + String(boxUnits[i].UnitID);
+		}
+
+		std::vector<PCAUnit> pcaUnits = electrodes[k]->spikeSort->getPCAUnits();
+		for (int i=0;i<pcaUnits.size();i++)
+		{
+			String eventlog = "CurrentElectrodeUnits "+String(electrodes[k]->electrodeID) + " " + String(pcaUnits[i].UnitID);
+		}
+
+	}
+	
+	mut.exit();
+}
+
+// int64 SpikeSorter::getExtrapolatedHardwareTimestamp(int64 softwareTS)
+// {
+// 	Time timer;
+// 	// this is the case in which messages arrived before the data stream started....
+// 	if (hardware_timestamp == 0) 
+// 		return 0;
+
+// 	// compute how many ticks passed since the last known software-hardware pair
+// 	int64 ticksPassed = software_timestamp-softwareTS;
+// 	float secondPassed = (float)ticksPassed / timer.getHighResolutionTicksPerSecond();
+// 	// adjust hardware stamp accordingly
+// 	return hardware_timestamp + secondPassed*getSampleRate();
+// }
+
+
+
+
+// void SpikeSorter::postTimestamppedStringToMidiBuffer(StringTS s, MidiBuffer& events)
+// {
+// 	uint8* msg_with_ts = new uint8[s.len+8]; // for the two timestamps
+// 	memcpy(msg_with_ts, s.str, s.len);	
+// 	memcpy(msg_with_ts+s.len, &s.timestamp, 8);
+
+// 	addEvent(events,           // eventBuffer
+//              (uint8) NETWORK,          // type
+//              0,                // sampleNum
+//              0,                // eventId
+//              (uint8) GENERIC_EVENT,    // eventChannel
+//              (uint8) s.len+8,  // numBytes
+//              msg_with_ts);     // eventData
+
+// 	delete msg_with_ts;
+// }
+
+void SpikeSorter::handleEvent(int eventType, MidiMessage& event, int sampleNum)
+{
+    if (eventType == TIMESTAMP)
+	{
+        const uint8* dataptr = event.getRawData();
+	      memcpy(&hardware_timestamp, dataptr + 4, 8); // remember to skip first four bytes
+		  memcpy(&software_timestamp, dataptr + 12, 8); // remember to skip first four bytes
+    }
+}
+
+// void SpikeSorter::addNetworkEventToQueue(StringTS S)
+// {
+// 	StringTS copy(S);
+// 	getUIComponent()->getLogWindow()->addLineToLog(copy.getString());
+// 	eventQueue.push(copy);
+// }
+
+
+// void SpikeSorter::postEventsInQueue(MidiBuffer& events)
+// {
+// 	while (eventQueue.size() > 0)
+// 	{
+// 		StringTS msg = eventQueue.front();
+// 		postTimestamppedStringToMidiBuffer(msg,events);
+// 		eventQueue.pop();
+// 	}
+// }
+
+void SpikeSorter::process(AudioSampleBuffer& buffer,
+                            MidiBuffer& events,
+                            int& nSamples)
+{
+	
+	//printf("Entering Spike Detector::process\n");
+	mut.enter();
+	uint16_t samplingFrequencyHz = getSampleRate();//buffer.getSamplingFrequency();
+    // cycle through electrodes
+    Electrode* electrode;
+    dataBuffer = &buffer;
+	
+    checkForEvents(events); // find latest's packet timestamps
+	
+	//postEventsInQueue(events);
+
+	channelBuffers->update(buffer,  hardware_timestamp,software_timestamp,nSamples);
+
+    for (int i = 0; i < electrodes.size(); i++)
+    {
+
+        //  std::cout << "ELECTRODE " << i << std::endl;
+
+        electrode = electrodes[i];
+
+        // refresh buffer index for this electrode
+        sampleIndex = electrode->lastBufferIndex - 1; // subtract 1 to account for
+        // increment at start of getNextSample()
+
+        // cycle through samples
+        while (samplesAvailable(nSamples))
+        {
+
+            sampleIndex++;
+
+            // cycle through channels
+            for (int chan = 0; chan < electrode->numChannels; chan++)
+            {
+
+                // std::cout << "  channel " << chan << std::endl;
+
+                if (*(electrode->isActive+chan))
+                {
+					//float v = getNextSample(currentChannel);
+
+                    int currentChannel = electrode->channels[chan];
+
+					bool bSpikeDetectedPositive  = electrode->thresholds[chan] > 0 &&
+						(getNextSample(currentChannel) > electrode->thresholds[chan]); // rising edge
+					bool bSpikeDetectedNegative = electrode->thresholds[chan] < 0 &&
+						(getNextSample(currentChannel) < electrode->thresholds[chan]); // falling edge
+
+                    if  (bSpikeDetectedPositive || bSpikeDetectedNegative)
+                    { 
+
+                        //std::cout << "Spike detected on electrode " << i << std::endl;
+                        // find the peak
+                        int peakIndex = sampleIndex;
+
+                        //if (sampleIndex == 0 && i == 0)
+                        //    std::cout << getCurrentSample(currentChannel) << std::endl;
+
+						if (bSpikeDetectedPositive) 
+						{
+							// find localmaxima
+							while (getCurrentSample(currentChannel) < getNextSample(currentChannel) &&
+								   sampleIndex < peakIndex + electrode->postPeakSamples)
+							 {
+							 sampleIndex++;
+							}
+						} else {
+							// find local minimum
+							
+							while (getCurrentSample(currentChannel) > getNextSample(currentChannel) &&
+								   sampleIndex < peakIndex + electrode->postPeakSamples)
+							 {
+							 sampleIndex++;
+							}
+						}
+
+                        peakIndex = sampleIndex;
+                        sampleIndex -= (electrode->prePeakSamples+1);
+
+                        SpikeObject newSpike;
+						newSpike.sortedId = 0; // unsorted.
+                        newSpike.timestamp = peakIndex;
+						newSpike.electrodeID = electrode->electrodeID;
+						newSpike.channel = chan;
+                        newSpike.source = i;
+                        newSpike.nChannels = electrode->numChannels;
+						newSpike.samplingFrequencyHz = samplingFrequencyHz;
+						newSpike.color[0] = newSpike.color[1] = newSpike.color[2] = 127;
+                        currentIndex = 0;
+
+                        // package spikes;
+                        for (int channel = 0; channel < electrode->numChannels; channel++)
+                        {
+
+                            addWaveformToSpikeObject(&newSpike,
+                                                     peakIndex,
+                                                     i,
+                                                     channel);
+
+                            //std::cout << "adding waveform" << std::endl;
+                        }
+
+						/*
+						bool perfectMatch = true;
+						for (int k=0;k<40;k++) {
+							perfectMatch = perfectMatch & (prevSpike.data[k] == newSpike.data[k]);
+						}
+						if (perfectMatch)
+						{
+							int x;
+							x++;
+						}
+						*/
+
+                       //for (int xxx = 0; xxx < 1000; xxx++) // overload with spikes for testing purposes
+						electrode->spikeSort->projectOnPrincipalComponents(&newSpike);
+
+						// Add spike to drawing buffer....
+						electrode->spikeSort->sortSpike(&newSpike, PCAbeforeBoxes);
+						
+
+						  // transfer buffered spikes to spike plot
+						if (electrode->spikePlot != nullptr) {
+							if (electrode->spikeSort->isPCAfinished()) 
+							{
+								electrode->spikeSort->resetJobStatus();
+								float p1min,p2min, p1max,  p2max;
+								electrode->spikeSort->getPCArange(p1min,p2min, p1max,  p2max);
+								electrode->spikePlot->setPCARange(p1min,p2min, p1max,  p2max);
+							}
+
+
+							electrode->spikePlot->processSpikeObject(newSpike);
+						}
+
+
+                            addSpikeEvent(&newSpike, events, peakIndex);
+							//prevSpike = newSpike;
+                        // advance the sample index
+                        sampleIndex = peakIndex + electrode->postPeakSamples;
+
+                        break; // quit spike "for" loop
+                    } // end spike trigger
+
+                } // end if channel is active
+            } // end cycle through channels on electrode
+
+
+        } // end cycle through samples
+
+		//float vv = getNextSample(currentChannel);
+        electrode->lastBufferIndex = sampleIndex - nSamples; // should be negative
+
+        //jassert(electrode->lastBufferIndex < 0);
+
+    } // end cycle through electrodes
+
+    // copy end of this buffer into the overflow buffer
+
+    //std::cout << "Copying buffer" << std::endl;
+    // std::cout << "nSamples: " << nSamples;
+    //std::cout << "overflowBufferSize:" << overflowBufferSize;
+
+    //std::cout << "sourceStartSample = " << nSamples-overflowBufferSize << std::endl;
+    // std::cout << "numSamples = " << overflowBufferSize << std::endl;
+    // std::cout << "buffer size = " << buffer.getNumSamples() << std::endl;
+
+    if (nSamples > overflowBufferSize)
+    {
+
+        for (int i = 0; i < overflowBuffer.getNumChannels(); i++)
+        {
+
+            overflowBuffer.copyFrom(i, 0,
+                                    buffer, i,
+                                    nSamples-overflowBufferSize,
+                                    overflowBufferSize);
+
+
+            useOverflowBuffer = true;
+        }
+
+    }
+    else
+    {
+
+        useOverflowBuffer = false;
+    }
+
+
+	mut.exit();
+	//printf("Exitting Spike Detector::process\n");
+}
+
+float SpikeSorter::getNextSample(int& chan)
+{
+
+
+
+    //if (useOverflowBuffer)
+    //{
+    if (sampleIndex < 0)
+    {
+        // std::cout << "  sample index " << sampleIndex << "from overflowBuffer" << std::endl;
+        int ind = overflowBufferSize + sampleIndex;
+
+        if (ind < overflowBuffer.getNumSamples())
+            return (*overflowBuffer.getReadPointer(chan, ind));
+        else
+            return 0;
+
+    }
+    else
+    {
+        //  useOverflowBuffer = false;
+        // std::cout << "  sample index " << sampleIndex << "from regular buffer" << std::endl;
+
+        if (sampleIndex < dataBuffer->getNumSamples())
+            return (*dataBuffer->getReadPointer(chan, sampleIndex));
+        else
+            return 0;
+    }
+    //} else {
+    //    std::cout << "  sample index " << sampleIndex << "from regular buffer" << std::endl;
+    //     return *dataBuffer.getSampleData(chan, sampleIndex);
+    //}
+
+}
+
+float SpikeSorter::getCurrentSample(int& chan)
+{
+
+    // if (useOverflowBuffer)
+    // {
+    //     return *overflowBuffer.getSampleData(chan, overflowBufferSize + sampleIndex - 1);
+    // } else {
+    //     return *dataBuffer.getSampleData(chan, sampleIndex - 1);
+    // }
+
+    if (sampleIndex < 1)
+    {
+        //std::cout << "  sample index " << sampleIndex << "from overflowBuffer" << std::endl;
+        return (*overflowBuffer.getReadPointer(chan, overflowBufferSize + sampleIndex - 1)) ;
+    }
+    else
+    {
+        //  useOverflowBuffer = false;
+        // std::cout << "  sample index " << sampleIndex << "from regular buffer" << std::endl;
+        return (*dataBuffer->getReadPointer(chan, sampleIndex - 1));
+    }
+    //} else {
+
+}
+
+
+bool SpikeSorter::samplesAvailable(int& nSamples)
+{
+
+    if (sampleIndex > nSamples - overflowBufferSize/2)
+    {
+        return false;
+    }
+    else
+    {
+        return true;
+    }
+
+}
+
+void SpikeSorter::addProbes(String probeType,int numProbes, int nElectrodesPerProbe, int nChansPerElectrode,  double firstContactOffset, double interelectrodeDistance)
+{
+	for (int probeIter=0;probeIter<numProbes;probeIter++)
+	{
+		int probeCounter = getUniqueProbeID(probeType);
+		for (int electrodeIter=0;electrodeIter<nElectrodesPerProbe;electrodeIter++)
+		{
+			double depth = firstContactOffset - electrodeIter*interelectrodeDistance;
+			String name;
+			if (nElectrodesPerProbe > 1)
+				 name = probeType + " " + String(probeCounter) + " ["+String(electrodeIter+1)+"/"+String(nElectrodesPerProbe)+"]";
+			else
+				 name = probeType + " " + String(probeCounter);
+
+			bool successful = addElectrode(nChansPerElectrode, name,  depth);
+			if (!successful) {
+                sendActionMessage("Not enough channels to add electrode.");
+				return;
+			}
+		}
+		increaseUniqueProbeID(probeType);
+	}
+}
+Array<Electrode*> SpikeSorter::getElectrodes()
+{
+	return electrodes;
+}
+
+// double SpikeSorter::getAdvancerPosition(int advancerID)
+// {
+// 	ProcessorGraph *g = getProcessorGraph();
+// 	Array<GenericProcessor*> p = g->getListOfProcessors();
+// 	for (int k=0;k<p.size();k++)
+// 	{
+// 		if (p[k] != nullptr)
+// 		{
+// 			if (p[k]->getName() == "Advancers")
+// 			{
+// 				AdvancerNode *node = (AdvancerNode*)p[k];
+// 				return node->getAdvancerPosition(advancerID);
+// 			}
+// 		}
+// 	}
+// 	return 0.0;
+// }
+
+// double SpikeSorter::getElectrodeDepth(int electrodeID)
+// {
+// 	for (int k=0;k<electrodes.size();k++)
+// 	{
+// 		if (electrodes[k]->electrodeID == electrodeID)
+// 		{
+// 			double currentAdvancerPos = getAdvancerPosition(electrodes[k]->advancerID);
+// 			return electrodes[k]->depthOffsetMM + currentAdvancerPos;
+// 		}
+// 	}
+// 	return 0.0;
+// }
+
+
+// double SpikeSorter::getSelectedElectrodeDepth()
+// {
+// 	if (electrodes.size() == 0)
+// 	return 0.0;
+
+// 	double currentAdvancerPos = getAdvancerPosition(electrodes[currentElectrode]->advancerID);
+// 	return electrodes[currentElectrode]->depthOffsetMM + currentAdvancerPos;
+// }
+
+bool SpikeSorter::isSelectedElectrodeRecorded(int channel_index)
+{
+	if (electrodes.size() == 0)
+	return false;
+	int channel = electrodes[currentElectrode]->channels[channel_index];
+	RecordNode* recordNode = getProcessorGraph()->getRecordNode();
+	
+	StringArray names;
+	Array<bool> recording;
+	recordNode->getChannelNamesAndRecordingStatus(names, recording);
+	if (channel >= 0 && channel < recording.size())
+		return recording[channel];
+
+	return false;
+	//return electrodes[currentElectrode]->depthOffsetMM + currentAdvancerPos;
+}
+
+void SpikeSorter::saveCustomParametersToXml(XmlElement* parentElement)
+{
+    XmlElement* mainNode = parentElement->createNewChildElement("SpikeSorter");
+    mainNode->setAttribute("numElectrodes", electrodes.size());
+
+	SpikeSorterEditor* ed = (SpikeSorterEditor*) getEditor();
+	
+	mainNode->setAttribute("activeElectrode", ed->getSelectedElectrode()-1);
+	mainNode->setAttribute("numPreSamples", numPreSamples);
+	mainNode->setAttribute("numPostSamples", numPostSamples);
+	mainNode->setAttribute("autoDACassignment",	autoDACassignment);
+	mainNode->setAttribute("syncThresholds",syncThresholds);
+	mainNode->setAttribute("uniqueID",uniqueID);
+	mainNode->setAttribute("flipSignal",flipSignal);
+
+    XmlElement* countNode = mainNode->createNewChildElement("ELECTRODE_COUNTER");
+
+	countNode->setAttribute("numElectrodeTypes",  (int)electrodeTypes.size());
+	for (int k=0;k<electrodeTypes.size();k++)
+	{
+		XmlElement* countNode2 = countNode->createNewChildElement("ELECTRODE_TYPE");
+		countNode2->setAttribute("type", electrodeTypes[k]);
+		countNode2->setAttribute("count", electrodeCounter[k]);
+	}
+
+    for (int i = 0; i < electrodes.size(); i++)
+    {
+        XmlElement* electrodeNode = mainNode->createNewChildElement("ELECTRODE");
+        electrodeNode->setAttribute("name", electrodes[i]->name);
+        electrodeNode->setAttribute("numChannels", electrodes[i]->numChannels);
+        electrodeNode->setAttribute("prePeakSamples", electrodes[i]->prePeakSamples);
+        electrodeNode->setAttribute("postPeakSamples", electrodes[i]->postPeakSamples);
+		electrodeNode->setAttribute("advancerID", electrodes[i]->advancerID);
+		electrodeNode->setAttribute("depthOffsetMM", electrodes[i]->depthOffsetMM);
+		electrodeNode->setAttribute("electrodeID", electrodes[i]->electrodeID);
+
+        for (int j = 0; j < electrodes[i]->numChannels; j++)
+        {
+            XmlElement* channelNode = electrodeNode->createNewChildElement("SUBCHANNEL");
+            channelNode->setAttribute("ch",*(electrodes[i]->channels+j));
+            channelNode->setAttribute("thresh",*(electrodes[i]->thresholds+j));
+            channelNode->setAttribute("isActive",*(electrodes[i]->isActive+j));
+
+        }
+
+		// save spike sorting data.
+		electrodes[i]->spikeSort->saveCustomParametersToXml(electrodeNode);
+
+    }
+
+
+}
+
+void SpikeSorter::loadCustomParametersFromXml()
+{
+
+	if (parametersAsXml != nullptr)
+	{
+
+		int electrodeIndex = -1;
+
+		forEachXmlChildElement(*parametersAsXml, mainNode)
+		{
+
+			// use parametersAsXml to restore state
+
+			if (mainNode->hasTagName("SpikeSorter"))
+			{
+				int numElectrodes = mainNode->getIntAttribute("numElectrodes");
+				currentElectrode = mainNode->getIntAttribute("activeElectrode");
+				numPreSamples = mainNode->getIntAttribute("numPreSamples");
+				numPostSamples = mainNode->getIntAttribute("numPostSamples");
+				autoDACassignment = mainNode->getBoolAttribute("autoDACassignment");
+				syncThresholds = mainNode->getBoolAttribute("syncThresholds");
+				uniqueID = mainNode->getIntAttribute("uniqueID");
+				flipSignal = mainNode->getBoolAttribute("flipSignal");
+
+				forEachXmlChildElement(*mainNode, xmlNode)
+				{
+
+					if (xmlNode->hasTagName("ELECTRODE_COUNTER"))
+					{
+						int numElectrodeTypes = xmlNode->getIntAttribute("numElectrodeTypes");
+						electrodeCounter.resize(numElectrodeTypes);
+						electrodeTypes.resize(numElectrodeTypes);
+						int counter = 0;
+						forEachXmlChildElement(*xmlNode, xmltype)
+							{
+								if (xmltype->hasTagName("ELECTRODE_TYPE"))
+								{
+									electrodeTypes[counter] = xmltype->getStringAttribute("type");
+									electrodeCounter[counter] = xmltype->getIntAttribute("count");
+									counter++;
+								}
+						}
+					} else
+					if (xmlNode->hasTagName("ELECTRODE"))
+					{
+
+						electrodeIndex++;
+
+						int channelsPerElectrode = xmlNode->getIntAttribute("numChannels");
+
+						int advancerID = xmlNode->getIntAttribute("advancerID");
+						float depthOffsetMM = xmlNode->getDoubleAttribute("depthOffsetMM");
+						int electrodeID = xmlNode->getIntAttribute("electrodeID");
+						String electrodeName=xmlNode->getStringAttribute("name");
+
+
+						int channelIndex = -1;
+
+						int *channels = new int[channelsPerElectrode];
+						float *thres = new float[channelsPerElectrode];
+						bool *isActive = new bool[channelsPerElectrode];
+
+						forEachXmlChildElement(*xmlNode, channelNode)
+						{
+							if (channelNode->hasTagName("SUBCHANNEL"))
+							{
+								channelIndex++;
+								channels[channelIndex] = channelNode->getIntAttribute("ch");
+								thres[channelIndex] = channelNode->getDoubleAttribute("thresh");
+								isActive[channelIndex] = channelNode->getBoolAttribute("isActive");
+							}
+						}
+						Electrode* newElectrode = new Electrode(electrodeID, &uniqueIDgenerator,&computingThread, electrodeName, channelsPerElectrode, channels,getDefaultThreshold(),
+							numPreSamples,numPostSamples, getSampleRate());
+						for (int k=0;k<channelsPerElectrode;k++)
+						{
+							newElectrode->thresholds[k] = thres[k];
+							newElectrode->isActive[k] = isActive[k];
+						}
+
+						newElectrode->advancerID = advancerID;
+						newElectrode->depthOffsetMM = depthOffsetMM;
+						// now read sorted units information
+						newElectrode->spikeSort->loadCustomParametersFromXml(xmlNode);
+						addElectrode(newElectrode);
+
+					}
+				}
+			}
+		}
+	}
+    SpikeSorterEditor* ed = (SpikeSorterEditor*) getEditor();
+	//	ed->updateAdvancerList();
+
+	if (currentElectrode >= 0) {
+		ed->refreshElectrodeList(currentElectrode);
+		ed->setSelectedElectrode(1+currentElectrode);
+	} else
+	{
+		ed->refreshElectrodeList();
+	}
+
+	
+}
+
+
+
+void SpikeSorter::removeSpikePlots()
+{
+	mut.enter();
+    for (int i = 0; i < getNumElectrodes(); i++)
+    {
+        Electrode *ee = electrodes[i];
+		ee->spikePlot = nullptr;
+    }
+	mut.exit();
+}
+
+int SpikeSorter::getNumElectrodes()
+{
+	mut.enter();
+    int i= electrodes.size();
+	mut.exit();
+	return i;
+
+}
+
+int SpikeSorter::getNumberOfChannelsForElectrode(int i)
+{
+	mut.enter();
+    if (i > -1 && i < electrodes.size())
+    {
+		Electrode *ee = electrodes[i];
+		int ii=ee->numChannels;
+		mut.exit();
+		return ii;
+    } else {
+		mut.exit();
+        return 0;
+    }
+}
+
+
+
+String SpikeSorter::getNameForElectrode(int i)
+{
+	mut.enter();
+    if (i > -1 && i < electrodes.size())
+    {
+		Electrode *ee = electrodes[i];
+        String s= ee->name;
+		mut.exit();
+		return s;
+    } else {
+		mut.exit();
+        return " ";
+    }
+}
+
+
+void SpikeSorter::addSpikePlotForElectrode(SpikeHistogramPlot* sp, int i)
+{
+	mut.enter();
+    Electrode *ee = electrodes[i];
+    ee->spikePlot = sp;
+	mut.exit();
+}
+
+int SpikeSorter::getCurrentElectrodeIndex()
+{
+	return currentElectrode;
+}
+
+Electrode* SpikeSorter::getElectrode(int i)
+{
+	return electrodes[i];
+}
+
+
+std::vector<int> SpikeSorter::getElectrodeChannels(int ID)
+{
+	std::vector<int> ch;
+	mut.enter();
+	for (int k=0;k<electrodes.size();k++)
+	{
+		if (electrodes[k]->electrodeID == ID)
+		{
+
+			ch.resize(electrodes[k]->numChannels);
+			for (int j=0;j<electrodes[k]->numChannels;j++)
+			{
+				ch[j] = electrodes[k]->channels[j];
+			}
+
+			return ch;
+			mut.exit();
+		}
+
+			
+	}
+	mut.exit();
+	return ch;
+}
+
+Electrode* SpikeSorter::setCurrentElectrodeIndex(int i)
+{
+	jassert(i >= 0 & i  < electrodes.size());
+	currentElectrode = i;
+	return electrodes[i];
+}
+/*
+
+
+Histogram::Histogram(float _minValue, float _maxValue, float _resolution, bool _throwOutsideSamples) :  
+	minValue(_minValue), maxValue(_maxValue), resolution(_resolution), throwOutsideSamples(_throwOutsideSamples)
+{
+	numBins = 1+ abs(maxValue-minValue) / resolution;
+	binCounts = new unsigned long[numBins];
+	binCenters = new float[numBins];
+	float deno = (numBins-1)/abs(maxValue-minValue);
+	for (int k=0;k<numBins;k++) 
+	{
+		binCounts[k] = 0;
+		binCenters[k] = minValue + k/deno;
+	}
+}
+//
+//Histogram::Histogram(float _minValue, float _maxValue, int _numBins, bool _throwOutsideSamples) :  
+//	minValue(_minValue), maxValue(_maxValue), numBins(_numBins), throwOutsideSamples(_throwOutsideSamples)
+//{
+//	resolution = abs(maxValue-minValue) / numBins ;
+//	binCounts = new int[numBins];
+//	binCenters = new float[numBins];
+//	for (int k=0;k<numBins;k++) 
+//	{
+//		binCounts[k] = 0;
+//		binCenters[k] = minValue + k/(numBins-1)*resolution;
+//	}
+//
+//}
+
+void Histogram::clear()
+{
+for (int k=0;k<numBins;k++) 
+	{
+		binCounts[k] = 0;
+	}	
+}
+
+
+void Histogram::addSamples(float *Samples, int numSamples) {
+	for (int k=0;k<numSamples;k++) 
+	{
+		int indx = ceil( (Samples[k] - minValue) / (maxValue-minValue) * (numBins-1));
+		if (indx >= 0 && indx < numBins)
+			binCounts[indx]++;
+	}
+}
+
+Histogram::~Histogram() 
+{
+		delete [] binCounts;
+		delete [] binCenters;
+}
+
+	*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+/***********************************/
+//
+//circularBuffer::circularBuffer(int NumCh, int NumSamplesToHoldPerChannel, double SamplingRate)
+//{
+//            numCh = NumCh;
+//            samplingRate = SamplingRate;
+//            Buf.resize(numCh);
+//			for (int ch=0;ch<numCh;ch++) {
+//				Buf[ch].resize(NumSamplesToHoldPerChannel);
+//			}
+//            BufTS_H.resize(NumSamplesToHoldPerChannel);
+//            BufTS_S.resize(NumSamplesToHoldPerChannel);
+//            bufLen = NumSamplesToHoldPerChannel;
+//            numSamplesInBuf = 0;
+//            ptr = 0; // points to a valid position in the buffer.
+//}
+//
+//circularBuffer::~circularBuffer()
+//{
+//
+//}
+//
+//
+//std::vector<double> circularBuffer::getDataArray(int channel, int N)
+//{
+//	std::vector<double> LongArray;
+//	LongArray.resize(N);
+//	mut.enter();
+//           
+//            int p = ptr - 1;
+//            for (int k = 0; k < N; k++)
+//            {
+//                if (p < 0)
+//                    p = bufLen - 1;
+//                LongArray[k] = Buf[channel][p];
+//                p--;
+//            }
+//            mut.exit();
+//            return LongArray;
+//}
+//
+//void circularBuffer::addDataToBuffer(std::vector<std::vector<double>> Data, double SoftwareTS, double HardwareTS)
+//{
+//	mut.enter();
+//	int iNumPoints = Data[0].size();
+//	for (int k = 0; k < iNumPoints; k++)
+//	{
+//		BufTS_H[ptr] = HardwareTS + k;
+//		BufTS_S[ptr] = SoftwareTS + k / samplingRate;
+//		for (int ch = 0; ch < numCh; ch++)
+//		{
+//			Buf[ch, ptr] = Data[ch, k];
+//		}
+//		ptr++;
+//
+//		if (ptr == bufLen)
+//		{
+//			ptr = 0;
+//		}
+//		numSamplesInBuf++;
+//		if (numSamplesInBuf >= bufLen)
+//		{
+//			numSamplesInBuf = bufLen;
+//		}
+//	}
+//	mut.exit();
+//}
+//
+//
+//double circularBuffer::findThresholdForChannel(int channel)
+//{
+//	// Run median on analog input
+//	double numSamplesPerSecond = 30000;
+//	std::vector<double> LongArray = getDataArray(channel, numSamplesPerSecond*5);
+//	
+//	for (int k = 0; k < LongArray.size(); k++)
+//		LongArray[k] = fabs(LongArray[k]);
+//
+//	std::sort (LongArray.begin(), LongArray.begin()+LongArray.size());           //(12 32 45 71)26 80 53 33
+//
+//
+//	int Middle = LongArray.size() / 2;
+//	double Median = LongArray[Middle];
+//	double NewThres = -4.0F * Median / 0.675F;
+//
+//	return NewThres;
+//}
+
+
+// =================================================== 
+
+void ContinuousCircularBuffer::reallocate(int NumCh)
+{
+	numCh =NumCh;
+	Buf.resize(numCh);
+	for (int k=0;k< numCh;k++)
+	{
+		Buf[k].resize(bufLen);
+	}
+	numSamplesInBuf = 0;
+	ptr = 0; // points to a valid position in the buffer.
+
+}
+
+
+ContinuousCircularBuffer::ContinuousCircularBuffer(int NumCh, float SamplingRate, int SubSampling, float NumSecInBuffer)
+{
+		Time t;
+	
+	numTicksPerSecond = (double) t.getHighResolutionTicksPerSecond();
+
+	int numSamplesToHoldPerChannel = (int)(SamplingRate * NumSecInBuffer / SubSampling);
+	buffer_dx = 1.0 / (SamplingRate / SubSampling);
+	subSampling = SubSampling;
+	samplingRate = SamplingRate;
+	numCh =NumCh;
+	leftover_k = 0;
+	Buf.resize(numCh);
+
+
+	for (int k=0;k< numCh;k++)
+	{
+		Buf[k].resize(numSamplesToHoldPerChannel);
+	}
+
+	hardwareTS.resize(numSamplesToHoldPerChannel);
+	softwareTS.resize(numSamplesToHoldPerChannel);
+	valid.resize(numSamplesToHoldPerChannel);
+	bufLen = numSamplesToHoldPerChannel;
+	numSamplesInBuf = 0;
+	ptr = 0; // points to a valid position in the buffer.
+}
+
+
+void ContinuousCircularBuffer::update(int channel, int64 hardware_ts, int64 software_ts, bool rise)
+{
+	// used to record ttl pulses as continuous data...
+	mut.enter();
+	valid[ptr] = true;
+	hardwareTS[ptr] = hardware_ts;
+	softwareTS[ptr] = software_ts;
+
+	Buf[channel][ptr] = (rise) ? 1.0 : 0.0;
+
+	ptr++;
+	if (ptr == bufLen)
+	{
+		ptr = 0;
+	}
+	numSamplesInBuf++;
+	if (numSamplesInBuf >= bufLen)
+	{
+		numSamplesInBuf = bufLen;
+	}
+	mut.exit();
+}
+
+void ContinuousCircularBuffer::update(AudioSampleBuffer& buffer, int64 hardware_ts, int64 software_ts, int numpts)
+{
+	mut.enter();
+	
+	// we don't start from zero because of subsampling issues.
+	// previous packet may not have ended exactly at the last given sample.
+	int k = leftover_k;
+	int lastUsedSample;
+	for (; k < numpts; k+=subSampling)
+	{
+		lastUsedSample = k;
+		valid[ptr] = true;
+		hardwareTS[ptr] = hardware_ts + k;
+		softwareTS[ptr] = software_ts + int64(float(k) / samplingRate * numTicksPerSecond);
+
+		for (int ch = 0; ch < numCh; ch++)
+		{
+			Buf[ch][ptr] = *(buffer.getReadPointer(ch,k));
+		}
+		ptr++;
+		if (ptr == bufLen)
+		{
+			ptr = 0;
+		}
+		numSamplesInBuf++;
+		if (numSamplesInBuf >= bufLen)
+		{
+			numSamplesInBuf = bufLen;
+		}
+	}
+	
+	int numMissedSamples = (numpts-1)-lastUsedSample;
+	leftover_k = (subSampling-numMissedSamples-1) % subSampling;
+	mut.exit();
+
+}
+
+
+void ContinuousCircularBuffer::update(std::vector<std::vector<bool>> contdata, int64 hardware_ts, int64 software_ts, int numpts)
+{
+	mut.enter();
+	
+	// we don't start from zero because of subsampling issues.
+	// previous packet may not have ended exactly at the last given sample.
+	int k = leftover_k;
+	int lastUsedSample;
+	for (; k < numpts; k+=subSampling)
+	{
+		lastUsedSample = k;
+		valid[ptr] = true;
+		hardwareTS[ptr] = hardware_ts + k;
+		softwareTS[ptr] = software_ts + int64(float(k) / samplingRate * numTicksPerSecond);
+
+		for (int ch = 0; ch < numCh; ch++)
+		{
+			Buf[ch][ptr] = contdata[ch][k];
+		}
+		ptr++;
+		if (ptr == bufLen)
+		{
+			ptr = 0;
+		}
+		numSamplesInBuf++;
+		if (numSamplesInBuf >= bufLen)
+		{
+			numSamplesInBuf = bufLen;
+		}
+	}
+	
+	int numMissedSamples = (numpts-1)-lastUsedSample;
+	leftover_k =subSampling-numMissedSamples-1;
+	mut.exit();
+
+}
+/*
+void ContinuousCircularBuffer::AddDataToBuffer(std::vector<std::vector<double>> lfp, double soft_ts)
+{
+	mut.enter();
+	int numpts = lfp[0].size();
+	for (int k = 0; k < numpts / subSampling; k++)
+	{
+		valid[ptr] = true;
+		for (int ch = 0; ch < numCh; ch++)
+		{
+			Buf[ch][ptr] = lfp[ch][k];
+			TS[ptr] = soft_ts + (double)(k * subSampling) / samplingRate;
+		}
+		ptr++;
+		if (ptr == bufLen)
+		{
+			ptr = 0;
+		}
+		numSamplesInBuf++;
+		if (numSamplesInBuf >= bufLen)
+		{
+			numSamplesInBuf = bufLen;
+		}
+	}
+	mut.exit();
+}
+*/
+        
+int ContinuousCircularBuffer::GetPtr()
+{
+	return ptr;
+}
+
+/************************************************************/
+
+
+
diff --git a/Source/Processors/SpikeSorter/SpikeSorter.h b/Source/Processors/SpikeSorter/SpikeSorter.h
new file mode 100644
index 0000000000000000000000000000000000000000..7c07a439deff6477ed0c52e3226eab621ded23bf
--- /dev/null
+++ b/Source/Processors/SpikeSorter/SpikeSorter.h
@@ -0,0 +1,408 @@
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2013 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef __SPIKESORTER_H_3F920F95__
+#define __SPIKESORTER_H_3F920F95__
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+
+#include "../GenericProcessor/GenericProcessor.h"
+#include "SpikeSorterEditor.h"
+#include "SpikeSortBoxes.h"
+#include "../Visualization/SpikeObject.h"
+#include "../SourceNode/SourceNode.h"
+#include "../DataThreads/RHD2000Thread.h"
+#include <algorithm>    // std::sort
+#include <queue>
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+
+class SpikeSorterEditor;
+class SpikeHistogramPlot;
+class Trial;
+/**
+
+  Detects spikes in a continuous signal and outputs events containing the spike data.
+
+  Allows the user to draw boundaries around clusters.
+
+  @see GenericProcessor, SpikeSorterEditor
+
+*/
+
+/*
+class Histogram {
+public:
+	Histogram(float _minValue, float _maxValue, float _resolution, bool _throwOutsideSamples);
+	//Histogram(float _minValue, float _maxValue, int _numBins, bool _throwOutsideSamples);
+	void addSamples(float *Samples, int numSamples);
+	~Histogram();
+	void clear();
+
+	float minValue, maxValue, resolution;
+	int numBins;
+	bool throwOutsideSamples;
+	unsigned long *binCounts;
+	float *binCenters;
+};
+*/
+
+class PCAjob;
+class PCAcomputingThread;
+class UniqueIDgenerator
+{
+public:
+	UniqueIDgenerator() {globalUniqueID=0;}
+	int generateUniqueID() {return ++globalUniqueID;};
+	void setUniqueID(int ID) {globalUniqueID= ID;}
+	int getLastUniqueID() {return globalUniqueID;}
+private:
+	int globalUniqueID;
+};
+
+class Electrode
+{
+	public:
+		Electrode(int electrodeID, UniqueIDgenerator *uniqueIDgenerator_, PCAcomputingThread *pth,String _name, int _numChannels, int *_channels, float default_threshold, int pre, int post, float samplingRate );
+        ~Electrode();
+
+		void resizeWaveform(int numPre, int numPost);
+
+		String name;
+
+        int numChannels;
+        int prePeakSamples, postPeakSamples;
+        int lastBufferIndex;
+
+		int advancerID;
+		float depthOffsetMM;
+
+		int electrodeID;
+        int* channels;
+	    double* thresholds;
+        bool* isActive;
+		double *voltageScale;
+		//float PCArange[4];
+
+		SpikeHistogramPlot* spikePlot;
+		SpikeSortBoxes* spikeSort;
+		PCAcomputingThread *computingThread;
+		UniqueIDgenerator *uniqueIDgenerator;
+        bool isMonitored;
+};
+
+
+class ContinuousCircularBuffer
+{
+public:
+	ContinuousCircularBuffer(int NumCh, float SamplingRate, int SubSampling, float NumSecInBuffer);
+	void reallocate(int N);
+	void update(std::vector<std::vector<bool>> contdata, int64 hardware_ts, int64 software_ts, int numpts);
+	void update(AudioSampleBuffer& buffer, int64 hardware_ts, int64 software_ts, int numpts);
+	void update(int channel, int64 hardware_ts, int64 software_ts, bool rise);
+	int GetPtr();
+	void addTrialStartToSmartBuffer(int trialID);
+	int numCh;
+	int subSampling;
+	float samplingRate;
+	CriticalSection mut;
+	int numSamplesInBuf;
+	double numTicksPerSecond;
+	int ptr;
+	int bufLen;
+	int leftover_k;
+	double buffer_dx;
+	
+	std::vector<std::vector<float> > Buf;
+	std::vector<bool> valid;
+	std::vector<int64> hardwareTS,softwareTS;
+};
+
+
+//class StringTS;
+
+
+
+class SpikeSorter : public GenericProcessor
+{
+public:
+
+    // CONSTRUCTOR AND DESTRUCTOR //
+
+    /** constructor */
+    SpikeSorter();
+
+    /** destructor */
+    ~SpikeSorter();
+
+
+    // PROCESSOR METHODS //
+
+    /** Processes an incoming continuous buffer and places new
+        spikes into the event buffer. */
+    void process(AudioSampleBuffer& buffer, MidiBuffer& events, int& nSamples);
+
+    /** Used to alter parameters of data acquisition. */
+    void setParameter(int parameterIndex, float newValue);
+
+    /** Called whenever the signal chain is altered. */
+    void updateSettings();
+
+    /** Called prior to start of acquisition. */
+    bool enable();
+
+    /** Called after acquisition is finished. */
+    bool disable();
+
+	
+	bool isReady();
+    /** Creates the SpikeSorterEditor. */
+    AudioProcessorEditor* createEditor();
+
+
+	
+	//void addNetworkEventToQueue(StringTS S);
+
+	void postEventsInQueue(MidiBuffer& events);
+
+    // INTERNAL BUFFERS //
+
+    /** Extra samples are placed in this buffer to allow seamless
+        transitions between callbacks. */
+    AudioSampleBuffer overflowBuffer;
+
+
+    // CREATE AND DELETE ELECTRODES //
+
+    /** Adds an electrode with n channels to be processed. */
+    bool addElectrode(int nChans, String name, double depth);
+
+	void addProbes(String probeType,int numProbes, int nElectrodesPerProbe, int nChansPerElectrode,  double firstContactOffset, double interelectrodeDistance);
+
+    /** Removes an electrode with a given index. */
+    bool removeElectrode(int index);
+
+
+    // EDIT AND QUERY ELECTRODE SETTINGS //
+
+    /** Returns the number of channels for a given electrode. */
+    int getNumChannels(int index);
+
+    /** Edits the mapping between input channels and electrode channels. */
+    void setChannel(int electrodeIndex, int channelNum, int newChannel);
+
+    /** Returns the continuous channel that maps to a given
+    	electrode channel. */
+    int getChannel(int index, int chan);
+
+    /** Sets the name of a given electrode. */
+    void setElectrodeName(int index, String newName);
+
+    /** */
+    void setChannelActive(int electrodeIndex, int channelNum, bool active);
+
+    /** */
+    bool isChannelActive(int electrodeIndex, int channelNum);
+
+	/** returns the current active electrode, i.e., the one displayed in the editor */
+	Electrode* getActiveElectrode();
+    
+    /** Returns a StringArray containing the names of all electrodes */
+    StringArray getElectrodeNames();
+
+	/** modify a channel spike detection threshold */
+    void setChannelThreshold(int electrodeNum, int channelNum, float threshold);
+
+	/** returns a channel's detection threshold */
+    double getChannelThreshold(int electrodeNum, int channelNum);
+
+	/** used to generate messages over the network and to inform PSTH sink */
+	void addNewUnit(int electrodeID, int newUnitID, uint8 r, uint8 g, uint8 b);
+	void removeUnit(int electrodeID, int newUnitID);
+
+	/** saves all electrodes, thresholds, units, etc to xml */
+    void saveCustomParametersToXml(XmlElement* parentElement);
+    void loadCustomParametersFromXml();
+
+	/** returns the depth of an electrode. The depth is calculated as the
+	known depth of the advancer that is used to control that electrode, plus
+	the defined depth offset. Depth offset is mainly useful for depth probes,
+	in which the contact position is not always the at the tip */
+	//double getElectrodeDepth(int electrodeID);
+
+	/** returns the number of electrodes */
+	int getNumElectrodes();
+
+	/** clears up the spike plots. Called during updates */
+	void removeSpikePlots();
+
+	int getNumberOfChannelsForElectrode(int i);
+	String getNameForElectrode(int i);
+	void addSpikePlotForElectrode(SpikeHistogramPlot* sp, int i);
+	int getCurrentElectrodeIndex();
+	Electrode* setCurrentElectrodeIndex(int i);
+	Electrode* getElectrode(int i);
+	//StringTS createStringTS(String S);
+	//int64 getExtrapolatedHardwareTimestamp(int64 softwareTS);
+	//void postTimestamppedStringToMidiBuffer(StringTS s, MidiBuffer& events);
+	//void setElectrodeAdvancer(int i,int ID);
+	//void setElectrodeAdvancerOffset(int i, double v);
+	//double getAdvancerPosition(int advancerID);
+	//double getSelectedElectrodeDepth();
+	bool getAutoDacAssignmentStatus();
+	void seteAutoDacAssignment(bool status);
+	int getNumPreSamples();
+	int getNumPostSamples();
+	void setNumPreSamples(int numSamples);
+	void setNumPostSamples(int numSamples);
+	int getDACassignment(int channel);
+	void assignDACtoChannel(int dacOutput, int channel);
+	Array<int> getDACassignments();
+	void updateDACthreshold(int dacChannel, float threshold);
+	bool getThresholdSyncStatus();
+	void setThresholdSyncStatus(bool status);
+	bool getFlipSignalState();
+	void setFlipSignalState(bool state);
+	void startRecording();
+	std::vector<float> getElectrodeVoltageScales(int electrodeID);
+	//void getElectrodePCArange(int electrodeID, float &minX,float &maxX,float &minY,float &maxY);
+	//void setElectrodePCArange(int electrodeID, float minX,float maxX,float minY,float maxY);
+	
+	void removeAllUnits(int electrodeID);
+
+	void setElectrodeVoltageScale(int electrodeID, int index, float newvalue);
+	bool isSelectedElectrodeRecorded(int channel);
+	std::vector<int> getElectrodeChannels(int ID);
+
+	Array<Electrode*> getElectrodes();
+
+    std::vector<String> electrodeTypes;
+
+private:
+	UniqueIDgenerator uniqueIDgenerator;
+	long uniqueSpikeID;
+	SpikeObject prevSpike;
+
+	void addElectrode(Electrode* newElectrode);
+	void increaseUniqueProbeID(String type);
+	int getUniqueProbeID(String type);
+
+	float ticksPerSec;
+	int uniqueID;
+	//std::queue<StringTS> eventQueue;
+    /** pointer to a continuous buffer. */
+    AudioSampleBuffer* dataBuffer;
+
+    float getDefaultThreshold();
+
+    int overflowBufferSize;
+
+    int sampleIndex;
+
+    std::vector<int> electrodeCounter;
+    float getNextSample(int& chan);
+    float getCurrentSample(int& chan);
+    bool samplesAvailable(int& nSamples);
+
+    bool useOverflowBuffer;
+
+    int currentElectrode;
+    int currentChannelIndex;
+    int currentIndex;
+
+
+	int numPreSamples,numPostSamples;
+    uint8_t* spikeBuffer;///[256];
+    //int64 timestamp;
+		  int64 hardware_timestamp;
+		  int64 software_timestamp;
+
+	bool PCAbeforeBoxes;
+ 	ContinuousCircularBuffer* channelBuffers; // used to compute auto threshold
+
+     void handleEvent(int eventType, MidiMessage& event, int sampleNum);
+
+    void addSpikeEvent(SpikeObject* s, MidiBuffer& eventBuffer, int peakIndex);
+ 
+    void resetElectrode(Electrode*);
+	CriticalSection mut;
+	bool autoDACassignment;
+	bool syncThresholds;
+	RHD2000Thread* getRhythmAccess();
+	bool flipSignal;
+
+
+   void addWaveformToSpikeObject(SpikeObject* s,
+                                  int& peakIndex,
+                                  int& electrodeNumber,
+                                  int& currentChannel);
+
+
+		   Array<Electrode*> electrodes;
+		   PCAcomputingThread computingThread;
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SpikeSorter);
+
+};
+
+
+
+
+/*
+
+class circularBuffer {
+public:
+	circularBuffer(int NumCh, int NumSamplesToHoldPerChannel, double SamplingRate);
+	~circularBuffer();
+	
+	std::vector<double> getDataArray(int channel, int N);
+	double findThresholdForChannel(int channel);
+	void update(AudioSampleBuffer& buffer);
+
+private:
+     CriticalSection mut;
+ 
+	int numCh;
+	int numSamplesInBuf;
+	int ptr;
+	double samplingRate;
+	int bufLen;
+	std::vector<std::vector<double>> Buf;
+	std::vector<double> BufTS_H;
+	std::vector<double> BufTS_S;
+};
+
+
+*/
+
+
+
+
+
+
+
+
+
+
+
+#endif  // __SPIKESORTER_H_3F920F95__
diff --git a/Source/Processors/SpikeSorter/SpikeSorterCanvas.cpp b/Source/Processors/SpikeSorter/SpikeSorterCanvas.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..abfc13528109520887efa69b8d9299b0269feda4
--- /dev/null
+++ b/Source/Processors/SpikeSorter/SpikeSorterCanvas.cpp
@@ -0,0 +1,2212 @@
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2013 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "SpikeSorterCanvas.h"
+#include "../SpikeDisplayNode/SpikeDisplayCanvas.h"
+
+SpikeSorterCanvas::SpikeSorterCanvas(SpikeSorter* n) :
+    processor(n), newSpike(false)
+{
+    electrode = nullptr;
+    viewport = new Viewport();
+    spikeDisplay = new SpikeThresholdDisplay(n,this, viewport);
+
+    viewport->setViewedComponent(spikeDisplay, false);
+    viewport->setScrollBarsShown(true, true);
+
+    inDrawingPolygonMode = false;
+    scrollBarThickness = viewport->getScrollBarThickness();
+
+    addUnitButton = new UtilityButton("New box unit", Font("Small Text", 13, Font::plain));
+    addUnitButton->setRadius(3.0f);
+    addUnitButton->addListener(this);
+    addAndMakeVisible(addUnitButton);
+
+    addPolygonUnitButton = new UtilityButton("New polygon", Font("Small Text", 13, Font::plain));
+    addPolygonUnitButton->setRadius(3.0f);
+    addPolygonUnitButton->addListener(this);
+    addAndMakeVisible(addPolygonUnitButton);
+
+    addBoxButton = new UtilityButton("Add box", Font("Small Text", 13, Font::plain));
+    addBoxButton->setRadius(3.0f);
+    addBoxButton->addListener(this);
+    addAndMakeVisible(addBoxButton);
+
+    delUnitButton = new UtilityButton("Delete", Font("Small Text", 13, Font::plain));
+    delUnitButton->setRadius(3.0f);
+    delUnitButton->addListener(this);
+    addAndMakeVisible(delUnitButton);
+
+    rePCAButton = new UtilityButton("Re-PCA", Font("Small Text", 13, Font::plain));
+    rePCAButton->setRadius(3.0f);
+    rePCAButton->addListener(this);
+    addAndMakeVisible(rePCAButton);
+
+    newIDbuttons = new UtilityButton("New IDs", Font("Small Text", 13, Font::plain));
+    newIDbuttons->setRadius(3.0f);
+    newIDbuttons->addListener(this);
+    addAndMakeVisible(newIDbuttons);
+
+    deleteAllUnits = new UtilityButton("Delete All", Font("Small Text", 13, Font::plain));
+    deleteAllUnits->setRadius(3.0f);
+    deleteAllUnits->addListener(this);
+    addAndMakeVisible(deleteAllUnits);
+
+    nextElectrode = new UtilityButton("Next Electrode", Font("Small Text", 13, Font::plain));
+    nextElectrode->setRadius(3.0f);
+    nextElectrode->addListener(this);
+    addAndMakeVisible(nextElectrode);
+
+    prevElectrode = new UtilityButton("Prev Electrode", Font("Small Text", 13, Font::plain));
+    prevElectrode->setRadius(3.0f);
+    prevElectrode->addListener(this);
+    addAndMakeVisible(prevElectrode);
+
+    addAndMakeVisible(viewport);
+
+    setWantsKeyboardFocus(true);
+
+    update();
+
+}
+
+SpikeSorterCanvas::~SpikeSorterCanvas()
+{
+
+}
+
+void SpikeSorterCanvas::beginAnimation()
+{
+    std::cout << "SpikeSorterCanvas beginning animation." << std::endl;
+
+    startCallbacks();
+}
+
+void SpikeSorterCanvas::endAnimation()
+{
+    std::cout << "SpikeSorterCanvas ending animation." << std::endl;
+
+    stopCallbacks();
+}
+
+void SpikeSorterCanvas::update()
+{
+
+    std::cout << "Updating SpikeSorterCanvas" << std::endl;
+
+    int nPlots = processor->getNumElectrodes();
+    processor->removeSpikePlots();
+    spikeDisplay->removePlots();
+
+    if (nPlots > 0)
+    {
+        // Plot only active electrode
+        int currentElectrode = processor->getCurrentElectrodeIndex();
+        electrode = processor->getActiveElectrode();
+        SpikeHistogramPlot* sp = spikeDisplay->addSpikePlot(processor->getNumberOfChannelsForElectrode(currentElectrode), electrode->electrodeID,
+                                                            processor->getNameForElectrode(currentElectrode));
+        processor->addSpikePlotForElectrode(sp, currentElectrode);
+        electrode->spikePlot->setFlipSignal(processor->getFlipSignalState());
+        electrode->spikePlot->updateUnitsFromProcessor();
+
+    }
+    spikeDisplay->resized();
+    spikeDisplay->repaint();
+}
+
+
+void SpikeSorterCanvas::refreshState()
+{
+    // called when the component's tab becomes visible again
+    resized();
+}
+
+void SpikeSorterCanvas::resized()
+{
+    viewport->setBounds(130,0,getWidth()-140,getHeight());
+
+    spikeDisplay->setBounds(0,0,getWidth()-140, spikeDisplay->getTotalHeight());
+
+    nextElectrode->setBounds(0, 20, 120,30);
+    prevElectrode->setBounds(0, 60, 120,30);
+
+    addUnitButton->setBounds(0, 120, 120,20);
+    addPolygonUnitButton->setBounds(0, 150, 120,20);
+    addBoxButton->setBounds(0, 180, 120,20);
+    delUnitButton->setBounds(0, 210, 120,20);
+
+    rePCAButton->setBounds(0, 240, 120,20);
+
+    newIDbuttons->setBounds(0, 270, 120,20);
+    deleteAllUnits->setBounds(0, 300, 120,20);
+
+}
+
+void SpikeSorterCanvas::paint(Graphics& g)
+{
+
+    g.fillAll(Colours::darkgrey);
+
+}
+
+void SpikeSorterCanvas::refresh()
+{
+    // called every 10 Hz
+    processSpikeEvents();
+
+    repaint();
+}
+
+
+void SpikeSorterCanvas::processSpikeEvents()
+{
+
+
+    Electrode* e = ((SpikeSorter*) processor)->getActiveElectrode();
+
+    //	e->spikeSort->lstLastSpikes
+    //    processor->setParameter(2, 0.0f); // request redraw
+
+}
+
+
+
+
+
+void SpikeSorterCanvas::removeUnitOrBox()
+{
+    int electrodeID = processor->getActiveElectrode()->electrodeID;
+    int unitID, boxID;
+    processor->getActiveElectrode()->spikePlot->getSelectedUnitAndBox(unitID, boxID);
+    bool selectNewBoxUnit = false;
+    bool selectNewPCAUnit = false;
+    if (unitID > 0)
+    {
+        if (boxID >= 0)
+        {
+            // box unit
+            int numBoxes = processor->getActiveElectrode()->spikeSort->getNumBoxes(unitID);
+            if (numBoxes > 1)
+            {
+                // delete box, but keep unit
+                processor->getActiveElectrode()->spikeSort->removeBoxFromUnit(unitID, boxID);
+                electrode->spikePlot->updateUnitsFromProcessor();
+                electrode->spikePlot->setSelectedUnitAndBox(unitID,0);
+            }
+            else
+            {
+                // delete unit
+                processor->getActiveElectrode()->spikeSort->removeUnit(unitID);
+                electrode->spikePlot->updateUnitsFromProcessor();
+                processor->removeUnit(electrodeID, unitID);
+
+                std::vector<BoxUnit> boxunits = processor->getActiveElectrode()->spikeSort->getBoxUnits();
+                std::vector<PCAUnit> pcaunits = processor->getActiveElectrode()->spikeSort->getPCAUnits();
+                if (boxunits.size() > 0)
+                {
+                    selectNewBoxUnit = true;
+                }
+                else if (pcaunits.size() > 0)
+                {
+                    selectNewPCAUnit = true;
+                }
+                else
+                {
+                    electrode->spikePlot->setSelectedUnitAndBox(-1,-1);
+                }
+            }
+        }
+        else
+        {
+            // pca unit
+            processor->getActiveElectrode()->spikeSort->removeUnit(unitID);
+            electrode->spikePlot->updateUnitsFromProcessor();
+            processor->removeUnit(electrodeID, unitID);
+
+            std::vector<BoxUnit> boxunits = processor->getActiveElectrode()->spikeSort->getBoxUnits();
+            std::vector<PCAUnit> pcaunits = processor->getActiveElectrode()->spikeSort->getPCAUnits();
+            if (pcaunits.size() > 0)
+            {
+                selectNewPCAUnit = true;
+            }
+            else if (boxunits.size() > 0)
+            {
+                selectNewBoxUnit = true;
+            }
+            else
+            {
+                electrode->spikePlot->setSelectedUnitAndBox(-1,-1);
+            }
+
+
+        }
+        if (selectNewPCAUnit)
+        {
+            // set new selected unit to be the last existing unit
+            std::vector<PCAUnit> u = processor->getActiveElectrode()->spikeSort->getPCAUnits();
+            if (u.size() > 0)
+            {
+                electrode->spikePlot->setSelectedUnitAndBox(u[u.size()-1].getUnitID(),-1);
+            }
+            else
+            {
+                electrode->spikePlot->setSelectedUnitAndBox(-1,-1);
+            }
+        }
+        if (selectNewBoxUnit)
+        {
+            // set new selected unit to be the last existing unit
+            std::vector<BoxUnit> u = processor->getActiveElectrode()->spikeSort->getBoxUnits();
+            if (u.size() > 0)
+            {
+                electrode->spikePlot->setSelectedUnitAndBox(u[u.size()-1].getUnitID(),0);
+            }
+            else
+            {
+                electrode->spikePlot->setSelectedUnitAndBox(-1,-1);
+            }
+        }
+
+
+
+    }
+
+}
+
+bool SpikeSorterCanvas::keyPressed(const KeyPress& key)
+{
+
+    KeyPress c = KeyPress::createFromDescription("c");
+    KeyPress e = KeyPress::createFromDescription("escape");
+    KeyPress d = KeyPress::createFromDescription("delete");
+
+    if (key.isKeyCode(c.getKeyCode())) // C
+    {
+        spikeDisplay->clear();
+
+        std::cout << "Clearing display" << std::endl;
+        return true;
+    }
+    else  if (key.isKeyCode(e.getKeyCode()))   // ESC
+    {
+        spikeDisplay->setPolygonMode(false);
+        return true;
+    }
+    else  if (key.isKeyCode(d.getKeyCode()))   // Delete
+    {
+        removeUnitOrBox();
+        return true;
+    }
+
+    return false;
+
+}
+
+void SpikeSorterCanvas::buttonClicked(Button* button)
+{
+    int channel = 0;
+    int unitID = -1;
+    int boxID = -1;
+    Time t;
+
+    if (button == addPolygonUnitButton)
+    {
+        inDrawingPolygonMode = true;
+        addPolygonUnitButton->setToggleState(true, dontSendNotification);
+        electrode->spikePlot->setPolygonDrawingMode(true);
+    }
+    else if (button == addUnitButton)
+    {
+        Electrode* e = processor->getActiveElectrode();
+
+        if (e != nullptr)
+        {
+            int electrodeID = processor->getActiveElectrode()->electrodeID;
+
+            std::cout << "Adding box unit to electrode " << e->electrodeID << std::endl;
+            int newUnitID = processor->getActiveElectrode()->spikeSort->addBoxUnit(0);
+
+            uint8 r, g, b;
+            processor->getActiveElectrode()->spikeSort->getUnitColor(newUnitID, r, g, b);
+            electrode->spikePlot->updateUnitsFromProcessor();
+            electrode->spikePlot->setSelectedUnitAndBox(newUnitID, 0);
+            processor->addNewUnit(electrodeID, newUnitID, r, g, b);
+        }
+
+    }
+    else if (button == delUnitButton)
+    {
+        removeUnitOrBox();
+
+    }
+    else if (button == addBoxButton)
+    {
+
+        processor->getActiveElectrode()->spikePlot->getSelectedUnitAndBox(unitID, boxID);
+
+        if (unitID > 0)
+        {
+            std::cout << "Adding box to channel " << channel << " with unitID " << unitID << std::endl;
+            processor->getActiveElectrode()->spikeSort->addBoxToUnit(channel, unitID);
+            electrode->spikePlot->updateUnitsFromProcessor();
+        }
+    }
+    else if (button == rePCAButton)
+    {
+        processor->getActiveElectrode()->spikeSort->RePCA();
+    }
+    else if (button == nextElectrode)
+    {
+        SpikeSorterEditor* ed = (SpikeSorterEditor*)processor->getEditor();
+        ed->setElectrodeComboBox(1);
+    }
+    else if (button == prevElectrode)
+    {
+
+        SpikeSorterEditor* ed = (SpikeSorterEditor*)processor->getEditor();
+
+        ed->setElectrodeComboBox(-1);
+
+    }
+    else if (button == newIDbuttons)
+    {
+        // generate new IDs
+        processor->getActiveElectrode()->spikeSort->generateNewIDs();
+        electrode->spikePlot->updateUnitsFromProcessor();
+        //processor->updateSinks(electrode->electrodeID,false);
+    }
+    else if (button == deleteAllUnits)
+    {
+        // delete unit
+        processor->getActiveElectrode()->spikeSort->removeAllUnits();
+        electrode->spikePlot->updateUnitsFromProcessor();
+        processor->removeAllUnits(electrode->electrodeID);
+    }
+
+    repaint();
+}
+
+
+
+
+
+// ----------------------------------------------------------------
+
+SpikeThresholdDisplay::SpikeThresholdDisplay(SpikeSorter* p, SpikeSorterCanvas* sdc, Viewport* v) :
+    processor(p),canvas(sdc), viewport(v)
+{
+
+    totalHeight = 1000;
+
+}
+
+SpikeThresholdDisplay::~SpikeThresholdDisplay()
+{
+
+}
+
+void SpikeThresholdDisplay::clear()
+{
+    if (spikePlots.size() > 0)
+    {
+        for (int i = 0; i < spikePlots.size(); i++)
+        {
+            spikePlots[i]->clear();
+        }
+    }
+
+}
+
+
+void SpikeThresholdDisplay::removePlots()
+{
+    spikePlots.clear();
+
+}
+
+SpikeHistogramPlot* SpikeThresholdDisplay::addSpikePlot(int numChannels, int electrodeID, String name_)
+{
+
+    std::cout << "Adding new spike plot." << std::endl;
+
+    SpikeHistogramPlot* spikePlot = new SpikeHistogramPlot(processor,canvas, electrodeID, 1000 + numChannels, name_);
+    spikePlots.add(spikePlot);
+    addAndMakeVisible(spikePlot);
+
+    return spikePlot;
+}
+
+void SpikeThresholdDisplay::paint(Graphics& g)
+{
+
+    g.fillAll(Colours::grey);
+
+}
+
+void SpikeThresholdDisplay::setPolygonMode(bool on)
+{
+    if (spikePlots.size() > 0)
+        spikePlots[0]->setPolygonDrawingMode(on);
+}
+
+void SpikeThresholdDisplay::resized()
+{
+    // this is kind of a mess -- is there any way to optimize it?
+
+    if (spikePlots.size() > 0)
+    {
+
+        int w = getWidth();
+        int h = 430;//getHeight();
+
+        spikePlots[0]->setBounds(0, 0, w, h);
+
+
+        setBounds(0, 0, w, h);
+    }
+
+}
+
+void SpikeThresholdDisplay::mouseDown(const MouseEvent& event)
+{
+
+}
+
+void SpikeThresholdDisplay::plotSpike(const SpikeObject& spike, int electrodeNum)
+{
+    spikePlots[electrodeNum]->processSpikeObject(spike);
+
+}
+
+
+
+
+
+
+// ----------------------------------------------------------------
+
+SpikeHistogramPlot::SpikeHistogramPlot(SpikeSorter* prc,SpikeSorterCanvas* sdc, int electrodeID_, int p, String name_) :
+    canvas(sdc), isSelected(false), plotType(p), electrodeID(electrodeID_),
+    limitsChanged(true), processor(prc), name(name_)
+
+{
+
+    font = Font("Default", 15, Font::plain);
+
+    switch (p)
+    {
+        case SINGLE_PLOT:
+            // std::cout<<"SpikePlot as SINGLE_PLOT"<<std::endl;
+            nWaveAx = 1;
+            nProjAx = 1;
+            nChannels = 1;
+            minWidth = 600;
+            aspectRatio = 0.5f;
+            break;
+        case STEREO_PLOT:
+            //  std::cout<<"SpikePlot as STEREO_PLOT"<<std::endl;
+            nWaveAx = 2;
+            nProjAx = 1;
+            nChannels = 2;
+            minWidth = 300;
+            aspectRatio = 0.5f;
+            break;
+        case TETRODE_PLOT:
+            // std::cout<<"SpikePlot as TETRODE_PLOT"<<std::endl;
+            nWaveAx = 4;
+            nProjAx = 1;
+            nChannels = 4;
+            minWidth = 400;
+            aspectRatio = 0.5f;
+            break;
+        //        case HIST_PLOT:
+        //            nWaveAx = 1;
+        //            nProjAx = 0;
+        //            nHistAx = 1;
+        //            break;
+        default: // unsupported number of axes provided
+            std::cout << "SpikePlot as UNKNOWN, defaulting to SINGLE_PLOT" << std::endl;
+            nWaveAx = 1;
+            nProjAx = 0;
+            plotType = SINGLE_PLOT;
+            nChannels = 1;
+    }
+
+    std::vector<float> scales = processor->getElectrodeVoltageScales(electrodeID);
+    initAxes(scales);
+
+    for (int i = 0; i < nChannels; i++)
+    {
+        UtilityButton* rangeButton = new UtilityButton(String(scales[i],0), Font("Small Text", 10, Font::plain));
+        rangeButton->setRadius(3.0f);
+        rangeButton->addListener(this);
+        addAndMakeVisible(rangeButton);
+
+        rangeButtons.add(rangeButton);
+    }
+
+}
+
+
+void SpikeHistogramPlot::setSelectedUnitAndBox(int unitID, int boxID)
+{
+    const ScopedLock myScopedLock(mut);
+    processor->getActiveElectrode()->spikeSort->setSelectedUnitAndBox(unitID, boxID);
+}
+
+void SpikeHistogramPlot::getSelectedUnitAndBox(int& unitID, int& boxID)
+{
+    const ScopedLock myScopedLock(mut);
+    processor->getActiveElectrode()->spikeSort->getSelectedUnitAndBox(unitID, boxID);
+}
+
+
+SpikeHistogramPlot::~SpikeHistogramPlot()
+{
+    pAxes.clear();
+    wAxes.clear();
+
+}
+
+void SpikeHistogramPlot::paint(Graphics& g)
+{
+
+    //const MessageManagerLock mmLock;
+
+    g.setColour(Colours::white);
+    g.drawRect(0,0,getWidth(),getHeight());
+
+    g.setFont(font);
+
+    g.drawText(name,10,0,200,20,Justification::left,false);
+
+}
+
+void SpikeHistogramPlot::setFlipSignal(bool state)
+{
+    for (int i = 0; i < wAxes.size(); i++)
+    {
+        wAxes[i]->setSignalFlip(state);
+    }
+}
+
+void SpikeHistogramPlot::setPolygonDrawingMode(bool on)
+{
+    const ScopedLock myScopedLock(mut);
+    pAxes[0]->setPolygonDrawingMode(on);
+}
+
+void SpikeHistogramPlot::updateUnitsFromProcessor()
+{
+    const ScopedLock myScopedLock(mut);
+    boxUnits = processor->getActiveElectrode()->spikeSort->getBoxUnits();
+    pcaUnits = processor->getActiveElectrode()->spikeSort->getPCAUnits();
+
+    if (nWaveAx > 0)
+    {
+        wAxes[0]->updateUnits(boxUnits);
+    }
+    pAxes[0]->updateUnits(pcaUnits);
+
+
+    int selectedUnitID, selectedBoxID;
+    processor->getActiveElectrode()->spikeSort->getSelectedUnitAndBox(selectedUnitID, selectedBoxID);
+
+
+
+
+}
+
+void SpikeHistogramPlot::setPCARange(float p1min, float p2min, float p1max, float p2max)
+{
+    const ScopedLock myScopedLock(mut);
+    pAxes[0]->setPCARange(p1min, p2min, p1max, p2max);
+}
+
+void SpikeHistogramPlot::processSpikeObject(const SpikeObject& s)
+{
+    const ScopedLock myScopedLock(mut);
+    if (nWaveAx > 0)
+    {
+        for (int i = 0; i < nWaveAx; i++)
+        {
+            wAxes[i]->updateSpikeData(s);
+        }
+
+        pAxes[0]->updateSpikeData(s);
+
+
+    }
+}
+
+void SpikeHistogramPlot::select()
+{
+    isSelected = true;
+}
+
+void SpikeHistogramPlot::deselect()
+{
+    isSelected = false;
+}
+
+void SpikeHistogramPlot::initAxes(std::vector<float> scales)
+{
+    const ScopedLock myScopedLock(mut);
+    initLimits();
+
+    for (int i = 0; i < nWaveAx; i++)
+    {
+        WaveformAxes* wAx = new WaveformAxes(this,processor, electrodeID, i);
+        wAx->setDetectorThreshold(processor->getActiveElectrode()->thresholds[i]);
+        wAxes.add(wAx);
+        addAndMakeVisible(wAx);
+        ranges.add(scales[i]);
+    }
+
+    PCAProjectionAxes* pAx = new PCAProjectionAxes(processor);
+    float p1min,p2min, p1max,  p2max;
+    processor->getActiveElectrode()->spikeSort->getPCArange(p1min,p2min, p1max,  p2max);
+    pAx->setPCARange(p1min,p2min, p1max,  p2max);
+
+    pAxes.add(pAx);
+    addAndMakeVisible(pAx);
+
+    setLimitsOnAxes(); // initialize the ranges
+}
+
+void SpikeHistogramPlot::resized()
+{
+    const ScopedLock myScopedLock(mut);
+
+    float width = (float)getWidth()-10;
+    float height = (float) getHeight()-25;
+
+    float axesWidth, axesHeight;
+
+    // to compute the axes positions we need to know how many columns of proj and wave axes should exist
+    // using these two values we can calculate the positions of all of the sub axes
+    int nProjCols, nWaveCols;
+
+    switch (plotType)
+    {
+        case SINGLE_PLOT:
+            nProjCols = 1;
+            nWaveCols = 1;
+            axesWidth = width/2;
+            axesHeight = height;
+            break;
+
+        case STEREO_PLOT:
+            nProjCols = 1;
+            nWaveCols = 2;
+            axesWidth = width/2;
+            axesHeight = height;
+            break;
+        case TETRODE_PLOT:
+            nProjCols = 1;
+            nWaveCols = 2;
+            axesWidth = width/2;
+            axesHeight = height/2;
+            break;
+    }
+
+    for (int i = 0; i < nWaveAx; i++)
+    {
+        wAxes[i]->setBounds(5 + (i % nWaveCols) * axesWidth/nWaveCols, 20 + (i/nWaveCols) * axesHeight, axesWidth/nWaveCols, axesHeight);
+        rangeButtons[i]->setBounds(8 + (i % nWaveCols) * axesWidth/nWaveCols,
+                                   20 + (i/nWaveCols) * axesHeight + axesHeight - 18,
+                                   35, 15);
+    }
+    pAxes[0]->setBounds(5 +  axesWidth, 20 + 0, width/2, height);
+
+
+}
+
+
+
+void SpikeHistogramPlot::modifyRange(std::vector<float> values)
+{
+    const int NUM_RANGE = 7;
+    float range_array[NUM_RANGE] = {100,250,500,750,1000,1250,1500};
+    String label;
+    int newIndex = 0;
+
+    for (int index = 0; index < nChannels; index++)
+    {
+        for (int k = 0; k < NUM_RANGE; k++)
+        {
+            if (abs(values[index] - range_array[k]) < 0.1)
+            {
+                newIndex = k;
+                break;
+            }
+        }
+
+        ranges.set(index, range_array[newIndex]);
+        String label = String(range_array[newIndex],0);
+        rangeButtons[index]->setLabel(label);
+    }
+    setLimitsOnAxes();
+}
+
+
+void SpikeHistogramPlot::modifyRange(int index,bool up)
+{
+    const int NUM_RANGE = 7;
+    float range_array[NUM_RANGE] = {100,250,500,750,1000,1250,1500};
+    String label;
+    for (int k = 0; k < NUM_RANGE; k++)
+    {
+        if (abs(ranges[index] - range_array[k]) < 0.1)
+        {
+            int newIndex;
+            if (up)
+                newIndex  = (k + 1) % NUM_RANGE;
+            else
+            {
+                newIndex  = (k - 1);
+                if (newIndex < 0)
+                    newIndex  = NUM_RANGE-1;
+            }
+            ranges.set(index, range_array[newIndex]);
+            String label = String(range_array[newIndex],0);
+            rangeButtons[index]->setLabel(label);
+            setLimitsOnAxes();
+
+            processor->setElectrodeVoltageScale(electrodeID, index, range_array[newIndex]);
+            return;
+        }
+
+    }
+    // we shoudl never reach here.
+    jassert(false);
+    return ;
+
+}
+
+void SpikeHistogramPlot::buttonClicked(Button* button)
+{
+    UtilityButton* buttonThatWasClicked = (UtilityButton*) button;
+
+    int index = rangeButtons.indexOf(buttonThatWasClicked);
+    modifyRange(index,true);
+
+}
+
+void SpikeHistogramPlot::setLimitsOnAxes()
+{
+    const ScopedLock myScopedLock(mut);
+    for (int i = 0; i < nWaveAx; i++)
+        wAxes[i]->setRange(ranges[i]);
+}
+
+void SpikeHistogramPlot::initLimits()
+{
+    for (int i = 0; i < nChannels; i++)
+    {
+        limits[i][0] = 1209;//-1*pow(2,11);
+        limits[i][1] = 11059;//pow(2,14)*1.6;
+    }
+
+}
+
+void SpikeHistogramPlot::getBestDimensions(int* w, int* h)
+{
+    switch (plotType)
+    {
+        case TETRODE_PLOT:
+            *w = 4;
+            *h = 2;
+            break;
+        case STEREO_PLOT:
+            *w = 2;
+            *h = 1;
+            break;
+        case SINGLE_PLOT:
+            *w = 1;
+            *h = 1;
+            break;
+        default:
+            *w = 1;
+            *h = 1;
+            break;
+    }
+}
+
+void SpikeHistogramPlot::clear()
+{
+    const ScopedLock myScopedLock(mut);
+    std::cout << "SpikePlot::clear()" << std::endl;
+
+    for (int i = 0; i < nWaveAx; i++)
+        wAxes[i]->clear();
+    for (int i = 0; i < nProjAx; i++)
+        pAxes[i]->clear();
+
+
+}
+
+
+void SpikeHistogramPlot::setDisplayThresholdForChannel(int i, float f)
+{
+    const ScopedLock myScopedLock(mut);
+    if (i < wAxes.size())
+        wAxes[i]->setDetectorThreshold(f);
+
+    return;
+}
+
+
+float SpikeHistogramPlot::getDisplayThresholdForChannel(int i)
+{
+    const ScopedLock myScopedLock(mut);
+    float f= wAxes[i]->getDisplayThreshold();
+
+    return f;
+}
+
+/********************************/
+
+
+
+// --------------------------------------------------
+
+GenericDrawAxes::GenericDrawAxes(int t)
+    : gotFirstSpike(false), type(t)
+{
+    ylims[0] = 0;
+    ylims[1] = 1;
+
+    xlims[0] = 0;
+    xlims[1] = 1;
+
+    font = Font("Default", 12, Font::plain);
+
+}
+
+GenericDrawAxes::~GenericDrawAxes()
+{
+
+}
+
+bool GenericDrawAxes::updateSpikeData(const SpikeObject& newSpike)
+{
+    if (!gotFirstSpike)
+    {
+        gotFirstSpike = true;
+    }
+
+    s = newSpike;
+    return true;
+}
+
+void GenericDrawAxes::setYLims(double ymin, double ymax)
+{
+
+    //std::cout << "setting y limits to " << ymin << " " << ymax << std::endl;
+    ylims[0] = ymin;
+    ylims[1] = ymax;
+}
+void GenericDrawAxes::getYLims(double* min, double* max)
+{
+    *min = ylims[0];
+    *max = ylims[1];
+}
+void GenericDrawAxes::setXLims(double xmin, double xmax)
+{
+    xlims[0] = xmin;
+    xlims[1] = xmax;
+}
+void GenericDrawAxes::getXLims(double* min, double* max)
+{
+    *min = xlims[0];
+    *max = xlims[1];
+}
+
+
+void GenericDrawAxes::setType(int t)
+{
+    if (t < WAVE1 || t > PROJ3x4)
+    {
+        std::cout<<"Invalid Axes type specified";
+        return;
+    }
+    type = t;
+}
+
+int GenericDrawAxes::getType()
+{
+    return type;
+}
+
+int GenericDrawAxes::roundUp(int numToRound, int multiple)
+{
+    if (multiple == 0)
+    {
+        return numToRound;
+    }
+
+    int remainder = numToRound % multiple;
+    if (remainder == 0)
+        return numToRound;
+    return numToRound + multiple - remainder;
+}
+
+
+void GenericDrawAxes::makeLabel(int val, int gain, bool convert, char* s)
+{
+    if (convert)
+    {
+        double volt = ad16ToUv(val, gain)/1000.;
+        if (abs(val)>1e6)
+        {
+            //val = val/(1e6);
+            sprintf(s, "%.2fV", volt);
+        }
+        else if (abs(val)>1e3)
+        {
+            //val = val/(1e3);
+            sprintf(s, "%.2fmV", volt);
+        }
+        else
+            sprintf(s, "%.2fuV", volt);
+    }
+    else
+    {
+        sprintf(s,"%d", (int)val);
+    }
+}
+
+double GenericDrawAxes::ad16ToUv(int x, int gain)
+{
+    int result = (double)(x * 20e6) / (double)(gain * pow(2.0,16));
+    return result;
+}
+
+
+// --------------------------------------------------
+
+
+WaveformAxes::WaveformAxes(SpikeHistogramPlot* plt, SpikeSorter* p,int electrodeID_, int _channel) : GenericDrawAxes(channel),  electrodeID(electrodeID_),
+    signalFlipped(false),
+    channel(_channel),
+    drawGrid(true),
+    displayThresholdLevel(0.0f),
+    spikesReceivedSinceLastRedraw(0),
+    spikeIndex(0),
+    bufferSize(5),
+    range(250.0f),
+    isOverThresholdSlider(false),
+    isDraggingThresholdSlider(false),
+    processor(p),
+    spikeHistogramPlot(plt)
+{
+    bDragging  = false;
+
+    isOverUnit = -1;
+    isOverBox = -1;
+    //	 selectedUnit = -1;
+    //	 selectedBox = -1;
+    addMouseListener(this, true);
+
+    thresholdColour = Colours::red;
+
+
+    font = Font("Small Text",10,Font::plain);
+    int numSamples = 40;
+    for (int n = 0; n < bufferSize; n++)
+    {
+        SpikeObject so;
+        generateEmptySpike(&so, 4, numSamples);
+
+        spikeBuffer.add(so);
+    }
+}
+
+void WaveformAxes::mouseWheelMove(const MouseEvent& event, const MouseWheelDetails& wheel)
+{
+    // weirdly enough, sometimes we get twice of this event even though a single wheel move was made...
+    if (wheel.deltaY < 0)
+        spikeHistogramPlot->modifyRange(channel, true);
+    else
+        spikeHistogramPlot->modifyRange(channel, false);
+
+}
+
+void WaveformAxes::setSignalFlip(bool state)
+{
+    signalFlipped = state;
+    repaint();
+}
+
+void WaveformAxes::setRange(float r)
+{
+
+    //std::cout << "Setting range to " << r << std::endl;
+
+    range = r;
+
+    repaint();
+}
+
+void WaveformAxes::plotSpike(const SpikeObject& s, Graphics& g)
+{
+
+    float h = getHeight();
+    g.setColour(Colour(s.color[0],s.color[1],s.color[2]));
+    //g.setColour(Colours::pink);
+    //compute the spatial width for each waveform sample
+    float dx = getWidth()/float(spikeBuffer[0].nSamples);
+
+    /*
+    float align = 8 * getWidth()/float(spikeBuffer[0].nSamples);
+    g.drawLine(align,
+                       0,
+                       align,
+                       h);
+    */
+
+    // type corresponds to channel so we need to calculate the starting
+    // sample based upon which channel is getting plotted
+    int offset = channel*s.nSamples; //spikeBuffer[0].nSamples * type; //
+
+    int dSamples = 1;
+
+    float x = 0.0f;
+
+    for (int i = 0; i < s.nSamples-1; i++)
+    {
+        //std::cout << s.data[sampIdx] << std::endl;
+
+        if (*s.gain != 0)
+        {
+            float s1 =h- (h/2 + float(s.data[offset+i]-32768)/float(*s.gain)*1000.0f / (range) * h);
+            float s2 =h- (h/2 + float(s.data[offset+i+1]-32768)/float(*s.gain)*1000.0f / (range) * h);
+            if (signalFlipped)
+            {
+                s1=h-s1;
+                s2=h-s2;
+            }
+            g.drawLine(x,
+                       s1,
+                       x+dx,
+                       s2);
+        }
+        x += dx;
+    }
+
+}
+
+void WaveformAxes::drawThresholdSlider(Graphics& g)
+{
+
+    // draw display threshold (editable)
+    g.setColour(thresholdColour);
+    if (signalFlipped)
+    {
+        float h = getHeight()-(getHeight()*(0.5f - displayThresholdLevel/range));
+        g.drawLine(0, h, getWidth(), h);
+        g.drawText(String(roundFloatToInt(displayThresholdLevel)),2,h,35,10,Justification::left, false);
+    }
+    else
+    {
+        float h = getHeight()*(0.5f - displayThresholdLevel/range);
+        g.drawLine(0, h, getWidth(), h);
+        g.drawText(String(roundFloatToInt(displayThresholdLevel)),2,h,35,10,Justification::left, false);
+    }
+
+}
+
+
+void WaveformAxes::drawWaveformGrid(Graphics& g)
+{
+
+    float h = getHeight();
+    float w = getWidth();
+
+    g.setColour(Colours::darkgrey);
+
+    for (float y = -range/2; y < range/2; y += 25.0f)
+    {
+        if (y == 0)
+            g.drawLine(0,h/2 + y/range*h, w, h/2+ y/range*h,2.0f);
+        else
+            g.drawLine(0,h/2 + y/range*h, w, h/2+ y/range*h);
+    }
+
+}
+
+
+bool WaveformAxes::updateSpikeData(const SpikeObject& s)
+{
+    if (!gotFirstSpike)
+    {
+        gotFirstSpike = true;
+    }
+
+    if (spikesReceivedSinceLastRedraw < bufferSize)
+    {
+
+        SpikeObject newSpike = s;
+
+        spikeIndex++;
+        spikeIndex %= bufferSize;
+
+        spikeBuffer.set(spikeIndex, newSpike);
+
+        spikesReceivedSinceLastRedraw++;
+
+    }
+
+    return true;
+
+}
+
+bool WaveformAxes::checkThreshold(const SpikeObject& s)
+{
+    int sampIdx = 40*type;
+
+    for (int i = 0; i < s.nSamples-1; i++)
+    {
+
+        if (float(s.data[sampIdx]-32768)/float(*s.gain)*1000.0f > displayThresholdLevel)
+        {
+            return true;
+        }
+
+        sampIdx++;
+    }
+
+    return false;
+
+}
+
+void WaveformAxes::clear()
+{
+
+    spikeBuffer.clear();
+    spikeIndex = 0;
+    int numSamples=40;
+    for (int n = 0; n < bufferSize; n++)
+    {
+        SpikeObject so;
+        generateEmptySpike(&so, 4,numSamples);
+
+        spikeBuffer.add(so);
+    }
+
+    repaint();
+}
+
+void WaveformAxes::mouseMove(const MouseEvent& event)
+{
+
+    // Point<int> pos = event.getPosition();
+
+    float y = event.y;
+
+    float h = getHeight()*(0.5f - displayThresholdLevel/range);
+    if (signalFlipped)
+    {
+        h = getHeight() - h;
+    }
+
+    // std::cout << y << " " << h << std::endl;
+
+    if (y > h - 10.0f && y < h + 10.0f && !isOverThresholdSlider)
+    {
+        thresholdColour = Colours::yellow;
+        //  std::cout << "Yes." << std::endl;
+        isOverThresholdSlider = true;
+        // cursorType = MouseCursor::DraggingHandCursor;
+    }
+    else if ((y < h - 10.0f || y > h + 10.0f) && isOverThresholdSlider)
+    {
+        thresholdColour = Colours::red;
+        isOverThresholdSlider = false;
+    }
+    else
+    {
+        // are we inside a box ?
+        isOverUnit = 0;
+        isOverBox = -1;
+        strOverWhere = "";
+        isOverUnitBox(event.x, event.y, isOverUnit, isOverBox, strOverWhere);
+
+    }
+    repaint();
+
+}
+
+int WaveformAxes::findUnitIndexByID(int ID)
+{
+    for (int k = 0; k < units.size(); k++)
+        if (units[k].UnitID == ID)
+            return k;
+    return -1;
+}
+
+void WaveformAxes::mouseDown(const juce::MouseEvent& event)
+{
+
+    if (event.mods.isRightButtonDown())
+    {
+        clear();
+    }
+
+    float h = getHeight();
+    float w = getWidth();
+    float microsec_span = 40.0/30000.0 * 1e6;
+    float microvolt_span = range/2;
+    mouseDownX = event.x/w * microsec_span ;
+    if (signalFlipped)
+        mouseDownY=(h/2- (h-event.y))/(h/2)*microvolt_span;
+    else
+        mouseDownY=(h/2- event.y)/(h/2)*microvolt_span;
+
+    if (isOverUnit > 0)
+    {
+        processor->getActiveElectrode()->spikeSort->setSelectedUnitAndBox(isOverUnit, isOverBox);
+        int indx = findUnitIndexByID(isOverUnit);
+        jassert(indx >= 0);
+        mouseOffsetX = mouseDownX - units[indx].lstBoxes[isOverBox].x;
+        mouseOffsetY = mouseDownY - units[indx].lstBoxes[isOverBox].y;
+    }
+    else
+    {
+        processor->getActiveElectrode()->spikeSort->setSelectedUnitAndBox(-1, -1);
+
+    }
+    //	MouseUnitOffset = ScreenToMS_uV(e.X, e.Y) - new PointD(boxOnDown.x, boxOnDown.y);
+
+    // if (isOverThresholdSlider)
+    // {
+    //     cursorType = MouseCursor::DraggingHandCursor;
+    // }
+}
+
+
+void WaveformAxes::mouseUp(const MouseEvent& event)
+{
+    if (bDragging)
+    {
+        bDragging = false;
+        // send a message to processor to update its internal structure?
+        Electrode* e = processor->getActiveElectrode();
+        e->spikeSort->updateBoxUnits(units);
+    }
+    // if (isOverThresholdSlider)
+    // {
+    //     cursorType = MouseCursor::DraggingHandCursor;
+    // }
+}
+
+void WaveformAxes::mouseDrag(const MouseEvent& event)
+{
+    bDragging = true;
+
+    if (isOverUnit > 0)
+    {
+        // dragging a box
+        // convert position to metric coordinates.
+        float h = getHeight();
+        float w = getWidth();
+        float microsec_span = 40.0/30000.0 * 1e6;
+        float microvolt_span = range/2;
+        float x = event.x/w * microsec_span ;
+
+        float y;
+        if (signalFlipped)
+            y=(h/2- (h-event.y))/(h/2)*microvolt_span;
+        else
+            y=(h/2- event.y)/(h/2)*microvolt_span;
+
+        // update units position....
+
+        for (int k=0; k<units.size(); k++)
+        {
+            if (units[k].getUnitID() == isOverUnit)
+            {
+                float oldx = units[k].lstBoxes[isOverBox].x;
+                float oldy = units[k].lstBoxes[isOverBox].y;
+
+                float dx = x - oldx;
+                float dy = y - oldy;
+
+                if (strOverWhere == "right")
+                {
+                    units[k].lstBoxes[isOverBox].w = x - oldx;
+                }
+                else if (strOverWhere == "left")
+                {
+                    units[k].lstBoxes[isOverBox].w += -dx;
+                    units[k].lstBoxes[isOverBox].x = x;
+                }
+                else if ((!signalFlipped && strOverWhere == "top") || (signalFlipped && strOverWhere == "bottom"))
+                {
+                    units[k].lstBoxes[isOverBox].y += dy;
+                    units[k].lstBoxes[isOverBox].h += dy;
+                }
+                else if ((!signalFlipped && strOverWhere == "bottom") || (signalFlipped && strOverWhere == "top"))
+                {
+                    units[k].lstBoxes[isOverBox].h = -dy;
+                }
+                else if ((!signalFlipped && strOverWhere == "bottomright") || (signalFlipped && strOverWhere == "topright"))
+                {
+                    units[k].lstBoxes[isOverBox].w = x - oldx;
+                    units[k].lstBoxes[isOverBox].h = -dy;
+
+                }
+                else if ((!signalFlipped && strOverWhere == "bottomleft") || (signalFlipped && strOverWhere == "topleft"))
+                {
+                    units[k].lstBoxes[isOverBox].w += -dx;
+                    units[k].lstBoxes[isOverBox].x = x;
+                    units[k].lstBoxes[isOverBox].h = -dy;
+                }
+                else if ((!signalFlipped && strOverWhere == "topright") || (signalFlipped && strOverWhere == "bottomright"))
+                {
+                    units[k].lstBoxes[isOverBox].y += dy;
+                    units[k].lstBoxes[isOverBox].h += dy;
+                    units[k].lstBoxes[isOverBox].w = x - oldx;
+
+                }
+                else if ((!signalFlipped && strOverWhere == "topleft") || (signalFlipped && strOverWhere == "bottomleft"))
+                {
+                    units[k].lstBoxes[isOverBox].w += -dx;
+                    units[k].lstBoxes[isOverBox].x = x;
+                    units[k].lstBoxes[isOverBox].y += dy;
+                    units[k].lstBoxes[isOverBox].h += dy;
+
+                }
+                else if (strOverWhere == "inside")
+                {
+                    units[k].lstBoxes[isOverBox].x = x-mouseOffsetX;
+                    units[k].lstBoxes[isOverBox].y = y-mouseOffsetY;
+                }
+
+				if (units[k].lstBoxes[isOverBox].h < 0)
+				{
+					units[k].lstBoxes[isOverBox].y -= units[k].lstBoxes[isOverBox].h;
+					units[k].lstBoxes[isOverBox].h *= -1;
+					if (strOverWhere == "top")
+						strOverWhere = "bottom";
+					else if (strOverWhere == "bottom")
+						strOverWhere = "top";
+					else if (strOverWhere == "topleft")
+						strOverWhere = "bottomleft";
+					else if (strOverWhere == "topright")
+						strOverWhere = "bottomright";
+					else if (strOverWhere == "bottomleft")
+						strOverWhere = "topleft";
+					else if (strOverWhere == "bottomright")
+						strOverWhere = "topright";
+				}
+				if (units[k].lstBoxes[isOverBox].w < 0)
+				{
+					units[k].lstBoxes[isOverBox].x += units[k].lstBoxes[isOverBox].w;
+					units[k].lstBoxes[isOverBox].w *= -1;
+				if (strOverWhere == "left")
+						strOverWhere = "right";
+					else if (strOverWhere == "right")
+						strOverWhere = "left";
+					else if (strOverWhere == "topleft")
+						strOverWhere = "topright";
+					else if (strOverWhere == "topright")
+						strOverWhere = "topleft";
+					else if (strOverWhere == "bottomleft")
+						strOverWhere = "bottomright";
+					else if (strOverWhere == "bottomright")
+						strOverWhere = "bottomleft";	
+				}
+
+            }
+
+        }
+
+        //void WaveformAxes::isOverUnitBox(float x, float y, int &UnitID, int &BoxID, String &where)
+    }
+    else  if (isOverThresholdSlider)
+    {
+
+        float thresholdSliderPosition ;
+        if (signalFlipped)
+            thresholdSliderPosition = (getHeight()-float(event.y)) / float(getHeight());
+        else
+            thresholdSliderPosition =  float(event.y) / float(getHeight());
+
+        if (thresholdSliderPosition > 1)
+            thresholdSliderPosition = 1;
+        else if (thresholdSliderPosition < -1) // Modified to allow negative thresholds.
+            thresholdSliderPosition =-1;
+
+
+        displayThresholdLevel = (0.5f - thresholdSliderPosition) * range;
+        // update processor
+        processor->getActiveElectrode()->thresholds[channel] = displayThresholdLevel;
+        SpikeSorterEditor* edt = (SpikeSorterEditor*) processor->getEditor();
+        for (int k=0; k<processor->getActiveElectrode()->numChannels; k++)
+            edt->electrodeButtons[k]->setToggleState(false, dontSendNotification);
+
+        edt->electrodeButtons[channel]->setToggleState(true, dontSendNotification);
+
+        edt->setThresholdValue(channel,displayThresholdLevel);
+    }
+    repaint();
+}
+
+// MouseCursor WaveAxes::getMouseCursor()
+// {
+//     MouseCursor c = MouseCursor(cursorType);
+
+//     return c;
+// }
+
+void WaveformAxes::mouseExit(const MouseEvent& event)
+{
+    if (isOverThresholdSlider)
+    {
+        isOverThresholdSlider = false;
+        thresholdColour = Colours::red;
+        repaint();
+    }
+}
+
+float WaveformAxes::getDisplayThreshold()
+{
+    return displayThresholdLevel;
+}
+
+void WaveformAxes::setDetectorThreshold(float t)
+{
+    displayThresholdLevel = t;
+}
+
+
+
+void WaveformAxes::isOverUnitBox(float x, float y, int& UnitID, int& BoxID, String& where)
+{
+
+    float h = getHeight();
+    float w = getWidth();
+    // Map box coordinates to screen coordinates.
+    // Assume time span is 40 samples at 30 Khz?
+    float microsec_span = 40.0/30000.0 * 1e6;
+    float microvolt_span = range/2;
+
+    // Typical spike is 40 samples, at 30kHz ~ 1.3 ms or 1300 usecs.
+    for (int k = 0; k < units.size(); k++)
+    {
+        for (int boxiter = 0; boxiter< units[k].lstBoxes.size(); boxiter++)
+        {
+            Box B = units[k].lstBoxes[boxiter];
+            float rectx1 = B.x / microsec_span * w;
+            float recty1 = h/2 - (B.y / microvolt_span * h/2);
+            float rectx2 = (B.x+B.w) / microsec_span * w;
+            float recty2 = h/2 - ((B.y-B.h) / microvolt_span * h/2);
+
+            if (signalFlipped)
+            {
+                recty1 = h-recty1;
+                recty2 = h-recty2;
+            }
+
+            if (rectx1 > rectx2)
+                swapVariables(rectx1,rectx2);
+            if (recty1 > recty2)
+                swapVariables(recty1,recty2);
+
+            if (x >= rectx1 - 10 & y >= recty1 -10 & x <= rectx2 + 10 & y <= recty2+10)
+            {
+                //setMouseCursor(MouseCursor::DraggingHandCursor);
+                UnitID = units[k].UnitID;
+                BoxID = boxiter;
+                if (x >= rectx1 - 10 & x <= rectx1 + 10 && y >= recty1-10 & y <= recty1+10)
+                {
+                    where = "topleft";
+                    setMouseCursor(MouseCursor::TopLeftCornerResizeCursor);
+                }
+                else if (x >= rectx2 - 10 & x <= rectx2 + 10 && y >= recty1-10 & y <= recty1+10)
+                {
+                   where = "topright";
+                   setMouseCursor(MouseCursor::TopRightCornerResizeCursor);
+                }
+                else if (x >= rectx1 - 10 & x <= rectx1 + 10 && y >= recty2-10 & y <= recty2+10)
+                {
+                    where = "bottomleft";
+                    setMouseCursor(MouseCursor::BottomLeftCornerResizeCursor);
+                }
+                else if (x >= rectx2 - 10 & x <= rectx2 + 10 && y >= recty2-10 & y <= recty2+10)
+                {
+                    where = "bottomright";
+                   setMouseCursor(MouseCursor::BottomRightCornerResizeCursor);
+                }
+                else if (x >= rectx1 - 10 & x <= rectx1 + 10)
+                {
+                    where = "left";
+                    setMouseCursor(MouseCursor::LeftEdgeResizeCursor);
+                }
+                else if (x >= rectx2 - 10 & x <= rectx2 + 10)
+                {
+                    where = "right";
+                    setMouseCursor(MouseCursor::RightEdgeResizeCursor);
+                }
+                else if (y >= recty1 - 10 & y <= recty1 + 10)
+                {
+                    setMouseCursor(MouseCursor::TopEdgeResizeCursor);
+                    where = "top";
+                }
+                else if (y >= recty2 - 10 & y <= recty2 + 10)
+                {
+                    where = "bottom";
+                    setMouseCursor(MouseCursor::BottomEdgeResizeCursor);
+                }
+                else
+                {
+                    setMouseCursor(MouseCursor::DraggingHandCursor);
+                    where = "inside";
+                }
+                return;
+            }
+        }
+    }
+
+    setMouseCursor(MouseCursor::NormalCursor); // not inside any boxes
+}
+
+void WaveformAxes::drawBoxes(Graphics& g)
+{
+    // y and h are given in micro volts.
+    // x and w and given in micro seconds.
+
+    float h = getHeight();
+    float w = getWidth();
+    // Map box coordinates to screen coordinates.
+    // Assume time span is 40 samples at 30 Khz?
+    float microsec_span = 40.0/30000.0 * 1e6;
+    float microvolt_span = range/2;
+
+    int selectedUnitID, selectedBoxID;
+    processor->getActiveElectrode()->spikeSort->getSelectedUnitAndBox(selectedUnitID, selectedBoxID);
+
+    // Typical spike is 40 samples, at 30kHz ~ 1.3 ms or 1300 usecs.
+    for (int k = 0; k < units.size(); k++)
+    {
+        g.setColour(Colour(units[k].ColorRGB[0],units[k].ColorRGB[1],units[k].ColorRGB[2]));
+
+        for (int boxiter = 0; boxiter < units[k].lstBoxes.size(); boxiter++)
+        {
+            Box B = units[k].lstBoxes[boxiter];
+
+            float thickness = 2;
+            if (units[k].getUnitID() == selectedUnitID && boxiter == selectedBoxID)
+                thickness = 3;
+            else if (units[k].getUnitID() == isOverUnit && boxiter == isOverBox)
+                thickness = 2;
+            else
+                thickness = 1;
+
+
+            float rectx1 = B.x / microsec_span * w;
+            float recty1 = (h/2 - (B.y / microvolt_span * h/2));
+
+            float rectx2 = (B.x+B.w) / microsec_span * w;
+            float recty2 = (h/2 - ((B.y-B.h) / microvolt_span * h/2));
+
+            //std::cout << rectx1 << " " << rectx2 << " " << recty1 << " " << recty2 << std::endl;
+
+			float drawRecty1, drawRecty2;
+            if (signalFlipped)
+            {
+                drawRecty2 = h-recty1;
+                drawRecty1 = h-recty2;
+            }
+			else
+			{
+				drawRecty1 = recty1;
+				drawRecty2 = recty2;
+			}
+            g.drawRect(rectx1,drawRecty1,rectx2-rectx1, drawRecty2-drawRecty1,thickness);
+            g.drawText(String(units[k].UnitID), rectx1,drawRecty1-15,rectx2-rectx1,15,juce::Justification::centred,false);
+
+        }
+    }
+}
+
+
+
+void WaveformAxes::updateUnits(std::vector<BoxUnit> _units)
+{
+    units = _units;
+}
+
+void WaveformAxes::paint(Graphics& g)
+{
+    g.setColour(Colours::black);
+    g.fillRect(0,0,getWidth(), getHeight());
+
+    // int chan = 0;
+
+    if (drawGrid)
+        drawWaveformGrid(g);
+
+    if (channel == 0)
+    {
+        //double depth = processor->getSelectedElectrodeDepth();
+        //String d = "Depth: "+String(depth,4) +" mm";
+        //g.setFont(Font("Small Text", 13, Font::plain));
+        // g.setColour(Colours::white);
+
+        //g.drawText(d,10,10,150,20,Justification::left,false);
+    }
+    // draw the grid lines for the waveforms
+
+    // draw the threshold line and labels
+    drawThresholdSlider(g);
+    drawBoxes(g);
+    // if no spikes have been received then don't plot anything
+    if (!gotFirstSpike)
+    {
+        return;
+    }
+
+
+    for (int spikeNum = 0; spikeNum < bufferSize; spikeNum++)
+    {
+
+        if (spikeNum != spikeIndex)
+        {
+            g.setColour(Colours::grey);
+            plotSpike(spikeBuffer[spikeNum], g);
+        }
+
+    }
+
+    g.setColour(Colours::white);
+    plotSpike(spikeBuffer[spikeIndex], g);
+
+    bool isRecorded = processor->isSelectedElectrodeRecorded(channel);
+
+    if (!isRecorded)
+    {
+        String d = "NOT RECORDED";
+        g.setFont(Font("Small Text", 15, Font::plain));
+        g.setColour(Colours::red);
+        g.drawText(d,getWidth()-140,10,120,25,Justification::right,false);
+
+    }
+
+    spikesReceivedSinceLastRedraw = 0;
+
+}
+
+// --------------------------------------------------
+
+
+PCAProjectionAxes::PCAProjectionAxes(SpikeSorter* p) : GenericDrawAxes(0), processor(p), imageDim(500),
+    rangeX(250), rangeY(250), spikesReceivedSinceLastRedraw(0)
+{
+    projectionImage = Image(Image::RGB, imageDim, imageDim, true);
+    bufferSize = 600;
+    pcaMin[0] = pcaMin[1] = 0;
+    pcaMax[0] = pcaMax[1] = 0;
+
+    rangeSet = false;
+    inPolygonDrawingMode = false;
+    clear();
+    updateProcessor = false;
+    isOverUnit = -1;
+
+    rangeUpButton = new UtilityButton("+", Font("Small Text", 10, Font::plain));
+    rangeUpButton->setRadius(3.0f);
+    rangeUpButton->addListener(this);
+    addAndMakeVisible(rangeUpButton);
+
+    rangeDownButton = new UtilityButton("-", Font("Small Text", 10, Font::plain));
+    rangeDownButton->setRadius(3.0f);
+    rangeDownButton->addListener(this);
+    addAndMakeVisible(rangeDownButton);
+
+    redrawSpikes = true;
+
+}
+
+void PCAProjectionAxes::resized()
+{
+
+    rangeDownButton->setBounds(10,10, 20, 15);
+    rangeUpButton->setBounds(35,10, 20, 15);
+}
+
+void PCAProjectionAxes::setPolygonDrawingMode(bool on)
+{
+    if (on)
+    {
+        inPolygonDrawingMode = true;
+        setMouseCursor(MouseCursor::CrosshairCursor);
+
+    }
+    else
+    {
+        inPolygonDrawingMode = false;
+        setMouseCursor(MouseCursor::NormalCursor);
+    }
+}
+
+void PCAProjectionAxes::updateUnits(std::vector<PCAUnit> _units)
+{
+    units = _units;
+}
+
+void PCAProjectionAxes::drawUnit(Graphics& g, PCAUnit unit)
+{
+    float w = getWidth();
+    float h = getHeight();
+
+    int selectedUnitID, selectedBoxID;
+    processor->getActiveElectrode()->spikeSort->getSelectedUnitAndBox(selectedUnitID, selectedBoxID);
+    g.setColour(Colour(unit.ColorRGB[0],unit.ColorRGB[1],unit.ColorRGB[2]));
+    if (unit.poly.pts.size() > 2)
+    {
+        float thickness;
+        if (unit.getUnitID() == selectedUnitID)
+            thickness = 3;
+        else if (unit.getUnitID() == isOverUnit)
+            thickness = 2;
+        else
+            thickness = 1;
+
+        double cx=0,cy=0;
+        for (int k=0; k<unit.poly.pts.size()-1; k++)
+        {
+            // convert projection coordinates to screen coordinates.
+            float x1 = (unit.poly.offset.X + unit.poly.pts[k].X - pcaMin[0]) / (pcaMax[0]-pcaMin[0]) * w;
+            float y1 = (unit.poly.offset.Y + unit.poly.pts[k].Y - pcaMin[1]) / (pcaMax[1]-pcaMin[1]) * h;
+            float x2 = (unit.poly.offset.X + unit.poly.pts[k+1].X - pcaMin[0]) / (pcaMax[0]-pcaMin[0]) * w;
+            float y2 = (unit.poly.offset.Y + unit.poly.pts[k+1].Y - pcaMin[1]) / (pcaMax[1]-pcaMin[1]) * h;
+            cx+=x1;
+            cy+=y1;
+            g.drawLine(x1,y1,x2,y2,thickness);
+        }
+        float x1 = (unit.poly.offset.X + unit.poly.pts[0].X - pcaMin[0]) / (pcaMax[0]-pcaMin[0]) * w;
+        float y1 = (unit.poly.offset.Y + unit.poly.pts[0].Y - pcaMin[1]) / (pcaMax[1]-pcaMin[1]) * h;
+        float x2 = (unit.poly.offset.X + unit.poly.pts[unit.poly.pts.size()-1].X - pcaMin[0]) / (pcaMax[0]-pcaMin[0]) * w;
+        float y2 = (unit.poly.offset.Y + unit.poly.pts[unit.poly.pts.size()-1].Y - pcaMin[1]) / (pcaMax[1]-pcaMin[1]) * h;
+        g.drawLine(x1,y1,x2,y2,thickness);
+
+        cx+=x2;
+        cy+=y2;
+
+        g.drawText(String(unit.UnitID), (cx/unit.poly.pts.size())-10,(cy/unit.poly.pts.size())-10,20,15,juce::Justification::centred,false);
+    }
+}
+
+void PCAProjectionAxes::paint(Graphics& g)
+{
+
+    spikesReceivedSinceLastRedraw = 0;
+
+    g.drawImage(projectionImage,
+                0, 0, getWidth(), getHeight(),
+                0, 0, rangeX, rangeY);
+
+
+    // draw pca units polygons
+    for (int k=0; k<units.size(); k++)
+    {
+        drawUnit(g, units[k]);
+    }
+
+
+    if (inPolygonDrawingMode)
+    {
+        setMouseCursor(MouseCursor::CrosshairCursor);
+        // draw polygon
+        bool first = true;
+        PointD prev;
+
+        if (drawnPolygon.size() > 0)
+        {
+            g.setColour(Colour(drawnUnit.ColorRGB[0],drawnUnit.ColorRGB[1],drawnUnit.ColorRGB[2]));
+
+            for (std::list<PointD>::iterator it = drawnPolygon.begin(); it != drawnPolygon.end(); it++)
+            {
+                if (first)
+                {
+                    first = false;
+                }
+                else
+                {
+                    g.drawLine((*it).X, (*it).Y, prev.X,prev.Y);
+                }
+                prev = *it;
+            }
+
+            g.drawLine(drawnPolygon.front().X,drawnPolygon.front().Y,drawnPolygon.back().X,drawnPolygon.back().Y);
+        }
+    }
+
+    //Graphics im(projectionImage);
+
+    if (redrawSpikes)
+    {
+        // recompute image
+        int w = getWidth();
+        int h = getHeight();
+        projectionImage.clear(juce::Rectangle<int>(0, 0, projectionImage.getWidth(), projectionImage.getHeight()),
+                              Colours::black);
+
+        bool subsample = false;
+        int dk = (subsample) ? 5 : 1;
+
+        for (int k=0; k<bufferSize; k+=dk)
+        {
+            drawProjectedSpike(spikeBuffer[k]);
+        }
+        redrawSpikes = false;
+    }
+
+}
+
+
+void PCAProjectionAxes::drawProjectedSpike(SpikeObject s)
+{
+    if (rangeSet)
+    {
+        Graphics g(projectionImage);
+
+        g.setColour(Colour(s.color[0],s.color[1],s.color[2]));
+
+        float x = (s.pcProj[0] - pcaMin[0]) / (pcaMax[0]-pcaMin[0]) * rangeX;
+        float y = (s.pcProj[1] - pcaMin[1]) / (pcaMax[1]-pcaMin[1]) * rangeY;
+        if (x >= 0 & y >= 0 & x <= rangeX & y <= rangeY)
+            g.fillEllipse(x,y,2,2);
+    }
+}
+
+void PCAProjectionAxes::redraw(bool subsample)
+{
+    Graphics g(projectionImage);
+
+    // recompute image
+    int w = getWidth();
+    int h = getHeight();
+    projectionImage.clear(juce::Rectangle<int>(0, 0, projectionImage.getWidth(), projectionImage.getHeight()),
+                          Colours::black);
+
+    int dk = (subsample) ? 5 : 1;
+
+    for (int k=0; k<bufferSize; k+=dk)
+    {
+        drawProjectedSpike(spikeBuffer[k]);
+    }
+
+}
+
+void PCAProjectionAxes::setPCARange(float p1min, float p2min, float p1max, float p2max)
+{
+
+    pcaMin[0] = p1min;
+    pcaMin[1] = p2min;
+    pcaMax[0] = p1max;
+    pcaMax[1] = p2max;
+    rangeSet = true;
+    redrawSpikes = true;
+    processor->getActiveElectrode()->spikeSort->setPCArange(p1min,p2min, p1max,  p2max);
+
+}
+
+bool PCAProjectionAxes::updateSpikeData(const SpikeObject& s)
+{
+
+    if (spikesReceivedSinceLastRedraw < bufferSize)
+    {
+
+        SpikeObject newSpike = s;
+
+        spikeIndex++;
+        spikeIndex %= bufferSize;
+
+        spikeBuffer.set(spikeIndex, newSpike);
+
+        spikesReceivedSinceLastRedraw++;
+        //drawProjectedSpike(newSpike);
+        redrawSpikes = true;
+
+    }
+    return true;
+}
+
+
+void PCAProjectionAxes::clear()
+{
+    projectionImage.clear(juce::Rectangle<int>(0, 0, projectionImage.getWidth(), projectionImage.getHeight()),
+                          Colours::black);
+
+
+    spikeBuffer.clear();
+    spikeIndex = 0;
+
+    redrawSpikes = true;
+    //repaint();
+}
+
+
+void PCAProjectionAxes::mouseDrag(const juce::MouseEvent& event)
+{
+
+    if (!inPolygonDrawingMode)
+    {
+
+        setMouseCursor(MouseCursor::DraggingHandCursor);
+        int selectedUnitID, selectedBoxID;
+        processor->getActiveElectrode()->spikeSort->getSelectedUnitAndBox(selectedUnitID, selectedBoxID);
+
+        if (isOverUnit > 0 && selectedUnitID == isOverUnit)
+        {
+            // pan unit
+            int unitindex=-1;
+
+            for (int k=0; k<units.size(); k++)
+            {
+                if (units[k].getUnitID() == selectedUnitID)
+                {
+                    unitindex = k;
+                    break;
+                }
+            }
+            jassert(unitindex >= 0);
+
+            int w = getWidth();
+            int h = getHeight();
+            float range0 = pcaMax[0]-pcaMin[0];
+            float range1 = pcaMax[1]-pcaMin[1];
+
+            float dx = float(event.x-prevx) / w*range0;
+            float dy = float(event.y-prevy) / h*range1;
+
+
+            units[unitindex].poly.offset.X += dx;
+            units[unitindex].poly.offset.Y += dy;
+            updateProcessor = true;
+            // draw polygon
+            prevx = event.x;
+            prevy = event.y;
+
+        }
+        else
+        {
+            // Pan PCA space
+            int w = getWidth();
+            int h = getHeight();
+            float range0 = pcaMax[0]-pcaMin[0];
+            float range1 = pcaMax[1]-pcaMin[1];
+
+            float dx = -float(event.x-prevx) / w*range0;
+            float dy = -float(event.y-prevy) / h*range1;
+
+            pcaMin[0]+=dx;
+            pcaMin[1]+=dy;
+            pcaMax[0]+=dx;
+            pcaMax[1]+=dy;
+            processor->getActiveElectrode()->spikeSort->setPCArange(pcaMin[0],pcaMin[1], pcaMax[0],  pcaMax[1]);
+
+            // draw polygon
+            prevx = event.x;
+            prevy = event.y;
+
+            redrawSpikes = true;
+        }
+
+    }
+    else
+    {
+        int pixel_quantizer = 6;
+        float distance = float(event.x-prevx)*float(event.x-prevx)+
+                         float(event.y-prevy)*float(event.y-prevy);
+        if (distance > pixel_quantizer*pixel_quantizer)  // add a point every n pixels.
+        {
+            drawnPolygon.push_back(PointD(event.x,event.y));
+            // draw polygon
+            prevx = event.x;
+            prevy = event.y;
+
+            repaint();
+        }
+    }
+
+}
+
+void PCAProjectionAxes::mouseUp(const juce::MouseEvent& event)
+{
+    repaint();
+    //redraw(false);
+    setMouseCursor(MouseCursor::NormalCursor);
+    if	(updateProcessor)
+    {
+        processor->getActiveElectrode()->spikeSort->updatePCAUnits(units);
+        updateProcessor = false;
+
+    }
+
+    if (inPolygonDrawingMode)
+    {
+        inPolygonDrawingMode = false;
+        SpikeSorterEditor* edt = (SpikeSorterEditor*)processor->getEditor();
+        edt->spikeSorterCanvas->addPolygonUnitButton->setToggleState(false, dontSendNotification);
+
+        // convert pixel coordinates to pca space coordinates and update unit
+        cPolygon poly;
+        poly.pts.resize(drawnPolygon.size());
+        int k=0;
+
+        float w = getWidth();
+        float h = getHeight();
+        float range0 = pcaMax[0]-pcaMin[0];
+        float range1 = pcaMax[1]-pcaMin[1];
+
+        for (std::list<PointD>::iterator it = drawnPolygon.begin(); it != drawnPolygon.end(); it++,k++)
+        {
+            poly.pts[k].X = (*it).X / w * range0 + pcaMin[0];
+            poly.pts[k].Y = (*it).Y / h * range1 + pcaMin[1];
+        }
+        drawnUnit.poly = poly;
+        units.push_back(drawnUnit);
+        // add a new PCA unit
+        Electrode* e = processor->getActiveElectrode();
+        e->spikeSort->addPCAunit(drawnUnit);
+
+
+        uint8 r,g,b;
+        e->spikeSort->getUnitColor(drawnUnit.getUnitID(), r,g,b);
+
+        processor->addNewUnit(e->electrodeID, drawnUnit.getUnitID(),r,g,b);
+
+        drawnPolygon.clear();
+    }
+}
+
+
+void PCAProjectionAxes::mouseMove(const juce::MouseEvent& event)
+{
+    isOverUnit = -1;
+    float w = getWidth();
+    float h = getHeight();
+
+    for (int k=0; k<units.size(); k++)
+    {
+        // convert projection coordinates to screen coordinates.
+        float x1 = ((float)event.x/w) * (pcaMax[0]-pcaMin[0]) +  pcaMin[0];
+        float y1 = ((float)event.y/h) * (pcaMax[1]-pcaMin[1]) +  pcaMin[1];
+        if (units[k].isPointInsidePolygon(PointD(x1,y1)))
+        {
+            isOverUnit = units[k].getUnitID();
+            break;
+        }
+
+    }
+
+
+}
+
+
+void PCAProjectionAxes::mouseDown(const juce::MouseEvent& event)
+{
+    prevx = event.x;
+    prevy = event.y;
+    if (event.mods.isRightButtonDown())
+    {
+        clear();
+    }
+    if (inPolygonDrawingMode)
+    {
+        drawnUnit = PCAUnit(processor->getActiveElectrode()->spikeSort->generateUnitID(),processor->getActiveElectrode()->spikeSort->generateLocalID());
+        drawnPolygon.push_back(PointD(event.x,event.y));
+    }
+    else
+    {
+        if (isOverUnit > 0)
+            processor->getActiveElectrode()->spikeSort->setSelectedUnitAndBox(isOverUnit, -1);
+        else
+            processor->getActiveElectrode()->spikeSort->setSelectedUnitAndBox(-1, -1);
+    }
+}
+
+
+bool PCAProjectionAxes::keyPressed(const KeyPress& key)
+{
+    KeyPress e = KeyPress::createFromDescription("escape");
+
+    if (key.isKeyCode(e.getKeyCode()) && inPolygonDrawingMode) // C
+    {
+        inPolygonDrawingMode = false;
+        setMouseCursor(MouseCursor::NormalCursor);
+        return true;
+    }
+    return false;
+}
+
+void PCAProjectionAxes::rangeDown()
+{
+    float range0 = pcaMax[0]-pcaMin[0];
+    float range1 = pcaMax[1]-pcaMin[1];
+    pcaMin[0] = pcaMin[0] - 0.1 * range0;
+    pcaMax[0] = pcaMax[0] + 0.1 * range0;
+    pcaMin[1] = pcaMin[1] - 0.1 * range1;
+    pcaMax[1] = pcaMax[1] + 0.1 * range1;
+    setPCARange(pcaMin[0], pcaMin[1], pcaMax[0], pcaMax[1]);
+}
+
+void PCAProjectionAxes::rangeUp()
+{
+    float range0 = pcaMax[0]-pcaMin[0];
+    float range1 = pcaMax[1]-pcaMin[1];
+    pcaMin[0] = pcaMin[0] + 0.1 * range0;
+    pcaMax[0] = pcaMax[0] - 0.1 * range0;
+    pcaMin[1] = pcaMin[1] + 0.1 * range1;
+    pcaMax[1] = pcaMax[1] - 0.1 * range1;
+
+    setPCARange(pcaMin[0], pcaMin[1], pcaMax[0], pcaMax[1]);
+
+}
+
+void PCAProjectionAxes::buttonClicked(Button* button)
+{
+    if (button == rangeDownButton)
+    {
+        rangeDown();
+    }
+
+    else if (button == rangeUpButton)
+    {
+        rangeUp();
+    }
+
+}
+
+void PCAProjectionAxes::mouseWheelMove(const MouseEvent& event, const MouseWheelDetails& wheel)
+{
+    if (wheel.deltaY > 0)
+        rangeDown();
+    else
+        rangeUp();
+}
\ No newline at end of file
diff --git a/Source/Processors/SpikeSorter/SpikeSorterCanvas.h b/Source/Processors/SpikeSorter/SpikeSorterCanvas.h
new file mode 100644
index 0000000000000000000000000000000000000000..8f5e52fb2d3ffa5c31ad5bd49eea75f028aa2720
--- /dev/null
+++ b/Source/Processors/SpikeSorter/SpikeSorterCanvas.h
@@ -0,0 +1,436 @@
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2013 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef SPIKESORTERCANVAS_H_
+#define SPIKESORTERCANVAS_H_
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+
+#include "SpikeSorter.h"
+#include "../Visualization/SpikeObject.h"
+
+#include "../Visualization/Visualizer.h"
+#include <vector>
+
+#define WAVE1 0
+#define WAVE2 1
+#define WAVE3 2
+#define WAVE4 3
+#define PROJ1x2 4
+#define PROJ1x3 5
+#define PROJ1x4 6
+#define PROJ2x3 7
+#define PROJ2x4 8
+#define PROJ3x4 9
+
+#define TETRODE_PLOT 1004
+#define STEREO_PLOT  1002
+#define SINGLE_PLOT  1001
+
+#define MAX_NUMBER_OF_SPIKE_SOURCES 128
+#define MAX_N_CHAN 4
+
+class SpikeHistogramPlot;
+class SpikeThresholdDisplay;
+class SpikeDisplayNode;
+class SpikePlot;
+class SpikeDisplay;
+class GenericAxes;
+class ProjectionAxes;
+class WaveAxes;
+class SpikePlot;
+class RecordNode;
+
+/**
+
+  Displays spike waveforms and projections for Spike Sorter
+
+  @see SpikeDisplayNode, SpikeDisplayEditor, Visualizer
+
+*/
+
+class SpikeSorterCanvas : public Visualizer, public Button::Listener
+
+{
+public:
+    SpikeSorterCanvas(SpikeSorter* n);
+    ~SpikeSorterCanvas();
+
+    void paint(Graphics& g);
+
+    void refresh();
+
+    void processSpikeEvents();
+
+    void beginAnimation();
+    void endAnimation();
+
+    void refreshState();
+
+    void setParameter(int, float) {}
+    void setParameter(int, int, int, float) {}
+
+    void update();
+
+    void resized();
+
+    bool keyPressed(const KeyPress& key);
+
+    void buttonClicked(Button* button);
+
+    void startRecording() { } // unused
+    void stopRecording() { } // unused
+    
+    SpikeSorter* processor;
+	
+    ScopedPointer<UtilityButton> addPolygonUnitButton,
+		addUnitButton, delUnitButton, addBoxButton, delBoxButton, rePCAButton,nextElectrode,prevElectrode,newIDbuttons,deleteAllUnits;
+
+private:
+	void removeUnitOrBox();
+    ScopedPointer<SpikeThresholdDisplay> spikeDisplay;
+    ScopedPointer<Viewport> viewport;
+
+	bool inDrawingPolygonMode;
+    bool newSpike;
+    SpikeObject spike;
+	Electrode *electrode;
+    int scrollBarThickness;
+
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SpikeSorterCanvas);
+
+};
+
+
+class SpikeThresholdDisplay : public Component
+{
+public:
+    SpikeThresholdDisplay(SpikeSorter*, SpikeSorterCanvas*, Viewport*);
+
+    ~SpikeThresholdDisplay();
+
+    void removePlots();
+    void clear();
+    SpikeHistogramPlot* addSpikePlot(int numChannels, int electrodeNum, String name);
+
+    void paint(Graphics& g);
+
+    void resized();
+	void setPolygonMode(bool on);
+	void mouseDown(const juce::MouseEvent& event);
+
+    void plotSpike(const SpikeObject& spike, int electrodeNum);
+
+    int getTotalHeight()
+    {
+        return totalHeight;
+    }
+
+private:
+    int numColumns;
+    int totalHeight;
+
+	SpikeSorter* processor;
+    SpikeSorterCanvas* canvas;
+    Viewport* viewport;
+
+    OwnedArray<SpikeHistogramPlot> spikePlots;
+
+  
+};
+
+
+
+class UnitWaveformAxes : public Component
+{
+public:
+	UnitWaveformAxes();
+
+};
+
+class GenericDrawAxes : public Component
+{
+public:
+
+    GenericDrawAxes(int t);
+
+    virtual ~GenericDrawAxes();
+
+    virtual bool updateSpikeData(const SpikeObject& s);
+
+    void setXLims(double xmin, double xmax);
+    void getXLims(double* xmin, double* xmax);
+    void setYLims(double ymin, double ymax);
+    void getYLims(double* ymin, double* ymax);
+
+    void setType(int type);
+    int getType();
+
+    virtual void paint(Graphics& g) = 0;
+
+    int roundUp(int, int);
+    void makeLabel(int val, int gain, bool convert, char* s);
+
+protected:
+    double xlims[2];
+    double ylims[2];
+
+    SpikeObject s;
+
+    bool gotFirstSpike;
+
+    int type;
+
+    Font font;
+
+    double ad16ToUv(int x, int gain);
+
+};
+
+class WaveformAxes : public GenericDrawAxes
+{
+public:
+    WaveformAxes(SpikeHistogramPlot *plt, SpikeSorter *p, int electrodeID_, int channel);
+    ~WaveformAxes() {}
+
+	
+    bool updateSpikeData(const SpikeObject& s);
+    bool checkThreshold(const SpikeObject& spike);
+
+	void setSignalFlip(bool state);
+    void paint(Graphics& g);
+	void isOverUnitBox(float x, float y, int &UnitID, int &BoxID, String &where) ;
+
+    void plotSpike(const SpikeObject& s, Graphics& g);
+	void drawBoxes(Graphics &g);
+
+    void clear();
+	int findUnitIndexByID(int ID);
+    void mouseMove(const MouseEvent& event);
+    void mouseExit(const MouseEvent& event);
+    void mouseDown(const MouseEvent& event);
+    void mouseDrag(const MouseEvent& event);
+	void mouseWheelMove(const MouseEvent &event, const MouseWheelDetails &wheel);
+	void mouseUp(const MouseEvent& event);
+
+    void setRange(float);
+    float getRange()
+    {
+        return range;
+    }
+
+    float getDisplayThreshold();
+    void setDetectorThreshold(float);
+
+    //MouseCursor getMouseCursor();
+	void updateUnits(std::vector<BoxUnit> _units);
+
+//	int selectedUnit, selectedBox;
+
+private:
+	int electrodeID;
+	bool signalFlipped;
+	bool bDragging ;
+    Colour waveColour;
+    Colour thresholdColour;
+    Colour gridColour;
+	int channel;
+    bool drawGrid;
+
+    float displayThresholdLevel;
+    float detectorThresholdLevel;
+
+    void drawWaveformGrid(Graphics& g);
+
+    void drawThresholdSlider(Graphics& g);
+
+    int spikesReceivedSinceLastRedraw;
+
+    Font font;
+	float mouseDownX, mouseDownY;
+	float mouseOffsetX,mouseOffsetY;
+    Array<SpikeObject> spikeBuffer;
+
+    int spikeIndex;
+    int bufferSize;
+
+    float range;
+
+    bool isOverThresholdSlider;
+    bool isDraggingThresholdSlider;
+	int isOverUnit,isOverBox;
+	String strOverWhere;
+
+	std::vector<BoxUnit> units;
+	SpikeSorter* processor;
+	SpikeHistogramPlot* spikeHistogramPlot;
+    MouseCursor::StandardCursorType cursorType;
+
+};
+
+
+
+class PCAProjectionAxes : public GenericDrawAxes,  Button::Listener
+{
+public:
+    PCAProjectionAxes(SpikeSorter *p);
+    ~PCAProjectionAxes() {}
+
+	void setPCARange(float p1min, float p2min, float p1max, float p2max);
+    bool updateSpikeData(const SpikeObject& s);
+	void resized();
+    void paint(Graphics& g);
+	void setPolygonDrawingMode(bool on);
+    void clear();
+	void mouseDown(const juce::MouseEvent& event);
+	void mouseUp(const juce::MouseEvent& event);
+	void mouseMove(const juce::MouseEvent& event);
+	void mouseDrag(const juce::MouseEvent& event);
+	bool keyPressed(const KeyPress& key);
+	void mouseWheelMove(const MouseEvent &event, const MouseWheelDetails &wheel);
+	void redraw(bool subsample);
+	
+	void updateUnits(std::vector<PCAUnit> _units);
+
+	void buttonClicked(Button* button);
+	
+	void drawUnit(Graphics &g, PCAUnit unit);
+	void rangeDown();
+	void rangeUp();
+
+private:
+	float prevx,prevy;
+	bool inPolygonDrawingMode;
+	void drawProjectedSpike(SpikeObject s);
+
+	bool rangeSet;
+	SpikeSorter* processor;
+    void updateProjectionImage(uint16_t, uint16_t, uint16_t, const uint8_t *col);
+	void updateRange(const SpikeObject& s);
+	ScopedPointer<UtilityButton> rangeDownButton, rangeUpButton;
+
+	Array<SpikeObject> spikeBuffer;
+	int bufferSize;
+    int spikeIndex;
+	bool updateProcessor;
+    void calcWaveformPeakIdx(const SpikeObject&, int, int, int*, int*);
+
+    Image projectionImage;
+
+    Colour pointColour;
+    Colour gridColour;
+
+    int imageDim;
+
+    int rangeX;
+    int rangeY;
+
+    int spikesReceivedSinceLastRedraw;
+
+	float pcaMin[2],pcaMax[2];
+	std::list<PointD> drawnPolygon;
+	
+	std::vector<PCAUnit> units;
+	int isOverUnit;
+	PCAUnit drawnUnit;
+    
+    bool redrawSpikes;
+};
+
+
+class SpikeHistogramPlot : public Component, Button::Listener
+{
+public:
+    SpikeHistogramPlot(SpikeSorter *, SpikeSorterCanvas*, int electrodeID, int plotType, String name_);
+    virtual ~SpikeHistogramPlot();
+
+    void paint(Graphics& g);
+    void resized();
+	void setFlipSignal(bool state);
+
+    void select();
+    void deselect();
+	
+	void setPolygonDrawingMode(bool on);
+	void setPCARange(float p1min, float p2min, float p1max, float p2max);
+	void modifyRange(int index,bool up);
+	void updateUnitsFromProcessor();
+    void processSpikeObject(const SpikeObject& s);
+
+    SpikeSorterCanvas* canvas;
+	
+    bool isSelected;
+
+    int electrodeNumber;
+
+	void getSelectedUnitAndBox(int &unitID, int &boxID);
+	void setSelectedUnitAndBox(int unitID, int boxID);
+    int nChannels;
+
+    void initAxes(std::vector<float> scales);
+    void getBestDimensions(int*, int*);
+
+    void clear();
+
+    float minWidth;
+    float aspectRatio;
+
+    void buttonClicked(Button* button);
+
+    float getDisplayThresholdForChannel(int);
+	void setDisplayThresholdForChannel(int channelNum, float thres);
+    //void setDetectorThresholdForChannel(int, float);
+
+private:
+	void modifyRange(std::vector<float> values);
+
+    int plotType;
+    int nWaveAx;
+    int nProjAx;
+	int electrodeID;
+    bool limitsChanged;
+
+    double limits[MAX_N_CHAN][2];
+
+	std::vector<BoxUnit> boxUnits;
+	std::vector<PCAUnit> pcaUnits;
+	SpikeSorter* processor;
+    OwnedArray<PCAProjectionAxes> pAxes;
+    OwnedArray<WaveformAxes> wAxes;
+    OwnedArray<UtilityButton> rangeButtons;
+    Array<float> ranges;
+
+    void initLimits();
+    void setLimitsOnAxes();
+    void updateAxesPositions();
+
+	
+    String name;
+	CriticalSection mut;
+    Font font;
+
+    
+
+};
+
+#endif  // SPIKESORTERCANVAS_H_
diff --git a/Source/Processors/SpikeSorter/SpikeSorterEditor.cpp b/Source/Processors/SpikeSorter/SpikeSorterEditor.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1cae5e6ad91a4a52cb28e050e128b65fcf9b25b6
--- /dev/null
+++ b/Source/Processors/SpikeSorter/SpikeSorterEditor.cpp
@@ -0,0 +1,859 @@
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2013 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "SpikeSorterEditor.h"
+#include "../SpikeDisplayNode/SpikeDisplayEditor.h"
+#include "SpikeSorterCanvas.h"
+#include "SpikeSorter.h"
+#include "../Editors/ChannelSelector.h"
+#include "../../UI/EditorViewport.h"
+
+#include <stdio.h>
+
+
+
+SpikeSorterEditor::SpikeSorterEditor(GenericProcessor* parentNode, bool useDefaultParameterEditors=true)
+    : VisualizerEditor(parentNode, 300, useDefaultParameterEditors), spikeSorterCanvas(nullptr), isPlural(true)
+
+{
+    tabText = "Spike Detector";
+
+
+    MemoryInputStream mis(BinaryData::silkscreenserialized, BinaryData::silkscreenserializedSize, false);
+    Typeface::Ptr typeface = new CustomTypeface(mis);
+    font = Font(typeface);
+
+    desiredWidth = 300;
+
+    SpikeSorter* processor = (SpikeSorter*) getProcessor();
+
+    advancerList = new ComboBox("Advancers");
+    advancerList->addListener(this);
+    advancerList->setBounds(10,95,130,20);
+    addAndMakeVisible(advancerList);
+
+    depthOffsetLabel = new Label("Depth Offset","Depth Offset");
+    depthOffsetLabel->setFont(Font("Default", 10, Font::plain));
+    depthOffsetLabel->setEditable(false);
+    depthOffsetLabel->setBounds(125,115,80,20);
+    depthOffsetLabel->setColour(Label::textColourId, Colours::grey);
+    addAndMakeVisible(depthOffsetLabel);
+
+    advancerLabel = new Label("Depth Offset","ADVANCER:");
+    advancerLabel->setFont(Font("Default", 10, Font::plain));
+    advancerLabel->setEditable(false);
+    advancerLabel->setBounds(10,80,80,20);
+    advancerLabel->setColour(Label::textColourId, Colours::grey);
+    addAndMakeVisible(advancerLabel);
+
+    depthOffsetEdit = new Label("Depth Offset","0.0");
+    depthOffsetEdit->setFont(Font("Default", 10, Font::plain));
+    depthOffsetEdit->setEditable(true);
+    depthOffsetEdit->setBounds(145,95,40,20);
+    depthOffsetEdit->addListener(this);
+    depthOffsetEdit->setColour(Label::textColourId, Colours::white);
+    depthOffsetEdit->setColour(Label::backgroundColourId, Colours::grey);
+
+    addAndMakeVisible(depthOffsetEdit);
+
+    electrodeList = new ComboBox("Electrode List");
+    electrodeList->setEditableText(false);
+    electrodeList->setJustificationType(Justification::centredLeft);
+    electrodeList->addListener(this);
+    electrodeList->setBounds(65,30,130,20);
+    addAndMakeVisible(electrodeList);
+
+    numElectrodes = new Label("Number of Electrodes","1");
+    numElectrodes->setEditable(true);
+    numElectrodes->addListener(this);
+    numElectrodes->setBounds(30,30,25,20);
+    addAndMakeVisible(numElectrodes);
+
+    upButton = new TriangleButton(1);
+    upButton->addListener(this);
+    upButton->setBounds(50,30,10,8);
+    addAndMakeVisible(upButton);
+
+    downButton = new TriangleButton(2);
+    downButton->addListener(this);
+    downButton->setBounds(50,40,10,8);
+    addAndMakeVisible(downButton);
+
+    plusButton = new UtilityButton("+", titleFont);
+    plusButton->addListener(this);
+    plusButton->setRadius(3.0f);
+    plusButton->setBounds(15,27,14,14);
+    addAndMakeVisible(plusButton);
+
+    audioMonitorButton = new UtilityButton("MONITOR", Font("Default", 12, Font::plain));
+    audioMonitorButton->addListener(this);
+    audioMonitorButton->setRadius(3.0f);
+    audioMonitorButton->setBounds(80,65,65,15);
+    audioMonitorButton->setClickingTogglesState(true);
+    addAndMakeVisible(audioMonitorButton);
+
+    removeElectrodeButton = new UtilityButton("-",font);
+    removeElectrodeButton->addListener(this);
+    removeElectrodeButton->setBounds(15,45,14,14);
+    addAndMakeVisible(removeElectrodeButton);
+
+
+    configButton = new UtilityButton("CONFIG",Font("Default", 12, Font::plain));
+    configButton->addListener(this);
+    configButton->setBounds(10,65,60,15);
+    addAndMakeVisible(configButton);
+
+    thresholdSlider = new ThresholdSlider(font);
+    thresholdSlider->setBounds(210,25,65,65);
+    addAndMakeVisible(thresholdSlider);
+    thresholdSlider->addListener(this);
+    thresholdSlider->setActive(false);
+    Array<double> v;
+    thresholdSlider->setValues(v);
+
+    thresholdLabel = new Label("Name","Threshold");
+    font.setHeight(10);
+    thresholdLabel->setFont(font);
+    thresholdLabel->setBounds(208, 85, 95, 15);
+    thresholdLabel->setColour(Label::textColourId, Colours::grey);
+    addAndMakeVisible(thresholdLabel);
+
+    // create a custom channel selector
+    deleteAndZero(channelSelector);
+
+    channelSelector = new ChannelSelector(true, font);
+    addChildComponent(channelSelector);
+    channelSelector->setVisible(false);
+
+    channelSelector->activateButtons();
+    channelSelector->setRadioStatus(true);
+    channelSelector->paramButtonsToggledByDefault(false);
+    //	updateAdvancerList();
+
+    dacAssignmentLabel= new Label("DAC output","DAC output");
+    dacAssignmentLabel->setFont(Font("Default", 10, Font::plain));
+    dacAssignmentLabel->setEditable(false);
+    dacAssignmentLabel->setBounds(210,115,80,20);
+    dacAssignmentLabel->setColour(Label::textColourId, Colours::grey);
+    addAndMakeVisible(dacAssignmentLabel);
+
+    dacCombo = new ComboBox("DAC Assignment");
+    dacCombo->addListener(this);
+    dacCombo->setBounds(205,100,70,18);
+    dacCombo->addItem("-",1);
+    for (int k=0; k<8; k++)
+    {
+        dacCombo->addItem("DAC"+String(k+1),k+2);
+    }
+    dacCombo->setSelectedId(1);
+    addAndMakeVisible(dacCombo);
+
+}
+
+Visualizer* SpikeSorterEditor::createNewCanvas()
+{
+
+    SpikeSorter* processor = (SpikeSorter*) getProcessor();
+    spikeSorterCanvas = new SpikeSorterCanvas(processor);
+    //ActionListener* listener = (ActionListener*) SpikeSorterCanvas;
+    //getUIComponent()->registerAnimatedComponent(listener);
+    return spikeSorterCanvas;
+}
+
+
+SpikeSorterEditor::~SpikeSorterEditor()
+{
+
+    for (int i = 0; i < electrodeButtons.size(); i++)
+    {
+        removeChildComponent(electrodeButtons[i]);
+    }
+
+}
+
+void SpikeSorterEditor::sliderEvent(Slider* slider)
+{
+    int electrodeNum = -1;
+
+    for (int i = 0; i < electrodeButtons.size(); i++)
+    {
+        if (electrodeButtons[i]->getToggleState())
+        {
+            electrodeNum = i;
+            break;
+        }
+    }
+
+    if (electrodeNum > -1)
+    {
+        SpikeSorter* processor = (SpikeSorter*) getProcessor();
+        processor->setChannelThreshold(electrodeList->getSelectedItemIndex(),
+                                       electrodeNum,
+                                       slider->getValue());
+
+
+
+        //Array<int> dacChannels = processor->getDACassignments;
+        int dacChannel = dacCombo->getSelectedId()-2;
+        if (dacChannel >= 0)
+        {
+            // update dac threshold.
+            processor->updateDACthreshold(dacChannel, slider->getValue());
+        }
+
+    }
+    repaint();
+    if (canvas!= nullptr)
+        canvas->repaint();
+
+}
+
+
+void SpikeSorterEditor::buttonEvent(Button* button)
+{
+    VisualizerEditor::buttonEvent(button);
+    SpikeSorter* processor = (SpikeSorter*) getProcessor();
+
+    if (electrodeButtons.contains((ElectrodeButton*) button))
+    {
+
+        {
+            for (int k=0; k<electrodeButtons.size(); k++)
+            {
+                if (electrodeButtons[k] != button)
+                    electrodeButtons[k]->setToggleState(false,dontSendNotification);
+            }
+            if (electrodeButtons.size() == 1)
+                electrodeButtons[0]->setToggleState(true,dontSendNotification);
+
+            ElectrodeButton* eb = (ElectrodeButton*) button;
+            int channelNum = eb->getChannelNum()-1;
+
+            std::cout << "Channel number: " << channelNum << std::endl;
+            Array<int> a;
+            a.add(channelNum);
+            channelSelector->setActiveChannels(a);
+
+            SpikeSorter* processor = (SpikeSorter*) getProcessor();
+
+            thresholdSlider->setActive(true);
+            thresholdSlider->setValue(processor->getChannelThreshold(electrodeList->getSelectedItemIndex(),
+                                                                     electrodeButtons.indexOf((ElectrodeButton*) button)));
+
+
+            if (processor->getAutoDacAssignmentStatus())
+            {
+                processor->assignDACtoChannel(0, channelNum);
+                processor->assignDACtoChannel(1, channelNum);
+            }
+            Array<int> dacAssignmentToChannels = processor->getDACassignments();
+            // search for channel[0]. If found, set the combo box accordingly...
+            dacCombo->setSelectedId(1, sendNotification);
+            for (int i=0; i<dacAssignmentToChannels.size(); i++)
+            {
+                if (dacAssignmentToChannels[i] == channelNum)
+                {
+                    dacCombo->setSelectedId(i+2, sendNotification);
+                    break;
+                }
+            }
+
+        }
+    }
+
+
+    int num = numElectrodes->getText().getIntValue();
+
+    if (button == upButton)
+    {
+        numElectrodes->setText(String(++num), sendNotification);
+
+        return;
+
+    }
+    else if (button == downButton)
+    {
+
+        if (num > 1)
+            numElectrodes->setText(String(--num), sendNotification);
+
+        return;
+
+    }
+    else if (button == configButton)
+    {
+        PopupMenu configMenu;
+        PopupMenu waveSizeMenu;
+        PopupMenu waveSizePreMenu;
+        PopupMenu waveSizePostMenu;
+
+        waveSizePreMenu.addItem(1,"8",true,processor->getNumPreSamples() == 8);
+        waveSizePreMenu.addItem(2,"16",true,processor->getNumPreSamples() == 16);
+        waveSizePostMenu.addItem(3,"32",true,processor->getNumPostSamples() == 32);
+        waveSizePostMenu.addItem(4,"64",true,processor->getNumPostSamples() == 64);
+
+        waveSizeMenu.addSubMenu("Pre samples",waveSizePreMenu);
+        waveSizeMenu.addSubMenu("Post samples",waveSizePostMenu);
+        waveSizeMenu.addItem(7,"Flip Signal",true,processor->getFlipSignalState());
+        configMenu.addSubMenu("Waveform",waveSizeMenu,true);
+        configMenu.addItem(5,"Current Channel => Audio",true,processor->getAutoDacAssignmentStatus());
+        configMenu.addItem(6,"Threshold => All channels",true,processor->getThresholdSyncStatus());
+
+        const int result = configMenu.show();
+        switch (result)
+        {
+            case 1:
+                processor->setNumPreSamples(8);
+                break;
+            case 2:
+                processor->setNumPreSamples(16);
+                break;
+            case 3:
+                processor->setNumPostSamples(32);
+                break;
+            case 4:
+                processor->setNumPostSamples(64);
+                break;
+            case 5:
+                processor->seteAutoDacAssignment(!processor->getAutoDacAssignmentStatus());
+                refreshElectrodeList();
+                break;
+            case 6:
+                processor->setThresholdSyncStatus(!processor->getThresholdSyncStatus());
+                break;
+            case 7:
+                processor->setFlipSignalState(!processor->getFlipSignalState());
+                break;
+        }
+
+    }
+    else if (button == plusButton)
+    {
+        // std::cout << "Plus button pressed!" << std::endl;
+        if (acquisitionIsActive)
+        {
+            sendActionMessage("Stop acquisition before adding electrodes.");
+            return;
+        }
+
+        //updateAdvancerList();
+        PopupMenu probeMenu;
+        probeMenu.addItem(1,"Single Electrode");
+        probeMenu.addItem(2,"Stereotrode");
+        probeMenu.addItem(3,"Tetrode");
+        PopupMenu depthprobeMenu;
+        depthprobeMenu.addItem(4,"8 ch, 125um");
+        depthprobeMenu.addItem(5,"16 ch, 125um");
+        depthprobeMenu.addItem(6,"24 ch, 125um");
+        depthprobeMenu.addItem(7,"32 ch, 50um");
+        depthprobeMenu.addItem(8,"32 ch, 25um");
+        probeMenu.addSubMenu("Depth probe", depthprobeMenu,true);
+
+        const int result = probeMenu.show();
+        int nChansPerElectrode;
+        int nElectrodes;
+        double interelectrodeDistance=0;
+        double firstElectrodeOffset ;
+        int numProbes = numElectrodes->getText().getIntValue();
+        String ProbeType;
+
+        switch (result)
+        {
+            case 0:
+                return;
+            case 1:
+                ProbeType = "Single Electrode";
+                nChansPerElectrode = 1;
+                nElectrodes = 1;
+                firstElectrodeOffset=0;
+                break;
+            case 2:
+                ProbeType = "Stereotrode";
+                nChansPerElectrode = 2;
+                nElectrodes = 1;
+                firstElectrodeOffset = 0;
+                break;
+            case 3:
+                ProbeType = "Tetrode";
+                nChansPerElectrode = 4;
+                nElectrodes = 1;
+                firstElectrodeOffset = 0;
+                break;
+            case 4:
+                ProbeType = "Depth Probe";
+                nChansPerElectrode = 1;
+                nElectrodes = 8;
+                interelectrodeDistance = 0.125;
+                firstElectrodeOffset= -0.5;
+                break;
+            case 5:
+                ProbeType = "Depth Probe";
+                nChansPerElectrode = 1;
+                nElectrodes = 16;
+                interelectrodeDistance = 0.125;
+                firstElectrodeOffset= -0.5;
+                break;
+            case 6:
+                ProbeType = "Depth Probe";
+                nChansPerElectrode = 1;
+                nElectrodes = 24;
+                interelectrodeDistance = 0.125;
+                firstElectrodeOffset= -0.5;
+                break;
+            case 7:
+                ProbeType = "Depth Probe";
+                nChansPerElectrode = 1;
+                nElectrodes = 32;
+                interelectrodeDistance = 0.050;
+                firstElectrodeOffset= -0.5;
+                break;
+            case 8:
+                ProbeType = "Depth Probe";
+                nChansPerElectrode = 1;
+                nElectrodes = 32;
+                interelectrodeDistance = 0.025;
+                firstElectrodeOffset= -0.075;
+                break;
+        }
+
+        processor->addProbes(ProbeType,numProbes, nElectrodes,nChansPerElectrode, firstElectrodeOffset,interelectrodeDistance);
+        refreshElectrodeList();
+
+        getEditorViewport()->makeEditorVisible(this, true, true);
+
+        return;
+
+    }
+    else if (button == removeElectrodeButton)   // DELETE
+    {
+        if (acquisitionIsActive)
+        {
+            sendActionMessage("Stop acquisition before deleting electrodes.");
+            return;
+        }
+        removeElectrode(electrodeList->getSelectedItemIndex());
+
+        //getEditorViewport()->makeEditorVisible(this, true, true);
+
+        return;
+    }
+    else if (button == audioMonitorButton)
+    {
+
+        channelSelector->clearAudio();
+
+        SpikeSorter* processor = (SpikeSorter*) getProcessor();
+
+        Array<Electrode*> electrodes = processor->getElectrodes();
+
+        for (int i = 0; i < electrodes.size(); i++)
+        {
+            Electrode* e = electrodes[i];
+            e->isMonitored = false;
+        }
+
+        Electrode* e = processor->getActiveElectrode();
+        e->isMonitored = audioMonitorButton->getToggleState();
+
+        for (int i = 0; i < e->numChannels; i++)
+        {
+            int channelNum = e->channels[i];
+            channelSelector->setAudioStatus(channelNum, audioMonitorButton->getToggleState());
+
+        }
+
+    }
+
+
+
+}
+
+void SpikeSorterEditor::setThresholdValue(int channel, double threshold)
+{
+    thresholdSlider->setActive(true);
+    thresholdSlider->setValue(threshold);
+    repaint();
+}
+
+void SpikeSorterEditor::channelChanged(int chan)
+{
+    //std::cout << "New channel: " << chan << std::endl;
+    if (chan <=0)
+        return;
+
+    for (int i = 0; i < electrodeButtons.size(); i++)
+    {
+        if (electrodeButtons[i]->getToggleState())
+        {
+            electrodeButtons[i]->setChannelNum(chan);
+            electrodeButtons[i]->repaint();
+            Array<int> a;
+            a.add(chan-1);
+            channelSelector->setActiveChannels(a);
+            SpikeSorter* processor = (SpikeSorter*) getProcessor();
+            processor->setChannel(electrodeList->getSelectedItemIndex(),
+                                  i,
+                                  chan-1);
+
+            // if DAC is selected, update the mapping.
+            int dacchannel = dacCombo->getSelectedId()-2;
+            if (dacchannel >=0)
+            {
+                processor->assignDACtoChannel(dacchannel, chan-1);
+            }
+            if (processor->getAutoDacAssignmentStatus())
+            {
+                processor->assignDACtoChannel(0,chan-1);
+                processor->assignDACtoChannel(1,chan-1);
+                break;
+            }
+
+        }
+    }
+
+}
+
+int SpikeSorterEditor::getSelectedElectrode()
+{
+    return electrodeList->getSelectedId();
+}
+
+void SpikeSorterEditor::setSelectedElectrode(int i)
+{
+    electrodeList->setSelectedId(i);
+}
+
+void SpikeSorterEditor::refreshElectrodeList(int selected)
+{
+    electrodeList->clear();
+
+    SpikeSorter* processor = (SpikeSorter*) getProcessor();
+
+    StringArray electrodeNames = processor->getElectrodeNames();
+
+    for (int i = 0; i < electrodeNames.size(); i++)
+    {
+        electrodeList->addItem(electrodeNames[i], electrodeList->getNumItems()+1);
+    }
+
+    if (electrodeList->getNumItems() > 0)
+    {
+        if (selected == 0)
+            selected = electrodeList->getNumItems();
+
+        electrodeList->setSelectedId(selected);
+        //        electrodeList->setText(electrodeList->getItemText(electrodeList->getNumItems()-1));
+        lastId = electrodeList->getNumItems();
+        electrodeList->setEditableText(true);
+
+        drawElectrodeButtons(selected-1);
+        Electrode* e = processor->getElectrode(selected - 1);
+
+        int advancerIndex = 0;
+        for (int k=0; k<advancerIDs.size(); k++)
+        {
+            if (advancerIDs[k] == e->advancerID)
+            {
+                advancerIndex = 1+k;
+                break;
+            }
+        }
+
+        advancerList->setSelectedId(advancerIndex);
+        depthOffsetEdit->setText(String(e->depthOffsetMM,4),dontSendNotification);
+
+        if (processor->getAutoDacAssignmentStatus())
+        {
+            processor->assignDACtoChannel(0, e->channels[0]);
+            processor->assignDACtoChannel(1, e->channels[0]);
+        }
+        Array<int> dacAssignmentToChannels = processor->getDACassignments();
+        // search for channel[0]. If found, set the combo box accordingly...
+        dacCombo->setSelectedId(1, sendNotification);
+        for (int i=0; i<dacAssignmentToChannels.size(); i++)
+        {
+            if (dacAssignmentToChannels[i] == e->channels[0])
+            {
+                dacCombo->setSelectedId(i+2, sendNotification);
+                processor->updateDACthreshold(i+2, e->thresholds[0]);
+                break;
+            }
+        }
+
+
+
+
+    }
+    if (spikeSorterCanvas != nullptr)
+        spikeSorterCanvas->update();
+}
+
+
+void SpikeSorterEditor::removeElectrode(int index)
+{
+    std::cout << "Deleting electrode number " << index << std::endl;
+    SpikeSorter* processor = (SpikeSorter*) getProcessor();
+    processor->removeElectrode(index);
+    refreshElectrodeList();
+
+    int newIndex = jmin(index, electrodeList->getNumItems()-1);
+    newIndex = jmax(newIndex, 0);
+
+    electrodeList->setSelectedId(newIndex, sendNotification);
+    electrodeList->setText(electrodeList->getItemText(newIndex));
+
+    if (electrodeList->getNumItems() == 0)
+    {
+        electrodeButtons.clear();
+        electrodeList->setEditableText(false);
+    }
+}
+
+void SpikeSorterEditor::labelTextChanged(Label* label)
+{
+    if (label == depthOffsetEdit)
+    {
+        // update electrode depth offset.
+        Value v = depthOffsetEdit->getTextValue();
+        double offset = v.getValue();
+
+        int electrodeIndex = electrodeList->getSelectedId()-1;
+        SpikeSorter* processor = (SpikeSorter*) getProcessor();
+        //if (electrodeIndex >= 0)
+        //	processor->setElectrodeAdvancerOffset(electrodeIndex, offset);
+
+        if (spikeSorterCanvas != nullptr)
+            spikeSorterCanvas->update();
+
+    }
+}
+
+void SpikeSorterEditor::setElectrodeComboBox(int direction)
+{
+    int N = electrodeList->getNumItems();
+    int C = electrodeList->getSelectedId();
+    C+=direction;
+    if (C <= 0)
+        C = N;
+    if (C > N)
+        C = 1;
+    electrodeList->setSelectedId(C, dontSendNotification);
+}
+
+void SpikeSorterEditor::comboBoxChanged(ComboBox* comboBox)
+{
+    SpikeSorter* processor = (SpikeSorter*) getProcessor();
+
+    if (comboBox == dacCombo)
+    {
+        int selection = dacCombo->getSelectedId();
+        // modify the dac channel assignment...
+        if (selection > 1)
+        {
+            int selectedSubChannel = -1;
+            for (int i = 0; i < electrodeButtons.size(); i++)
+            {
+                if (electrodeButtons[i]->getToggleState())
+                {
+                    selectedSubChannel = i;
+                    break;
+                }
+            }
+            Electrode* e = processor->getActiveElectrode();
+            if (e != nullptr)
+            {
+                int dacchannel = selection-2;
+                processor->assignDACtoChannel(dacchannel, e->channels[selectedSubChannel]);
+            }
+        }
+
+    }
+    else if (comboBox == electrodeList)
+    {
+        int ID = comboBox->getSelectedId();
+
+        if (ID == 0)
+        {
+            // modify electrode name
+            processor->setElectrodeName(lastId, comboBox->getText());
+            refreshElectrodeList();
+
+        }
+        else
+        {
+            // switch to a new electrode.
+            SpikeSorter* processor = (SpikeSorter*) getProcessor();
+            lastId = ID;
+            Electrode* e= processor->setCurrentElectrodeIndex(ID-1);
+            drawElectrodeButtons(ID-1);
+            int advancerIndex = 0;
+
+            audioMonitorButton->setToggleState(e->isMonitored, dontSendNotification);
+
+            for (int k=0; k<advancerIDs.size(); k++)
+            {
+                if (advancerIDs[k] == e->advancerID)
+                {
+                    advancerIndex = 1+k;
+                    break;
+                }
+            }
+            advancerList->setSelectedId(advancerIndex, dontSendNotification);
+            depthOffsetEdit->setText(String(e->depthOffsetMM,4),dontSendNotification);
+
+            if (processor->getAutoDacAssignmentStatus())
+            {
+                processor->assignDACtoChannel(0, e->channels[0]);
+                processor->assignDACtoChannel(1, e->channels[0]);
+            }
+            Array<int> dacAssignmentToChannels = processor->getDACassignments();
+            // search for channel[0]. If found, set the combo box accordingly...
+            dacCombo->setSelectedId(1, sendNotification);
+            for (int i=0; i<dacAssignmentToChannels.size(); i++)
+            {
+                if (dacAssignmentToChannels[i] == e->channels[0])
+                {
+                    dacCombo->setSelectedId(i+2, sendNotification);
+                    break;
+                }
+            }
+
+        }
+
+
+
+    }
+    else if (comboBox == advancerList)
+    {
+        // attach advancer to electrode.
+        // int electrodeIndex = electrodeList->getSelectedId()-1;
+        // SpikeSorter* processor = (SpikeSorter*) getProcessor();
+        // int selectedAdvancer = advancerList->getSelectedId() ;
+        // if (electrodeIndex >= 0 && selectedAdvancer > 0)
+        // 	processor->setElectrodeAdvancer(electrodeIndex,advancerIDs[advancerList->getSelectedId()-1]);
+        // else
+        // 	advancerList->setSelectedId(0,dontSendNotification);
+    }
+
+}
+
+void SpikeSorterEditor::checkSettings()
+{
+    electrodeList->setSelectedItemIndex(0);
+}
+
+void SpikeSorterEditor::drawElectrodeButtons(int ID)
+{
+
+    SpikeSorter* processor = (SpikeSorter*) getProcessor();
+
+    electrodeButtons.clear();
+
+    int width = 20;
+    int height = 15;
+
+    int numChannels = processor->getNumChannels(ID);
+    int row = 0;
+    int column = 0;
+
+    Array<int> activeChannels;
+    Array<double> thresholds;
+
+    for (int i = 0; i < numChannels; i++)
+    {
+        ElectrodeButton* button = new ElectrodeButton(processor->getChannel(ID,i)+1);
+        electrodeButtons.add(button);
+
+        if (i == 0)
+        {
+            activeChannels.add(processor->getChannel(ID,i));
+            thresholds.add(processor->getChannelThreshold(ID,i));
+        }
+
+        button->setToggleState(i == 0, dontSendNotification);
+        button->setBounds(155+(column++)*width, 60+row*height, width, 15);
+        addAndMakeVisible(button);
+        button->addListener(this);
+
+        if (column % 2 == 0)
+        {
+            column = 0;
+            row++;
+        }
+
+    }
+
+    channelSelector->setActiveChannels(activeChannels);
+
+    thresholdSlider->setValues(thresholds);
+    thresholdSlider->setActive(true);
+    thresholdSlider->setEnabled(true);
+    thresholdSlider->setValue(processor->getChannelThreshold(ID,0),dontSendNotification);
+    repaint();
+    if (spikeSorterCanvas != nullptr)
+        spikeSorterCanvas->update();
+}
+
+
+// void SpikeSorterEditor::updateAdvancerList()
+// {
+
+// 	ProcessorGraph *g = getProcessor()->getProcessorGraph();
+// 	Array<GenericProcessor*> p = g->getListOfProcessors();
+// 	for (int k=0;k<p.size();k++)
+// 	{
+// 		if (p[k]->getName() == "Advancers")
+// 		{
+// 			AdvancerNode *node = (AdvancerNode *)p[k];
+// 			if (node != nullptr)
+// 			{
+// 				advancerNames = node->getAdvancerNames();
+// 				advancerIDs =  node->getAdvancerIDs();
+
+// 				advancerList->clear(dontSendNotification);
+// 				for (int i=0;i<advancerNames.size();i++)
+// 				{
+// 					advancerList->addItem(advancerNames[i],1+i);
+// 				}
+// 			}
+// 		}
+// 	}
+
+
+//         int selectedElectrode = electrodeList->getSelectedId();
+// 		if (selectedElectrode > 0) {
+// 			SpikeSorter* processor = (SpikeSorter*) getProcessor();
+// 			Electrode *e = processor->getElectrode( selectedElectrode-1);
+// 			int advancerIndex = 0;
+// 			for (int k=0;k<advancerIDs.size();k++)
+// 			{
+// 				if (advancerIDs[k] == e->advancerID)
+// 				{
+// 						advancerIndex = 1+k;
+// 					break;
+// 				}
+// 			}
+// 			advancerList->setSelectedId(advancerIndex);
+// 			}
+// 	repaint();
+// }
diff --git a/Source/Processors/SpikeSorter/SpikeSorterEditor.h b/Source/Processors/SpikeSorter/SpikeSorterEditor.h
new file mode 100644
index 0000000000000000000000000000000000000000..2e237ef4440e6fa141db6761d0e44bbfb7988814
--- /dev/null
+++ b/Source/Processors/SpikeSorter/SpikeSorterEditor.h
@@ -0,0 +1,114 @@
+/*
+    ------------------------------------------------------------------
+
+    This file is part of the Open Ephys GUI
+    Copyright (C) 2013 Open Ephys
+
+    ------------------------------------------------------------------
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef __SPIKESORTEREDITOR_H_F0BD2DD9__
+#define __SPIKESORTEREDITOR_H_F0BD2DD9__
+
+
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../Editors/GenericEditor.h"
+#include "../../UI/UIComponent.h"
+#include "../../UI/DataViewport.h"
+#include "../Visualization/DataWindow.h"
+#include "../Editors/VisualizerEditor.h"
+#include "../Editors/ElectrodeButtons.h"
+#include "../SpikeDetector/SpikeDetectorEditor.h"
+
+class SpikeSorterCanvas;
+
+/**
+
+  User interface for the SpikeSorter processor.
+
+  Allows the user to add single electrodes, stereotrodes, or tetrodes.
+
+  Parameters of individual channels, such as channel mapping, threshold,
+  and enabled state, can be edited.
+
+  @see SpikeSorter
+
+*/
+
+class SpikeSorterEditor : public VisualizerEditor,
+    public Label::Listener,
+    public ComboBox::Listener
+
+{
+public:
+    SpikeSorterEditor(GenericProcessor* parentNode, bool useDefaultParameterEditors);
+    virtual ~SpikeSorterEditor();
+    void buttonEvent(Button* button);
+    void labelTextChanged(Label* label);
+    void comboBoxChanged(ComboBox* comboBox);
+    void sliderEvent(Slider* slider);
+
+    void channelChanged(int chan);
+	
+	Visualizer* createNewCanvas();
+    void checkSettings();
+	void setThresholdValue(int chan, double threshold);
+    OwnedArray<ElectrodeButton> electrodeButtons;
+	SpikeSorterCanvas* spikeSorterCanvas;
+	//void updateAdvancerList();
+	void refreshElectrodeList(int selected = 0);
+	void setSelectedElectrode(int i);
+	int getSelectedElectrode();
+	void setElectrodeComboBox(int direction);
+
+private:
+    void drawElectrodeButtons(int);
+
+    
+
+  //  ComboBox* electrodeTypes;
+    ScopedPointer<ComboBox> electrodeList,dacCombo;
+	ScopedPointer<ComboBox> advancerList;
+	ScopedPointer<Label> advancerLabel, depthOffsetLabel, depthOffsetEdit;
+    ScopedPointer<Label> numElectrodes;
+    ScopedPointer<Label> thresholdLabel,dacAssignmentLabel;
+    ScopedPointer<TriangleButton> upButton;
+    ScopedPointer<TriangleButton> downButton;
+    ScopedPointer<UtilityButton> plusButton;
+	ScopedPointer<UtilityButton> configButton;
+	ScopedPointer<UtilityButton> removeElectrodeButton;
+    ScopedPointer<UtilityButton> audioMonitorButton;
+    ScopedPointer<ThresholdSlider> thresholdSlider;
+
+   Array<String> advancerNames ;
+   Array<int> advancerIDs;
+    void removeElectrode(int index);
+    void editElectrode(int index, int chan, int newChan);
+
+    int lastId;
+    bool isPlural;
+
+    Font font;
+
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SpikeSorterEditor);
+
+};
+
+
+
+
+#endif  // __SPIKESORTEREDITOR_H_F0BD2DD9__
diff --git a/Source/Processors/Utilities/Splitter.cpp b/Source/Processors/Splitter/Splitter.cpp
similarity index 92%
rename from Source/Processors/Utilities/Splitter.cpp
rename to Source/Processors/Splitter/Splitter.cpp
index 94da0a3565f82ff38e092a32e7cf5aea586c788e..cb1fcdabf0cf805a22cff00afcb71682bce8a2c0 100755
--- a/Source/Processors/Utilities/Splitter.cpp
+++ b/Source/Processors/Splitter/Splitter.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,7 +22,7 @@
 */
 
 #include "Splitter.h"
-#include "../Editors/SplitterEditor.h"
+#include "SplitterEditor.h"
 
 #include "../../UI/EditorViewport.h"
 
diff --git a/Source/Processors/Utilities/Splitter.h b/Source/Processors/Splitter/Splitter.h
similarity index 92%
rename from Source/Processors/Utilities/Splitter.h
rename to Source/Processors/Splitter/Splitter.h
index dcb9734e5aa5792f0ff3c2976435d9cd28203e66..12a6f80bbd87a62a9678b8d2f80c97cd9e8e62b2 100755
--- a/Source/Processors/Utilities/Splitter.h
+++ b/Source/Processors/Splitter/Splitter.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,7 +25,7 @@
 #define __SPLITTER_H_A75239F7__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "../GenericProcessor.h"
+#include "../GenericProcessor/GenericProcessor.h"
 
 #include <stdio.h>
 
diff --git a/Source/Processors/Editors/SplitterEditor.cpp b/Source/Processors/Splitter/SplitterEditor.cpp
similarity index 95%
rename from Source/Processors/Editors/SplitterEditor.cpp
rename to Source/Processors/Splitter/SplitterEditor.cpp
index f2547482e7c1625c7c337728b81e06d112a676a1..3dfc309232b2cde688cc622309b5360d8e544772 100755
--- a/Source/Processors/Editors/SplitterEditor.cpp
+++ b/Source/Processors/Splitter/SplitterEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -22,7 +22,7 @@
 */
 
 #include "SplitterEditor.h"
-#include "../Utilities/Splitter.h"
+#include "Splitter.h"
 #include "../../UI/EditorViewport.h"
 
 // PipelineSelectorButton::PipelineSelectorButton()
diff --git a/Source/Processors/Editors/SplitterEditor.h b/Source/Processors/Splitter/SplitterEditor.h
similarity index 92%
rename from Source/Processors/Editors/SplitterEditor.h
rename to Source/Processors/Splitter/SplitterEditor.h
index dcb8e789d31a5009ac2c7251c34c6c5828b838d9..8e57195c27139b809dbecea9cd861f97549c8eb7 100755
--- a/Source/Processors/Editors/SplitterEditor.h
+++ b/Source/Processors/Splitter/SplitterEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,7 +26,7 @@
 
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
+#include "../Editors/GenericEditor.h"
 
 /**
 
diff --git a/Source/Processors/Visualization/DataWindow.cpp b/Source/Processors/Visualization/DataWindow.cpp
index e147e090f90198c597df43ab55fb42c701a66c38..62746822919dc2cb4d4895621c1ed21912e3c8f7 100755
--- a/Source/Processors/Visualization/DataWindow.cpp
+++ b/Source/Processors/Visualization/DataWindow.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -34,7 +34,6 @@ DataWindow::DataWindow(Button* cButton, String name)
     centreWithSize(800,500);
     setUsingNativeTitleBar(true);
     setResizable(true,false);
-    //setTitleBarHeight(40);
 }
 
 DataWindow::~DataWindow()
diff --git a/Source/Processors/Visualization/DataWindow.h b/Source/Processors/Visualization/DataWindow.h
index 7545bbee98ddb8b26a0a736e9cf74dd0a56ea09f..e068e54118f0d38130bd8ec3d7a990bde1e1896b 100755
--- a/Source/Processors/Visualization/DataWindow.h
+++ b/Source/Processors/Visualization/DataWindow.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -28,9 +28,9 @@
 
 /**
 
-  Allows OpenGL visualizers to be placed in their own window.
+  Allows visualizers to be placed in their own window.
 
-  @see DataViewport, OpenGLCanvas
+  @see DataViewport
 
 */
 
diff --git a/Source/Processors/Visualization/OpenGLCanvas.cpp b/Source/Processors/Visualization/OpenGLCanvas.cpp
deleted file mode 100755
index 7b3b88b3f012fa29a830bd99ba638f03ee66e71a..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/OpenGLCanvas.cpp
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
-    ------------------------------------------------------------------
-
-    This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
-
-    ------------------------------------------------------------------
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include "OpenGLCanvas.h"
-#include <stdio.h>
-#include <math.h>
-
-OpenGLCanvas::OpenGLCanvas() : //OpenGLComponent(OpenGLComponent::OpenGLType::openGLDefault, true),
-    scrollPix(0), animationIsActive(false), refreshMs(5000),
-    scrollBarWidth(15), scrollDiff(0), originalScrollPix(0),
-    scrollTime(0), showScrollTrack(true), PI(3.1415926)
-{
-
-}
-
-OpenGLCanvas::~OpenGLCanvas()
-{
-
-}
-
-void OpenGLCanvas::startCallbacks()
-{
-    startTimer(refreshMs);
-    animationIsActive = true;
-}
-
-void OpenGLCanvas::stopCallbacks()
-{
-    stopTimer();
-    animationIsActive = false;
-}
-
-void OpenGLCanvas::paint(Graphics& g)
-{
-
-    paintCanvas(g);
-
-    drawScrollBars(g);
-
-}
-
-void OpenGLCanvas::drawScrollBars(Graphics& g)
-{
-
-    //std::cout << "Drawing scroll bars" << std::endl;
-
-    float scrollBarY = float(getHeight())/float(getTotalHeight());
-    float timeSinceScroll = timer.getMillisecondCounter()-scrollTime;
-
-    if (scrollBarY < 1.0f && timeSinceScroll < 1300)
-    {
-        float alpha;
-
-        if (timeSinceScroll < 1000)
-            alpha = 1.0f;
-        else
-            alpha = 1.0f*(1-float(timeSinceScroll-1000)/300.0f);
-
-        float Yoffset = float(scrollPix)/float(getTotalHeight());
-
-        if (showScrollTrack)
-            drawScrollBar(g, 0.995f, 2.0f, alpha*0.2f);
-
-        scrollBarBottom = scrollBarY + Yoffset - 2.0f;
-        scrollBarTop = Yoffset + 2.0f;
-
-        drawScrollBar(g, scrollBarBottom, scrollBarTop, alpha*0.5f);
-
-    }
-    else
-    {
-        if (!animationIsActive)
-        {
-            stopTimer();
-        }
-        showScrollTrack = false;
-    }
-
-}
-
-void OpenGLCanvas::drawScrollBar(Graphics& g, float y1, float y2, float alpha)
-{
-    //
-    //	glViewport(0, getFooterHeight(),
-    //		       getWidth(),
-    //		       getHeight()-getHeaderHeight()-getFooterHeight());
-    //
-    //	float x1 = getWidth()-8.0f;
-    //
-    //	g.setColour(Colours::black.withAlpha(alpha));
-    //
-    //	g.fillRect(x1, y1, 1.0f, y2-y1);
-
-}
-
-void OpenGLCanvas::showScrollBars()
-{
-    //	scrollTime = timer.getMillisecondCounter();
-    //	startTimer(refreshMs);
-}
-
-
-void OpenGLCanvas::mouseMove(const MouseEvent& e)
-{
-    //	if (getTotalHeight() > getHeight()) {
-    //
-    //		Point<int> pos = e.getPosition();
-    //		int xcoord = pos.getX();
-    //		if (xcoord > getWidth() - scrollBarWidth)
-    //		{
-    //			showScrollTrack = true; showScrollBars();
-    //		}
-    //	}
-    //
-    //	mouseMoveInCanvas(e);
-}
-
-void OpenGLCanvas::mouseDown(const MouseEvent& e)
-{
-
-    if (getTotalHeight() > getHeight())
-    {
-
-        Point<int> pos = e.getPosition();
-        int xcoord = pos.getX();
-
-        if (xcoord > getWidth()-scrollBarWidth)
-        {
-
-            int ycoord = pos.getY();
-
-            float targetPoint = float(ycoord)/float(getHeight());
-
-            if (targetPoint < scrollBarTop && targetPoint < scrollBarTop)
-            {
-
-                scrollPix = int(float(ycoord)/float(getHeight())*float(getTotalHeight()));
-
-            }
-            else if (targetPoint > scrollBarBottom && targetPoint > scrollBarBottom)
-            {
-
-                scrollPix = int(float(ycoord)/float(getHeight())*float(getTotalHeight())) -
-                            (scrollBarBottom-scrollBarTop)*float(getTotalHeight());
-
-            }
-
-            showScrollTrack = true;
-            showScrollBars();
-        }
-    }
-
-    mouseDownInCanvas(e);
-}
-
-void OpenGLCanvas::mouseDrag(const MouseEvent& e)
-{
-
-    if (getTotalHeight() > getHeight())
-    {
-        if (e.getMouseDownX() > getWidth()-scrollBarWidth)
-        {
-
-            if (float(e.getMouseDownY()/float(getHeight())) > scrollBarTop &&
-                float(e.getMouseDownY()/float(getHeight())) < scrollBarBottom)
-            {
-
-                if (scrollDiff == 0)
-                {
-                    originalScrollPix = scrollPix;
-                    scrollDiff = 1;
-                }
-
-            }
-
-            if (scrollDiff == 1)
-            {
-                scrollPix = originalScrollPix +
-                            float(e.getDistanceFromDragStartY())/float(getHeight())
-                            * float(getTotalHeight());
-
-                if (scrollPix < 0)
-                    scrollPix = 0;
-
-                if (scrollPix + getHeight() > getTotalHeight())
-                    scrollPix = getTotalHeight() - getHeight();
-
-                scrollTime = timer.getMillisecondCounter();
-                showScrollTrack = true;
-                repaint();
-            }
-        }
-    }
-
-    mouseDragInCanvas(e);
-}
-
-void OpenGLCanvas::mouseUp(const MouseEvent& e)
-{
-    scrollDiff = 0;
-
-    mouseUpInCanvas(e);
-}
-
-int OpenGLCanvas::mouseWheelMove(const MouseEvent& e,
-                                 float wheelIncrementX, float wheelIncrementY)
-
-{
-    if (getTotalHeight() > getHeight())
-    {
-
-        if (wheelIncrementY > 0)
-        {
-            if (scrollPix + getHeight() < getTotalHeight())
-            {
-                scrollPix += int(100.0f*wheelIncrementY);
-                if (scrollPix + getHeight() > getTotalHeight())
-                    scrollPix = getTotalHeight() - getHeight();
-            }
-        }
-        else if (wheelIncrementY < 0)
-        {
-            if (scrollPix > 0)
-            {
-                scrollPix += int(100.0f*wheelIncrementY);
-                if (scrollPix < 0)
-                    scrollPix = 0;
-            }
-        }
-
-        repaint();
-
-        showScrollBars();
-
-    }
-
-    mouseWheelMoveInCanvas(e, wheelIncrementX, wheelIncrementY);
-
-    return 0; //mouseWheelMove should be void according to juce's documentation.
-}
-
-void OpenGLCanvas::timerCallback()
-{
-    repaint();
-}
-
-
-void OpenGLCanvas::resized()
-{
-
-    if (scrollPix + getHeight() > getTotalHeight() && getTotalHeight() > getHeight())
-        scrollPix = getTotalHeight() - getHeight();
-    else
-        scrollPix = 0;
-
-    showScrollBars();
-
-    canvasWasResized();
-}
diff --git a/Source/Processors/Visualization/OpenGLCanvas.h b/Source/Processors/Visualization/OpenGLCanvas.h
deleted file mode 100755
index 56e47ca39f765aec86cbf13cd464b61d44ed8724..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/OpenGLCanvas.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-    ------------------------------------------------------------------
-
-    This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
-
-    ------------------------------------------------------------------
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#ifndef __OPENGLCANVAS_H_98F0C13D__
-#define __OPENGLCANVAS_H_98F0C13D__
-
-#include "../../../JuceLibraryCode/JuceHeader.h"
-
-//#include "../../OpenGL.h"
-
-/**
-
-	Can be subclassed to create OpenGL visualizers.
-
-	Provides convenient methods for loading fonts, setting up a 2D canvas,
-	and drawing scroll bars.
-
-*/
-
-class OpenGLCanvas : public Component, Timer
-
-{
-public:
-    OpenGLCanvas();
-    ~OpenGLCanvas();
-
-    virtual void refreshState() {};
-
-    void resized();
-    virtual void canvasWasResized() { }
-
-    void mouseDown(const MouseEvent& e);
-    void mouseDrag(const MouseEvent& e);
-    void mouseMove(const MouseEvent& e);
-    void mouseUp(const MouseEvent& e);
-    int mouseWheelMove(const MouseEvent&, float, float);
-
-    virtual void mouseDownInCanvas(const MouseEvent& e) {}
-    virtual void mouseDragInCanvas(const MouseEvent& e) {}
-    virtual void mouseMoveInCanvas(const MouseEvent& e) {}
-    virtual void mouseUpInCanvas(const MouseEvent& e) {}
-    virtual void mouseWheelMoveInCanvas(const MouseEvent&,
-                                        float,
-                                        float) {}
-
-    void startCallbacks();
-    void stopCallbacks();
-
-    int getScrollAmount()
-    {
-        return scrollPix;
-    };
-    int getScrollBarWidth()
-    {
-        return scrollBarWidth;
-    }
-    void drawScrollBars(Graphics& g);
-
-    virtual int getHeaderHeight()
-    {
-        return 0;
-    }
-    virtual int getFooterHeight()
-    {
-        return 0;
-    }
-
-    void paint(Graphics& g);
-
-    virtual void paintCanvas(Graphics& g) = 0;
-
-protected:
-
-    virtual int getTotalHeight()
-    {
-        return getHeight();
-    }
-    int scrollPix;
-    void showScrollBars();
-
-    bool animationIsActive;
-
-    int refreshMs;
-
-private:
-
-    void drawScrollBar(Graphics& g, float y1, float y2, float alpha);
-
-    int scrollBarWidth, scrollDiff, originalScrollPix;
-    int scrollTime;
-    bool showScrollTrack;
-
-    Time timer;
-    void timerCallback();
-
-    float scrollBarTop, scrollBarBottom;
-
-    const float PI;
-
-    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(OpenGLCanvas);
-
-};
-
-
-#endif  // __OPENGLCANVAS_H_98F0C13D__
diff --git a/Source/Processors/Visualization/SpikeObject.cpp b/Source/Processors/Visualization/SpikeObject.cpp
index f63d2d769326c059472cd03e4694f3c966a1288b..702b9cc53a4b1754aa331bfe3420261ed66e93b8 100755
--- a/Source/Processors/Visualization/SpikeObject.cpp
+++ b/Source/Processors/Visualization/SpikeObject.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,6 +26,9 @@
 #include <stdlib.h>
 #include "time.h"
 
+#define MIN(a,b)((a)<(b)?(a):(b))
+#define MAX(a,b)((a)<(b)?(b):(a))
+
 // Simple method for serializing a SpikeObject into a string of bytes
 int packSpike(const SpikeObject* s, uint8_t* buffer, int bufferSize)
 {
@@ -34,7 +37,7 @@ int packSpike(const SpikeObject* s, uint8_t* buffer, int bufferSize)
     // a pointer to a uint8_t buffer (which will hold the serialized SpikeObject,
     // and a integer indicating the bufferSize.
 
-    //int reqBytes = 1 + 4 + 2 + 2 + 2 + 2 * s->nChannels * s->nSamples + 2 * s->nChannels * 2;
+    //int reqBytes = 1 + 4 + 2+2 + 2 + 2 + 2 * s->nChannels * s->nSamples + 2 * s->nChannels * 2;
 
     int idx = 0;
 
@@ -43,6 +46,9 @@ int packSpike(const SpikeObject* s, uint8_t* buffer, int bufferSize)
 
     memcpy(buffer+idx, &(s->timestamp), 8);
     idx += 8;
+    
+    memcpy(buffer+idx, &(s->timestamp_software), 8);
+    idx += 8;
 
     memcpy(buffer+idx, &(s->source), 2);
     idx +=2;
@@ -53,11 +59,35 @@ int packSpike(const SpikeObject* s, uint8_t* buffer, int bufferSize)
     memcpy(buffer+idx, &(s->nSamples), 2);
     idx +=2;
 
+    memcpy(buffer+idx, &(s->sortedId), 2);
+    idx +=2;
+
+    memcpy(buffer+idx, &(s->electrodeID), 2);
+    idx +=2;
+
+    memcpy(buffer+idx, &(s->channel), 2);
+    idx +=2;
+
+    memcpy(buffer+idx, &(s->color[0]), 1);
+    idx +=1;
+    memcpy(buffer+idx, &(s->color[1]), 1);
+    idx +=1;
+    memcpy(buffer+idx, &(s->color[2]), 1);
+    idx +=1;
+
+    memcpy(buffer+idx, &(s->pcProj[0]), sizeof(float));
+    idx +=sizeof(float);
+
+    memcpy(buffer+idx, &(s->pcProj[1]), sizeof(float));
+    idx +=sizeof(float);
+
+    memcpy(buffer+idx, &(s->samplingFrequencyHz), 2);
+    idx +=2;
     memcpy(buffer+idx, &(s->data), s->nChannels * s->nSamples * 2);
     idx += s->nChannels * s->nSamples * 2;
 
-    memcpy(buffer+idx, &(s->gain), s->nChannels * 2);
-    idx += s->nChannels * 2;
+    memcpy(buffer+idx, &(s->gain), s->nChannels * 4); // 4 bytes for a float
+    idx += s->nChannels * 4;
 
     memcpy(buffer+idx, &(s->threshold), s->nChannels * 2);
     idx += s->nChannels * 2;
@@ -79,22 +109,25 @@ int packSpike(const SpikeObject* s, uint8_t* buffer, int bufferSize)
 bool unpackSpike(SpikeObject* s, const uint8_t* buffer, int bufferSize)
 {
     //if (!isBufferValid(buffer, bufferSize))
-    // 	return false;
+    //  return false;
 
     int idx = 0;
 
     memcpy(&(s->eventType), buffer+idx, 1);
     idx += 1;
 
-    // if (s->eventType != 4)
-    // {
-    //     std::cout << "received invalid spike -- incorrect event code" << std::endl;
-    //     return false;
-    // }
+   // if (s->eventType != 4)
+   // {
+   //     std::cout << "received invalid spike -- incorrect event code" << std::endl;
+   //     return false;
+   // }
 
     memcpy(&(s->timestamp), buffer+idx, 8);
     idx += 8;
 
+    memcpy(&(s->timestamp_software), buffer+idx, 8);
+    idx += 8;
+
     memcpy(&(s->source), buffer+idx, 2);
     idx += 2;
 
@@ -122,11 +155,40 @@ bool unpackSpike(SpikeObject* s, const uint8_t* buffer, int bufferSize)
         return false;
     }
 
+
+    
+    memcpy(&(s->sortedId), buffer+idx, 2);
+    idx +=2;
+
+        memcpy(&(s->electrodeID), buffer+idx, 2);
+    idx +=2;
+
+        memcpy(&(s->channel), buffer+idx, 2);
+    idx +=2;
+
+  memcpy(&(s->color[0]), buffer+idx, 1);
+    idx +=1;
+  memcpy(&(s->color[1]), buffer+idx, 1);
+    idx +=1;
+  memcpy(&(s->color[2]), buffer+idx, 1);
+    idx +=1;
+
+    
+
+     memcpy(&(s->pcProj[0]), buffer+idx, sizeof(float));
+    idx +=sizeof(float);
+     memcpy(&(s->pcProj[1]), buffer+idx, sizeof(float));
+    idx +=sizeof(float);
+
+    memcpy(&(s->samplingFrequencyHz), buffer+idx, 2);
+    idx +=2;
+
+
     memcpy(&(s->data), buffer+idx, s->nChannels * s->nSamples * 2);
     idx += s->nChannels * s->nSamples * 2;
 
-    memcpy(&(s->gain), buffer+idx, s->nChannels * 2);
-    idx += s->nChannels * 2;
+    memcpy(&(s->gain), buffer+idx, s->nChannels * 4);
+    idx += s->nChannels * 4;
 
     memcpy(&(s->threshold), buffer+idx, s->nChannels *2);
     idx += s->nChannels * 2;
@@ -193,19 +255,19 @@ void generateSimulatedSpike(SpikeObject* s, uint64_t timestamp, int noise)
     uint16_t trace[][32] =
     {
         {
-            880,	900,	940,	1040,	1290,	1790,	2475,	2995, 	3110, 	2890,
-            2505,	2090,	1720,	1410, 	1155,  	945,	775,	635,	520, 	420,
-            340,	265,	205,	155,	115,	80,		50,		34,		10, 	34,  	50,		80
+            880,    900,    940,    1040,   1290,   1790,   2475,   2995,   3110,   2890,
+            2505,   2090,   1720,   1410,   1155,   945,    775,    635,    520,    420,
+            340,    265,    205,    155,    115,    80,     50,     34,     10,     34,     50,     80
         },
         {
-            1040,   1090,   1190,	1350,	1600,	1960,   2380,   2790,   3080,	3140,
-            2910,	2430,	1810,	1180,	680,	380,	270,	320,	460, 	630,
-            770,	870,	940,	970,	990,	1000,	1000,	1000,	1000,	1000,  1000,	1000
+            1040,   1090,   1190,   1350,   1600,   1960,   2380,   2790,   3080,   3140,
+            2910,   2430,   1810,   1180,   680,    380,    270,    320,    460,    630,
+            770,    870,    940,    970,    990,    1000,   1000,   1000,   1000,   1000,  1000,    1000
         },
         {
-            1000,	1000,	1000,	1000,	1000,	1040,	1140,	1440,	2040,	2240,
-            2400,	2340,	2280,	1880,	1640,	920,	520,	300,	140,	040,
-            20,		20,		40,		100,	260,	500,	740,	900,	960,	1000,	1000,	1000
+            1000,   1000,   1000,   1000,   1000,   1040,   1140,   1440,   2040,   2240,
+            2400,   2340,   2280,   1880,   1640,   920,    520,    300,    140,    040,
+            20,     20,     40,     100,    260,    500,    740,    900,    960,    1000,   1000,   1000
         }
     };
 
@@ -225,6 +287,7 @@ void generateSimulatedSpike(SpikeObject* s, uint64_t timestamp, int noise)
     s->source = 0;
     s->nChannels = 4;
     s->nSamples = 32;
+    s->electrodeID = 0;
     int idx=0;
 
     int waveType = rand()%2; // Pick one of the three predefined waveshapes to generate
@@ -251,21 +314,28 @@ void generateSimulatedSpike(SpikeObject* s, uint64_t timestamp, int noise)
     }
 
 }
-void generateEmptySpike(SpikeObject* s, int nChannels)
+
+void generateEmptySpike(SpikeObject* s, int nChannels, int numSamples)
 {
 
     s->eventType = SPIKE_EVENT_CODE;
     s->timestamp = 0;
     s->source = 0;
-    s->nChannels = 4;
-    s->nSamples = 32;
+    s->nChannels = 1;
+    s->nSamples = numSamples;
+    s->electrodeID = 0;
+    s->samplingFrequencyHz = 30000;
+    s->sortedId = 0;
+    s->color[0] = s->color[1] = s->color[2] = 128;
+    s->pcProj[0] = s->pcProj[1] = 0;
+
 
     int idx = 0;
-    for (int i=0; i<4; i++)
+    for (int i=0; i<s->nChannels; i++)
     {
-        s->gain[i] = 0;
+        s->gain[i] = 0.0;
         s->threshold[i] = 0;
-        for (int j=0; j<32; j++)
+        for (int j=0; j<s->nSamples; j++)
         {
             s->data[idx] = 0;
             idx = idx+1;
@@ -286,3 +356,47 @@ void printSpike(SpikeObject* s)
         std::cout<<s->data+i<<" ";
     std::cout<<std::endl;
 }
+
+float spikeDataBinToMicrovolts(SpikeObject *s, int bin, int ch)
+{
+    jassert(ch >= 0 && ch < s->nChannels);
+    jassert(bin >= 0 && ch < s->nSamples);
+    float v= float(s->data[bin+ch*s->nSamples]-32768)/float(s->gain[ch])*1000.0f;
+    return v;
+}
+
+
+float spikeDataIndexToMicrovolts(SpikeObject *s, int index)
+{
+    int gain_index = index / s->nSamples;
+    jassert(gain_index >= 0 && gain_index < s->nChannels);
+    float v= float(s->data[index]-32768)/float(s->gain[gain_index])*1000.0f;
+    return v;
+}
+
+
+
+int microVoltsToSpikeDataBin(SpikeObject *s, float uV, int ch)
+{
+    return uV/1000.0f*float(s->gain[ch])+32768;
+}
+
+
+
+
+float spikeTimeBinToMicrosecond(SpikeObject *s, int bin, int ch)
+{
+    float spikeTimeSpan = 1.0f/s->samplingFrequencyHz * s->nSamples * 1e6;
+    return float(bin)/(s->nSamples-1) * spikeTimeSpan;
+}
+
+int microSecondsToSpikeTimeBin(SpikeObject *s, float t, int ch)
+{
+    // Lets say we have 32 samples per wave form
+
+    // t = 0 corresponds to the left most index.
+    float spikeTimeSpan = (1.0f/s->samplingFrequencyHz * s->nSamples)*1e6;
+    return MIN(s->nSamples-1, MAX(0,t/spikeTimeSpan * (s->nSamples-1)));
+}
+
+
diff --git a/Source/Processors/Visualization/SpikeObject.h b/Source/Processors/Visualization/SpikeObject.h
index 6c99dc0b5e0094d26bdd789aa689d4ee09866bf0..a386ee0ef097f0c557f559a68b3a2eb64dac16a6 100755
--- a/Source/Processors/Visualization/SpikeObject.h
+++ b/Source/Processors/Visualization/SpikeObject.h
@@ -24,16 +24,18 @@
 #ifndef SPIKEOBJECT_H_
 #define SPIKEOBJECT_H_
 
+#include "../../../JuceLibraryCode/JuceHeader.h"
 #include <iostream>
 #include <stdint.h>
 #include <math.h>
 
+#define SPIKE_METADATA_SIZE 42
 #define MAX_NUMBER_OF_SPIKE_CHANNELS 4
-#define MAX_NUMBER_OF_SPIKE_CHANNEL_SAMPLES 60
+#define MAX_NUMBER_OF_SPIKE_CHANNEL_SAMPLES 80
 #define CHECK_BUFFER_VALIDITY true
 #define SPIKE_EVENT_CODE 4;
 #define MAX_SPIKE_BUFFER_LEN 512 // max length of spike buffer in bytes
-// the true max calculated from the spike values below is actually 507
+                                 // the true max calculated from the spike values below is actually 507
 
 #define SPIKE_BASE_CODE 100
 
@@ -60,16 +62,31 @@ struct SpikeObject
 {
 
     uint8_t     eventType;
-    uint64_t    timestamp;
-    uint16_t    source;
+    int64_t    timestamp;
+    int64_t    timestamp_software;
+    uint16_t    source; // used internally, the index of the electrode in the electrode array
     uint16_t    nChannels;
     uint16_t    nSamples;
-    uint16_t    data[MAX_NUMBER_OF_SPIKE_CHANNELS* MAX_NUMBER_OF_SPIKE_CHANNEL_SAMPLES];
-    uint16_t    gain[MAX_NUMBER_OF_SPIKE_CHANNELS];
+    uint16_t    sortedId;   // sorted unit ID (or 0 if unsorted)
+    uint16_t    electrodeID; // unique electrode ID (regardless electrode position in the array)
+    uint16_t    channel; // the channel in which threshold crossing was detected (index in channel array, not absolute channel number).
+    uint8_t     color[3];
+    float       pcProj[2];
+    uint16_t    samplingFrequencyHz;
+    uint16_t    data[MAX_NUMBER_OF_SPIKE_CHANNELS * MAX_NUMBER_OF_SPIKE_CHANNEL_SAMPLES];
+    float       gain[MAX_NUMBER_OF_SPIKE_CHANNELS];
     uint16_t    threshold[MAX_NUMBER_OF_SPIKE_CHANNELS];
-
 };
 
+
+
+float spikeDataIndexToMicrovolts(SpikeObject *s, int index);
+
+float spikeDataBinToMicrovolts(SpikeObject *s, int bin, int ch = 0);
+int microVoltsToSpikeDataBin(SpikeObject *s, float uV, int ch = 0);
+float spikeTimeBinToMicrosecond(SpikeObject *s, int bin, int ch=0);
+int microSecondsToSpikeTimeBin(SpikeObject *s, float t, int ch=0);
+
 /** Simple method for serializing a SpikeObject into a string of bytes, returns true is the packaged spike buffer is valid */
 int packSpike(const SpikeObject* s, uint8_t* buffer, int bufferLength);
 
@@ -91,7 +108,7 @@ void generateSimulatedSpike(SpikeObject* s, uint64_t timestamp, int noise);
 // std::ostream& operator<<(std::ostream &strm, const SpikeObject s);
 
 /** Helper function for zeroing out a spike object with a specified number of channels */
-void generateEmptySpike(SpikeObject* s, int nChannels);
+void generateEmptySpike(SpikeObject* s, int nChannels, int numSamples);
 
 void printSpike(SpikeObject* s);
 
diff --git a/Source/Processors/Visualization/SpikePlotting/BaseUIElement.cpp b/Source/Processors/Visualization/SpikePlotting/BaseUIElement.cpp
deleted file mode 100755
index 29cd1e79fbb47a42f8bed5a0f3201ea86ffa5214..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/BaseUIElement.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-#include "BaseUIElement.h"
-
-BaseUIElement::BaseUIElement():
-    xpos(0), ypos(0), yOffset(0),
-    height(100), width(100), enabled(true), padding(0)
-{
-}
-
-BaseUIElement::BaseUIElement(int x, int y, double w, double h):
-    yOffset(0), enabled(true), padding(0)
-{
-    xpos = x+padding;
-    ypos = y+padding;
-    width = w-padding*2;
-    height = h-padding*2;
-}
-BaseUIElement::BaseUIElement(int x, int y, double w, double h, int p):
-    enabled(true), padding(p)
-{
-    xpos = x+padding;
-    ypos = y+padding;
-    width = w-padding*2;
-    height = h-padding*2;
-}
-
-void BaseUIElement::redraw()
-{
-    //	std::cout<<"BaseUIElement::redraw(), Position:"<<xpos<<","<<ypos<<" : "<<width<<","<<height<<std::endl;
-    setGlViewport();
-
-    // if (clearNextDraw || !clearNextDraw){
-    // 	clearNextDraw = false;
-    glColor3f(0.0, 0.0, 0.0);
-    glRecti(-1,-1,1,1);
-
-
-    // }
-}
-void BaseUIElement::drawElementEdges()
-{
-    // std::cout<<"BaseUIElement::drawBaseUIElementEdges(), Position:"<<xpos<<","<<ypos<<" : "<<width<<","<<height<<std::endl;
-    glColor3f(1.0, 1.0, 1.0);
-    setGlViewport();
-    glLineWidth(2);
-    drawViewportEdge();
-}
-void BaseUIElement::setEnabled(bool e)
-{
-    enabled = e;
-}
-bool BaseUIElement::getEnabled()
-{
-    return enabled;
-}
-void BaseUIElement::setGlViewport()
-{
-
-    glLoadIdentity();
-    glViewport(xpos, ypos, width, height);
-
-    // std::cout<<xpos<<"x"<<ypos<<"-"<<width<<"x"<<height<<"\t"<<BaseUIElementName<<std::endl;
-}
-void BaseUIElement::setPosition(int x, int y, double w, double h)
-{
-    xpos = x+padding;
-    ypos = y+padding;
-    width = w - padding*2;
-    height = h - padding*2;
-}
-
-void BaseUIElement::getPosition(int* x, int* y, double* w, double* h)
-{
-    *x = xpos;
-    *y = ypos;
-    *w = width;
-    *h = height;
-}
-// void BaseUIElement::clearOnNextDraw(bool c){
-// 	clearNextDraw = c;
-// }
-
-bool BaseUIElement::hitTest(int x, int y)
-{
-    return (x > xpos && x < xpos+width) && (y > ypos && y < ypos+height);
-}
-
-double BaseUIElement::getHeight()
-{
-    return height;
-}
-double BaseUIElement::getWidth()
-{
-    return width;
-}
-int BaseUIElement::getX()
-{
-    return xpos;
-}
-int BaseUIElement::getY()
-{
-    return ypos;
-}
diff --git a/Source/Processors/Visualization/SpikePlotting/BaseUIElement.h b/Source/Processors/Visualization/SpikePlotting/BaseUIElement.h
deleted file mode 100755
index 7c5afed103f03b686573aedef307bb4a48db7a06..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/BaseUIElement.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef BASEUIELEMENT_H_
-#define BASEUIELEMENT_H_
-
-#include "PlotUtils.h"
-#include "../SpikeObject.h"
-
-class SpikeObject;
-
-/**
-
-	Base class for drawing spike plots in OpenGL.
-
-	@see SpikeDisplayCanvas
-
-*/
-
-class BaseUIElement
-{
-
-protected:
-    int xpos, ypos, yOffset;
-    double height, width;
-    bool enabled;
-    double padding;
-
-    void setGlViewport();
-
-public:
-    BaseUIElement();
-    BaseUIElement(int x, int y, double w, double h);
-    BaseUIElement(int x, int y, double w, double h, int p);
-
-    virtual void redraw();
-    void drawElementEdges();
-    virtual void setEnabled(bool e);
-    virtual bool getEnabled();
-    virtual void setPosition(int x, int y, double w, double h);
-    virtual void setPosition(int, int) {}
-    virtual void getPosition(int*, int*, double*, double*);
-    double getHeight();
-    double getWidth();
-    int getX();
-    int getY();
-
-    // needed for spike display object subclasses:
-    virtual void processSpikeObject(SpikeObject s) {}
-    virtual void pan(int, bool) {}
-    virtual void zoom(int, bool) {}
-    virtual void clear() {}
-
-    // void clearOnNextDraw(bool);
-    // bool clearNextDraw;
-    bool hitTest(int x, int y);
-
-};
-
-
-
-#endif // BaseUIElement_H_
diff --git a/Source/Processors/Visualization/SpikePlotting/GenericAxes.cpp b/Source/Processors/Visualization/SpikePlotting/GenericAxes.cpp
deleted file mode 100755
index b87870d5b238007a31babdbac9602dc44a449d37..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/GenericAxes.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-#include "GenericAxes.h"
-
-GenericAxes::GenericAxes()
-    : BaseUIElement(), gotFirstSpike(false), type(0)
-{
-    ylims[0] = 0;
-    ylims[1] = 1;
-    loadFont();
-}
-
-GenericAxes::GenericAxes(int x, int y, double w, double h, int t):
-    BaseUIElement(x,y,w,h),
-    gotFirstSpike(false)
-{
-    type = t;
-    loadFont();
-}
-GenericAxes::~GenericAxes()
-{
-    //delete font;
-}
-void GenericAxes::updateSpikeData(SpikeObject newSpike)
-{
-    if (!gotFirstSpike)
-    {
-        gotFirstSpike = true;
-    }
-
-    s = newSpike;
-}
-
-void GenericAxes::loadFont()
-{
-    const unsigned char* buffer = reinterpret_cast<const unsigned char*>(BinaryData::cpmono_plain_otf);
-    size_t bufferSize = BinaryData::cpmono_plain_otfSize;
-    font = new FTPixmapFont(buffer, bufferSize);
-}
-
-void GenericAxes::setYLims(double ymin, double ymax)
-{
-
-    std::cout << "setting y limits to " << ymin << " " << ymax << std::endl;
-    ylims[0] = ymin;
-    ylims[1] = ymax;
-}
-void GenericAxes::getYLims(double* min, double* max)
-{
-    *min = ylims[0];
-    *max = ylims[1];
-}
-void GenericAxes::setXLims(double xmin, double xmax)
-{
-    xlims[0] = xmin;
-    xlims[1] = xmax;
-}
-void GenericAxes::getXLims(double* min, double* max)
-{
-    *min = xlims[0];
-    *max = xlims[1];
-}
-
-void GenericAxes::setType(int t)
-{
-    if (t < WAVE1 || t > PROJ3x4)
-    {
-        std::cout<<"Invalid Axes type specified";
-        return;
-    }
-    type = t;
-}
-
-int GenericAxes::getType()
-{
-    return type;
-}
-
-void GenericAxes::setPosition(int x, int y, double w, double h)
-{
-    BaseUIElement::setPosition(x,y,w,h);
-}
diff --git a/Source/Processors/Visualization/SpikePlotting/GenericAxes.h b/Source/Processors/Visualization/SpikePlotting/GenericAxes.h
deleted file mode 100755
index 43be58dad7a05c26e812ac45c63306e28787c958..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/GenericAxes.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef GENERIC_AXES_H_
-#define GENERIC_AXES_H_
-
-
-#if defined(__linux__)
-#include <GL/glut.h>
-#else
-#include <GLUT/glut.h>
-#endif
-#include <stdlib.h>
-#include <FTGL/ftgl.h>
-#include "../../../../JuceLibraryCode/JuceHeader.h"
-
-#include "../SpikeObject.h"
-
-#include "BaseUIElement.h"
-#include "PlotUtils.h"
-
-/**
-
-  Base class for drawing axes with OpenGL.
-
-  @see BaseUIElement, ProjectionAxes, WaveAxes
-
-*/
-
-class GenericAxes: public BaseUIElement
-{
-
-protected:
-    double xlims[2];
-    double ylims[2];
-    SpikeObject s;
-
-    bool gotFirstSpike;
-
-    int type;
-    virtual void plot() {}
-
-    FTPixmapFont* font;
-    void loadFont();
-
-
-public:
-    GenericAxes();
-    GenericAxes(int x, int y, double w, double h, int t);
-    virtual ~GenericAxes();
-
-    void updateSpikeData(SpikeObject s);
-
-    virtual void redraw() {}
-
-    void setXLims(double xmin, double xmax);
-    void getXLims(double* xmin, double* xmax);
-    void setYLims(double ymin, double ymax);
-    void getYLims(double* ymin, double* ymax);
-
-    void setType(int type);
-    int getType();
-
-
-    void setPosition(int,int,double,double);
-
-};
-
-
-
-#endif
diff --git a/Source/Processors/Visualization/SpikePlotting/PlotUtils.cpp b/Source/Processors/Visualization/SpikePlotting/PlotUtils.cpp
deleted file mode 100755
index 3f2e25d2f843b53f542e094313fc5d6e18845ed2..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/PlotUtils.cpp
+++ /dev/null
@@ -1,251 +0,0 @@
-#include "PlotUtils.h"
-
-void checkGlError()
-{
-    GLenum errCode;
-    const GLubyte* errString;
-    if ((errCode = glGetError()) != GL_NO_ERROR)
-    {
-        errString = gluErrorString(errCode);
-        fprintf(stderr, "OpenGL Error: %s\n", errString);
-        exit(1);
-    }
-    else
-        std::cout<<"OpenGL Okay!"<<std::endl;
-}
-
-void drawString(float x, float y, void* f, const char* string)
-{
-    glRasterPos2f(x, y);
-    int len = strlen(string);
-    // glColor3f(1.0, 1.0, 1.0);
-    for (int i = 0; i < len; i++)
-    {
-        //glutBitmapCharacter(f, string[i]);
-    }
-}
-
-void drawString(float x, float y, int size, String s, FTPixmapFont* f)
-{
-
-    glRasterPos2f(x, y);
-
-    //f->FaceSize(size);
-    //f->Render(s);
-}
-
-void drawViewportEdge()
-{
-
-    glPushMatrix();
-    glLoadIdentity();
-
-    glBegin(GL_LINE_LOOP);
-    glVertex2f(-.995, -.995);
-    glVertex2f(.995, -.995);
-    glVertex2f(.995, .995);
-    glVertex2f(-.995, .995);
-    glEnd();
-
-    glPopMatrix();
-}
-
-void drawViewportCross()
-{
-
-    glColor3f(0.0,1.0,1.0);
-
-    glPushMatrix();
-    glLoadIdentity();
-
-    glBegin(GL_LINE_LOOP);
-    glVertex2f(-.995, -.995);
-    glVertex2f(.995, .995);
-    glVertex2f(.995, -.995);
-    glVertex2f(-.995, .995);
-    glEnd();
-
-    glPopMatrix();
-}
-
-void setViewportRange(int xMin,int yMin,int xMax,int yMax)
-{
-
-    float dx = xMax-xMin;
-    float dy = yMax-yMin;
-
-    //	printf("Setting viewport to:%d,%d %d,%d with dims%d,%d %d,%d\n", x,y,w,h, xMin, xMin, xMax,yMax);
-    //	printf("Dx:%f Dy:%f, Scaling viewport by:%f,%f \n", dx,dy,2.0/dx, 2.0/dy);
-    glLoadIdentity();
-    glTranslatef(-1.0,-1.0,0.0);
-    glScalef(2.0f/dx, 2.0f/dy, 1.0);
-    glTranslatef(0-xMin, 0-yMin, 0);
-
-}
-int roundUp(int numToRound, int multiple)
-{
-    if (multiple == 0)
-    {
-        return numToRound;
-    }
-
-    int remainder = numToRound % multiple;
-    if (remainder == 0)
-        return numToRound;
-    return numToRound + multiple - remainder;
-}
-
-double ad16ToUv(int x, int gain)
-{
-    int result = (double)(x * 20e6) / (double)(gain * pow(2.0,16));
-    return result;
-}
-
-void makeLabel(int val, int gain, bool convert, char* s)
-{
-    if (convert)
-    {
-        double volt = ad16ToUv(val, gain)/1000.;
-        if (abs(val)>1e6)
-        {
-            //val = val/(1e6);
-            sprintf(s, "%.2fV", volt);
-        }
-        else if (abs(val)>1e3)
-        {
-            //val = val/(1e3);
-            sprintf(s, "%.2fmV", volt);
-        }
-        else
-            sprintf(s, "%.2fuV", volt);
-    }
-    else
-        sprintf(s,"%d", (int)val);
-}
-
-void n2ProjIdx(int proj, int* p1, int* p2)
-{
-    int d1, d2;
-    if (proj==PROJ1x2)
-    {
-        d1 = 0;
-        d2 = 1;
-    }
-    else if (proj==PROJ1x3)
-    {
-        d1 = 0;
-        d2 = 2;
-    }
-    else if (proj==PROJ1x4)
-    {
-        d1 = 0;
-        d2 = 3;
-    }
-    else if (proj==PROJ2x3)
-    {
-        d1 = 1;
-        d2 = 2;
-    }
-    else if (proj==PROJ2x4)
-    {
-        d1 = 1;
-        d2 = 3;
-    }
-    else if (proj==PROJ3x4)
-    {
-        d1 = 2;
-        d2 = 3;
-    }
-    else
-    {
-        std::cout<<"Invalid projection:"<<proj<<"! Cannot determine d1 and d2"<<std::endl;
-        *p1 = -1;
-        *p2 = -1;
-        return;
-    }
-    *p1 = d1;
-    *p2 = d2;
-}
-
-
-bool isFrameBufferExtensionSupported()
-{
-
-    std::cout<<"Checking to see if the OpenGL Frame Buffer Extension is Supported"<<std::endl;
-
-    char* str = 0;
-    char* tok = 0;
-
-    std::string fboExt = "GL_EXT_framebuffer_object";
-
-    str = (char*)glGetString(GL_EXTENSIONS);
-
-    if (str)
-    {
-        std::vector <std::string> extensions;
-        tok = strtok((char*)str, " ");
-        while (tok)
-        {
-
-            std::string ext = tok;
-
-            if (ext == fboExt)
-                return true;
-
-            tok = strtok(0, " ");
-        }
-        return false;
-    }
-    else
-        return false;
-}
-
-bool checkFramebufferStatus()
-{
-    // check FBO status
-    GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
-    return status == GL_FRAMEBUFFER_COMPLETE_EXT;
-
-    switch (status)
-    {
-        case GL_FRAMEBUFFER_COMPLETE_EXT:
-            std::cout << "Framebuffer complete." << std::endl;
-            return true;
-
-        case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
-            std::cout << "[ERROR] Framebuffer incomplete: Attachment is NOT complete." << std::endl;
-            return false;
-
-        case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
-            std::cout << "[ERROR] Framebuffer incomplete: No image is attached to FBO." << std::endl;
-            return false;
-
-        case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
-            std::cout << "[ERROR] Framebuffer incomplete: Attached images have different dimensions." << std::endl;
-            return false;
-
-        case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
-            std::cout << "[ERROR] Framebuffer incomplete: Color attached images have different internal formats." << std::endl;
-            return false;
-
-        case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
-            std::cout << "[ERROR] Framebuffer incomplete: Draw buffer." << std::endl;
-            return false;
-
-        case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
-            std::cout << "[ERROR] Framebuffer incomplete: Read buffer." << std::endl;
-            return false;
-
-        case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
-            std::cout << "[ERROR] Unsupported by FBO implementation." << std::endl;
-            return false;
-
-        default:
-            std::cout << "[ERROR] Unknown error." << std::endl;
-            return false;
-    }
-}
-
-// std::addressof was introduced in C++11, an equivalent function is defined below
-// definition from http://en.cppreference.com/w/cpp/memory/addressof
-
diff --git a/Source/Processors/Visualization/SpikePlotting/PlotUtils.h b/Source/Processors/Visualization/SpikePlotting/PlotUtils.h
deleted file mode 100755
index f3ba34836ba65558ccb673c8a21da1248c02cb8a..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/PlotUtils.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef PLOT_UTILS_H_
-#define PLOT_UTILS_H_
-
-#define GL_GLEXT_PROTOTYPES
-
-#if defined(__linux__)
-#include <GL/glut.h>
-#elif defined(WIN32)
-#undef GL_GLEXT_PROTOTYPES
-#include <GLUT/glut.h>
-#include <gl/GLU.h>
-#include "..\..\..\glWinInit.h"
-#else // assume OS X
-#include <GLUT/glut.h>
-#include <OpenGL/glu.h>
-#include <OpenGL/glext.h>
-#endif
-
-#include <stdio.h>
-#include <math.h>
-#include <cstring>
-#include <string>
-#include <iostream>
-#include <vector>
-#include <FTGL/ftgl.h>
-
-#include "../../../../JuceLibraryCode/JuceHeader.h"
-
-#define WAVE1 0
-#define WAVE2 1
-#define WAVE3 2
-#define WAVE4 3
-#define PROJ1x2 4
-#define PROJ1x3 5
-#define PROJ1x4 6
-#define PROJ2x3 7
-#define PROJ2x4 8
-#define PROJ3x4 9
-
-void checkGlError();
-void setViewportRange(int xMin,int xMax,int yMin,int yMax);
-
-void drawString(float x, float y, void* f, const char* string);
-void drawString(float x, float y, int size, String s, FTPixmapFont* f);
-
-void drawViewportEdge();
-
-void drawViewportCross();
-
-int roundUp(int, int);
-
-double ad16ToUv(int ad, int gain);
-
-void makeLabel(int val, int gain, bool convert, char* s);
-
-void n2ProjIdx(int i, int* p1, int* p2);
-
-template< class T >
-T* addressof(T& arg)
-{
-    return (T*)&(char&)arg;
-}
-
-bool isFrameBufferExtensionSupported();
-bool checkFramebufferStatus();
-#endif
\ No newline at end of file
diff --git a/Source/Processors/Visualization/SpikePlotting/ProjectionAxes.cpp b/Source/Processors/Visualization/SpikePlotting/ProjectionAxes.cpp
deleted file mode 100755
index 90567594a87feb3e40fa3ab72e18dd174e4227d1..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/ProjectionAxes.cpp
+++ /dev/null
@@ -1,364 +0,0 @@
-#include "ProjectionAxes.h"
-
-ProjectionAxes::ProjectionAxes()
-    : GenericAxes(),
-      buffIdx(-1), totalSpikes(0), newSpike(false), isTextureValid(false),
-      fboCreated(false), allSpikesNextRender(false), overlay(false),
-      drawGrid(false), convertLabelUnits(true)
-{
-    GenericAxes::type = PROJ1x2;
-    GenericAxes::gotFirstSpike = false;
-
-    ylims[0] = 0;
-    ylims[1] = 1;
-    setPointColor(1.0,1.0,1.0);
-    n2ProjIdx(type, &ampDim1, &ampDim2);
-
-    clearOnNextDraw = false;
-
-}
-
-ProjectionAxes::ProjectionAxes(int x, int y, double w, double h, int t)
-    : GenericAxes(x,y,w,h,t),
-      buffIdx(-1), totalSpikes(0), newSpike(false), isTextureValid(false),
-      fboCreated(false), allSpikesNextRender(false), overlay(false),
-      drawGrid(true), convertLabelUnits(true)
-{
-    GenericAxes::gotFirstSpike = false;
-
-    setPointColor(1.0,1.0,1.0);
-
-    n2ProjIdx(type, &ampDim1, &ampDim2);
-
-    clearOnNextDraw = false;
-}
-
-void ProjectionAxes::updateSpikeData(SpikeObject s)
-{
-    //std::cout<<"ProjectionAxes::updateSpikeData()"<<std::endl;
-    GenericAxes::updateSpikeData(s);
-
-    buffIdx++;
-    if (buffIdx >= AMP_BUFF_MAX_SIZE)
-        buffIdx %= AMP_BUFF_MAX_SIZE;
-
-    int idx1, idx2;
-    calcWaveformPeakIdx(ampDim1,ampDim2,&idx1, &idx2);
-
-    ampBuffer[0][buffIdx] = (s.data[idx1] - 32768);
-    ampBuffer[1][buffIdx] = (s.data[idx2] - 32768);
-    newSpike = true;
-}
-
-void ProjectionAxes::redraw()
-{
-
-    BaseUIElement::redraw();
-
-    plot();
-
-    BaseUIElement::drawElementEdges();
-}
-
-
-void ProjectionAxes::plot()
-{
-    //setViewportRange(xlims[0], ylims[0], xlims[1], ylims[1]);
-
-    GLenum errCode;
-    const GLubyte* errString;
-
-    // Should we plot all spikes to the texture or just the newest one
-    bool allSpikes = false;
-
-    if (!isTextureValid)
-    {
-        std::cout<<"ProjectionAxes::plot() --> Texture is invalid regenerating it!"<<std::endl;
-        createTexture();
-        allSpikes = true;
-    }
-
-    if (clearOnNextDraw)
-    {
-        clearTexture();
-        clearOnNextDraw = false;
-    }
-
-    drawSpikesToTexture(allSpikes);
-    drawTexturedQuad();
-    plotNewestSpike();
-
-    // if there has been an openGL error we need to rerender the texture and replot everything
-    // errors occur when the openGL context has been destroyed and recreated. I'm not sure how to
-    // explicitly catch that event so instead we check for a drawing error.
-    if ((errCode = glGetError()) != GL_NO_ERROR)
-    {
-        errString = gluErrorString(errCode);
-        std::cout<<"OpenGL Error:"<< errString << "! Invalidating and rerendering the texture!" << std::endl;
-
-        invalidateTexture();
-        plot();
-        return;
-    }
-    //    else
-    //        std::cout<<"All is good no errors detected"<<std::endl;
-}
-
-void ProjectionAxes::plotOldSpikes(bool allSpikes)
-{
-    //std::cout<<"ProjectionAxes::plotOldSpikes() allSpikes:"<<allSpikes<<std::endl;
-
-    //set the viewport to the size of the texture
-    glViewport(0,0,texWidth, texHeight);
-
-    //set the plotting range for the viewport to the limits of the plot
-    setViewportRange(xlims[0], ylims[0], xlims[1], ylims[1]);
-
-    // if allSpikes plot start with 1 else start with buffIdx
-    int startIdx = (allSpikes) ? 1 : buffIdx;
-    // either plot to totalSpikes or the end of the buffer if total spikes has wrapped
-    int stopIdx = (totalSpikes > AMP_BUFF_MAX_SIZE) ? AMP_BUFF_MAX_SIZE : buffIdx;
-
-    // if (allSpikes)
-    // 	std::cout<<"\tUpdating texture with all spikes: "<< stopIdx - startIdx + 1 <<std::endl;
-
-    glColor3f(1.0, 1.0, 1.0);
-    glPointSize(1);
-    glBegin(GL_POINTS);
-    for (int i=startIdx; i<=stopIdx; i++)
-        glVertex2i(ampBuffer[0][i], ampBuffer[1][i]);
-    glEnd();
-
-}
-
-
-void ProjectionAxes::plotNewestSpike()
-{
-
-    BaseUIElement::setGlViewport();
-    setViewportRange(xlims[0], ylims[0], xlims[1], ylims[1]);
-
-    // draw the newest spike as a big red point so it stands out against the old spikes
-    glColor3f(1.0, 0.0, 0.0);
-    glPointSize(4);
-
-    if (gotFirstSpike)
-    {
-
-        glBegin(GL_POINTS);
-        glVertex2i(ampBuffer[0][buffIdx], ampBuffer[1][buffIdx]);
-        glEnd();
-    }
-
-    newSpike = false;
-}
-
-void ProjectionAxes::calcWaveformPeakIdx(int d1, int d2, int* idx1, int* idx2)
-{
-
-    int max1 = -1*pow(2.0,15);
-    int max2 = max1;
-
-    for (int i=0; i<s.nSamples ; i++)
-    {
-        if (s.data[d1*s.nSamples + i] > max1)
-        {
-            *idx1 = d1*s.nSamples+i;
-            max1 = s.data[*idx1];
-        }
-        if (s.data[d2*s.nSamples+i] > max2)
-        {
-            *idx2 = d2*s.nSamples+i;
-            max2 = s.data[*idx2];
-        }
-    }
-}
-
-void ProjectionAxes::setPosition(int x, int y, int w, int h)
-{
-    // std::cout<<"ProjectionAxes::setPosition()"<<std::endl;
-
-    // only invalidate the texture if its size has actually changed
-    if (w!=GenericAxes::width || h!=GenericAxes::height)
-        invalidateTexture();
-
-    GenericAxes::setPosition(x,y,w,h);
-}
-
-void ProjectionAxes::setPointColor(GLfloat r, GLfloat g, GLfloat b)
-{
-    pointColor[0] = r;
-    pointColor[1] = g;
-    pointColor[2] = b;
-}
-void ProjectionAxes::setGridColor(GLfloat r, GLfloat g, GLfloat b)
-{
-    gridColor[0] = r;
-    gridColor[1] = g;
-    gridColor[2] = b;
-}
-
-
-void ProjectionAxes::createTexture()
-{
-
-    texWidth = BaseUIElement::width;
-    texHeight = BaseUIElement::height;
-
-    std::cout<<"Creating a new texture of size:"<<texWidth<<"x"<<texHeight;//<<std::endl;
-    // Delete the old texture
-    glDeleteTextures(1, &textureId);
-    // Generate a new texture
-    glGenTextures(1, &textureId);
-    std::cout<<" textureId:"<<textureId<<std::endl;
-    // Bind the texture, and set the appropriate parameters
-    glBindTexture(GL_TEXTURE_2D, textureId);
-    glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
-    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
-    glGenerateMipmap(GL_TEXTURE_2D);
-    // generate a new FrameBufferObject
-    createFBO();
-
-    // the texture should now be valid, set the flag appropriately
-    isTextureValid = true;
-
-}
-
-void ProjectionAxes::createFBO()
-{
-    std::cout<<"Creating a new FBO, is already created?:"<<fboCreated<<" ";//<<std::endl;
-
-    // if (!isTextureValid)
-    // 	createTexture();
-    // Delete the old frame buffer, render buffer
-    if (fboCreated)
-    {
-        glDeleteFramebuffers(1, &fboId);
-        glDeleteRenderbuffers(1, &rboId);
-    }
-
-    // Generate and Bind the frame buffer
-    glGenFramebuffersEXT(1, &fboId);
-    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);
-
-    // Generate and bind the new Render Buffer
-    glGenRenderbuffersEXT(1, &rboId);
-    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboId);
-    std::cout << " fboID:" << fboId << " rboID:" << rboId << std::endl;
-
-
-    glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, texWidth, texHeight);
-    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
-
-    // Attach the texture to the framebuffer
-    glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, textureId, 0);
-    glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rboId);
-
-    // If the FrameBuffer wasn't created then we have a bigger problem. Abort the program.
-    if (!checkFramebufferStatus())
-    {
-        std::cout<<"FrameBufferObject not created! Are you running the newest version of OpenGL?"<<std::endl;
-        std::cout<<"FrameBufferObjects are REQUIRED! Quitting!"<<std::endl;
-        exit(1);
-    }
-    glClearColor(0.0, 0.0, 0.0, 0.0);
-    glClear(GL_COLOR_BUFFER_BIT);
-
-    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
-    fboCreated = true;
-}
-
-
-void ProjectionAxes::drawSpikesToTexture(bool allSpikes)
-{
-
-    //std::cout<<"ProjectionAxes::drawSpikesToTexture() plotting all spikes:"<<allSpikes<<std::endl;
-
-
-    // For some reason if we want to plot ALL the spikes to a texture we must plot two draw cycles
-    // in a row, perhaps this has to do with double buffering, I'm not sure why... investigate this!
-
-    // if the allSpikes flag is set we set the allSpikesNextRender as true so we plot next
-    // all spikes next render cycle too, if only the allSpikesNextRender is true we set all spikes
-    // to true and allSpikes next render to false.
-
-    //Basically this logic ensures that if allSpikes is ever set to true it will be set to true
-    //on the next call to drawSpikesToTexture() regardless of what value it is actually set to
-    if (allSpikes)
-        allSpikesNextRender = true;
-    else if (!allSpikes && allSpikesNextRender)
-    {
-        allSpikes = true;
-        allSpikesNextRender = false;
-    }
-    // set the rendering destination to FBO
-    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);
-
-    // plot to the texture
-    if (gotFirstSpike)
-        plotOldSpikes(allSpikes);
-
-    // bind the original FrameBuffer
-    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
-}
-
-void ProjectionAxes::invalidateTexture()
-{
-    isTextureValid = false;
-}
-
-
-void ProjectionAxes::drawTexturedQuad()
-{
-    BaseUIElement::setGlViewport();
-    // We need to scale the viewport in this case because we want to fill it with a quad.
-    // if we load identity then we can use a quad bound by (-1, 1);
-    glLoadIdentity();
-
-    // Bind the texture to render
-    glBindTexture(GL_TEXTURE_2D, textureId);
-
-    // Build the quad
-    int size = 1;
-    int texS = 1;
-    glBegin(GL_QUADS);
-    glColor4f(1, 1, 1, 1);
-    glTexCoord2f(texS,  texS);
-    glVertex3f(size,        size,0);
-    glTexCoord2f(0,     texS);
-    glVertex3f(-1 * size ,  size,0);
-    glTexCoord2f(0,     0);
-    glVertex3f(-1 * size,   -1 * size,0);
-    glTexCoord2f(texS,  0);
-    glVertex3f(size,        -1 * size,0);
-    glEnd();
-
-    // Unbind the texture
-    glBindTexture(GL_TEXTURE_2D, 0);
-}
-
-void ProjectionAxes::clear()
-{
-
-    //reset buffIDx and totalSpikes
-    buffIdx = 0;
-    totalSpikes = 0;
-
-    // set flag to clear on next draw
-    clearOnNextDraw = true;
-}
-
-void ProjectionAxes::clearTexture()
-{
-    std::cout<<"ProjectinAxes::clearTexture() --> Clearing the Texture!"<<std::endl;
-
-    glViewport(0,0,texWidth, texHeight);
-    setViewportRange(xlims[0], ylims[0], xlims[1], ylims[1]);
-
-    // set the rendering destination to FBO
-    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);
-    // Clear the framebufferObject
-    glClearColor(0, 0, 0, 1);
-    glClear(GL_COLOR_BUFFER_BIT);
-    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
-}
diff --git a/Source/Processors/Visualization/SpikePlotting/ProjectionAxes.h b/Source/Processors/Visualization/SpikePlotting/ProjectionAxes.h
deleted file mode 100755
index 7c2fd142b4bba4a8325e873a1c452dff7c348ccb..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/ProjectionAxes.h
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef PROJECTION_AXES_H_
-#define PROJECTION_AXES_H_
-
-#define GL_GLEXT_PROTOTYPES
-
-#if defined(__linux__)
-#include <GL/glut.h>
-#else
-#include <GLUT/glut.h>
-#endif
-#include <stdlib.h>
-#include "BaseUIElement.h"
-#include "../SpikeObject.h"
-#include "PlotUtils.h"
-#include "GenericAxes.h"
-#include <stdint.h>
-
-#define AMP_BUFF_MAX_SIZE 50000
-
-/**
-
-  Class for drawing the peak projections of spike waveforms.
-
-*/
-
-class ProjectionAxes: public GenericAxes
-{
-
-    GLfloat pointColor[3];
-    GLfloat gridColor[3];
-
-    int ampBuffer[2][AMP_BUFF_MAX_SIZE];
-    uint16_t buffIdx; // points to the most recent spike
-    uint64_t totalSpikes;
-
-
-    int ampDim1, ampDim2;
-
-
-    void drawProjectionGrid(int thold, int gain);
-    void calcWaveformPeakIdx(int, int, int*, int*);
-
-    void createTexture();
-    void createFBO();
-
-    void drawSpikesToTexture(bool allSpikes);
-    void drawTexturedQuad();
-    void plotOldSpikes(bool allSpikes);
-    void plotNewestSpike();
-
-    bool newSpike;
-
-
-    GLuint fboId; // Frame Buffer Object
-    GLuint textureId; // Texture
-    GLuint rboId; // Render Buffer
-
-    int texWidth;
-    int texHeight;
-
-    bool clearOnNextDraw;
-    bool isTextureValid;
-    bool fboCreated;
-    void clearTexture();
-
-    void validateTexture();
-
-    bool allSpikesNextRender;
-
-protected:
-    void plot();
-
-
-public:
-    ProjectionAxes();
-    ProjectionAxes(int x, int y, double w, double h, int t);
-    virtual ~ProjectionAxes() {}
-
-    void setPosition(int, int, int, int);
-    void updateSpikeData(SpikeObject s);
-
-    void setPointColor(GLfloat r, GLfloat g, GLfloat b);
-    void setGridColor(GLfloat, GLfloat, GLfloat);
-
-    void clear();
-    void invalidateTexture();
-
-    void redraw();
-
-    bool overlay;
-    bool drawGrid;
-    bool convertLabelUnits;
-
-
-};
-
-#endif  // PROJECTION_AXES_H_
-
-
-
-
-// #endif
diff --git a/Source/Processors/Visualization/SpikePlotting/SimpleKeyEvent.h b/Source/Processors/Visualization/SpikePlotting/SimpleKeyEvent.h
deleted file mode 100755
index 4f7d34e3a278b01186f036c7e6f0e2729f0d481c..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/SimpleKeyEvent.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef SIMPLE_KEY_EVENT_H
-#define SIMPLE_KEY_EVENT_H
-
-/**
-
-  Struct containing keypress information not handled by JUCE.
-
-*/
-
-struct SimpleKeyEvent
-{
-
-    int key;
-    bool shift;
-    bool ctrl;
-    bool alt;
-
-};
-
-#endif
\ No newline at end of file
diff --git a/Source/Processors/Visualization/SpikePlotting/SpikePlot.cpp b/Source/Processors/Visualization/SpikePlotting/SpikePlot.cpp
deleted file mode 100755
index aa36bff72c8089a68118da1562dac8cd3c56314a..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/SpikePlot.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-#include "SpikePlot.h"
-#include "../SpikeObject.h"
-#include "PlotUtils.h"
-
-SpikePlot::SpikePlot():
-    BaseUIElement(),  limitsChanged(true), nChannels(0), plotType(0), nWaveAx(1), nProjAx(0)
-{
-
-}
-
-SpikePlot::SpikePlot(int x, int y, int w, int h, int p):
-    BaseUIElement(x,y,w,h,0), limitsChanged(true), plotType(p)
-{
-
-    switch (p)
-    {
-        case SINGLE_PLOT:
-            std::cout<<"SpikePlot as SINGLE_PLOT"<<std::endl;
-            nWaveAx = 1;
-            nProjAx = 0;
-            nChannels = 1;
-            break;
-        case STEREO_PLOT:
-            std::cout<<"SpikePlot as STEREO_PLOT"<<std::endl;
-            nWaveAx = 2;
-            nProjAx = 1;
-            nChannels = 2;
-            break;
-        case TETRODE_PLOT:
-            std::cout<<"SpikePlot as TETRODE_PLOT"<<std::endl;
-            nWaveAx = 4;
-            nProjAx = 6;
-            nChannels = 4;
-            break;
-            //        case HIST_PLOT:
-            //            nWaveAx = 1;
-            //            nProjAx = 0;
-            //            nHistAx = 1;
-            //            break;
-        default: // unsupported number of axes provided
-            std::cout<<"SpikePlot as UNKNOWN, defaulting to SINGLE_PLOT"<<std::endl;
-            nWaveAx = 1;
-            nProjAx = 0;
-            plotType = SINGLE_PLOT;
-            nChannels = 1;
-    }
-
-
-
-    initAxes();
-}
-
-SpikePlot::~SpikePlot()
-{
-}
-
-// As a plot is a collection of axes simply have each axes can draw itself
-void SpikePlot::redraw()
-{
-    for (int i=0; i<nWaveAx; i++)
-        wAxes[i].redraw();
-    //    wAxes[1].redraw();
-    for (int i=0; i<nProjAx; i++)
-        pAxes[i].redraw();
-}
-
-// Have each axes process the spike event
-void SpikePlot::processSpikeObject(SpikeObject s)
-{
-    //std::cout<<"ElectrdePlot::processSpikeObject()"<<std::endl;
-    for (int i=0; i<nWaveAx; i++)
-        wAxes[i].updateSpikeData(s);
-    //    wAxes[1].updateSpikeData(s);
-    for (int i=0; i<nProjAx; i++)
-        pAxes[i].updateSpikeData(s);
-}
-
-
-void SpikePlot::setEnabled(bool e)
-{
-    BaseUIElement::enabled = e;
-
-    for (int i=0; i<nWaveAx; i++)
-        wAxes[i].setEnabled(e);
-    //    wAxes[1].setEnabled(e);
-    for (int i=0; i<nProjAx; i++)
-        pAxes[i].setEnabled(e);
-}
-
-bool SpikePlot::getEnabled()
-{
-    return BaseUIElement::enabled;
-}
-
-
-void SpikePlot::initAxes()
-{
-    initLimits();
-
-    for (int i=0; i<nWaveAx; i++)
-    {
-        wAxes[i] = WaveAxes(0, 0, 1, 1, WAVE1 + i); // add i to increment the wave channel
-        wAxes[i].setWaveformColor(1.0, 1.0, 1.0);
-    }
-
-    for (int i=0; i<nProjAx; i++)
-    {
-        pAxes[i] = ProjectionAxes(0, 0, 1, 1, PROJ1x2 + i);
-        pAxes[i].setPointColor(1.0, 1.0, 1.0);
-    }
-
-    updateAxesPositions(); // Set the position of the individual axes within the plot
-    setLimitsOnAxes(); // initialize thel limits on the axes
-}
-void SpikePlot::updateAxesPositions()
-{
-    int minX = BaseUIElement::xpos;
-    int minY = BaseUIElement::ypos;
-
-    double axesWidth;// = BaseUIElement::width/2;
-    double axesHeight;// = BaseUIElement::height;
-
-
-    // to compute the axes positions we need to know how many columns of proj and wave axes should exist
-    // using these two values we can calculate the positions of all of the sub axes
-    int nProjCols, nWaveCols;
-    switch (plotType)
-    {
-        case SINGLE_PLOT:
-            nProjCols = 0;
-            nWaveCols = 1;
-            axesWidth = width;
-            axesHeight = height;
-            break;
-
-        case STEREO_PLOT:
-            nProjCols = 1;
-            nWaveCols = 2;
-            axesWidth = width/2;
-            axesHeight = height;
-            break;
-        case TETRODE_PLOT:
-            nProjCols = 3;
-            nWaveCols = 2;
-            axesWidth = width/4;
-            axesHeight = height/2;
-            break;
-    }
-
-    for (int i=0; i<nWaveAx; i++)
-        wAxes[i].setPosition(minX + (i % nWaveCols) * axesWidth/nWaveCols, minY + (i/nWaveCols) * axesHeight, axesWidth/nWaveCols, axesHeight);
-
-    for (int i=0; i<nProjAx; i++)
-        pAxes[i].setPosition(minX + (1 + i%nProjCols) * axesWidth, minY + (i/nProjCols) * axesHeight, axesWidth, axesHeight);
-}
-
-void SpikePlot::setLimitsOnAxes()
-{
-    std::cout<<"SpikePlot::setLimitsOnAxes()"<<std::endl;
-
-    for (int i=0; i<nWaveAx; i++)
-        wAxes[i].setYLims(limits[i][0], limits[i][1]);
-
-    // Each Projection sets its limits using the limits of the two waveform dims it represents.
-    // Convert projection number to indecies, and then set the limits using those indices
-    int j1, j2;
-    for (int i=0; i<nProjAx; i++)
-    {
-        n2ProjIdx(pAxes[i].getType(), &j1, &j2);
-        pAxes[i].setYLims(limits[j1][0], limits[j1][1]);
-        pAxes[i].setXLims(limits[j2][0], limits[j2][1]);
-    }
-}
-void SpikePlot::setPosition(int x, int y, double w, double h)
-{
-
-    //    std::cout<<"SpikePlot::setPosition()"<<std::endl;
-    BaseUIElement::setPosition(x,y,w,h);
-    updateAxesPositions();
-
-}
-
-
-void SpikePlot::initLimits()
-{
-    for (int i=0; i<nChannels; i++)
-    {
-        limits[i][0] = 1209;//-1*pow(2,11);
-        limits[i][1] = 11059;//pow(2,14)*1.6;
-    }
-
-}
-
-void SpikePlot::getBestDimensions(int* w, int* h)
-{
-    switch (plotType)
-    {
-        case TETRODE_PLOT:
-            *w = 4;
-            *h = 2;
-            break;
-        case STEREO_PLOT:
-            *w = 2;
-            *h = 1;
-            break;
-        case SINGLE_PLOT:
-            *w = 1;
-            *h = 1;
-            break;
-        default:
-            *w = 1;
-            *h = 1;
-            break;
-    }
-}
-
-void SpikePlot::clear()
-{
-    std::cout<<"SpikePlot::clear()"<<std::endl;
-    for (int i=0; i<nWaveAx; i++)
-        wAxes[i].clear();
-    for (int i=0; i<nProjAx; i++)
-        pAxes[i].clear();
-}
-
-
-bool SpikePlot::processKeyEvent(SimpleKeyEvent k)
-{
-
-    return true;
-}
-
-void SpikePlot::pan(int dim, bool up)
-{
-
-    std::cout<<"SpikePlot::pan() dim:"<<dim<<std::endl;
-
-    int mean = (limits[dim][0] + limits[dim][1])/2;
-    int dLim = limits[dim][1] - mean;
-
-    if (up)
-        mean = mean + dLim/20;
-    else
-        mean = mean - dLim/20;
-
-    limits[dim][0] = mean-dLim;
-    limits[dim][1] = mean+dLim;
-
-    setLimitsOnAxes();
-}
-void SpikePlot::zoom(int dim, bool in)
-{
-    std::cout<<"SpikePlot::zoom()"<<std::endl;
-
-    int mean = (limits[dim][0] + limits[dim][1])/2;
-    int dLim = limits[dim][1] - mean;
-
-    if (in)
-        dLim = dLim * .90;
-    else
-        dLim = dLim / .90;
-
-    limits[dim][0] = mean-dLim;
-    limits[dim][1] = mean+dLim;
-
-    setLimitsOnAxes();
-}
-
-
diff --git a/Source/Processors/Visualization/SpikePlotting/SpikePlot.h b/Source/Processors/Visualization/SpikePlotting/SpikePlot.h
deleted file mode 100755
index de78863de40218f8f8b71106d0683cd82f6b3c30..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/SpikePlot.h
+++ /dev/null
@@ -1,95 +0,0 @@
-#ifndef SPIKE_PLOT_H_
-#define SPIKE_PLOT_H_
-
-#if defined(__linux__)
-#include <GL/glut.h>
-#else
-#include <GLUT/glut.h>
-#endif
-#include <list>
-#include <math.h>
-
-#include "WaveAxes.h"
-#include "ProjectionAxes.h"
-#include "BaseUIElement.h"
-#include "PlotUtils.h"
-#include "SimpleKeyEvent.h"
-
-#define TETRODE_PLOT 1004
-#define STEREO_PLOT  1002
-#define SINGLE_PLOT  1001
-//#define HIST_PLOT    1000 // perhaps we'll use hist plots at a later date but not for now
-
-
-/**
-
-  Class for drawing the waveforms and projections of incoming spikes.
-
-*/
-
-class SpikePlot : public BaseUIElement
-{
-
-    bool enabled;
-
-    bool limitsChanged;
-
-    static const int MAX_N_CHAN = 4;
-    static const int MAX_N_PROJ = 6;
-
-    int nChannels;
-    int plotType;
-    int nWaveAx;
-    int nProjAx;
-
-    double limits[MAX_N_CHAN][2];
-
-    WaveAxes wAxes[MAX_N_CHAN];
-    ProjectionAxes pAxes[MAX_N_PROJ];
-
-
-
-    // void zoomAxes(int n, bool xdim, int zoomval);
-    // void zoomProjection (int n, bool xdim, int zoomval);
-    // void zoomWaveform (int n, bool xdim, int zoomval);
-
-    // void panAxes(int n, bool xdim, int panval);
-    // void panProjection (int n, bool xdim, int panval);
-    // void panWaveform(int n, bool xdim, int panval);
-
-    void initLimits();
-    void setLimitsOnAxes();
-    void updateAxesPositions();
-
-
-public:
-    SpikePlot();
-    SpikePlot(int x, int y,int w,int h, int pType);
-    virtual ~SpikePlot();
-
-    void initAxes();
-    void redraw();
-
-    void setEnabled(bool enabled);
-    bool getEnabled();
-    void setPosition(int,int,double,double);
-
-    void getBestDimensions(int*, int*);
-
-    void mouseDown(int x, int y);
-
-    void mouseDragX(int dx, bool shift, bool ctr);
-    void mouseDragY(int dy, bool shift, bool ctr);
-
-    bool processKeyEvent(SimpleKeyEvent k);
-
-    void processSpikeObject(SpikeObject s);
-
-    void clear();
-    void zoom(int, bool);
-    void pan(int, bool);
-};
-
-
-
-#endif
diff --git a/Source/Processors/Visualization/SpikePlotting/WaveAxes.cpp b/Source/Processors/Visualization/SpikePlotting/WaveAxes.cpp
deleted file mode 100755
index df776299ecf6cc29918c73d4ebc2ac3c4b7506d6..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/WaveAxes.cpp
+++ /dev/null
@@ -1,225 +0,0 @@
-#include "WaveAxes.h"
-
-WaveAxes::WaveAxes()
-    : GenericAxes(),
-      drawWaveformLine(true),
-      drawWaveformPoints(false),
-      overlay(false),
-      drawGrid(true),
-      convertLabelUnits(true)
-{
-    GenericAxes::gotFirstSpike = false;
-
-    ylims[0] = 0;
-    ylims[1] = 1;
-    setWaveformColor(1.0,1.0,0.6);
-    setThresholdColor(1.0, 0.1, 0.1);
-    setGridColor(0.4, 0.2, 0.2);
-}
-
-WaveAxes::WaveAxes(int x, int y, double w, double h, int t)
-    : GenericAxes(x,y,w,h,t),
-      drawWaveformLine(true),
-      drawWaveformPoints(false),
-      overlay(false),
-      drawGrid(true),
-      convertLabelUnits(true)
-{
-    GenericAxes::gotFirstSpike = false;
-
-    setWaveformColor(1.0,1.0,0.6);
-    setThresholdColor(1.0, 0.1, 0.1);
-    setGridColor(0.2, 0.2, 0.2);
-
-}
-
-void WaveAxes::updateSpikeData(SpikeObject newSpike)
-{
-    //std::cout<<"WaveAxes::updateSpikeData()"<<std::endl;
-    GenericAxes::updateSpikeData(newSpike);
-
-}
-
-void WaveAxes::redraw()
-{
-
-    BaseUIElement::redraw();
-
-    plot();
-
-    BaseUIElement::drawElementEdges();
-}
-
-
-void WaveAxes::plot()
-{
-
-    int chan = 0;
-
-    // If no spikes have been received then don't plot anything
-    if (!gotFirstSpike)
-    {
-        //std::cout<<"\tWaiting for the first spike"<<std::endl;
-        return;
-    }
-
-    //setYLims(-20000,20000);
-
-    // Set the plotting range for the current axes the xlims member is ignored as the xdims are 0->number of samples per waveform minus one
-    // so the line goes all the way to the edges ydims are specified by the ylims vector
-    setViewportRange(0, ylims[0], s.nSamples-1, ylims[1]);
-    //setViewportRange(0, -2000, s.nSamples-1, 20000);
-
-    //std::cout << "ylims set to " << ylims[0] << " " << ylims[1] << std::endl;
-
-    // draw the grid lines for the waveforms?
-    if (drawGrid)
-        drawWaveformGrid(s.threshold[chan], s.gain[chan]);
-
-
-    //std::cout << "ylims set to " << ylims[0] << " " << ylims[1] << std::endl;
-
-    //compute the spatial width for each waveform sample
-    float dx = 1;
-    float x = 0;
-
-    // type corresponds to channel so we need to calculate the starting
-    // sample based upon which channel is getting plotted
-    // type values are defined in PlotUtils.h
-    int	sampIdx = s.nSamples * type; //
-    //std::cout<<"Starting with idx:"<<sampIdx<<std::endl;
-
-
-    //Draw the individual waveform points connected with a line
-    glColor3fv(waveColor);
-    glLineWidth(2);
-    glBegin(GL_LINE_STRIP);
-
-    int dSamples = 1;
-    for (int i = 0; i < s.nSamples; i++)
-    {
-        //std::cout<<"\t"<<s.data[sampIdx];
-        glVertex2f(x, s.data[sampIdx] - 32768);
-        sampIdx += dSamples;
-        x +=dx;
-    }
-
-    glEnd();
-
-
-    //Draw the threshold line and label
-    glColor3fv(thresholdColor);
-    glLineWidth(1);
-    glLineStipple(4, 0xAAAA); // make a dashed line
-    glEnable(GL_LINE_STIPPLE);
-
-    glBegin(GL_LINE_STRIP);
-    glVertex2f(0, s.threshold[chan]);
-    glVertex2f(s.nSamples, s.threshold[chan]);
-    glEnd();
-
-    glDisable(GL_LINE_STIPPLE);
-
-    char cstr[100] = {0};
-
-    makeLabel(s.threshold[chan], s.gain[chan], convertLabelUnits, cstr);
-    String str = String(cstr);
-
-    float yOffset = (ylims[1] - ylims[0])/BaseUIElement::height * 2;
-    drawString(1 ,s.threshold[chan] + yOffset, 15, str, font);
-}
-
-void WaveAxes::drawWaveformGrid(int thold, int gain)
-{
-
-    //setYLims(-20000,20000);
-
-    double voltRange = ylims[1] - ylims[0];
-    double pixelRange = BaseUIElement::height;
-    //This is a totally arbitrary value that seemed to lok the best for me
-    int minPixelsPerTick = 25;
-    int MAX_N_TICKS = 10;
-
-    int nTicks = pixelRange / minPixelsPerTick;
-    while (nTicks > MAX_N_TICKS)
-    {
-        minPixelsPerTick += 5;
-        nTicks = pixelRange / minPixelsPerTick;
-    }
-
-    int voltPerTick = (voltRange / nTicks);
-
-    glColor3fv(gridColor);
-
-    glLineWidth(1);
-    char cstr[200] = {0};
-    String str;
-
-    double tickVoltage = thold;
-
-    // If the limits are bad we don't want to hang the program trying to draw too many ticks
-    // so count the number of ticks drawn and kill the routine after 100 draws
-    int tickCount=0;
-    while (tickVoltage < ylims[1] - voltPerTick*1.5) // Draw the ticks above the thold line
-    {
-        tickVoltage = roundUp(tickVoltage + voltPerTick, 100);
-
-        glBegin(GL_LINE_STRIP);
-        glVertex2i(0, tickVoltage);
-        glVertex2i(s.nSamples, tickVoltage);
-        glEnd();
-
-        makeLabel(tickVoltage, gain, convertLabelUnits, cstr);
-        str = String(cstr);
-        drawString(1, tickVoltage+voltPerTick/10, 15, str, font);
-
-        if (tickCount++>100)
-            return;
-    }
-
-    tickVoltage = thold;
-    tickCount = 0;
-
-    while (tickVoltage > ylims[0] + voltPerTick) // draw the ticks below the thold line
-    {
-        tickVoltage = roundUp(tickVoltage - voltPerTick, 100);
-
-        glBegin(GL_LINE_STRIP);
-        glVertex2i(0, tickVoltage);
-        glVertex2i(s.nSamples, tickVoltage);
-        glEnd();
-
-        makeLabel(tickVoltage, gain, convertLabelUnits, cstr);
-        str = String(cstr);
-        drawString(1, tickVoltage+voltPerTick/10, 15, str, font);
-
-        if (tickCount++>100)
-            return;
-    }
-
-
-}
-
-void WaveAxes::setWaveformColor(GLfloat r, GLfloat g, GLfloat b)
-{
-    waveColor[0] = r;
-    waveColor[1] = g;
-    waveColor[2] = b;
-}
-void WaveAxes::setThresholdColor(GLfloat r, GLfloat g, GLfloat b)
-{
-    thresholdColor[0] = r;
-    thresholdColor[1] = g;
-    thresholdColor[2] = b;
-}
-// void WaveAxes::setPointColor(GLfloat r, GLfloat g, GLfloat b){
-// 	pointColor[0] = r;
-// 	pointColor[1] = g;
-// 	pointColor[2] = b;
-// }
-void WaveAxes::setGridColor(GLfloat r, GLfloat g, GLfloat b)
-{
-    gridColor[0] = r;
-    gridColor[1] = g;
-    gridColor[2] = b;
-}
diff --git a/Source/Processors/Visualization/SpikePlotting/WaveAxes.h b/Source/Processors/Visualization/SpikePlotting/WaveAxes.h
deleted file mode 100755
index 2d45d68738b211ebd3e1a2851e5d91ad7369d7b7..0000000000000000000000000000000000000000
--- a/Source/Processors/Visualization/SpikePlotting/WaveAxes.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef WAVE_AXES_H
-#define WAVE_AXES_H
-
-#if defined(__linux__)
-#include <GL/glut.h>
-#else
-#include <GLUT/glut.h>
-#endif
-#include <stdlib.h>
-#include "BaseUIElement.h"
-#include "../SpikeObject.h"
-#include "PlotUtils.h"
-#include "GenericAxes.h"
-
-/**
-
-  Class for drawing spike waveforms.
-
-*/
-
-class WaveAxes: public GenericAxes
-{
-
-    GLfloat waveColor[3];
-    GLfloat thresholdColor[3];
-    GLfloat gridColor[3];
-
-
-    void drawWaveformGrid(int thold, int gain);
-
-protected:
-    void plot();
-
-
-public:
-    WaveAxes();
-    WaveAxes(int x, int y, double w, double h, int t);
-    virtual ~WaveAxes() {}
-
-    void updateSpikeData(SpikeObject s);
-
-    void setWaveformColor(GLfloat r, GLfloat g, GLfloat b);
-    void setThresholdColor(GLfloat r, GLfloat g, GLfloat b);
-    void setGridColor(GLfloat, GLfloat, GLfloat);
-
-    void redraw();
-
-    bool drawWaveformLine;
-    bool drawWaveformPoints;
-    bool overlay;
-    bool drawGrid;
-    bool convertLabelUnits;
-
-};
-
-
-
-#endif
diff --git a/Source/Processors/Visualization/Visualizer.h b/Source/Processors/Visualization/Visualizer.h
index 0e23f3d2cfcb3af037fc5a808728ac1f2b5018b7..144dd73f0e8e78f8cf77b2da1ef9589a7ac1f285 100755
--- a/Source/Processors/Visualization/Visualizer.h
+++ b/Source/Processors/Visualization/Visualizer.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/WiFiOutput.cpp b/Source/Processors/WiFiOutput/WiFiOutput.cpp
similarity index 94%
rename from Source/Processors/WiFiOutput.cpp
rename to Source/Processors/WiFiOutput/WiFiOutput.cpp
index a3c5c9e0d32d4f6803b53e5456e39175933bb223..cf52d9091b5601fa19203942704b571b474ff1d0 100755
--- a/Source/Processors/WiFiOutput.cpp
+++ b/Source/Processors/WiFiOutput/WiFiOutput.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/WiFiOutput.h b/Source/Processors/WiFiOutput/WiFiOutput.h
similarity index 84%
rename from Source/Processors/WiFiOutput.h
rename to Source/Processors/WiFiOutput/WiFiOutput.h
index 1400de5aa08a2c9ef1b883743a3457ff2b282656..b2d35d436249bd967b18406c9c58341c6cf52cfe 100755
--- a/Source/Processors/WiFiOutput.h
+++ b/Source/Processors/WiFiOutput/WiFiOutput.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,11 +25,11 @@
 #define __WIFIOUTPUT_H_94D625CE__
 
 
-#include "../../JuceLibraryCode/JuceHeader.h"
-#include "GenericProcessor.h"
-#include "Editors/WiFiOutputEditor.h"
+#include "../../../JuceLibraryCode/JuceHeader.h"
+#include "../GenericProcessor/GenericProcessor.h"
+#include "WiFiOutputEditor.h"
 
-#include "../Network/PracticalSocket.h"  // For UDPSocket and SocketException
+#include "../../Network/PracticalSocket.h"  // For UDPSocket and SocketException
 
 /**
 
diff --git a/Source/Processors/Editors/WiFiOutputEditor.cpp b/Source/Processors/WiFiOutput/WiFiOutputEditor.cpp
similarity index 94%
rename from Source/Processors/Editors/WiFiOutputEditor.cpp
rename to Source/Processors/WiFiOutput/WiFiOutputEditor.cpp
index 5b8b679736f3dd4c3893431ba191d316c039ef45..65bc32d3d7fa0b8c79f0bc44e9d061a0524ef5d4 100755
--- a/Source/Processors/Editors/WiFiOutputEditor.cpp
+++ b/Source/Processors/WiFiOutput/WiFiOutputEditor.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/Processors/Editors/WiFiOutputEditor.h b/Source/Processors/WiFiOutput/WiFiOutputEditor.h
similarity index 89%
rename from Source/Processors/Editors/WiFiOutputEditor.h
rename to Source/Processors/WiFiOutput/WiFiOutputEditor.h
index d31e613ac29ece80352a3cb747acb74ca9dfb171..c004aa543c994a21aadf1c475d1054d2645b2133 100755
--- a/Source/Processors/Editors/WiFiOutputEditor.h
+++ b/Source/Processors/WiFiOutput/WiFiOutputEditor.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,8 +25,8 @@
 #define __WIFIOUTPUTEDITOR_H_7161DB44__
 
 #include "../../../JuceLibraryCode/JuceHeader.h"
-#include "GenericEditor.h"
-#include "ImageIcon.h"
+#include "../Editors/GenericEditor.h"
+#include "../Editors/ImageIcon.h"
 
 class ImageIcon;
 
diff --git a/Source/UI/ControlPanel.cpp b/Source/UI/ControlPanel.cpp
index 5034b7d898d4ce13e6aa1bb32ba98e905cb78881..466bdc799d3bf4305b0b8406b82fcf72ce20da86 100755
--- a/Source/UI/ControlPanel.cpp
+++ b/Source/UI/ControlPanel.cpp
@@ -1,23 +1,23 @@
 /*
-    ------------------------------------------------------------------
+------------------------------------------------------------------
 
-    This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+This file is part of the Open Ephys GUI
+Copyright (C) 2014 Open Ephys
 
-    ------------------------------------------------------------------
+------------------------------------------------------------------
 
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
 
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 */
 
@@ -25,6 +25,7 @@
 #include "UIComponent.h"
 #include <stdio.h>
 #include <math.h>
+#include "../Processors/RecordNode/RecordEngine.h"
 
 PlayButton::PlayButton()
     : DrawableButton("PlayButton", DrawableButton::ImageFitted)
@@ -363,7 +364,7 @@ void ControlPanelButton::setState(bool b)
 
 
 ControlPanel::ControlPanel(ProcessorGraph* graph_, AudioComponent* audio_)
-    : graph(graph_), audio(audio_), initialize(true), open(false)
+    : graph(graph_), audio(audio_), initialize(true), open(false), lastEngineIndex(-1)
 {
 
     if (1)
@@ -400,6 +401,22 @@ ControlPanel::ControlPanel(ProcessorGraph* graph_, AudioComponent* audio_)
     cpb = new ControlPanelButton(this);
     addAndMakeVisible(cpb);
 
+    recordSelector = new ComboBox();
+    recordSelector->addListener(this);
+    for (int i =0; i < RecordEngineManager::getNumOfBuiltInEngines(); i++)
+    {
+        RecordEngineManager* rem = RecordEngineManager::createBuiltInEngineManager(i);
+        recordSelector->addItem(rem->getName(),i+1);
+        recordEngines.add(rem);
+    }
+    addChildComponent(recordSelector);
+
+    recordOptionsButton = new UtilityButton("R",Font("Small Text", 15, Font::plain));
+    recordOptionsButton->setEnabledState(true);
+    recordOptionsButton->addListener(this);
+    recordOptionsButton->setTooltip("Configure options for selected record engine");
+    addChildComponent(recordOptionsButton);
+
     newDirectoryButton = new UtilityButton("+", Font("Small Text", 15, Font::plain));
     newDirectoryButton->setEnabledState(false);
     newDirectoryButton->addListener(this);
@@ -476,14 +493,19 @@ void ControlPanel::updateChildComponents()
 
     filenameComponent->addListener(getProcessorGraph()->getRecordNode());
     getProcessorGraph()->getRecordNode()->filenameComponentChanged(filenameComponent);
+    recordSelector->setSelectedId(1,sendNotificationSync);
 
 }
 
 void ControlPanel::createPaths()
 {
-    int w = getWidth() - 325;
+    /*  int w = getWidth() - 325;
     if (w > 150)
-        w = 150;
+    w = 150;*/
+
+    int w = getWidth() - 435;
+    if (w > 22)
+        w = 22;
 
     int h1 = getHeight()-32;
     int h2 = getHeight();
@@ -607,6 +629,12 @@ void ControlPanel::resized()
     {
         int topBound = getHeight()-h+10-5;
 
+        recordSelector->setBounds((w - 435) > 40 ? 35 : w-450, topBound, 100, h-10);
+        recordSelector->setVisible(true);
+
+        recordOptionsButton->setBounds((w - 435) > 40 ? 140 : w-350,topBound, h-10, h-10);
+        recordOptionsButton->setVisible(true);
+
         filenameComponent->setBounds(165, topBound, w-500, h-10);
         filenameComponent->setVisible(true);
 
@@ -630,6 +658,8 @@ void ControlPanel::resized()
         prependText->setVisible(false);
         dateText->setVisible(false);
         appendText->setVisible(false);
+        recordSelector->setVisible(false);
+        recordOptionsButton->setVisible(false);
     }
 
     repaint();
@@ -708,6 +738,9 @@ void ControlPanel::buttonClicked(Button* button)
 
             if (graph->enableProcessors()) // start the processor graph
             {
+                if (recordEngines[recordSelector->getSelectedId()-1]->isWindowOpen())
+                    recordEngines[recordSelector->getSelectedId()-1]->toggleConfigWindow();
+
                 audio->beginCallbacks();
                 masterClock->start();
                 audioEditor->disable();
@@ -716,6 +749,8 @@ void ControlPanel::buttonClicked(Button* button)
                 startTimer(250); // refresh every 250 ms
 
             }
+            recordSelector->setEnabled(false);
+            recordOptionsButton->setEnabled(false);
         }
         else
         {
@@ -732,6 +767,8 @@ void ControlPanel::buttonClicked(Button* button)
             stopTimer();
             startTimer(60000); // back to refresh every minute
             audioEditor->enable();
+            recordSelector->setEnabled(true);
+            recordOptionsButton->setEnabled(true);
 
         }
 
@@ -750,6 +787,9 @@ void ControlPanel::buttonClicked(Button* button)
             {
                 if (graph->enableProcessors()) // start the processor graph
                 {
+                    if (recordEngines[recordSelector->getSelectedId()-1]->isWindowOpen())
+                        recordEngines[recordSelector->getSelectedId()-1]->toggleConfigWindow();
+
                     audio->beginCallbacks();
                     masterClock->start();
                     audioEditor->disable();
@@ -760,6 +800,8 @@ void ControlPanel::buttonClicked(Button* button)
                     startRecording();
 
                     playButton->setToggleState(true, dontSendNotification);
+                    recordSelector->setEnabled(false);
+                    recordOptionsButton->setEnabled(false);
 
                 }
             }
@@ -770,6 +812,45 @@ void ControlPanel::buttonClicked(Button* button)
         }
     }
 
+    if (button == recordOptionsButton)
+    {
+        int id = recordSelector->getSelectedId()-1;
+        if (id < 0) return;
+
+        recordEngines[id]->toggleConfigWindow();
+    }
+
+}
+
+void ControlPanel::comboBoxChanged(ComboBox* combo)
+{
+    if (lastEngineIndex >= 0)
+    {
+        if (recordEngines[lastEngineIndex]->isWindowOpen())
+            recordEngines[lastEngineIndex]->toggleConfigWindow();
+    }
+    RecordEngine* re;
+    getProcessorGraph()->getRecordNode()->clearRecordEngines();
+    if (combo->getSelectedId() > 0)
+    {
+        re = recordEngines[combo->getSelectedId()-1]->instantiateEngine();
+    }
+    else
+    {
+        std::cout << "Engine ComboBox: Bad ID" << std::endl;
+        combo->setSelectedId(1,dontSendNotification);
+        re = recordEngines[0]->instantiateEngine();
+    }
+    re->setUIComponent(getUIComponent());
+    re->registerManager(recordEngines[combo->getSelectedId()-1]);
+    getProcessorGraph()->getRecordNode()->registerRecordEngine(re);
+
+    graph->getRecordNode()->newDirectoryNeeded = true;
+    newDirectoryButton->setEnabledState(false);
+    masterClock->resetRecordTime();
+
+    dateText->setColour(Label::textColourId, Colours::grey);
+    lastEngineIndex=combo->getSelectedId()-1;
 }
 
 void ControlPanel::disableCallbacks()
@@ -792,10 +873,10 @@ void ControlPanel::disableCallbacks()
 
     playButton->setToggleState(false, dontSendNotification);
     recordButton->setToggleState(false, dontSendNotification);
+    recordSelector->setEnabled(true);
     masterClock->stopRecording();
     masterClock->stop();
 
-
 }
 
 // void ControlPanel::actionListenerCallback(const String & msg)
@@ -903,9 +984,19 @@ void ControlPanel::saveStateToXml(XmlElement* xml)
     controlPanelState->setAttribute("isOpen",open);
     controlPanelState->setAttribute("prependText",prependText->getText());
     controlPanelState->setAttribute("appendText",appendText->getText());
+    controlPanelState->setAttribute("recordEngine",recordSelector->getSelectedId());
 
     audioEditor->saveStateToXml(xml);
 
+    XmlElement* recordEnginesState = xml->createNewChildElement("RECORDENGINES");
+    for (int i=0; i < recordEngines.size(); i++)
+    {
+        XmlElement* reState = recordEnginesState->createNewChildElement("ENGINE");
+        reState->setAttribute("id",recordEngines[i]->getID());
+        reState->setAttribute("name",recordEngines[i]->getName());
+        recordEngines[i]->saveParametersToXml(reState);
+    }
+
 }
 
 void ControlPanel::loadStateFromXml(XmlElement* xml)
@@ -918,11 +1009,23 @@ void ControlPanel::loadStateFromXml(XmlElement* xml)
 
             appendText->setText(xmlNode->getStringAttribute("appendText", ""), dontSendNotification);
             prependText->setText(xmlNode->getStringAttribute("prependText", ""), dontSendNotification);
+            recordSelector->setSelectedId(xmlNode->getIntAttribute("recordEngine",1), sendNotificationSync);
 
             bool isOpen = xmlNode->getBoolAttribute("isOpen");
             openState(isOpen);
 
         }
+        else if (xmlNode->hasTagName("RECORDENGINES"))
+        {
+            for (int i = 0; i < recordEngines.size(); i++)
+            {
+                forEachXmlChildElementWithTagName(*xmlNode,xmlEngine,"ENGINE")
+                {
+                    if (xmlEngine->getStringAttribute("id") == recordEngines[i]->getID())
+                        recordEngines[i]->loadParametersFromXml(xmlEngine);
+                }
+            }
+        }
     }
 
     audioEditor->loadStateFromXml(xml);
diff --git a/Source/UI/ControlPanel.h b/Source/UI/ControlPanel.h
index 2e623282d7742f1a6255c25fedc2f4fa58c3ec5f..9ac30aef6580471fc41922b4d2ff472971547959 100755
--- a/Source/UI/ControlPanel.h
+++ b/Source/UI/ControlPanel.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -26,9 +26,9 @@
 
 #include "../../JuceLibraryCode/JuceHeader.h"
 #include "../Audio/AudioComponent.h"
-#include "../Processors/Editors/AudioEditor.h"
-#include "../Processors/ProcessorGraph.h"
-#include "../Processors/RecordNode.h"
+#include "../Processors/AudioNode/AudioEditor.h"
+#include "../Processors/ProcessorGraph/ProcessorGraph.h"
+#include "../Processors/RecordNode/RecordNode.h"
 #include "CustomLookAndFeel.h"
 #include "../AccessClass.h"
 #include "../Processors/Editors/GenericEditor.h" // for UtilityButton
@@ -163,8 +163,6 @@ private:
   The Clock uses built-in JUCE functions for getting the system time. It does not
   currently interact with timestamps from ProcessorGraph sources.
 
-  The Clock draws the time using OpenGL (and the FTGL font library).
-
   @see ControlPanel
 
 */
@@ -277,7 +275,8 @@ class ControlPanel : public Component,
     public Button::Listener,
     public Timer,
     public AccessClass,
-    public Label::Listener
+    public Label::Listener,
+    public ComboBox::Listener
 
 {
 public:
@@ -352,6 +351,8 @@ private:
     ScopedPointer<UtilityButton> newDirectoryButton;
     ScopedPointer<ControlPanelButton> cpb;
 
+    ScopedPointer<ComboBox> recordSelector;
+
     ScopedPointer<Label> prependText;
     ScopedPointer<Label> dateText;
     ScopedPointer<Label> appendText;
@@ -366,6 +367,8 @@ private:
 
     void buttonClicked(Button* button);
 
+    void comboBoxChanged(ComboBox* combo);
+
     bool initialize;
 
     /** Adds the RecordNode as a listener of the FilenameComponent
@@ -391,6 +394,10 @@ private:
 
     Colour backgroundColour;
 
+    OwnedArray<RecordEngineManager> recordEngines;
+    ScopedPointer<UtilityButton> recordOptionsButton;
+    int lastEngineIndex;
+
 };
 
 
diff --git a/Source/UI/CustomLookAndFeel.cpp b/Source/UI/CustomLookAndFeel.cpp
index d193f87a9d1dcf2840093fd8411aa3236c8352ff..77c02117b46d85a58e170e270672c4fbc75c5c90 100755
--- a/Source/UI/CustomLookAndFeel.cpp
+++ b/Source/UI/CustomLookAndFeel.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/UI/CustomLookAndFeel.h b/Source/UI/CustomLookAndFeel.h
index e6107fe01982f0d6f5a1a74e8f753f272d445cd5..35b708ceb051db233848f05c9718573a0e2b1754 100755
--- a/Source/UI/CustomLookAndFeel.h
+++ b/Source/UI/CustomLookAndFeel.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/UI/DataViewport.cpp b/Source/UI/DataViewport.cpp
index d0b0331af8a8d690dfe8f3c74b64c63e1a693d02..f97a3849aec6c44c5734680248d45d36af8d21a1 100755
--- a/Source/UI/DataViewport.cpp
+++ b/Source/UI/DataViewport.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -27,7 +27,7 @@
 
 DataViewport::DataViewport() :
     TabbedComponent(TabbedButtonBar::TabsAtRight),
-    tabDepth(32), shutdown(false), tabIndex(0)
+    tabDepth(32), tabIndex(0), shutdown(false)
 {
 
     tabArray.clear();
@@ -74,7 +74,7 @@ int DataViewport::addTabToDataViewport(String name, Component* component, Generi
 
     editorArray.add(editor);
 
-    //  std::cout << "Adding tab with index " << tabIndex << std::endl;
+    std::cout << "Adding tab with index " << tabIndex << std::endl;
 
     setCurrentTabIndex(tabArray.size()-1);
 
@@ -97,8 +97,8 @@ void DataViewport::destroyTab(int index)
     int newIndex = tabArray.indexOf(index);
 
     tabArray.remove(newIndex);
-    editorArray.remove(newIndex);
-
+    editorArray.remove(newIndex); // do this after the editor has been refreshed
+    
     removeTab(newIndex);
 
     if (tabArray.size() == 0)
@@ -116,18 +116,12 @@ void DataViewport::disableConnectionToEditorViewport()
 
 void DataViewport::currentTabChanged(int newIndex, const String& newTabName)
 {
-    // OpenGLCanvas* canvas = (OpenGLCanvas*) getTabContentComponent(newIndex);
-
-    // if (canvas != 0) {
-    //     canvas->refreshState();
-    // }
-
     // std::cout << "CURRENT TAB CHANGED" << std::endl;
     //std::cout << "number of editors remaining: " << editorArray.size() << std::endl;
 
     if (!shutdown)
     {
-        getEditorViewport()->makeEditorVisible(editorArray[newIndex]);
+        //getEditorViewport()->makeEditorVisible(editorArray[newIndex]);
         getTopLevelComponent()->repaint();
     }
 }
diff --git a/Source/UI/DataViewport.h b/Source/UI/DataViewport.h
index dfb5e44171dc1091cdafe07e8d1159e52996a0c6..8e73a2523c35ec41e46239417dfe02c8f36af4e9 100755
--- a/Source/UI/DataViewport.h
+++ b/Source/UI/DataViewport.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/UI/EcubeDialogComponent.cpp b/Source/UI/EcubeDialogComponent.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8db0f41bcd338314cd6a8cfea3b2e4c2e9884d84
--- /dev/null
+++ b/Source/UI/EcubeDialogComponent.cpp
@@ -0,0 +1,419 @@
+/*
+  ==============================================================================
+
+  This is an automatically generated GUI class created by the Introjucer!
+
+  Be careful when adding custom code to these files, as only the code within
+  the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
+  and re-saved.
+
+  Created with Introjucer version: 3.1.0
+
+  ------------------------------------------------------------------------------
+
+  The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
+  Copyright 2004-13 by Raw Material Software Ltd.
+
+  ==============================================================================
+*/
+
+//[Headers] You can add your own extra header files here...
+//[/Headers]
+
+#include "EcubeDialogComponent.h"
+
+
+//[MiscUserDefs] You can add your own user definitions and misc code here...
+//[/MiscUserDefs]
+
+//==============================================================================
+EcubeDialogComponent::EcubeDialogComponent ()
+{
+    addAndMakeVisible (laAddressLabel = new Label ("Address Label",
+                                                   TRANS("Network Address:")));
+    laAddressLabel->setFont (Font (15.00f, Font::plain));
+    laAddressLabel->setJustificationType (Justification::centredLeft);
+    laAddressLabel->setEditable (false, false, false);
+    laAddressLabel->setColour (TextEditor::textColourId, Colours::black);
+    laAddressLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
+
+    addAndMakeVisible (bnOK = new TextButton ("OK button"));
+    bnOK->setButtonText (TRANS("Connect"));
+    bnOK->addListener (this);
+
+    addAndMakeVisible (bnCancel = new TextButton ("Cancel Button"));
+    bnCancel->setButtonText (TRANS("Cancel"));
+    bnCancel->addListener (this);
+
+    addAndMakeVisible (comboModule = new ComboBox ("Module selection combobox"));
+    comboModule->setTooltip (TRANS("Choose eCube module"));
+    comboModule->setEditableText (false);
+    comboModule->setJustificationType (Justification::centredLeft);
+    comboModule->setTextWhenNothingSelected (String::empty);
+    comboModule->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
+    comboModule->addItem (TRANS("Headstage(s)"), 1);
+    comboModule->addItem (TRANS("Panel Analog Input"), 2);
+    comboModule->addItem (TRANS("Panel Digital Input"), 3);
+    comboModule->addListener (this);
+
+    addAndMakeVisible (labelModule = new Label ("Module selection label",
+                                                TRANS("Module")));
+    labelModule->setFont (Font (15.00f, Font::plain));
+    labelModule->setJustificationType (Justification::centredLeft);
+    labelModule->setEditable (false, false, false);
+    labelModule->setColour (TextEditor::textColourId, Colours::black);
+    labelModule->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
+
+    addAndMakeVisible (cbNetworkAddress = new ComboBox ("Network Address ComboBox"));
+    cbNetworkAddress->setEditableText (true);
+    cbNetworkAddress->setJustificationType (Justification::centredLeft);
+    cbNetworkAddress->setTextWhenNothingSelected (String::empty);
+    cbNetworkAddress->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
+    cbNetworkAddress->addListener (this);
+
+    addAndMakeVisible (groupComponent = new GroupComponent ("headstage group",
+                                                            TRANS("Headstage selection")));
+
+    addAndMakeVisible (toggleHeadstage1 = new ToggleButton ("Headstage1 button"));
+    toggleHeadstage1->setButtonText (TRANS("Headstage 1"));
+    toggleHeadstage1->addListener (this);
+
+    addAndMakeVisible (toggleHeadstage2 = new ToggleButton ("Headstage2 button"));
+    toggleHeadstage2->setButtonText (TRANS("Headstage 2"));
+    toggleHeadstage2->addListener (this);
+
+    addAndMakeVisible (toggleHeadstage3 = new ToggleButton ("Headstage3 button"));
+    toggleHeadstage3->setButtonText (TRANS("Headstage 3"));
+    toggleHeadstage3->addListener (this);
+
+    addAndMakeVisible (toggleHeadstage4 = new ToggleButton ("Headstage4 button"));
+    toggleHeadstage4->setButtonText (TRANS("Headstage 4"));
+    toggleHeadstage4->addListener (this);
+
+    addAndMakeVisible (toggleHeadstage5 = new ToggleButton ("Headstage5 button"));
+    toggleHeadstage5->setButtonText (TRANS("Headstage 5"));
+    toggleHeadstage5->addListener (this);
+
+    addAndMakeVisible (toggleHeadstage6 = new ToggleButton ("Headstage6 button"));
+    toggleHeadstage6->setButtonText (TRANS("Headstage 6"));
+    toggleHeadstage6->addListener (this);
+
+    addAndMakeVisible (toggleHeadstage7 = new ToggleButton ("Headstage7 button"));
+    toggleHeadstage7->setButtonText (TRANS("Headstage 7"));
+    toggleHeadstage7->addListener (this);
+
+    addAndMakeVisible (toggleHeadstage8 = new ToggleButton ("Headstage8 button"));
+    toggleHeadstage8->setButtonText (TRANS("Headstage 8"));
+    toggleHeadstage8->addListener (this);
+
+    addAndMakeVisible (toggleHeadstage9 = new ToggleButton ("Headstage9 button"));
+    toggleHeadstage9->setButtonText (TRANS("Headstage 9"));
+    toggleHeadstage9->addListener (this);
+
+    addAndMakeVisible (toggleHeadstage10 = new ToggleButton ("Headstage10 button"));
+    toggleHeadstage10->setButtonText (TRANS("Headstage 10"));
+    toggleHeadstage10->addListener (this);
+    toggleHeadstage10->setToggleState (true, dontSendNotification);
+
+
+    //[UserPreSize]
+    //[/UserPreSize]
+
+    setSize (310, 320);
+
+
+    //[Constructor] You can add your own custom stuff here..
+    //[/Constructor]
+}
+
+EcubeDialogComponent::~EcubeDialogComponent()
+{
+    //[Destructor_pre]. You can add your own custom destruction code here..
+    //[/Destructor_pre]
+
+    laAddressLabel = nullptr;
+    bnOK = nullptr;
+    bnCancel = nullptr;
+    comboModule = nullptr;
+    labelModule = nullptr;
+    cbNetworkAddress = nullptr;
+    groupComponent = nullptr;
+    toggleHeadstage1 = nullptr;
+    toggleHeadstage2 = nullptr;
+    toggleHeadstage3 = nullptr;
+    toggleHeadstage4 = nullptr;
+    toggleHeadstage5 = nullptr;
+    toggleHeadstage6 = nullptr;
+    toggleHeadstage7 = nullptr;
+    toggleHeadstage8 = nullptr;
+    toggleHeadstage9 = nullptr;
+    toggleHeadstage10 = nullptr;
+
+
+    //[Destructor]. You can add your own custom destruction code here..
+    //[/Destructor]
+}
+
+//==============================================================================
+void EcubeDialogComponent::paint (Graphics& g)
+{
+    //[UserPrePaint] Add your own custom painting code here..
+    //[/UserPrePaint]
+
+    g.fillAll (Colours::white);
+
+    //[UserPaint] Add your own custom painting code here..
+    //[/UserPaint]
+}
+
+void EcubeDialogComponent::resized()
+{
+    laAddressLabel->setBounds (16, 8, 150, 24);
+    bnOK->setBounds (24, 280, 112, 24);
+    bnCancel->setBounds (160, 280, 87, 24);
+    comboModule->setBounds (80, 72, 192, 24);
+    labelModule->setBounds (16, 72, 72, 24);
+    cbNetworkAddress->setBounds (24, 40, 248, 24);
+    groupComponent->setBounds (8, 104, 288, 160);
+    toggleHeadstage1->setBounds (24, 128, 112, 24);
+    toggleHeadstage2->setBounds (24, 152, 112, 24);
+    toggleHeadstage3->setBounds (24, 176, 112, 24);
+    toggleHeadstage4->setBounds (24, 200, 112, 24);
+    toggleHeadstage5->setBounds (24, 224, 112, 24);
+    toggleHeadstage6->setBounds (160, 128, 112, 24);
+    toggleHeadstage7->setBounds (160, 152, 112, 24);
+    toggleHeadstage8->setBounds (160, 176, 112, 24);
+    toggleHeadstage9->setBounds (160, 200, 112, 24);
+    toggleHeadstage10->setBounds (160, 224, 112, 24);
+    //[UserResized] Add your own custom resize handling here..
+    //[/UserResized]
+}
+
+void EcubeDialogComponent::buttonClicked (Button* buttonThatWasClicked)
+{
+    //[UserbuttonClicked_Pre]
+    //[/UserbuttonClicked_Pre]
+
+    if (buttonThatWasClicked == bnOK)
+    {
+        //[UserButtonCode_bnOK] -- add your button handler code here..
+        DialogWindow* dw = findParentComponentOfClass<DialogWindow>();
+        if (dw != nullptr)
+        {
+            dw->exitModalState(1);
+        }
+        //[/UserButtonCode_bnOK]
+    }
+    else if (buttonThatWasClicked == bnCancel)
+    {
+        //[UserButtonCode_bnCancel] -- add your button handler code here..
+        DialogWindow* dw = findParentComponentOfClass<DialogWindow>();
+        if (dw != nullptr)
+        {
+            dw->exitModalState(0);
+        }
+        //[/UserButtonCode_bnCancel]
+    }
+    else if (buttonThatWasClicked == toggleHeadstage1)
+    {
+        //[UserButtonCode_toggleHeadstage1] -- add your button handler code here..
+        //[/UserButtonCode_toggleHeadstage1]
+    }
+    else if (buttonThatWasClicked == toggleHeadstage2)
+    {
+        //[UserButtonCode_toggleHeadstage2] -- add your button handler code here..
+        //[/UserButtonCode_toggleHeadstage2]
+    }
+    else if (buttonThatWasClicked == toggleHeadstage3)
+    {
+        //[UserButtonCode_toggleHeadstage3] -- add your button handler code here..
+        //[/UserButtonCode_toggleHeadstage3]
+    }
+    else if (buttonThatWasClicked == toggleHeadstage4)
+    {
+        //[UserButtonCode_toggleHeadstage4] -- add your button handler code here..
+        //[/UserButtonCode_toggleHeadstage4]
+    }
+    else if (buttonThatWasClicked == toggleHeadstage5)
+    {
+        //[UserButtonCode_toggleHeadstage5] -- add your button handler code here..
+        //[/UserButtonCode_toggleHeadstage5]
+    }
+    else if (buttonThatWasClicked == toggleHeadstage6)
+    {
+        //[UserButtonCode_toggleHeadstage6] -- add your button handler code here..
+        //[/UserButtonCode_toggleHeadstage6]
+    }
+    else if (buttonThatWasClicked == toggleHeadstage7)
+    {
+        //[UserButtonCode_toggleHeadstage7] -- add your button handler code here..
+        //[/UserButtonCode_toggleHeadstage7]
+    }
+    else if (buttonThatWasClicked == toggleHeadstage8)
+    {
+        //[UserButtonCode_toggleHeadstage8] -- add your button handler code here..
+        //[/UserButtonCode_toggleHeadstage8]
+    }
+    else if (buttonThatWasClicked == toggleHeadstage9)
+    {
+        //[UserButtonCode_toggleHeadstage9] -- add your button handler code here..
+        //[/UserButtonCode_toggleHeadstage9]
+    }
+    else if (buttonThatWasClicked == toggleHeadstage10)
+    {
+        //[UserButtonCode_toggleHeadstage10] -- add your button handler code here..
+        //[/UserButtonCode_toggleHeadstage10]
+    }
+
+    //[UserbuttonClicked_Post]
+    //[/UserbuttonClicked_Post]
+}
+
+void EcubeDialogComponent::comboBoxChanged (ComboBox* comboBoxThatHasChanged)
+{
+    //[UsercomboBoxChanged_Pre]
+    //[/UsercomboBoxChanged_Pre]
+
+    if (comboBoxThatHasChanged == comboModule)
+    {
+        //[UserComboBoxCode_comboModule] -- add your combo box handling code here..
+        //[/UserComboBoxCode_comboModule]
+    }
+    else if (comboBoxThatHasChanged == cbNetworkAddress)
+    {
+        //[UserComboBoxCode_cbNetworkAddress] -- add your combo box handling code here..
+        //[/UserComboBoxCode_cbNetworkAddress]
+    }
+
+    //[UsercomboBoxChanged_Post]
+    //[/UsercomboBoxChanged_Post]
+}
+
+
+
+//[MiscUserCode] You can add your own definitions of your custom methods or any other code here...
+String EcubeDialogComponent::GetAddressValue()
+{
+    return cbNetworkAddress->getText();
+}
+
+String EcubeDialogComponent::GetModuleName()
+{
+    return comboModule->getText();
+}
+
+void EcubeDialogComponent::SetDeviceNames(const StringArray& names)
+{
+    for (int i = 0; i < names.size(); i++)
+    {
+        cbNetworkAddress->addItem(names[i], i+1);
+    }
+}
+
+void EcubeDialogComponent::GetHeadstageSelection(bool hs[10])
+{
+    for (int i = 0; i < 10; i++)
+        hs[i] = false;
+    if (toggleHeadstage1->getToggleState())
+        hs[0] = true;
+    if (toggleHeadstage2->getToggleState())
+        hs[1] = true;
+    if (toggleHeadstage3->getToggleState())
+        hs[2] = true;
+    if (toggleHeadstage4->getToggleState())
+        hs[3] = true;
+    if (toggleHeadstage5->getToggleState())
+        hs[4] = true;
+    if (toggleHeadstage6->getToggleState())
+        hs[5] = true;
+    if (toggleHeadstage7->getToggleState())
+        hs[6] = true;
+    if (toggleHeadstage8->getToggleState())
+        hs[7] = true;
+    if (toggleHeadstage9->getToggleState())
+        hs[8] = true;
+    if (toggleHeadstage10->getToggleState())
+        hs[9] = true;
+}
+
+//[/MiscUserCode]
+
+
+//==============================================================================
+#if 0
+/*  -- Introjucer information section --
+
+    This is where the Introjucer stores the metadata that describe this GUI layout, so
+    make changes in here at your peril!
+
+BEGIN_JUCER_METADATA
+
+<JUCER_COMPONENT documentType="Component" className="EcubeDialogComponent" componentName=""
+                 parentClasses="public Component" constructorParams="" variableInitialisers=""
+                 snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.330"
+                 fixedSize="0" initialWidth="310" initialHeight="320">
+  <BACKGROUND backgroundColour="ffffffff"/>
+  <LABEL name="Address Label" id="598e4f972ee19e11" memberName="laAddressLabel"
+         virtualName="" explicitFocusOrder="0" pos="16 8 150 24" edTextCol="ff000000"
+         edBkgCol="0" labelText="Network Address:" editableSingleClick="0"
+         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
+         fontsize="15" bold="0" italic="0" justification="33"/>
+  <TEXTBUTTON name="OK button" id="d46371ace0e2731f" memberName="bnOK" virtualName=""
+              explicitFocusOrder="0" pos="24 280 112 24" buttonText="Connect"
+              connectedEdges="0" needsCallback="1" radioGroupId="0"/>
+  <TEXTBUTTON name="Cancel Button" id="e57f56c355a79a42" memberName="bnCancel"
+              virtualName="" explicitFocusOrder="0" pos="160 280 87 24" buttonText="Cancel"
+              connectedEdges="0" needsCallback="1" radioGroupId="0"/>
+  <COMBOBOX name="Module selection combobox" id="937bd3c2684c1901" memberName="comboModule"
+            virtualName="" explicitFocusOrder="0" pos="80 72 192 24" tooltip="Choose eCube module"
+            editable="0" layout="33" items="Headstage(s)&#10;Panel Analog Input&#10;Panel Digital Input"
+            textWhenNonSelected="" textWhenNoItems="(no choices)"/>
+  <LABEL name="Module selection label" id="8db8f9471da84061" memberName="labelModule"
+         virtualName="" explicitFocusOrder="0" pos="16 72 72 24" edTextCol="ff000000"
+         edBkgCol="0" labelText="Module" editableSingleClick="0" editableDoubleClick="0"
+         focusDiscardsChanges="0" fontname="Default font" fontsize="15"
+         bold="0" italic="0" justification="33"/>
+  <COMBOBOX name="Network Address ComboBox" id="40e24a76fea3653c" memberName="cbNetworkAddress"
+            virtualName="" explicitFocusOrder="0" pos="24 40 248 24" editable="1"
+            layout="33" items="" textWhenNonSelected="" textWhenNoItems="(no choices)"/>
+  <GROUPCOMPONENT name="headstage group" id="8dee2bbe073f0f63" memberName="groupComponent"
+                  virtualName="" explicitFocusOrder="0" pos="8 104 288 160" title="Headstage selection"/>
+  <TOGGLEBUTTON name="Headstage1 button" id="c735dad1514586" memberName="toggleHeadstage1"
+                virtualName="" explicitFocusOrder="0" pos="24 128 112 24" buttonText="Headstage 1"
+                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
+  <TOGGLEBUTTON name="Headstage2 button" id="24f215ce96874781" memberName="toggleHeadstage2"
+                virtualName="" explicitFocusOrder="0" pos="24 152 112 24" buttonText="Headstage 2"
+                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
+  <TOGGLEBUTTON name="Headstage3 button" id="f035e57b5cc87d27" memberName="toggleHeadstage3"
+                virtualName="" explicitFocusOrder="0" pos="24 176 112 24" buttonText="Headstage 3"
+                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
+  <TOGGLEBUTTON name="Headstage4 button" id="6abc75f398861c5f" memberName="toggleHeadstage4"
+                virtualName="" explicitFocusOrder="0" pos="24 200 112 24" buttonText="Headstage 4"
+                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
+  <TOGGLEBUTTON name="Headstage5 button" id="3c5bb9c9db62f1bb" memberName="toggleHeadstage5"
+                virtualName="" explicitFocusOrder="0" pos="24 224 112 24" buttonText="Headstage 5"
+                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
+  <TOGGLEBUTTON name="Headstage6 button" id="306515c3b3ea7522" memberName="toggleHeadstage6"
+                virtualName="" explicitFocusOrder="0" pos="160 128 112 24" buttonText="Headstage 6"
+                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
+  <TOGGLEBUTTON name="Headstage7 button" id="704c88cd419204b0" memberName="toggleHeadstage7"
+                virtualName="" explicitFocusOrder="0" pos="160 152 112 24" buttonText="Headstage 7"
+                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
+  <TOGGLEBUTTON name="Headstage8 button" id="ba85df2f98d869d9" memberName="toggleHeadstage8"
+                virtualName="" explicitFocusOrder="0" pos="160 176 112 24" buttonText="Headstage 8"
+                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
+  <TOGGLEBUTTON name="Headstage9 button" id="16256502b9f60cd4" memberName="toggleHeadstage9"
+                virtualName="" explicitFocusOrder="0" pos="160 200 112 24" buttonText="Headstage 9"
+                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
+  <TOGGLEBUTTON name="Headstage10 button" id="fab4cbe0a6d27a36" memberName="toggleHeadstage10"
+                virtualName="" explicitFocusOrder="0" pos="160 224 112 24" buttonText="Headstage 10"
+                connectedEdges="0" needsCallback="1" radioGroupId="0" state="1"/>
+</JUCER_COMPONENT>
+
+END_JUCER_METADATA
+*/
+#endif
+
+
+//[EndFile] You can add extra defines here...
+//[/EndFile]
diff --git a/Source/UI/EcubeDialogComponent.h b/Source/UI/EcubeDialogComponent.h
new file mode 100644
index 0000000000000000000000000000000000000000..2f2da1addbd43d822d87bebfcc8a4201d7cdb40f
--- /dev/null
+++ b/Source/UI/EcubeDialogComponent.h
@@ -0,0 +1,92 @@
+/*
+  ==============================================================================
+
+  This is an automatically generated GUI class created by the Introjucer!
+
+  Be careful when adding custom code to these files, as only the code within
+  the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
+  and re-saved.
+
+  Created with Introjucer version: 3.1.0
+
+  ------------------------------------------------------------------------------
+
+  The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
+  Copyright 2004-13 by Raw Material Software Ltd.
+
+  ==============================================================================
+*/
+
+#ifndef __JUCE_HEADER_CDBC0626D3EB7016__
+#define __JUCE_HEADER_CDBC0626D3EB7016__
+
+//[Headers]     -- You can add your own extra header files here --
+#include "JuceHeader.h"
+//[/Headers]
+
+
+
+//==============================================================================
+/**
+                                                                    //[Comments]
+    An auto-generated component, created by the Introjucer.
+
+    Describe your class and how it works here!
+                                                                    //[/Comments]
+*/
+class EcubeDialogComponent  : public Component,
+                              public ButtonListener,
+                              public ComboBoxListener
+{
+public:
+    //==============================================================================
+    EcubeDialogComponent ();
+    ~EcubeDialogComponent();
+
+    //==============================================================================
+    //[UserMethods]     -- You can add your own custom methods in this section.
+    String GetAddressValue();
+    String GetModuleName();
+    void SetDeviceNames(const StringArray& names);
+    void GetHeadstageSelection(bool hs[10]);
+    //[/UserMethods]
+
+    void paint (Graphics& g);
+    void resized();
+    void buttonClicked (Button* buttonThatWasClicked);
+    void comboBoxChanged (ComboBox* comboBoxThatHasChanged);
+
+
+
+private:
+    //[UserVariables]   -- You can add your own custom variables in this section.
+    //[/UserVariables]
+
+    //==============================================================================
+    ScopedPointer<Label> laAddressLabel;
+    ScopedPointer<TextButton> bnOK;
+    ScopedPointer<TextButton> bnCancel;
+    ScopedPointer<ComboBox> comboModule;
+    ScopedPointer<Label> labelModule;
+    ScopedPointer<ComboBox> cbNetworkAddress;
+    ScopedPointer<GroupComponent> groupComponent;
+    ScopedPointer<ToggleButton> toggleHeadstage1;
+    ScopedPointer<ToggleButton> toggleHeadstage2;
+    ScopedPointer<ToggleButton> toggleHeadstage3;
+    ScopedPointer<ToggleButton> toggleHeadstage4;
+    ScopedPointer<ToggleButton> toggleHeadstage5;
+    ScopedPointer<ToggleButton> toggleHeadstage6;
+    ScopedPointer<ToggleButton> toggleHeadstage7;
+    ScopedPointer<ToggleButton> toggleHeadstage8;
+    ScopedPointer<ToggleButton> toggleHeadstage9;
+    ScopedPointer<ToggleButton> toggleHeadstage10;
+
+
+    //==============================================================================
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EcubeDialogComponent)
+};
+
+//[EndFile] You can add extra defines here...
+//[/EndFile]
+
+#endif   // __JUCE_HEADER_CDBC0626D3EB7016__
diff --git a/Source/UI/EditorViewport.cpp b/Source/UI/EditorViewport.cpp
index e7d0ecfba23f6deac4a5285d0dabe7e00255998d..f941881d0e3601371224ccf06e70fcbec2fc418c 100755
--- a/Source/UI/EditorViewport.cpp
+++ b/Source/UI/EditorViewport.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -265,19 +265,21 @@ void EditorViewport::itemDropped(const SourceDetails& dragSourceDetails)
                     editorArray[i]->deselect();
             }
 
-        }
+            // Instructions below were enclosed into the if block by Michael Borisov
+            // To allow for errors during creation of editors, in which case activeEditor will be ==0
 
-        insertionPoint = -1; // make sure all editors are left-justified
-        indexOfMovingComponent = -1;
-        refreshEditors();
+            insertionPoint = -1; // make sure all editors are left-justified
+            indexOfMovingComponent = -1;
+            refreshEditors();
 
-        somethingIsBeingDraggedOver = false;
+            somethingIsBeingDraggedOver = false;
 
-        getGraphViewer()->addNode(activeEditor);
+            getGraphViewer()->addNode(activeEditor);
 
-        repaint();
+            repaint();
 
-        currentId++;
+            currentId++;
+        }
 
     }
 }
@@ -349,6 +351,7 @@ void EditorViewport::deleteNode(GenericEditor* editor)
         editor->setVisible(false);
 
         signalChainManager->updateVisibleEditors(editor, indexOfMovingComponent, insertionPoint, REMOVE);
+        
         getGraphViewer()->removeNode(editor);
 
         refreshEditors();
@@ -360,8 +363,6 @@ void EditorViewport::deleteNode(GenericEditor* editor)
 
         somethingIsBeingDraggedOver = false;
 
-
-
         repaint();
 
     }
diff --git a/Source/UI/EditorViewport.h b/Source/UI/EditorViewport.h
index f79e08ea705dfc85f52cd969203a58cf7e9cb05d..1af46025a108b82219ba5ab17ae4e81385d0b8ce 100755
--- a/Source/UI/EditorViewport.h
+++ b/Source/UI/EditorViewport.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -25,10 +25,10 @@
 #define __EDITORVIEWPORT_H_80260F3F__
 
 #include "../../JuceLibraryCode/JuceHeader.h"
-#include "../Processors/ProcessorGraph.h"
+#include "../Processors/ProcessorGraph/ProcessorGraph.h"
 #include "../Processors/Editors/GenericEditor.h"
-#include "../Processors/Editors/SplitterEditor.h"
-#include "../Processors/Editors/MergerEditor.h"
+#include "../Processors/Splitter/SplitterEditor.h"
+#include "../Processors/Merger/MergerEditor.h"
 
 #include "../AccessClass.h"
 #include "ControlPanel.h"
diff --git a/Source/UI/EditorViewportButtons.cpp b/Source/UI/EditorViewportButtons.cpp
index 41941caba1f6f58847bb508cdb8d2d5a9706a67f..7f990f49f38150c7e1cc348ad2c431dad7417421 100755
--- a/Source/UI/EditorViewportButtons.cpp
+++ b/Source/UI/EditorViewportButtons.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/UI/EditorViewportButtons.h b/Source/UI/EditorViewportButtons.h
index a2c0a5fd45a4f195af3c08dfeaab0dda006eece5..783f159fdd3725902171047a5616ffa0322c9293 100755
--- a/Source/UI/EditorViewportButtons.h
+++ b/Source/UI/EditorViewportButtons.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/UI/InfoLabel.cpp b/Source/UI/InfoLabel.cpp
index 2f31a165ae5539613e50caacda53cbb2fb5d2875..85811f96844cac40f31c11eeb8ac2679cf3080e7 100755
--- a/Source/UI/InfoLabel.cpp
+++ b/Source/UI/InfoLabel.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/UI/InfoLabel.h b/Source/UI/InfoLabel.h
index 2a7ae6d448ed8834cf6593b7a7b3dfd331c99b1f..63cc6275686f00d1b1d2704af3014996c819836a 100755
--- a/Source/UI/InfoLabel.h
+++ b/Source/UI/InfoLabel.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/UI/MessageCenter.cpp b/Source/UI/MessageCenter.cpp
deleted file mode 100755
index 5954d7375d525691cb3d426a5c6e2dd022cac01e..0000000000000000000000000000000000000000
--- a/Source/UI/MessageCenter.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-    ------------------------------------------------------------------
-
-    This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
-
-    ------------------------------------------------------------------
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include "MessageCenter.h"
-
-//---------------------------------------------------------------------
-
-MessageCenter::MessageCenter() :
-    messageBackground(Colours::grey.withAlpha(0.5f))
-{
-
-    messageDisplayArea = new Label("Message Display Area","No new messages.");
-
-    addAndMakeVisible(messageDisplayArea);
-
-}
-
-MessageCenter::~MessageCenter()
-{
-
-}
-
-void MessageCenter::paint(Graphics& g)
-{
-
-    g.setColour(Colour(58,58,58));
-
-    g.fillRect(0, 0, getWidth(), getHeight());
-
-    g.setColour(messageBackground);
-
-    g.fillRect(5, 5, getWidth()-10, getHeight()-10);
-
-}
-
-void MessageCenter::resized()
-{
-    if (messageDisplayArea != 0)
-        messageDisplayArea->setBounds(5,0,getWidth(),getHeight());
-
-}
-
-void MessageCenter::actionListenerCallback(const String& message)
-{
-
-    messageDisplayArea->setText(message, dontSendNotification);
-
-    messageBackground = Colours::orange;
-
-    repaint();
-
-}
\ No newline at end of file
diff --git a/Source/UI/ProcessorList.cpp b/Source/UI/ProcessorList.cpp
index 7b72f4285b1f4bcea6e345918504cb7201b9f391..8413b86988a020d1618d5575b387902901172918 100755
--- a/Source/UI/ProcessorList.cpp
+++ b/Source/UI/ProcessorList.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -55,6 +55,11 @@ ProcessorList::ProcessorList()
     //sources->addSubItem(new ProcessorListItem("Signal Generator"));
     //sources->addSubItem(new ProcessorListItem("Custom FPGA"));
     sources->addSubItem(new ProcessorListItem("Rhythm FPGA"));
+#if JUCE_WINDOWS // eCube module currently only available for Windows
+#ifdef ECUBE_COMPILE
+    sources->addSubItem(new ProcessorListItem("eCube")); // Added by Michael Borisov
+#endif
+#endif
     sources->addSubItem(new ProcessorListItem("File Reader"));
     //sources->addSubItem(new ProcessorListItem("Network Events"));
     sources->addSubItem(new ProcessorListItem("Serial Port"));
@@ -63,6 +68,7 @@ ProcessorList::ProcessorList()
     ProcessorListItem* filters = new ProcessorListItem("Filters");
     filters->addSubItem(new ProcessorListItem("Bandpass Filter"));
     filters->addSubItem(new ProcessorListItem("Spike Detector"));
+    filters->addSubItem(new ProcessorListItem("Spike Sorter"));
     //filters->addSubItem(new ProcessorListItem("Resampler"));
     filters->addSubItem(new ProcessorListItem("Phase Detector"));
     //filters->addSubItem(new ProcessorListItem("Digital Ref"));
diff --git a/Source/UI/ProcessorList.h b/Source/UI/ProcessorList.h
index f78785a59e2666fd91d31162068e6900faf62e9d..4eac5ba805687a4f076d61968faa10e1d051b372 100755
--- a/Source/UI/ProcessorList.h
+++ b/Source/UI/ProcessorList.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -41,8 +41,6 @@ class UIComponent;
   The ProcessorList be manually updated every time a new processor is created,
   and the names must match those recognized by the ProcessorGraph.
 
-  The ProcessorList is rendered using OpenGL and the FTGL font library.
-
   @see EditorViewport, ProcessorGraph
 
 */
diff --git a/Source/UI/SignalChainManager.cpp b/Source/UI/SignalChainManager.cpp
index 9773e3227b32e5aff1936506df51b5a1fa79f36c..9b4bc305670fc1a8f5373f7e73ddbc7b2760aa2b 100755
--- a/Source/UI/SignalChainManager.cpp
+++ b/Source/UI/SignalChainManager.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/UI/SignalChainManager.h b/Source/UI/SignalChainManager.h
index 672a6b69399b830ab92102415d875fda19f49b5b..84fac877fe1e388486500e276c4ce4c52ef14b9c 100755
--- a/Source/UI/SignalChainManager.h
+++ b/Source/UI/SignalChainManager.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
diff --git a/Source/UI/UIComponent.cpp b/Source/UI/UIComponent.cpp
index 5a8e90380c79b703f0db92a97ccd1a258813c947..ea50b16dd46551c5c5ba2dc18c93c4a3f4ec1df0 100755
--- a/Source/UI/UIComponent.cpp
+++ b/Source/UI/UIComponent.cpp
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -29,7 +29,11 @@ UIComponent::UIComponent(MainWindow* mainWindow_, ProcessorGraph* pgraph, AudioC
 
 {
 
-    processorGraph->setUIComponent(this);
+    processorGraph->createDefaultNodes();
+
+    messageCenterEditor = (MessageCenterEditor*) processorGraph->getMessageCenter()->createEditor();
+    addActionListener(messageCenterEditor);
+    addAndMakeVisible(messageCenterEditor);
 
     infoLabel = new InfoLabel();
     std::cout << "Created info label." << std::endl;
@@ -66,16 +70,12 @@ UIComponent::UIComponent(MainWindow* mainWindow_, ProcessorGraph* pgraph, AudioC
     processorList->setBounds(0,0,195,processorList->getTotalHeight());
     std::cout << "Created filter list." << std::endl;
 
-    messageCenter = new MessageCenter();
-    addActionListener(messageCenter);
-    addAndMakeVisible(messageCenter);
-
     std::cout << "Created message center." << std::endl;
 
     setBounds(0,0,500,400);
 
-    processorGraph->setUIComponent(this);
 
+    processorGraph->setUIComponent(this); // update pointers
     processorList->setUIComponent(this);
     editorViewport->setUIComponent(this);
     dataViewport->setUIComponent(this);
@@ -227,11 +227,11 @@ void UIComponent::resized()
 
 
 
-    if (messageCenter != 0)
+    if (messageCenterEditor != 0)
     {
-        messageCenter->setBounds(6,h-35,w-241,30);
+        messageCenterEditor->setBounds(6,h-35,w-241,30);
         if (h < 200)
-            messageCenter->setBounds(6,h-35+200-h,w-241,30);
+            messageCenterEditor->setBounds(6,h-35+200-h,w-241,30);
         //  else
         //      messageCenter->setVisible(true);
     }
@@ -242,7 +242,7 @@ void UIComponent::resized()
         dataViewport->setVisible(false);
         editorViewport->setVisible(false);
         processorList->setVisible(false);
-        messageCenter->setVisible(false);
+        messageCenterEditor->setVisible(false);
         controlPanel->setVisible(false);
         editorViewportButton->setVisible(false);
     }
diff --git a/Source/UI/UIComponent.h b/Source/UI/UIComponent.h
index 66caa4d1e4322374ba0ba0d20350203ab18ed7ee..3445800e53047a6c917e100215de077ff2117419 100755
--- a/Source/UI/UIComponent.h
+++ b/Source/UI/UIComponent.h
@@ -2,7 +2,7 @@
     ------------------------------------------------------------------
 
     This file is part of the Open Ephys GUI
-    Copyright (C) 2013 Open Ephys
+    Copyright (C) 2014 Open Ephys
 
     ------------------------------------------------------------------
 
@@ -30,9 +30,9 @@
 #include "ProcessorList.h"
 #include "EditorViewport.h"
 #include "DataViewport.h"
-#include "MessageCenter.h"
+#include "../Processors/MessageCenter/MessageCenterEditor.h"
 #include "GraphViewer.h"
-#include "../Processors/ProcessorGraph.h"
+#include "../Processors/ProcessorGraph/ProcessorGraph.h"
 #include "../Audio/AudioComponent.h"
 #include "../MainWindow.h"
 
@@ -104,10 +104,10 @@ public:
         return controlPanel;
     }
 
-    /** Returns a pointer to the MessageCenter. */
-    MessageCenter* getMessageCenter()
+    /** Returns a pointer to the MessageCenterEditor. */
+    MessageCenterEditor* getMessageCenter()
     {
-        return messageCenter;
+        return messageCenterEditor;
     }
 
     /** Returns a pointer to the UIComponent. */
@@ -171,7 +171,7 @@ private:
     ScopedPointer<EditorViewportButton> editorViewportButton;
     ScopedPointer<ProcessorList> processorList;
     ScopedPointer<ControlPanel> controlPanel;
-    ScopedPointer<MessageCenter> messageCenter;
+    MessageCenterEditor* messageCenterEditor; // owned by ProcessorGraph
     ScopedPointer<InfoLabel> infoLabel;
     ScopedPointer<GraphViewer> graphViewer;
 
diff --git a/open-ephys.jucer b/open-ephys.jucer
index 7c8fa8f5b539758b940de887cbe86f417de8c4bc..26bc0c1769d2df23e0792448b91eea172293a83c 100644
--- a/open-ephys.jucer
+++ b/open-ephys.jucer
@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<JUCERPROJECT id="ynSYIrr" name="open-ephys" projectType="guiapp" version="0.3.1"
+<JUCERPROJECT id="ynSYIrr" name="open-ephys" projectType="guiapp" version="0.3.2"
               juceLinkage="amalg_multi" buildVST="1" buildRTAS="0" buildAU="1"
               pluginName="Juce Project" pluginDesc="Juce Project" pluginManufacturer="yourcompany"
               pluginManufacturerCode="Manu" pluginCode="Plug" pluginChannelConfigs="{1, 1}, {2, 2}"
               pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0"
               pluginSilenceInIsSilenceOut="0" pluginTailLength="0" pluginEditorRequiresKeys="0"
               pluginAUExportPrefix="JuceProjectAU" pluginAUViewClass="JuceProjectAU_V1"
-              pluginRTASCategory="" bundleIdentifier="org.open-ephys.gui" jucerVersion="3.0.0"
+              pluginRTASCategory="" bundleIdentifier="org.open-ephys.gui" jucerVersion="3.1.0"
               companyName="Open Ephys" userNotes="The Open Ephys GUI was designed to provide a fast and flexible interface for acquiring, processing, and visualizing data from extracellular electrodes. See open-ephys.org for more information."
               includeBinaryInAppConfig="1">
   <EXPORTFORMATS>
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"
-               extraLinkerFlags="" objCExtraSuffix="fea2mT" externalLibraries="">
+               extraLinkerFlags="-lhdf5 -lhdf5_cpp" objCExtraSuffix="fea2mT">
       <CONFIGURATIONS>
         <CONFIGURATION name="Debug" isDebug="1" optimisation="3" targetName="open-ephys"
                        osxSDK="default" osxCompatibility="default" osxArchitecture="default"/>
@@ -37,8 +37,8 @@
         <MODULEPATH id="juce_audio_basics" path="JuceLibraryCode/modules"/>
       </MODULEPATHS>
     </XCODE_MAC>
-    <LINUX_MAKE targetFolder="Builds/Linux" vstFolder="~/SDKs/vstsdk2.4" juceFolder="JuceLibraryCode"
-                extraLinkerFlags="-pg -ldl -lXext -lGLU -lhdf5" extraCompilerFlags="-export-dynamic -g -pg -std=c++0x">
+    <LINUX_MAKE targetFolder="Builds/Linux" vstFolder="~/SDKs/vstsdk2.4" extraLinkerFlags="-pg -ldl -lXext -lGLU -lhdf5 -lhdf5_cpp"
+                extraCompilerFlags="-export-dynamic -g -pg -std=c++0x">
       <CONFIGURATIONS>
         <CONFIGURATION name="Debug" isDebug="1" optimisation="3" targetName="open-ephys"
                        libraryPath="/usr/X11R6/lib/&#10;/usr/local/include&#10;" headerPath=""/>
@@ -64,24 +64,24 @@
       </MODULEPATHS>
     </LINUX_MAKE>
     <VS2012 targetFolder="Builds/VisualStudio2012" libraryType="1" extraDefs="NOMINMAX"
-            externalLibraries="setupapi.lib&#10;opengl32.lib&#10;glu32.lib">
+            externalLibraries="setupapi.lib&#10;opengl32.lib&#10;glu32.lib&#10;hdf5.lib&#10;hdf5_cpp.lib">
       <CONFIGURATIONS>
         <CONFIGURATION name="Debug" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
                        isDebug="1" optimisation="1" targetName="open-ephys" binaryPath="Builds\VisualStudio2012\Debug\bin"
-                       headerPath="../../Resources/Google Protocols/src" libraryPath="../../Resources/ZeroMQ/lib_x86&#10;../../Resources/Google Protocols/vsprojects/Debug"
-                       postbuildCommand="copy ..\..\Resources\DLLs\okFrontPanel.dll .\Debug\bin"/>
+                       headerPath="../../Resources/windows-libs/HDF5/include" libraryPath="../../Resources/windows-libs/HDF5/lib/x86"
+                       postbuildCommand="copy &quot;..\..\Resources\DLLs\*.dll&quot; &quot;$(OutDir)&quot;"/>
         <CONFIGURATION name="Release" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
                        isDebug="0" optimisation="3" targetName="open-ephys" binaryPath="Builds\VisualStudio2012\Release\bin"
-                       headerPath="../../Resources/Google Protocols/src" libraryPath="../../Resources/ZeroMQ/lib_x86&#10;../../Resources/Google Protocols/vsprojects/Release"
-                       postbuildCommand="copy ..\..\Resources\DLLs\okFrontPanel.dll .\Release\bin"/>
+                       headerPath="../../Resources/windows-libs/HDF5/include" libraryPath="../../Resources/windows-libs/HDF5/lib/x86"
+                       postbuildCommand="copy &quot;..\..\Resources\DLLs\*.dll&quot; &quot;$(OutDir)&quot;"/>
         <CONFIGURATION name="Debug64" winWarningLevel="2" generateManifest="1" winArchitecture="x64"
                        isDebug="1" optimisation="1" targetName="open-ephys" binaryPath="Builds\VisualStudio2012\Debug64\bin"
-                       headerPath="../../Resources/Google Protocols/src" libraryPath="../../Resources/ZeroMQ/lib_x64&#10;../../Resources/Google Protocols/vsprojects/x64/Debug"
-                       postbuildCommand="copy ..\..\Resources\DLLs\Win64\okFrontPanel.dll .\Debug64\bin"/>
+                       headerPath="../../Resources/windows-libs/HDF5/include" libraryPath="../../Resources/windows-libs/HDF5/lib/x64"
+                       postbuildCommand="copy &quot;..\..\Resources\DLLs\Win64\*.dll&quot; &quot;$(OutDir)&quot;"/>
         <CONFIGURATION name="Release64" winWarningLevel="2" generateManifest="1" winArchitecture="x64"
                        isDebug="0" optimisation="3" targetName="open-ephys" binaryPath="Builds\VisualStudio2012\Release64\bin"
-                       headerPath="../../Resources/Google Protocols/src" libraryPath="../../Resources/ZeroMQ/lib_x64&#10;../../Resources/Google Protocols/vsprojects/x64/Release"
-                       postbuildCommand="copy ..\..\Resources\DLLs\Win64\okFrontPanel.dll .\Release64\bin"/>
+                       headerPath="../../Resources/windows-libs/HDF5/include" libraryPath="../../Resources/windows-libs/HDF5/lib/x64"
+                       postbuildCommand="copy &quot;..\..\Resources\DLLs\Win64\*.dll&quot; &quot;$(OutDir)&quot;"/>
       </CONFIGURATIONS>
       <MODULEPATHS>
         <MODULEPATH id="juce_video" path="JuceLibraryCode/modules"/>
@@ -101,6 +101,40 @@
         <MODULEPATH id="juce_audio_basics" path="JuceLibraryCode/modules"/>
       </MODULEPATHS>
     </VS2012>
+    <VS2013 targetFolder="Builds/VisualStudio2013" externalLibraries="setupapi.lib&#10;opengl32.lib&#10;glu32.lib&#10;hdf5.lib&#10;hdf5_cpp.lib"
+            extraDefs="NOMINMAX">
+      <CONFIGURATIONS>
+        <CONFIGURATION name="Debug" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
+                       isDebug="1" optimisation="1" targetName="open-ephys" binaryPath="Builds\VisualStudio2013\Debug\bin"
+                       headerPath="$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\include&#10;../../Resources/Google Protocols/src&#10;"
+                       libraryPath="../../Resources/ZeroMQ/lib_x86&#10;../../Resources/Google Protocols/vsprojects/Debug&#10;$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\lib"
+                       wholeProgramOptimisation="1" postbuildCommand="call &quot;$(SolutionDir)\copydlls.cmd&quot; &quot;$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\bin&quot; &quot;$(SolutionDir)\..\..\Resources\DLLs&quot; &quot;$(OutDir)&quot;"
+                       fastMath="1"/>
+        <CONFIGURATION name="Release" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
+                       isDebug="0" optimisation="3" targetName="open-ephys" binaryPath="Builds\VisualStudio2013\Release\bin"
+                       headerPath="$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\include&#10;../../Resources/Google Protocols/src"
+                       libraryPath="$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\lib&#10;../../Resources/ZeroMQ/lib_x86&#10;../../Resources/Google Protocols/vsprojects/Release"
+                       postbuildCommand="call &quot;$(SolutionDir)\copydlls.cmd&quot; &quot;$(MSBuildExtensionsPath32)\..\HDF_Group\HDF5\1.8.13\bin&quot; &quot;$(SolutionDir)\..\..\Resources\DLLs&quot; &quot;$(OutDir)&quot;"
+                       fastMath="1"/>
+      </CONFIGURATIONS>
+      <MODULEPATHS>
+        <MODULEPATH id="juce_video" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_opengl" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_gui_extra" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_gui_basics" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_gui_audio" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_graphics" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_events" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_data_structures" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_cryptography" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_core" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_audio_utils" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_audio_processors" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_audio_formats" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_audio_devices" path="JuceLibraryCode/modules"/>
+        <MODULEPATH id="juce_audio_basics" path="JuceLibraryCode/modules"/>
+      </MODULEPATHS>
+    </VS2013>
   </EXPORTFORMATS>
   <MAINGROUP id="h3HbSTV" name="open-ephys">
     <GROUP id="0wpTCpt" name="Resources">
@@ -227,52 +261,6 @@
         <FILE id="5XGl6EX" name="PracticalSocket.h" compile="0" resource="0"
               file="Source/Network/PracticalSocket.h"/>
       </GROUP>
-      <GROUP id="ZFZoGrT" name="Dsp">
-        <FILE id="mUwiufK" name="Bessel.cpp" compile="1" resource="0" file="Source/Dsp/Bessel.cpp"/>
-        <FILE id="vZ6Kudo" name="Bessel.h" compile="0" resource="0" file="Source/Dsp/Bessel.h"/>
-        <FILE id="vwycpbo" name="Biquad.cpp" compile="1" resource="0" file="Source/Dsp/Biquad.cpp"/>
-        <FILE id="a732gXS" name="Biquad.h" compile="0" resource="0" file="Source/Dsp/Biquad.h"/>
-        <FILE id="0W6qAwa" name="Butterworth.cpp" compile="1" resource="0"
-              file="Source/Dsp/Butterworth.cpp"/>
-        <FILE id="UV5QzX8" name="Butterworth.h" compile="0" resource="0" file="Source/Dsp/Butterworth.h"/>
-        <FILE id="KClKE8" name="Cascade.cpp" compile="1" resource="0" file="Source/Dsp/Cascade.cpp"/>
-        <FILE id="ylsuRNY" name="Cascade.h" compile="0" resource="0" file="Source/Dsp/Cascade.h"/>
-        <FILE id="o3iAh3a" name="ChebyshevI.cpp" compile="1" resource="0" file="Source/Dsp/ChebyshevI.cpp"/>
-        <FILE id="WyXprJ9" name="ChebyshevI.h" compile="0" resource="0" file="Source/Dsp/ChebyshevI.h"/>
-        <FILE id="b4qha7" name="ChebyshevII.cpp" compile="1" resource="0" file="Source/Dsp/ChebyshevII.cpp"/>
-        <FILE id="LcWDNOk" name="ChebyshevII.h" compile="0" resource="0" file="Source/Dsp/ChebyshevII.h"/>
-        <FILE id="XDyWZQQ" name="Common.h" compile="0" resource="0" file="Source/Dsp/Common.h"/>
-        <FILE id="49hU2ny" name="Custom.cpp" compile="1" resource="0" file="Source/Dsp/Custom.cpp"/>
-        <FILE id="xPXCA6M" name="Custom.h" compile="0" resource="0" file="Source/Dsp/Custom.h"/>
-        <FILE id="2EpjlI" name="Design.cpp" compile="1" resource="0" file="Source/Dsp/Design.cpp"/>
-        <FILE id="ptQmM0r" name="Design.h" compile="0" resource="0" file="Source/Dsp/Design.h"/>
-        <FILE id="fAPODFz" name="Documentation.cpp" compile="1" resource="0"
-              file="Source/Dsp/Documentation.cpp"/>
-        <FILE id="JAPeScN" name="Dsp.h" compile="0" resource="0" file="Source/Dsp/Dsp.h"/>
-        <FILE id="tr30OGq" name="Elliptic.cpp" compile="1" resource="0" file="Source/Dsp/Elliptic.cpp"/>
-        <FILE id="qkR4YNx" name="Elliptic.h" compile="0" resource="0" file="Source/Dsp/Elliptic.h"/>
-        <FILE id="XXTYoH9" name="Filter.cpp" compile="1" resource="0" file="Source/Dsp/Filter.cpp"/>
-        <FILE id="ZYh8Cn" name="Filter.h" compile="0" resource="0" file="Source/Dsp/Filter.h"/>
-        <FILE id="fzaQLV" name="Layout.h" compile="0" resource="0" file="Source/Dsp/Layout.h"/>
-        <FILE id="1rzxhtw" name="Legendre.cpp" compile="1" resource="0" file="Source/Dsp/Legendre.cpp"/>
-        <FILE id="vMzVy3f" name="Legendre.h" compile="0" resource="0" file="Source/Dsp/Legendre.h"/>
-        <FILE id="Xgckbu9" name="MathSupplement.h" compile="0" resource="0"
-              file="Source/Dsp/MathSupplement.h"/>
-        <FILE id="1skPBI3" name="Param.cpp" compile="1" resource="0" file="Source/Dsp/Param.cpp"/>
-        <FILE id="AJKO8Gc" name="Params.h" compile="0" resource="0" file="Source/Dsp/Params.h"/>
-        <FILE id="m5Ywyi7" name="PoleFilter.cpp" compile="1" resource="0" file="Source/Dsp/PoleFilter.cpp"/>
-        <FILE id="yghcXOB" name="PoleFilter.h" compile="0" resource="0" file="Source/Dsp/PoleFilter.h"/>
-        <FILE id="HxU4He0" name="RBJ.cpp" compile="1" resource="0" file="Source/Dsp/RBJ.cpp"/>
-        <FILE id="LzKYXte" name="RBJ.h" compile="0" resource="0" file="Source/Dsp/RBJ.h"/>
-        <FILE id="KNsCh3Q" name="RootFinder.cpp" compile="1" resource="0" file="Source/Dsp/RootFinder.cpp"/>
-        <FILE id="5FY4DiP" name="RootFinder.h" compile="0" resource="0" file="Source/Dsp/RootFinder.h"/>
-        <FILE id="CZlsp9w" name="SmoothedFilter.h" compile="0" resource="0"
-              file="Source/Dsp/SmoothedFilter.h"/>
-        <FILE id="rj1CVK" name="State.cpp" compile="1" resource="0" file="Source/Dsp/State.cpp"/>
-        <FILE id="floABAJ" name="State.h" compile="0" resource="0" file="Source/Dsp/State.h"/>
-        <FILE id="Tnibh38" name="Types.h" compile="0" resource="0" file="Source/Dsp/Types.h"/>
-        <FILE id="74WHAi" name="Utilities.h" compile="0" resource="0" file="Source/Dsp/Utilities.h"/>
-      </GROUP>
       <GROUP id="gRFzu0" name="Audio">
         <FILE id="2vKx2R" name="AudioComponent.cpp" compile="1" resource="0"
               file="Source/Audio/AudioComponent.cpp"/>
@@ -280,209 +268,49 @@
               file="Source/Audio/AudioComponent.h"/>
       </GROUP>
       <GROUP id="yQmqZWk" name="Processors">
-        <FILE id="Yj1umv" name="SerialInput.cpp" compile="1" resource="0" file="Source/Processors/SerialInput.cpp"/>
-        <FILE id="TSsuVv" name="SerialInput.h" compile="0" resource="0" file="Source/Processors/SerialInput.h"/>
-        <FILE id="M6nCIs" name="FileReader.cpp" compile="1" resource="0" file="Source/Processors/FileReader.cpp"/>
-        <FILE id="VU1bQ0" name="FileReader.h" compile="0" resource="0" file="Source/Processors/FileReader.h"/>
-        <FILE id="e7QoyI" name="ChannelMappingNode.cpp" compile="1" resource="0"
-              file="Source/Processors/ChannelMappingNode.cpp"/>
-        <FILE id="RzEj1s" name="ChannelMappingNode.h" compile="0" resource="0"
-              file="Source/Processors/ChannelMappingNode.h"/>
-        <FILE id="iCR52Z" name="PulsePalOutput.cpp" compile="1" resource="0"
-              file="Source/Processors/PulsePalOutput.cpp"/>
-        <FILE id="P6I3cq" name="PulsePalOutput.h" compile="0" resource="0"
-              file="Source/Processors/PulsePalOutput.h"/>
-        <FILE id="I3M3irE" name="ReferenceNode.cpp" compile="1" resource="0"
-              file="Source/Processors/ReferenceNode.cpp"/>
-        <FILE id="mkZIyij" name="ReferenceNode.h" compile="0" resource="0"
-              file="Source/Processors/ReferenceNode.h"/>
-        <FILE id="TBFDWIC" name="PhaseDetector.cpp" compile="1" resource="0"
-              file="Source/Processors/PhaseDetector.cpp"/>
-        <FILE id="M8cJMPk" name="PhaseDetector.h" compile="0" resource="0"
-              file="Source/Processors/PhaseDetector.h"/>
-        <FILE id="absuYrU" name="AudioResamplingNode.cpp" compile="1" resource="0"
-              file="Source/Processors/AudioResamplingNode.cpp"/>
-        <FILE id="V8uFwVV" name="AudioResamplingNode.h" compile="0" resource="0"
-              file="Source/Processors/AudioResamplingNode.h"/>
-        <FILE id="oYWM1J" name="Channel.cpp" compile="1" resource="0" file="Source/Processors/Channel.cpp"/>
-        <FILE id="oBVEMRc" name="Channel.h" compile="0" resource="0" file="Source/Processors/Channel.h"/>
-        <GROUP id="gFSbZKw" name="Serial">
-          <FILE id="PHwlqi" name="PulsePal.cpp" compile="1" resource="0" file="Source/Processors/Serial/PulsePal.cpp"/>
-          <FILE id="R4XRyB" name="PulsePal.h" compile="0" resource="0" file="Source/Processors/Serial/PulsePal.h"/>
-          <FILE id="3t2ez3c" name="ofArduino.cpp" compile="1" resource="0" file="Source/Processors/Serial/ofArduino.cpp"/>
-          <FILE id="bXASAoT" name="ofArduino.h" compile="0" resource="0" file="Source/Processors/Serial/ofArduino.h"/>
-          <FILE id="hNTT1i1" name="ofConstants.h" compile="0" resource="0" file="Source/Processors/Serial/ofConstants.h"/>
-          <FILE id="F97Ylmz" name="ofSerial.cpp" compile="1" resource="0" file="Source/Processors/Serial/ofSerial.cpp"/>
-          <FILE id="wV1xn3Z" name="ofSerial.h" compile="0" resource="0" file="Source/Processors/Serial/ofSerial.h"/>
+        <GROUP id="{447899E6-3974-53D0-5588-79643E8F5CA3}" name="ArduinoOutput">
+          <FILE id="Ucs5gf" name="ArduinoOutput.cpp" compile="1" resource="0"
+                file="Source/Processors/ArduinoOutput/ArduinoOutput.cpp"/>
+          <FILE id="NnPKUY" name="ArduinoOutput.h" compile="0" resource="0" file="Source/Processors/ArduinoOutput/ArduinoOutput.h"/>
+          <FILE id="V4rkxc" name="ArduinoOutputEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/ArduinoOutput/ArduinoOutputEditor.cpp"/>
+          <FILE id="WWnk0U" name="ArduinoOutputEditor.h" compile="0" resource="0"
+                file="Source/Processors/ArduinoOutput/ArduinoOutputEditor.h"/>
         </GROUP>
-        <FILE id="rlxg06" name="EventDetector.cpp" compile="1" resource="0"
-              file="Source/Processors/EventDetector.cpp"/>
-        <FILE id="LWuAoXl" name="EventDetector.h" compile="0" resource="0"
-              file="Source/Processors/EventDetector.h"/>
-        <FILE id="caGBzB" name="FPGAOutput.cpp" compile="1" resource="0" file="Source/Processors/FPGAOutput.cpp"/>
-        <FILE id="IUvIxV7" name="FPGAOutput.h" compile="0" resource="0" file="Source/Processors/FPGAOutput.h"/>
-        <FILE id="wBm4y2" name="ArduinoOutput.cpp" compile="1" resource="0"
-              file="Source/Processors/ArduinoOutput.cpp"/>
-        <FILE id="1sbSwS7" name="ArduinoOutput.h" compile="0" resource="0"
-              file="Source/Processors/ArduinoOutput.h"/>
-        <FILE id="pQaYQiE" name="Parameter.cpp" compile="1" resource="0" file="Source/Processors/Parameter.cpp"/>
-        <FILE id="0jxvc4H" name="Parameter.h" compile="0" resource="0" file="Source/Processors/Parameter.h"/>
-        <FILE id="arRy5R" name="SpikeDisplayNode.cpp" compile="1" resource="0"
-              file="Source/Processors/SpikeDisplayNode.cpp"/>
-        <FILE id="VwDxj" name="SpikeDisplayNode.h" compile="0" resource="0"
-              file="Source/Processors/SpikeDisplayNode.h"/>
-        <FILE id="Poqus0b" name="WiFiOutput.cpp" compile="1" resource="0" file="Source/Processors/WiFiOutput.cpp"/>
-        <FILE id="IklsJpw" name="WiFiOutput.h" compile="0" resource="0" file="Source/Processors/WiFiOutput.h"/>
-        <FILE id="ZuMpSio" name="LfpDisplayNode.cpp" compile="1" resource="0"
-              file="Source/Processors/LfpDisplayNode.cpp"/>
-        <FILE id="VynGpEg" name="LfpDisplayNode.h" compile="0" resource="0"
-              file="Source/Processors/LfpDisplayNode.h"/>
-        <GROUP id="Enz7QFy" name="Utilities">
-          <FILE id="llkb8mQ" name="RecordControl.cpp" compile="1" resource="0"
-                file="Source/Processors/Utilities/RecordControl.cpp"/>
-          <FILE id="jRqpt5T" name="RecordControl.h" compile="0" resource="0"
-                file="Source/Processors/Utilities/RecordControl.h"/>
-          <FILE id="qt6uLka" name="Merger.cpp" compile="1" resource="0" file="Source/Processors/Utilities/Merger.cpp"/>
-          <FILE id="XNRlWg8" name="Merger.h" compile="0" resource="0" file="Source/Processors/Utilities/Merger.h"/>
-          <FILE id="YMFH4P2" name="Splitter.cpp" compile="1" resource="0" file="Source/Processors/Utilities/Splitter.cpp"/>
-          <FILE id="DXYynnz" name="Splitter.h" compile="0" resource="0" file="Source/Processors/Utilities/Splitter.h"/>
+        <GROUP id="{1932782D-9D00-9B76-92DC-94E7D42BF0D2}" name="AudioNode">
+          <FILE id="TV4cOO" name="AudioEditor.cpp" compile="1" resource="0" file="Source/Processors/AudioNode/AudioEditor.cpp"/>
+          <FILE id="erBMrA" name="AudioEditor.h" compile="0" resource="0" file="Source/Processors/AudioNode/AudioEditor.h"/>
+          <FILE id="jClaJf" name="AudioNode.cpp" compile="1" resource="0" file="Source/Processors/AudioNode/AudioNode.cpp"/>
+          <FILE id="LHkdoG" name="AudioNode.h" compile="0" resource="0" file="Source/Processors/AudioNode/AudioNode.h"/>
         </GROUP>
-        <GROUP id="W4eqkOy" name="Visualization">
-          <FILE id="ajAJi" name="SpikeObject.cpp" compile="1" resource="0" file="Source/Processors/Visualization/SpikeObject.cpp"/>
-          <FILE id="xqF5zL" name="SpikeObject.h" compile="0" resource="0" file="Source/Processors/Visualization/SpikeObject.h"/>
-          <FILE id="jGEqDp" name="SpikeDisplayCanvas.cpp" compile="1" resource="0"
-                file="Source/Processors/Visualization/SpikeDisplayCanvas.cpp"/>
-          <FILE id="LVHMu2" name="SpikeDisplayCanvas.h" compile="0" resource="0"
-                file="Source/Processors/Visualization/SpikeDisplayCanvas.h"/>
-          <FILE id="yDPZGpt" name="Visualizer.h" compile="0" resource="0" file="Source/Processors/Visualization/Visualizer.h"/>
-          <FILE id="BX1Vj3V" name="DataWindow.cpp" compile="1" resource="0" file="Source/Processors/Visualization/DataWindow.cpp"/>
-          <FILE id="l2VKLuP" name="DataWindow.h" compile="0" resource="0" file="Source/Processors/Visualization/DataWindow.h"/>
-          <FILE id="2rXPco7" name="LfpDisplayCanvas.cpp" compile="1" resource="0"
-                file="Source/Processors/Visualization/LfpDisplayCanvas.cpp"/>
-          <FILE id="18BC8qM" name="LfpDisplayCanvas.h" compile="0" resource="0"
-                file="Source/Processors/Visualization/LfpDisplayCanvas.h"/>
-        </GROUP>
-        <FILE id="533rUXO" name="SpikeDetector.cpp" compile="1" resource="0"
-              file="Source/Processors/SpikeDetector.cpp"/>
-        <FILE id="jIX00WN" name="SpikeDetector.h" compile="0" resource="0"
-              file="Source/Processors/SpikeDetector.h"/>
-        <FILE id="gZRZq2O" name="AudioNode.cpp" compile="1" resource="0" file="Source/Processors/AudioNode.cpp"/>
-        <FILE id="ZPSmLKn" name="AudioNode.h" compile="0" resource="0" file="Source/Processors/AudioNode.h"/>
-        <FILE id="hGnGAjh" name="EventNode.cpp" compile="1" resource="0" file="Source/Processors/EventNode.cpp"/>
-        <FILE id="dUtRN6" name="EventNode.h" compile="0" resource="0" file="Source/Processors/EventNode.h"/>
-        <GROUP id="AqvwO6w" name="Editors">
-          <FILE id="jQo6Ff" name="LfpTriggeredAverageEditor.cpp" compile="1"
-                resource="0" file="Source/Processors/Editors/LfpTriggeredAverageEditor.cpp"/>
-          <FILE id="RaQC38" name="LfpTriggeredAverageEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/LfpTriggeredAverageEditor.h"/>
-          <FILE id="D3eN0G" name="SerialInputEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/SerialInputEditor.cpp"/>
-          <FILE id="iG39Gh" name="SerialInputEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/SerialInputEditor.h"/>
-          <FILE id="E2PXvz" name="ElectrodeButtons.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/ElectrodeButtons.cpp"/>
-          <FILE id="yriJOG" name="ElectrodeButtons.h" compile="0" resource="0"
-                file="Source/Processors/Editors/ElectrodeButtons.h"/>
-          <FILE id="g1ki17" name="ChannelMappingEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/ChannelMappingEditor.cpp"/>
-          <FILE id="KLhI0Q" name="ChannelMappingEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/ChannelMappingEditor.h"/>
-          <FILE id="PobvRC" name="FileReaderEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/FileReaderEditor.cpp"/>
-          <FILE id="hIDHaX" name="FileReaderEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/FileReaderEditor.h"/>
-          <FILE id="Vy98eh" name="PhaseDetectorEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/PhaseDetectorEditor.cpp"/>
-          <FILE id="vuvcfO" name="PhaseDetectorEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/PhaseDetectorEditor.h"/>
-          <FILE id="NHDoDu" name="PulsePalOutputEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/PulsePalOutputEditor.cpp"/>
-          <FILE id="dVyt6h" name="PulsePalOutputEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/PulsePalOutputEditor.h"/>
-          <FILE id="Xy7AJu" name="RHD2000Editor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/RHD2000Editor.cpp"/>
-          <FILE id="TKVa9h" name="RHD2000Editor.h" compile="0" resource="0" file="Source/Processors/Editors/RHD2000Editor.h"/>
-          <FILE id="3P8oDf3" name="RecordControlEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/RecordControlEditor.cpp"/>
-          <FILE id="hFb27ev" name="RecordControlEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/RecordControlEditor.h"/>
-          <FILE id="tz64eOn" name="ReferenceNodeEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/ReferenceNodeEditor.cpp"/>
-          <FILE id="sxR3wcq" name="ReferenceNodeEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/ReferenceNodeEditor.h"/>
-          <FILE id="vcZeT2R" name="ResamplingNodeEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/ResamplingNodeEditor.cpp"/>
-          <FILE id="pMjiz6m" name="ResamplingNodeEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/ResamplingNodeEditor.h"/>
-          <FILE id="mvixd58" name="FPGAOutputEditor.cpp" compile="1" resource="1"
-                file="Source/Processors/Editors/FPGAOutputEditor.cpp"/>
-          <FILE id="phTDDOR" name="FPGAOutputEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/FPGAOutputEditor.h"/>
-          <FILE id="oYeB8Hh" name="ArduinoOutputEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/ArduinoOutputEditor.cpp"/>
-          <FILE id="xfwOAJs" name="ArduinoOutputEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/ArduinoOutputEditor.h"/>
-          <FILE id="rZGNxjv" name="ChannelSelector.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/ChannelSelector.cpp"/>
-          <FILE id="Yga4B3Z" name="ChannelSelector.h" compile="0" resource="0"
-                file="Source/Processors/Editors/ChannelSelector.h"/>
-          <FILE id="qWhyk9h" name="ParameterEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/ParameterEditor.cpp"/>
-          <FILE id="3PkZxza" name="ParameterEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/ParameterEditor.h"/>
-          <FILE id="s5YUmi" name="SpikeDisplayEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/SpikeDisplayEditor.cpp"/>
-          <FILE id="EE43GV" name="SpikeDisplayEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/SpikeDisplayEditor.h"/>
-          <FILE id="2XqqPOS" name="VisualizerEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/VisualizerEditor.cpp"/>
-          <FILE id="CUHGPJF" name="VisualizerEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/VisualizerEditor.h"/>
-          <FILE id="bsIZbuu" name="MergerEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/MergerEditor.cpp"/>
-          <FILE id="vfmEY5L" name="MergerEditor.h" compile="0" resource="0" file="Source/Processors/Editors/MergerEditor.h"/>
-          <FILE id="i2MR4pC" name="ImageIcon.cpp" compile="1" resource="0" file="Source/Processors/Editors/ImageIcon.cpp"/>
-          <FILE id="N8r8D18" name="ImageIcon.h" compile="0" resource="0" file="Source/Processors/Editors/ImageIcon.h"/>
-          <FILE id="mLd64ww" name="WiFiOutputEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/WiFiOutputEditor.cpp"/>
-          <FILE id="qunHBGe" name="WiFiOutputEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/WiFiOutputEditor.h"/>
-          <FILE id="5DPzIoS" name="EventNodeEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/EventNodeEditor.cpp"/>
-          <FILE id="gva5me" name="EventNodeEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/EventNodeEditor.h"/>
-          <FILE id="OJKuulJ" name="SignalGeneratorEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/SignalGeneratorEditor.cpp"/>
-          <FILE id="JhVBo3n" name="SignalGeneratorEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/SignalGeneratorEditor.h"/>
-          <FILE id="cTebrMp" name="LfpDisplayEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/LfpDisplayEditor.cpp"/>
-          <FILE id="ru5zWWN" name="LfpDisplayEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/LfpDisplayEditor.h"/>
-          <FILE id="ErsHzHU" name="SourceNodeEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/SourceNodeEditor.cpp"/>
-          <FILE id="wMP6rcZ" name="SourceNodeEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/SourceNodeEditor.h"/>
-          <FILE id="HZXZN8Z" name="SplitterEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/SplitterEditor.cpp"/>
-          <FILE id="LWp4vf" name="SplitterEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/SplitterEditor.h"/>
-          <FILE id="UCf00eh" name="SpikeDetectorEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/SpikeDetectorEditor.cpp"/>
-          <FILE id="Q8ftPSA" name="SpikeDetectorEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/SpikeDetectorEditor.h"/>
-          <FILE id="Nw6Lpmq" name="AudioEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/AudioEditor.cpp"/>
-          <FILE id="atkKPmM" name="AudioEditor.h" compile="0" resource="0" file="Source/Processors/Editors/AudioEditor.h"/>
-          <FILE id="4sHjKNc" name="FilterEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/FilterEditor.cpp"/>
-          <FILE id="A2OQdsN" name="FilterEditor.h" compile="0" resource="0" file="Source/Processors/Editors/FilterEditor.h"/>
-          <FILE id="9sKH5cL" name="GenericEditor.cpp" compile="1" resource="0"
-                file="Source/Processors/Editors/GenericEditor.cpp"/>
-          <FILE id="gETPJeW" name="GenericEditor.h" compile="0" resource="0"
-                file="Source/Processors/Editors/GenericEditor.h"/>
+        <GROUP id="{ED1C2AFE-2ED9-D835-532A-4D6C558C73E7}" name="AudioResamplingNode">
+          <FILE id="YStaN1" name="AudioResamplingNode.cpp" compile="1" resource="0"
+                file="Source/Processors/AudioResamplingNode/AudioResamplingNode.cpp"/>
+          <FILE id="pnFZDY" name="AudioResamplingNode.h" compile="0" resource="0"
+                file="Source/Processors/AudioResamplingNode/AudioResamplingNode.h"/>
+        </GROUP>
+        <GROUP id="{46016F19-8F25-F540-AA1C-D6E87E8D7D31}" name="Channel">
+          <FILE id="X3I3e9" name="Channel.cpp" compile="1" resource="0" file="Source/Processors/Channel/Channel.cpp"/>
+          <FILE id="IEZGF3" name="Channel.h" compile="0" resource="0" file="Source/Processors/Channel/Channel.h"/>
+        </GROUP>
+        <GROUP id="{CC57D5E1-9093-9454-4B03-5908715DFBD8}" name="ChannelMappingNode">
+          <FILE id="UhpW2V" name="ChannelMappingEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/ChannelMappingNode/ChannelMappingEditor.cpp"/>
+          <FILE id="kq8tJl" name="ChannelMappingEditor.h" compile="0" resource="0"
+                file="Source/Processors/ChannelMappingNode/ChannelMappingEditor.h"/>
+          <FILE id="gRCztM" name="ChannelMappingNode.cpp" compile="1" resource="0"
+                file="Source/Processors/ChannelMappingNode/ChannelMappingNode.cpp"/>
+          <FILE id="blwGma" name="ChannelMappingNode.h" compile="0" resource="0"
+                file="Source/Processors/ChannelMappingNode/ChannelMappingNode.h"/>
         </GROUP>
         <GROUP id="ZgsuWxi" name="DataThreads">
+          <FILE id="gHzlwP" name="EcubeEditor.cpp" compile="1" resource="0" file="Source/Processors/DataThreads/EcubeEditor.cpp"/>
+          <FILE id="Bi0une" name="EcubeEditor.h" compile="0" resource="0" file="Source/Processors/DataThreads/EcubeEditor.h"/>
+          <FILE id="ZBPSXE" name="RHD2000Editor.cpp" compile="1" resource="0"
+                file="Source/Processors/DataThreads/RHD2000Editor.cpp"/>
+          <FILE id="TnZlGU" name="RHD2000Editor.h" compile="0" resource="0" file="Source/Processors/DataThreads/RHD2000Editor.h"/>
+          <FILE id="mbMbly" name="EcubeThread.cpp" compile="1" resource="0" file="Source/Processors/DataThreads/EcubeThread.cpp"/>
+          <FILE id="lKsc0T" name="EcubeThread.h" compile="0" resource="0" file="Source/Processors/DataThreads/EcubeThread.h"/>
           <GROUP id="LcWQtrg" name="rhythm-api">
             <FILE id="hyM1EYD" name="okFrontPanelDLL.cpp" compile="1" resource="0"
                   file="Source/Processors/DataThreads/rhythm-api/okFrontPanelDLL.cpp"/>
@@ -516,30 +344,342 @@
           <FILE id="9JbVKlA" name="DataThread.cpp" compile="1" resource="0" file="Source/Processors/DataThreads/DataThread.cpp"/>
           <FILE id="McgNvuR" name="DataThread.h" compile="0" resource="0" file="Source/Processors/DataThreads/DataThread.h"/>
         </GROUP>
-        <FILE id="f34QY5Q" name="RecordNode.cpp" compile="1" resource="0" file="Source/Processors/RecordNode.cpp"/>
-        <FILE id="ne3WPH4" name="RecordNode.h" compile="0" resource="0" file="Source/Processors/RecordNode.h"/>
-        <FILE id="JXxx5p" name="SignalGenerator.cpp" compile="1" resource="0"
-              file="Source/Processors/SignalGenerator.cpp"/>
-        <FILE id="6xlnGdF" name="SignalGenerator.h" compile="0" resource="0"
-              file="Source/Processors/SignalGenerator.h"/>
-        <FILE id="5xMSqrr" name="ResamplingNode.cpp" compile="1" resource="0"
-              file="Source/Processors/ResamplingNode.cpp"/>
-        <FILE id="G3kmYa" name="ResamplingNode.h" compile="0" resource="0"
-              file="Source/Processors/ResamplingNode.h"/>
-        <FILE id="8KOCQ0m" name="FilterNode.cpp" compile="1" resource="0" file="Source/Processors/FilterNode.cpp"/>
-        <FILE id="BLwO4vF" name="FilterNode.h" compile="0" resource="0" file="Source/Processors/FilterNode.h"/>
-        <FILE id="OakAxjJ" name="SourceNode.cpp" compile="1" resource="0" file="Source/Processors/SourceNode.cpp"/>
-        <FILE id="T6xYPnw" name="SourceNode.h" compile="0" resource="0" file="Source/Processors/SourceNode.h"/>
-        <FILE id="s8On6e" name="GenericProcessor.cpp" compile="1" resource="0"
-              file="Source/Processors/GenericProcessor.cpp"/>
-        <FILE id="tjR32I" name="GenericProcessor.h" compile="0" resource="0"
-              file="Source/Processors/GenericProcessor.h"/>
-        <FILE id="z3gsHSY" name="ProcessorGraph.cpp" compile="1" resource="0"
-              file="Source/Processors/ProcessorGraph.cpp"/>
-        <FILE id="WbqC0CB" name="ProcessorGraph.h" compile="0" resource="0"
-              file="Source/Processors/ProcessorGraph.h"/>
+        <GROUP id="{BCF99568-D3A2-7CA2-E809-815D22183EA4}" name="Dsp">
+          <FILE id="PHlcin" name="Bessel.cpp" compile="1" resource="0" file="Source/Processors/Dsp/Bessel.cpp"/>
+          <FILE id="YXAcyZ" name="Bessel.h" compile="0" resource="0" file="Source/Processors/Dsp/Bessel.h"/>
+          <FILE id="nOEja0" name="Biquad.cpp" compile="1" resource="0" file="Source/Processors/Dsp/Biquad.cpp"/>
+          <FILE id="DxX7XS" name="Biquad.h" compile="0" resource="0" file="Source/Processors/Dsp/Biquad.h"/>
+          <FILE id="VQ44sd" name="Butterworth.cpp" compile="1" resource="0" file="Source/Processors/Dsp/Butterworth.cpp"/>
+          <FILE id="NVAymk" name="Butterworth.h" compile="0" resource="0" file="Source/Processors/Dsp/Butterworth.h"/>
+          <FILE id="FkrTqV" name="Cascade.cpp" compile="1" resource="0" file="Source/Processors/Dsp/Cascade.cpp"/>
+          <FILE id="pj0T3e" name="Cascade.h" compile="0" resource="0" file="Source/Processors/Dsp/Cascade.h"/>
+          <FILE id="ggju8m" name="ChebyshevI.cpp" compile="1" resource="0" file="Source/Processors/Dsp/ChebyshevI.cpp"/>
+          <FILE id="EGxTwj" name="ChebyshevI.h" compile="0" resource="0" file="Source/Processors/Dsp/ChebyshevI.h"/>
+          <FILE id="nWSeZF" name="ChebyshevII.cpp" compile="1" resource="0" file="Source/Processors/Dsp/ChebyshevII.cpp"/>
+          <FILE id="HS65B6" name="ChebyshevII.h" compile="0" resource="0" file="Source/Processors/Dsp/ChebyshevII.h"/>
+          <FILE id="jumO5X" name="Common.h" compile="0" resource="0" file="Source/Processors/Dsp/Common.h"/>
+          <FILE id="E1ZdBg" name="Custom.cpp" compile="1" resource="0" file="Source/Processors/Dsp/Custom.cpp"/>
+          <FILE id="JAxvZH" name="Custom.h" compile="0" resource="0" file="Source/Processors/Dsp/Custom.h"/>
+          <FILE id="BynrL2" name="Design.cpp" compile="1" resource="0" file="Source/Processors/Dsp/Design.cpp"/>
+          <FILE id="tINM97" name="Design.h" compile="0" resource="0" file="Source/Processors/Dsp/Design.h"/>
+          <FILE id="gikZHr" name="Documentation.cpp" compile="1" resource="0"
+                file="Source/Processors/Dsp/Documentation.cpp"/>
+          <FILE id="nwwW9u" name="Dsp.h" compile="0" resource="0" file="Source/Processors/Dsp/Dsp.h"/>
+          <FILE id="VMtjos" name="Elliptic.cpp" compile="1" resource="0" file="Source/Processors/Dsp/Elliptic.cpp"/>
+          <FILE id="xlw76X" name="Elliptic.h" compile="0" resource="0" file="Source/Processors/Dsp/Elliptic.h"/>
+          <FILE id="SSUdH3" name="Filter.cpp" compile="1" resource="0" file="Source/Processors/Dsp/Filter.cpp"/>
+          <FILE id="jMEqrr" name="Filter.h" compile="0" resource="0" file="Source/Processors/Dsp/Filter.h"/>
+          <FILE id="gORopa" name="Layout.h" compile="0" resource="0" file="Source/Processors/Dsp/Layout.h"/>
+          <FILE id="KFWbTw" name="Legendre.cpp" compile="1" resource="0" file="Source/Processors/Dsp/Legendre.cpp"/>
+          <FILE id="QukTBD" name="Legendre.h" compile="0" resource="0" file="Source/Processors/Dsp/Legendre.h"/>
+          <FILE id="yjHeg0" name="MathSupplement.h" compile="0" resource="0"
+                file="Source/Processors/Dsp/MathSupplement.h"/>
+          <FILE id="lSjPpg" name="Param.cpp" compile="1" resource="0" file="Source/Processors/Dsp/Param.cpp"/>
+          <FILE id="GbSbST" name="Params.h" compile="0" resource="0" file="Source/Processors/Dsp/Params.h"/>
+          <FILE id="iTSDrw" name="PoleFilter.cpp" compile="1" resource="0" file="Source/Processors/Dsp/PoleFilter.cpp"/>
+          <FILE id="c45usH" name="PoleFilter.h" compile="0" resource="0" file="Source/Processors/Dsp/PoleFilter.h"/>
+          <FILE id="UEmTDD" name="RBJ.cpp" compile="1" resource="0" file="Source/Processors/Dsp/RBJ.cpp"/>
+          <FILE id="PjXcyh" name="RBJ.h" compile="0" resource="0" file="Source/Processors/Dsp/RBJ.h"/>
+          <FILE id="n1FzuK" name="RootFinder.cpp" compile="1" resource="0" file="Source/Processors/Dsp/RootFinder.cpp"/>
+          <FILE id="aDg7vK" name="RootFinder.h" compile="0" resource="0" file="Source/Processors/Dsp/RootFinder.h"/>
+          <FILE id="DE0lE3" name="SmoothedFilter.h" compile="0" resource="0"
+                file="Source/Processors/Dsp/SmoothedFilter.h"/>
+          <FILE id="SPcR5B" name="State.cpp" compile="1" resource="0" file="Source/Processors/Dsp/State.cpp"/>
+          <FILE id="D1k4f9" name="State.h" compile="0" resource="0" file="Source/Processors/Dsp/State.h"/>
+          <FILE id="BBxUBy" name="Types.h" compile="0" resource="0" file="Source/Processors/Dsp/Types.h"/>
+          <FILE id="qXPdAz" name="Utilities.h" compile="0" resource="0" file="Source/Processors/Dsp/Utilities.h"/>
+        </GROUP>
+        <GROUP id="AqvwO6w" name="Editors">
+          <FILE id="F68NQ3" name="ChannelSelector.cpp" compile="1" resource="0"
+                file="Source/Processors/Editors/ChannelSelector.cpp"/>
+          <FILE id="cOToxV" name="ChannelSelector.h" compile="0" resource="0"
+                file="Source/Processors/Editors/ChannelSelector.h"/>
+          <FILE id="EXjl1X" name="ElectrodeButtons.cpp" compile="1" resource="0"
+                file="Source/Processors/Editors/ElectrodeButtons.cpp"/>
+          <FILE id="aOEJ7T" name="ElectrodeButtons.h" compile="0" resource="0"
+                file="Source/Processors/Editors/ElectrodeButtons.h"/>
+          <FILE id="dlQddi" name="GenericEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/Editors/GenericEditor.cpp"/>
+          <FILE id="NZjjLm" name="GenericEditor.h" compile="0" resource="0" file="Source/Processors/Editors/GenericEditor.h"/>
+          <FILE id="mqcmr8" name="ImageIcon.cpp" compile="1" resource="0" file="Source/Processors/Editors/ImageIcon.cpp"/>
+          <FILE id="GLT84s" name="ImageIcon.h" compile="0" resource="0" file="Source/Processors/Editors/ImageIcon.h"/>
+          <FILE id="c8F02O" name="VisualizerEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/Editors/VisualizerEditor.cpp"/>
+          <FILE id="qGudPl" name="VisualizerEditor.h" compile="0" resource="0"
+                file="Source/Processors/Editors/VisualizerEditor.h"/>
+        </GROUP>
+        <GROUP id="{5884418B-6740-1CC4-EC34-721D3F3038AE}" name="EventDetector">
+          <FILE id="GzQXNv" name="EventDetector.cpp" compile="1" resource="0"
+                file="Source/Processors/EventDetector/EventDetector.cpp"/>
+          <FILE id="cB7MXO" name="EventDetector.h" compile="0" resource="0" file="Source/Processors/EventDetector/EventDetector.h"/>
+        </GROUP>
+        <GROUP id="{0F7938FB-ACA3-29CA-58CE-2F0C8B5B0033}" name="EventNode">
+          <FILE id="FWXJPq" name="EventNode.cpp" compile="1" resource="0" file="Source/Processors/EventNode/EventNode.cpp"/>
+          <FILE id="muOEC8" name="EventNode.h" compile="0" resource="0" file="Source/Processors/EventNode/EventNode.h"/>
+          <FILE id="Kwuq6Z" name="EventNodeEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/EventNode/EventNodeEditor.cpp"/>
+          <FILE id="LUVId3" name="EventNodeEditor.h" compile="0" resource="0"
+                file="Source/Processors/EventNode/EventNodeEditor.h"/>
+        </GROUP>
+        <GROUP id="{27CF9A8D-7C31-9AA9-6DCA-6C719E127923}" name="FileReader">
+          <FILE id="Pg9JfX" name="FileReader.cpp" compile="1" resource="0" file="Source/Processors/FileReader/FileReader.cpp"/>
+          <FILE id="SuAWvs" name="FileReader.h" compile="0" resource="0" file="Source/Processors/FileReader/FileReader.h"/>
+          <FILE id="Z58rr6" name="FileReaderEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/FileReader/FileReaderEditor.cpp"/>
+          <FILE id="Ocpu1k" name="FileReaderEditor.h" compile="0" resource="0"
+                file="Source/Processors/FileReader/FileReaderEditor.h"/>
+        </GROUP>
+        <GROUP id="{986528D4-813B-6CCB-4564-5A15140EB912}" name="FilterNode">
+          <FILE id="yBlgAF" name="FilterEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/FilterNode/FilterEditor.cpp"/>
+          <FILE id="sBtXDo" name="FilterEditor.h" compile="0" resource="0" file="Source/Processors/FilterNode/FilterEditor.h"/>
+          <FILE id="usXu7Q" name="FilterNode.cpp" compile="1" resource="0" file="Source/Processors/FilterNode/FilterNode.cpp"/>
+          <FILE id="qnkW8d" name="FilterNode.h" compile="0" resource="0" file="Source/Processors/FilterNode/FilterNode.h"/>
+        </GROUP>
+        <GROUP id="{C47ABFBD-BC30-F6F2-B445-67B11DC5594F}" name="FPGAOutput">
+          <FILE id="DY6GL1" name="FPGAOutput.cpp" compile="1" resource="0" file="Source/Processors/FPGAOutput/FPGAOutput.cpp"/>
+          <FILE id="CdbTqf" name="FPGAOutput.h" compile="0" resource="0" file="Source/Processors/FPGAOutput/FPGAOutput.h"/>
+          <FILE id="tH5H69" name="FPGAOutputEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/FPGAOutput/FPGAOutputEditor.cpp"/>
+          <FILE id="e1ivPs" name="FPGAOutputEditor.h" compile="0" resource="0"
+                file="Source/Processors/FPGAOutput/FPGAOutputEditor.h"/>
+        </GROUP>
+        <GROUP id="{95FA3CAF-7BFA-AFF7-4480-EADCCA5FBA66}" name="GenericProcessor">
+          <FILE id="l24v5k" name="GenericProcessor.cpp" compile="1" resource="0"
+                file="Source/Processors/GenericProcessor/GenericProcessor.cpp"/>
+          <FILE id="jSfKFd" name="GenericProcessor.h" compile="0" resource="0"
+                file="Source/Processors/GenericProcessor/GenericProcessor.h"/>
+        </GROUP>
+        <GROUP id="{B8EDEED3-180D-9198-31A8-D1E42439462C}" name="LfpDisplayNode">
+          <FILE id="jKpYbZ" name="LfpDisplayCanvas.cpp" compile="1" resource="0"
+                file="Source/Processors/LfpDisplayNode/LfpDisplayCanvas.cpp"/>
+          <FILE id="wDsfeN" name="LfpDisplayCanvas.h" compile="0" resource="0"
+                file="Source/Processors/LfpDisplayNode/LfpDisplayCanvas.h"/>
+          <FILE id="tWxSDp" name="LfpDisplayEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/LfpDisplayNode/LfpDisplayEditor.cpp"/>
+          <FILE id="Nkg6ww" name="LfpDisplayEditor.h" compile="0" resource="0"
+                file="Source/Processors/LfpDisplayNode/LfpDisplayEditor.h"/>
+          <FILE id="x9mO0H" name="LfpDisplayNode.cpp" compile="1" resource="0"
+                file="Source/Processors/LfpDisplayNode/LfpDisplayNode.cpp"/>
+          <FILE id="rKu45v" name="LfpDisplayNode.h" compile="0" resource="0"
+                file="Source/Processors/LfpDisplayNode/LfpDisplayNode.h"/>
+        </GROUP>
+        <GROUP id="{D20DFFFD-08E8-5CC6-479A-07CECDE9BC86}" name="LfpTriggeredAverageNode">
+          <FILE id="dxKyFx" name="LfpTriggeredAverageCanvas.cpp" compile="1"
+                resource="0" file="Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.cpp"/>
+          <FILE id="CMxAvm" name="LfpTriggeredAverageCanvas.h" compile="0" resource="0"
+                file="Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageCanvas.h"/>
+          <FILE id="VhsonN" name="LfpTriggeredAverageEditor.cpp" compile="1"
+                resource="0" file="Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageEditor.cpp"/>
+          <FILE id="jVc0dD" name="LfpTriggeredAverageEditor.h" compile="0" resource="0"
+                file="Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageEditor.h"/>
+          <FILE id="ADrDsi" name="LfpTriggeredAverageNode.cpp" compile="1" resource="0"
+                file="Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.cpp"/>
+          <FILE id="wEt96B" name="LfpTriggeredAverageNode.h" compile="0" resource="0"
+                file="Source/Processors/LfpTriggeredAverageNode/LfpTriggeredAverageNode.h"/>
+        </GROUP>
+        <GROUP id="{4B40CAAE-49C7-509A-B7E7-0C7EF011FBA1}" name="Merger">
+          <FILE id="gZxAmt" name="Merger.cpp" compile="1" resource="0" file="Source/Processors/Merger/Merger.cpp"/>
+          <FILE id="w8qwHK" name="Merger.h" compile="0" resource="0" file="Source/Processors/Merger/Merger.h"/>
+          <FILE id="YIzAwj" name="MergerEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/Merger/MergerEditor.cpp"/>
+          <FILE id="yquxy4" name="MergerEditor.h" compile="0" resource="0" file="Source/Processors/Merger/MergerEditor.h"/>
+        </GROUP>
+        <GROUP id="{6E21A406-000C-7894-28D6-2B45D07A304B}" name="MessageCenter">
+          <FILE id="gnNHUQ" name="MessageCenter.cpp" compile="1" resource="0"
+                file="Source/Processors/MessageCenter/MessageCenter.cpp"/>
+          <FILE id="vn2uwZ" name="MessageCenter.h" compile="0" resource="0" file="Source/Processors/MessageCenter/MessageCenter.h"/>
+          <FILE id="xGnJo5" name="MessageCenterEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/MessageCenter/MessageCenterEditor.cpp"/>
+          <FILE id="r1V0KZ" name="MessageCenterEditor.h" compile="0" resource="0"
+                file="Source/Processors/MessageCenter/MessageCenterEditor.h"/>
+        </GROUP>
+        <GROUP id="{86B5AC2A-0A78-6D0E-C5FE-6758DDD096DB}" name="Parameter">
+          <FILE id="yyyDtp" name="ParameterEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/Parameter/ParameterEditor.cpp"/>
+          <FILE id="t3vpkl" name="ParameterEditor.h" compile="0" resource="0"
+                file="Source/Processors/Parameter/ParameterEditor.h"/>
+          <FILE id="P4fc98" name="Parameter.cpp" compile="1" resource="0" file="Source/Processors/Parameter/Parameter.cpp"/>
+          <FILE id="QdTalD" name="Parameter.h" compile="0" resource="0" file="Source/Processors/Parameter/Parameter.h"/>
+        </GROUP>
+        <GROUP id="{0FB1D636-E24B-00AB-3123-3C8B78796B4A}" name="PhaseDetector">
+          <FILE id="l7SGiM" name="PhaseDetector.cpp" compile="1" resource="0"
+                file="Source/Processors/PhaseDetector/PhaseDetector.cpp"/>
+          <FILE id="eKMXut" name="PhaseDetector.h" compile="0" resource="0" file="Source/Processors/PhaseDetector/PhaseDetector.h"/>
+          <FILE id="T9hV0k" name="PhaseDetectorEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/PhaseDetector/PhaseDetectorEditor.cpp"/>
+          <FILE id="d4b1Wv" name="PhaseDetectorEditor.h" compile="0" resource="0"
+                file="Source/Processors/PhaseDetector/PhaseDetectorEditor.h"/>
+        </GROUP>
+        <GROUP id="{FDEB8810-D49F-8E7C-17A7-685370EF966F}" name="ProcessorGraph">
+          <FILE id="qil3t5" name="ProcessorGraph.cpp" compile="1" resource="0"
+                file="Source/Processors/ProcessorGraph/ProcessorGraph.cpp"/>
+          <FILE id="cwGSmb" name="ProcessorGraph.h" compile="0" resource="0"
+                file="Source/Processors/ProcessorGraph/ProcessorGraph.h"/>
+        </GROUP>
+        <GROUP id="{B89E3035-1523-BBAA-12A9-AA81313B7E8F}" name="PulsePalOutput">
+          <FILE id="LEaT0R" name="PulsePalOutput.cpp" compile="1" resource="0"
+                file="Source/Processors/PulsePalOutput/PulsePalOutput.cpp"/>
+          <FILE id="BwbX8M" name="PulsePalOutput.h" compile="0" resource="0"
+                file="Source/Processors/PulsePalOutput/PulsePalOutput.h"/>
+          <FILE id="U4ISc3" name="PulsePalOutputEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/PulsePalOutput/PulsePalOutputEditor.cpp"/>
+          <FILE id="ugyMou" name="PulsePalOutputEditor.h" compile="0" resource="0"
+                file="Source/Processors/PulsePalOutput/PulsePalOutputEditor.h"/>
+        </GROUP>
+        <GROUP id="{75D455A6-2354-C8A4-0F0F-EE14C166944C}" name="RecordControl">
+          <FILE id="NfBdVb" name="RecordControl.cpp" compile="1" resource="0"
+                file="Source/Processors/RecordControl/RecordControl.cpp"/>
+          <FILE id="URvuJK" name="RecordControl.h" compile="0" resource="0" file="Source/Processors/RecordControl/RecordControl.h"/>
+          <FILE id="sovXVI" name="RecordControlEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/RecordControl/RecordControlEditor.cpp"/>
+          <FILE id="CKRdQf" name="RecordControlEditor.h" compile="0" resource="0"
+                file="Source/Processors/RecordControl/RecordControlEditor.h"/>
+        </GROUP>
+        <GROUP id="{72D807AC-44A0-1F7A-8699-22225876FE9A}" name="RecordNode">
+          <FILE id="deQ9TU" name="EngineConfigWindow.cpp" compile="1" resource="0"
+                file="Source/Processors/RecordNode/EngineConfigWindow.cpp"/>
+          <FILE id="iSAT0P" name="EngineConfigWindow.h" compile="0" resource="0"
+                file="Source/Processors/RecordNode/EngineConfigWindow.h"/>
+          <FILE id="gZdszH" name="HDF5FileFormat.cpp" compile="1" resource="0"
+                file="Source/Processors/RecordNode/HDF5FileFormat.cpp"/>
+          <FILE id="EF7IbH" name="HDF5FileFormat.h" compile="0" resource="0"
+                file="Source/Processors/RecordNode/HDF5FileFormat.h"/>
+          <FILE id="dpOVsD" name="HDF5Recording.cpp" compile="1" resource="0"
+                file="Source/Processors/RecordNode/HDF5Recording.cpp"/>
+          <FILE id="DJgCzN" name="HDF5Recording.h" compile="0" resource="0" file="Source/Processors/RecordNode/HDF5Recording.h"/>
+          <FILE id="dpsAhU" name="OriginalRecording.cpp" compile="1" resource="0"
+                file="Source/Processors/RecordNode/OriginalRecording.cpp"/>
+          <FILE id="okexpc" name="OriginalRecording.h" compile="0" resource="0"
+                file="Source/Processors/RecordNode/OriginalRecording.h"/>
+          <FILE id="UU77gU" name="RecordEngine.cpp" compile="1" resource="0"
+                file="Source/Processors/RecordNode/RecordEngine.cpp"/>
+          <FILE id="NSKXGp" name="RecordEngine.h" compile="0" resource="0" file="Source/Processors/RecordNode/RecordEngine.h"/>
+          <FILE id="ccpPpJ" name="RecordNode.cpp" compile="1" resource="0" file="Source/Processors/RecordNode/RecordNode.cpp"/>
+          <FILE id="R9n30e" name="RecordNode.h" compile="0" resource="0" file="Source/Processors/RecordNode/RecordNode.h"/>
+        </GROUP>
+        <GROUP id="{B0C14DBE-8CC1-F242-3534-1DFBEAC5E43B}" name="ReferenceNode">
+          <FILE id="F7WTBV" name="ReferenceNode.cpp" compile="1" resource="0"
+                file="Source/Processors/ReferenceNode/ReferenceNode.cpp"/>
+          <FILE id="XyYPUn" name="ReferenceNode.h" compile="0" resource="0" file="Source/Processors/ReferenceNode/ReferenceNode.h"/>
+          <FILE id="tsfK4e" name="ReferenceNodeEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/ReferenceNode/ReferenceNodeEditor.cpp"/>
+          <FILE id="virGvM" name="ReferenceNodeEditor.h" compile="0" resource="0"
+                file="Source/Processors/ReferenceNode/ReferenceNodeEditor.h"/>
+        </GROUP>
+        <GROUP id="{C6F1F354-C97E-128E-9C4E-2376E039F233}" name="ResamplingNode">
+          <FILE id="yIwQ4b" name="ResamplingNode.cpp" compile="1" resource="0"
+                file="Source/Processors/ResamplingNode/ResamplingNode.cpp"/>
+          <FILE id="h1zDlH" name="ResamplingNode.h" compile="0" resource="0"
+                file="Source/Processors/ResamplingNode/ResamplingNode.h"/>
+          <FILE id="LByZh0" name="ResamplingNodeEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/ResamplingNode/ResamplingNodeEditor.cpp"/>
+          <FILE id="UFlCtp" name="ResamplingNodeEditor.h" compile="0" resource="0"
+                file="Source/Processors/ResamplingNode/ResamplingNodeEditor.h"/>
+        </GROUP>
+        <GROUP id="gFSbZKw" name="Serial">
+          <FILE id="PHwlqi" name="PulsePal.cpp" compile="1" resource="0" file="Source/Processors/Serial/PulsePal.cpp"/>
+          <FILE id="R4XRyB" name="PulsePal.h" compile="0" resource="0" file="Source/Processors/Serial/PulsePal.h"/>
+          <FILE id="3t2ez3c" name="ofArduino.cpp" compile="1" resource="0" file="Source/Processors/Serial/ofArduino.cpp"/>
+          <FILE id="bXASAoT" name="ofArduino.h" compile="0" resource="0" file="Source/Processors/Serial/ofArduino.h"/>
+          <FILE id="hNTT1i1" name="ofConstants.h" compile="0" resource="0" file="Source/Processors/Serial/ofConstants.h"/>
+          <FILE id="F97Ylmz" name="ofSerial.cpp" compile="1" resource="0" file="Source/Processors/Serial/ofSerial.cpp"/>
+          <FILE id="wV1xn3Z" name="ofSerial.h" compile="0" resource="0" file="Source/Processors/Serial/ofSerial.h"/>
+        </GROUP>
+        <GROUP id="{C5E76874-E767-D4E0-D8B6-F61DBB446F13}" name="SerialInput">
+          <FILE id="dWXqU4" name="SerialInput.cpp" compile="1" resource="0" file="Source/Processors/SerialInput/SerialInput.cpp"/>
+          <FILE id="EReMRm" name="SerialInput.h" compile="0" resource="0" file="Source/Processors/SerialInput/SerialInput.h"/>
+          <FILE id="Q0XOjv" name="SerialInputEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/SerialInput/SerialInputEditor.cpp"/>
+          <FILE id="s0Nf1X" name="SerialInputEditor.h" compile="0" resource="0"
+                file="Source/Processors/SerialInput/SerialInputEditor.h"/>
+        </GROUP>
+        <GROUP id="{8E9594A3-D2B2-EAA3-9596-89923D59830A}" name="SignalGenerator">
+          <FILE id="mywzvE" name="SignalGenerator.cpp" compile="1" resource="0"
+                file="Source/Processors/SignalGenerator/SignalGenerator.cpp"/>
+          <FILE id="iaP3u1" name="SignalGenerator.h" compile="0" resource="0"
+                file="Source/Processors/SignalGenerator/SignalGenerator.h"/>
+          <FILE id="xZoFAy" name="SignalGeneratorEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/SignalGenerator/SignalGeneratorEditor.cpp"/>
+          <FILE id="svgwwG" name="SignalGeneratorEditor.h" compile="0" resource="0"
+                file="Source/Processors/SignalGenerator/SignalGeneratorEditor.h"/>
+        </GROUP>
+        <GROUP id="{58E5BDC1-3523-0E4D-2402-72726098BA07}" name="SourceNode">
+          <FILE id="bcB5hN" name="SourceNode.cpp" compile="1" resource="0" file="Source/Processors/SourceNode/SourceNode.cpp"/>
+          <FILE id="Dyas33" name="SourceNode.h" compile="0" resource="0" file="Source/Processors/SourceNode/SourceNode.h"/>
+          <FILE id="KQM0Ls" name="SourceNodeEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/SourceNode/SourceNodeEditor.cpp"/>
+          <FILE id="EWFh9x" name="SourceNodeEditor.h" compile="0" resource="0"
+                file="Source/Processors/SourceNode/SourceNodeEditor.h"/>
+        </GROUP>
+        <GROUP id="{B1C68941-4E97-FD8E-00E8-70B1225B3EBD}" name="SpikeDetector">
+          <FILE id="LZxTYj" name="SpikeDetector.cpp" compile="1" resource="0"
+                file="Source/Processors/SpikeDetector/SpikeDetector.cpp"/>
+          <FILE id="A4LRql" name="SpikeDetector.h" compile="0" resource="0" file="Source/Processors/SpikeDetector/SpikeDetector.h"/>
+          <FILE id="dJHC68" name="SpikeDetectorEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp"/>
+          <FILE id="ek762r" name="SpikeDetectorEditor.h" compile="0" resource="0"
+                file="Source/Processors/SpikeDetector/SpikeDetectorEditor.h"/>
+        </GROUP>
+        <GROUP id="{3C98FCA3-673A-3E34-ABC6-D506EF05DDD4}" name="SpikeDisplayNode">
+          <FILE id="Ak6yJU" name="SpikeDisplayCanvas.cpp" compile="1" resource="0"
+                file="Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.cpp"/>
+          <FILE id="Ivm1WE" name="SpikeDisplayCanvas.h" compile="0" resource="0"
+                file="Source/Processors/SpikeDisplayNode/SpikeDisplayCanvas.h"/>
+          <FILE id="tzcDUJ" name="SpikeDisplayEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.cpp"/>
+          <FILE id="qpnGQ2" name="SpikeDisplayEditor.h" compile="0" resource="0"
+                file="Source/Processors/SpikeDisplayNode/SpikeDisplayEditor.h"/>
+          <FILE id="Osx5Vs" name="SpikeDisplayNode.cpp" compile="1" resource="0"
+                file="Source/Processors/SpikeDisplayNode/SpikeDisplayNode.cpp"/>
+          <FILE id="EYFdq6" name="SpikeDisplayNode.h" compile="0" resource="0"
+                file="Source/Processors/SpikeDisplayNode/SpikeDisplayNode.h"/>
+        </GROUP>
+        <GROUP id="{B65E315B-E451-52BB-C46B-DFC8CFE52512}" name="SpikeSorter">
+          <FILE id="IDfGJU" name="SpikeSortBoxes.cpp" compile="1" resource="0"
+                file="Source/Processors/SpikeSorter/SpikeSortBoxes.cpp"/>
+          <FILE id="oKqHU5" name="SpikeSortBoxes.h" compile="0" resource="0"
+                file="Source/Processors/SpikeSorter/SpikeSortBoxes.h"/>
+          <FILE id="ZvsSnb" name="SpikeSorter.cpp" compile="1" resource="0" file="Source/Processors/SpikeSorter/SpikeSorter.cpp"/>
+          <FILE id="iWFZ8N" name="SpikeSorter.h" compile="0" resource="0" file="Source/Processors/SpikeSorter/SpikeSorter.h"/>
+          <FILE id="AAjUyt" name="SpikeSorterCanvas.cpp" compile="1" resource="0"
+                file="Source/Processors/SpikeSorter/SpikeSorterCanvas.cpp"/>
+          <FILE id="vSwtHQ" name="SpikeSorterCanvas.h" compile="0" resource="0"
+                file="Source/Processors/SpikeSorter/SpikeSorterCanvas.h"/>
+          <FILE id="eRXHEt" name="SpikeSorterEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/SpikeSorter/SpikeSorterEditor.cpp"/>
+          <FILE id="seDqmg" name="SpikeSorterEditor.h" compile="0" resource="0"
+                file="Source/Processors/SpikeSorter/SpikeSorterEditor.h"/>
+        </GROUP>
+        <GROUP id="{393F8FA9-FA27-4F2D-8252-9AB2CAA871DA}" name="Splitter">
+          <FILE id="xbkXa2" name="Splitter.cpp" compile="1" resource="0" file="Source/Processors/Splitter/Splitter.cpp"/>
+          <FILE id="kFiAO3" name="Splitter.h" compile="0" resource="0" file="Source/Processors/Splitter/Splitter.h"/>
+          <FILE id="mY47Gn" name="SplitterEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/Splitter/SplitterEditor.cpp"/>
+          <FILE id="KyMfuL" name="SplitterEditor.h" compile="0" resource="0"
+                file="Source/Processors/Splitter/SplitterEditor.h"/>
+        </GROUP>
+        <GROUP id="W4eqkOy" name="Visualization">
+          <FILE id="ETLsfY" name="DataWindow.cpp" compile="1" resource="0" file="Source/Processors/Visualization/DataWindow.cpp"/>
+          <FILE id="qDfeYR" name="DataWindow.h" compile="0" resource="0" file="Source/Processors/Visualization/DataWindow.h"/>
+          <FILE id="tuQVXY" name="SpikeObject.cpp" compile="1" resource="0" file="Source/Processors/Visualization/SpikeObject.cpp"/>
+          <FILE id="KyhGmE" name="SpikeObject.h" compile="0" resource="0" file="Source/Processors/Visualization/SpikeObject.h"/>
+          <FILE id="MsSuwS" name="Visualizer.h" compile="0" resource="0" file="Source/Processors/Visualization/Visualizer.h"/>
+        </GROUP>
+        <GROUP id="{3FCFBFDA-848D-6B59-5F37-E3D1F43D54DF}" name="WiFiOutput">
+          <FILE id="OmOeLf" name="WiFiOutput.cpp" compile="1" resource="0" file="Source/Processors/WiFiOutput/WiFiOutput.cpp"/>
+          <FILE id="o3arNv" name="WiFiOutput.h" compile="0" resource="0" file="Source/Processors/WiFiOutput/WiFiOutput.h"/>
+          <FILE id="XSiAk6" name="WiFiOutputEditor.cpp" compile="1" resource="0"
+                file="Source/Processors/WiFiOutput/WiFiOutputEditor.cpp"/>
+          <FILE id="QdKqgJ" name="WiFiOutputEditor.h" compile="0" resource="0"
+                file="Source/Processors/WiFiOutput/WiFiOutputEditor.h"/>
+        </GROUP>
       </GROUP>
       <GROUP id="RNGb1yR" name="UI">
+        <FILE id="PBkkUW" name="EcubeDialogComponent.cpp" compile="1" resource="0"
+              file="Source/UI/EcubeDialogComponent.cpp"/>
+        <FILE id="MFmxar" name="EcubeDialogComponent.h" compile="0" resource="0"
+              file="Source/UI/EcubeDialogComponent.h"/>
         <FILE id="gXswXJ" name="CustomArrowButton.cpp" compile="1" resource="0"
               file="Source/UI/CustomArrowButton.cpp"/>
         <FILE id="ECOEoc" name="CustomArrowButton.h" compile="0" resource="0"
@@ -571,10 +711,6 @@
         <FILE id="bWElQSS" name="DataViewport.cpp" compile="1" resource="0"
               file="Source/UI/DataViewport.cpp"/>
         <FILE id="mMoQ3ls" name="DataViewport.h" compile="0" resource="0" file="Source/UI/DataViewport.h"/>
-        <FILE id="rRa3X6v" name="MessageCenter.cpp" compile="1" resource="0"
-              file="Source/UI/MessageCenter.cpp"/>
-        <FILE id="Gwnvgdy" name="MessageCenter.h" compile="0" resource="0"
-              file="Source/UI/MessageCenter.h"/>
         <FILE id="we1JIPz" name="ControlPanel.cpp" compile="1" resource="0"
               file="Source/UI/ControlPanel.cpp"/>
         <FILE id="rCft9Ec" name="ControlPanel.h" compile="0" resource="0" file="Source/UI/ControlPanel.h"/>
@@ -599,7 +735,7 @@
     <MODULE id="juce_data_structures" showAllCode="1" useLocalCopy="1"/>
     <MODULE id="juce_events" showAllCode="1" useLocalCopy="1"/>
     <MODULE id="juce_graphics" showAllCode="1" useLocalCopy="1"/>
-    <MODULE id="juce_gui_audio" showAllCode="1"/>
+    <MODULE id="juce_gui_audio" showAllCode="1" useLocalCopy="1"/>
     <MODULE id="juce_gui_basics" showAllCode="1" useLocalCopy="1"/>
     <MODULE id="juce_gui_extra" showAllCode="1" useLocalCopy="1"/>
     <MODULE id="juce_opengl" showAllCode="1" useLocalCopy="1"/>