úÎa÷\2c      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab Safe-InferredhIf the monad retuns a Just, runs the function on its contents. Returns True if the action was executed.mRuns the monadic action as long as the producer returns Justs. Returns True if the action was ever executed.$Base64-encodes a ByteString as Text.'This cannot fail since Base64 is ASCII.None+0E7@Identifies an open Emotiv device. Also contains the cumulative  of the EEG.7Where we get our data from, some form of "open handle".The EEG's serial.1Whether the EEG is a consumer or developer model.The EEG's cumulative state. )An "open" data source to read bytes from. A conventional c, e.g. an open file. The open hidapi device.Identifies an Emotiv device.The hidapi device info.Emotiv related errors.-We could not read the serial from the device."Serial does not have right format.AWraps (unencrypted) Emotiv raw data. Ensures that it is 32 bytes.LContains the "current state" of the EEG, cumulateively updated by incoming  s. counts up from 0 to 127 (128 Hz)the current battery percentage%turning "left" gives positive numbers%turning "down" gives positive numbersEEG sensor valuesEEG sensor-to-skin connectivity qContains the data of a single packet sent from the device. Accumulated data (the current state) is available in ." counts up from 0 to 127 (128 Hz)#the current battery percentage$%turning "left" gives positive numbers%%turning "down" gives positive numbers&EEG sensor values'EEG sensor-to-skin connectivity(9Describes the indices of bits to make up a certain value.*SThe sensors of an Emotiv EPOC. Uses the names from the International 10-20 system.9'A valid Emotiv serial number. 16 bytes.:2Whether the EPOC is a consumer or developer model.1This affects how the EEG data is to be decrypted.JYou can check if you are using the correct model by seeing if the packet 2 increases from 0 until 128 on subsequent packets.=%Checks an Emotiv serial, returning a 9 if it's valid.>Like = , using a d.?ITakes a 32 bytes encrypted EEG data, returns 32 bytes decrypted EEG data.@ Contains all *s.ACDescribes which bits in a raw data packet make up the given sensor.BIDescribes which bits in a raw data packat make up a sensor quality value.CDExtracts the sensor value for the given sensor from Emotiv raw data.ef shortcut.D.Parses a battery percentage value from a byte.EaWhich sensor's quality is transmitted in the packet (depends on first byte, the packet counter).FTreat a g: as Emotiv raw data. Errors if the input is non 32 bytes.G Parses an   from raw bytes.H%The USB vendor ID of the Emotiv EPOC.I&The USB product ID of the Emotiv EPOC.J2Conveniently expose the serial number of a device.K´Lists all EPOC devices, ordered by interface number. If you do not actively choose amongst them, the last one is usually the one you want (especially if only 1 EEG is connected).L)Opens a given Emotiv device. Returns an  to read from with Q.M Creates an ) device from a path, e.g. a device like devhidraw10 or a normal file containing dumped binary data.N Creates an ! device from an open file handle.OEReads one 32 byte packet from the device and decrypts it to raw data.GReturns Nothing on end of input (or if there are < 32 bytes before it).WNote that if the EEG is (turned) off, this function block until it is turned on again.PCGiven a device and a Emotiv raw data, parses the raw data into an   and updates the cumulative # that we maintain for that device.žCare should be taken that raw data is fed into this function in the right order (e.g. respecting the EEG's increasing sequence numbers and quality updates).‚This function is only neededif you want to obtain both raw data and parsed packages. If you are not interested in raw data, use Q instead.CReturns both the packet read from the device and the updated state.QHReads one 32 byte packet from the device, parses the raw bytes into an   and updates the cumulative # that we maintain for that device.CReturns both the packet read from the device and the updated state.GReturns Nothing on end of input (or if there are < 32 bytes before it).WNote that if the EEG is (turned) off, this function block until it is turned on again.ROpens and reads from the last available device, giving all data from it to the given function. Stops if end of input is reached.Intended for use with ghci. Examples: ·withDataFromLastEEG Consumer print withDataFromLastEEG Consumer (print . packetQuality . snd) withDataFromLastEEG Consumer (putStrLn . unwords . map show . V.toList . qualities . fst)Z  !"#$%&'()*+,-./0123456789h:;<=>?@ABCeDEFGHIJKLMNOPQRijklmnopP  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRPHI KLMNQ9=>J:<; !"#$%&'*876543210/.-,+@OFGP?()ABCDER*   !"#$%&'()*876543210/.-,+9h:<;=>?@ABCeDEFGHIJKLMNOPQRijklmnopNoneSTUVWXYSTUVWXYSTUVWXYSTUVWXYNoneZ\Commonly used options for EEG command line applications. Mainly deals with input selection.\!What model to use for decryption.]KWhat serial to use for decryption. Also allows to pick a certain device.^MUse the given device or dump file for input. If not given, HIDAPI is used._EEG model command line parser.`+Command line parser for EEG selection. See Z.aZRuns a command line parser. The given program description is used for the --help message.bhDepending on some common EEG-choice-related user input, list devices or try to open the correct device. Z[\]^_`ab Z[\]^_`ab Z[\]^`_abZ[\]^_`abq      !!"#$%&'(()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYYZ [\]^_`ab`cde`fghij8klmnopqrs hemokit-0.6.6Hemokit.Internal.UtilsHemokitHemokit.Conduit Hemokit.Start withJustM untilNothing textBase64 EmotivDevice rawDeviceserial emotivModelstateRefEmotivRawDevice HandleDevice handleDevice HidapiDevice hidapiDeviceEmotivDeviceInfohidapiDeviceInfoEmotivExceptionOtherEmotivExceptionCouldNotReadSerialInvalidSerialNumber EmotivRawDataemotivRawDataBytes EmotivStatecounterbatterygyroXgyroYsensors qualities EmotivPacket packetCounter packetBattery packetGyroX packetGyroY packetSensors packetQualityBitMaskSensorF4FC6AF4F8T8P8O2O1P7T7F7AF3FC5F3 SerialNumber EmotivModel DeveloperConsumermakeSerialNumbermakeSerialNumberFromStringdecrypt allSensors getSensorMask qualityMaskgetLevel batteryValuequalitySensorFromByte0makeEmotivRawData parsePacket_EMOTIV_VENDOR_ID_EMOTIV_PRODUCT_IDdeviceInfoSerialgetEmotivDevicesopenEmotivDeviceopenEmotivDeviceFileopenEmotivDeviceHandle readEmotivRawupdateEmotivState readEmotivwithDataFromLastEEG rawSource parsePackets emotivStates emotivPackets jsonConduittcpSink websocketSink EmotivArgsmodelfromFile parseModelemotivArgsParser parseArgsgetEmotivDeviceFromArgsbaseGHC.IO.Handle.TypesHandleGHC.BaseStringintGHC.Real fromIntegralbytestring-0.10.4.0Data.ByteString.Internal ByteString$fNFDataSensor$fNFDataEmotivState$fNFDataEmotivRawData$fNFDataEmotivPacket$fNFDataEmotivException$fNFDataEmotivDeviceInfo$fShowEmotivException$fExceptionEmotivException