|  | @ -151,10 +151,10 @@ char *logBuf = (char*) calloc(serialLoglength, sizeof(char)); // Buffer for all | 
		
	
		
			
				|  |  | #define DIMM_LEDS_NIGHTMODE             120         // Changes LED-brightness
 |  |  | #define DIMM_LEDS_NIGHTMODE             120         // Changes LED-brightness
 | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | // Repeat-Modes
 |  |  | // Repeat-Modes
 | 
		
	
		
			
				|  |  | #define NO_REPEAT                       0
 |  |  |  | 
		
	
		
			
				|  |  | #define TRACK                           1
 |  |  |  | 
		
	
		
			
				|  |  | #define PLAYLIST                        2
 |  |  |  | 
		
	
		
			
				|  |  | #define TRACK_N_PLAYLIST                3
 |  |  |  | 
		
	
		
			
				|  |  |  |  |  | #define NO_REPEAT                       0           // No repeat
 | 
		
	
		
			
				|  |  |  |  |  | #define TRACK                           1           // Repeat current track (infinite loop)
 | 
		
	
		
			
				|  |  |  |  |  | #define PLAYLIST                        2           // Repeat whole playlist (infinite loop)
 | 
		
	
		
			
				|  |  |  |  |  | #define TRACK_N_PLAYLIST                3           // Repeat both (infinite loop)
 | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | typedef struct { // Bit field
 |  |  | typedef struct { // Bit field
 | 
		
	
		
			
				|  |  |     uint8_t playMode:                   4;      // playMode
 |  |  |     uint8_t playMode:                   4;      // playMode
 | 
		
	
	
		
			
				|  | @ -199,15 +199,17 @@ bool enableMqtt = true; | 
		
	
		
			
				|  |  | #define RFID_SCAN_INTERVAL 300                          // in ms
 |  |  | #define RFID_SCAN_INTERVAL 300                          // in ms
 | 
		
	
		
			
				|  |  | uint8_t const cardIdSize = 4;                           // RFID
 |  |  | uint8_t const cardIdSize = 4;                           // RFID
 | 
		
	
		
			
				|  |  | // Volume
 |  |  | // Volume
 | 
		
	
		
			
				|  |  | uint8_t maxVolume = 21;                                 // Maximum volume that can be adjusted
 |  |  |  | 
		
	
		
			
				|  |  |  |  |  | uint8_t maxVolume = 21;                                 // Maximum volume that can be adjusted (default; can be changed later via GUI)
 | 
		
	
		
			
				|  |  | uint8_t minVolume = 0;                                  // Lowest volume that can be adjusted
 |  |  | uint8_t minVolume = 0;                                  // Lowest volume that can be adjusted
 | 
		
	
		
			
				|  |  | uint8_t initVolume = 3;                                 // 0...21 (If not found in NVS, this one will be taken)
 |  |  |  | 
		
	
		
			
				|  |  |  |  |  | uint8_t initVolume = 3;                                 // 0...21 (If not found in NVS, this one will be taken) (default; can be changed later via GUI)
 | 
		
	
		
			
				|  |  | // Sleep
 |  |  | // Sleep
 | 
		
	
		
			
				|  |  | uint8_t maxInactivityTime = 10;                         // Time in minutes, after uC is put to deep sleep because of inactivity
 |  |  | uint8_t maxInactivityTime = 10;                         // Time in minutes, after uC is put to deep sleep because of inactivity
 | 
		
	
		
			
				|  |  | uint8_t sleepTimer = 30;                                // Sleep timer in minutes that can be optionally used (and modified later via MQTT or RFID)
 |  |  | uint8_t sleepTimer = 30;                                // Sleep timer in minutes that can be optionally used (and modified later via MQTT or RFID)
 | 
		
	
		
			
				|  |  | // FTP
 |  |  | // FTP
 | 
		
	
		
			
				|  |  | char *ftpUser = strndup((char*) "esp32", 10);           // FTP-user
 |  |  |  | 
		
	
		
			
				|  |  | char *ftpPassword = strndup((char*) "esp32", 15);       // FTP-password
 |  |  |  | 
		
	
		
			
				|  |  |  |  |  | uint8_t ftpUserLength = 10;                             // Length will be published n-1 as maxlength to GUI
 | 
		
	
		
			
				|  |  |  |  |  | uint8_t ftpPasswordLength = 15;                         // Length will be published n-1 as maxlength to GUI
 | 
		
	
		
			
				|  |  |  |  |  | char *ftpUser = strndup((char*) "esp32", ftpUserLength);                // FTP-user (default; can be changed later via GUI)
 | 
		
	
		
			
				|  |  |  |  |  | char *ftpPassword = strndup((char*) "esp32", ftpPasswordLength);        // FTP-password (default; can be changed later via GUI)
 | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | // Button-configuration (change according your needs)
 |  |  | // Button-configuration (change according your needs)
 | 
		
	
		
			
				|  |  | uint8_t buttonDebounceInterval = 50;                    // Interval in ms to software-debounce buttons
 |  |  | uint8_t buttonDebounceInterval = 50;                    // Interval in ms to software-debounce buttons
 | 
		
	
	
		
			
				|  | @ -255,9 +257,15 @@ bool accessPointStarted = false; | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | // MQTT-configuration
 |  |  | // MQTT-configuration
 | 
		
	
		
			
				|  |  | char *mqtt_server = strndup((char*) "192.168.2.43", 16);    // IP-address of MQTT-server (if not found in NVS this one will be taken)
 |  |  |  | 
		
	
		
			
				|  |  | char *mqttUser = strndup((char*) "mqtt-user", 16);          // MQTT-user
 |  |  |  | 
		
	
		
			
				|  |  | char *mqttPassword = strndup((char*) "mqtt-password", 16);  // MQTT-password*/
 |  |  |  | 
		
	
		
			
				|  |  |  |  |  | // Please note: all lengths will be published n-1 as maxlength to GUI
 | 
		
	
		
			
				|  |  |  |  |  | uint8_t mqttServerLength = 32; | 
		
	
		
			
				|  |  |  |  |  | uint8_t mqttUserLength = 16; | 
		
	
		
			
				|  |  |  |  |  | uint8_t mqttPasswordLength = 16; | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | // Please note: all of them are defaults that can be changed later via GUI
 | 
		
	
		
			
				|  |  |  |  |  | char *mqtt_server = strndup((char*) "192.168.2.43", mqttServerLength);      // IP-address of MQTT-server (if not found in NVS this one will be taken)
 | 
		
	
		
			
				|  |  |  |  |  | char *mqttUser = strndup((char*) "mqtt-user", mqttUserLength);              // MQTT-user
 | 
		
	
		
			
				|  |  |  |  |  | char *mqttPassword = strndup((char*) "mqtt-password", mqttPasswordLength);  // MQTT-password*/
 | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | #ifdef MQTT_ENABLE
 |  |  | #ifdef MQTT_ENABLE
 | 
		
	
		
			
				|  |  |     #define DEVICE_HOSTNAME "ESP32-Tonuino"                 // Name that that is used for MQTT
 |  |  |     #define DEVICE_HOSTNAME "ESP32-Tonuino"                 // Name that that is used for MQTT
 | 
		
	
	
		
			
				|  | @ -1540,7 +1548,7 @@ void rfidScanner(void *parameter) { | 
		
	
		
			
				|  |  |             for (uint8_t i=0; i<cardIdSize; i++) { |  |  |             for (uint8_t i=0; i<cardIdSize; i++) { | 
		
	
		
			
				|  |  |                 cardId[i] = mfrc522.uid.uidByte[i]; |  |  |                 cardId[i] = mfrc522.uid.uidByte[i]; | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |                 snprintf(logBuf, sizeof(logBuf)/sizeof(logBuf[0]), "%02x", cardId[i]); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |                 snprintf(logBuf, serialLoglength, "%02x", cardId[i]); | 
		
	
		
			
				|  |  |                 logger(logBuf, LOGLEVEL_NOTICE); |  |  |                 logger(logBuf, LOGLEVEL_NOTICE); | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |                 n += snprintf (&cardIdString[n], sizeof(cardIdString) / sizeof(cardIdString[0]), "%03d", cardId[i]); |  |  |                 n += snprintf (&cardIdString[n], sizeof(cardIdString) / sizeof(cardIdString[0]), "%03d", cardId[i]); | 
		
	
	
		
			
				|  | @ -2045,7 +2053,7 @@ void trackQueueDispatcher(const char *_itemToPlay, const uint32_t _lastPlayPos, | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |         case ALL_TRACKS_OF_DIR_SORTED: { |  |  |         case ALL_TRACKS_OF_DIR_SORTED: { | 
		
	
		
			
				|  |  |             snprintf(logBuf, sizeof(logBuf)/sizeof(logBuf[0]), "%s '%s' ", (char *) FPSTR(modeAllTrackAlphSorted), filename); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |             snprintf(logBuf, serialLoglength, "%s '%s' ", (char *) FPSTR(modeAllTrackAlphSorted), filename); | 
		
	
		
			
				|  |  |             loggerNl(logBuf, LOGLEVEL_NOTICE); |  |  |             loggerNl(logBuf, LOGLEVEL_NOTICE); | 
		
	
		
			
				|  |  |             sortPlaylist((const char**) musicFiles, strtoul(*(musicFiles-1), NULL, 10)); |  |  |             sortPlaylist((const char**) musicFiles, strtoul(*(musicFiles-1), NULL, 10)); | 
		
	
		
			
				|  |  |             #ifdef MQTT_ENABLE
 |  |  |             #ifdef MQTT_ENABLE
 | 
		
	
	
		
			
				|  | @ -2484,12 +2492,13 @@ void rfidPreferenceLookupHandler (void) { | 
		
	
		
			
				|  |  |     rfidStatus = xQueueReceive(rfidCardQueue, &rfidTagId, 0); |  |  |     rfidStatus = xQueueReceive(rfidCardQueue, &rfidTagId, 0); | 
		
	
		
			
				|  |  |     if (rfidStatus == pdPASS) { |  |  |     if (rfidStatus == pdPASS) { | 
		
	
		
			
				|  |  |         lastTimeActiveTimestamp = millis(); |  |  |         lastTimeActiveTimestamp = millis(); | 
		
	
		
			
				|  |  |         snprintf(logBuf, sizeof(logBuf)/sizeof(logBuf[0]), "%s: %s", (char *) FPSTR(rfidTagReceived), rfidTagId); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         free(currentRfidTagId); | 
		
	
		
			
				|  |  |         currentRfidTagId = strdup(rfidTagId); |  |  |         currentRfidTagId = strdup(rfidTagId); | 
		
	
		
			
				|  |  |  |  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(rfidTagReceived), currentRfidTagId); | 
		
	
		
			
				|  |  |         sendWebsocketData(0, 10);       // Push new rfidTagId to all websocket-clients
 |  |  |         sendWebsocketData(0, 10);       // Push new rfidTagId to all websocket-clients
 | 
		
	
		
			
				|  |  |         loggerNl(logBuf, LOGLEVEL_INFO); |  |  |         loggerNl(logBuf, LOGLEVEL_INFO); | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |         String s = prefsRfid.getString(rfidTagId, "-1");                 // Try to lookup rfidId in NVS
 |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         String s = prefsRfid.getString(currentRfidTagId, "-1");                 // Try to lookup rfidId in NVS
 | 
		
	
		
			
				|  |  |         if (!s.compareTo("-1")) { |  |  |         if (!s.compareTo("-1")) { | 
		
	
		
			
				|  |  |             loggerNl((char *) FPSTR(rfidTagUnknownInNvs), LOGLEVEL_ERROR); |  |  |             loggerNl((char *) FPSTR(rfidTagUnknownInNvs), LOGLEVEL_ERROR); | 
		
	
		
			
				|  |  |             #ifdef NEOPIXEL_ENABLE
 |  |  |             #ifdef NEOPIXEL_ENABLE
 | 
		
	
	
		
			
				|  | @ -2654,9 +2663,13 @@ String templateProcessor(const String& templ) { | 
		
	
		
			
				|  |  |         return prefsSettings.getString("ftpuser", "-1"); |  |  |         return prefsSettings.getString("ftpuser", "-1"); | 
		
	
		
			
				|  |  |     } else if (templ == "FTP_PWD") { |  |  |     } else if (templ == "FTP_PWD") { | 
		
	
		
			
				|  |  |         return prefsSettings.getString("ftppassword", "-1"); |  |  |         return prefsSettings.getString("ftppassword", "-1"); | 
		
	
		
			
				|  |  |     } else if (templ == "INIT_LED_BRIGHTBESS") { |  |  |  | 
		
	
		
			
				|  |  |  |  |  |     } else if (templ == "FTP_USER_LENGTH") { | 
		
	
		
			
				|  |  |  |  |  |         return String(ftpUserLength-1); | 
		
	
		
			
				|  |  |  |  |  |     } else if (templ == "FTP_PWD_LENGTH") { | 
		
	
		
			
				|  |  |  |  |  |         return String(ftpPasswordLength-1); | 
		
	
		
			
				|  |  |  |  |  |     } else if (templ == "INIT_LED_BRIGHTNESS") { | 
		
	
		
			
				|  |  |         return String(prefsSettings.getUChar("iLedBrightness", 0)); |  |  |         return String(prefsSettings.getUChar("iLedBrightness", 0)); | 
		
	
		
			
				|  |  |     } else if (templ == "NIGHT_LED_BRIGHTBESS") { |  |  |  | 
		
	
		
			
				|  |  |  |  |  |     } else if (templ == "NIGHT_LED_BRIGHTNESS") { | 
		
	
		
			
				|  |  |         return String(prefsSettings.getUChar("nLedBrightness", 0)); |  |  |         return String(prefsSettings.getUChar("nLedBrightness", 0)); | 
		
	
		
			
				|  |  |     } else if (templ == "MAX_INACTIVITY") { |  |  |     } else if (templ == "MAX_INACTIVITY") { | 
		
	
		
			
				|  |  |         return String(prefsSettings.getUInt("mInactiviyT", 0)); |  |  |         return String(prefsSettings.getUInt("mInactiviyT", 0)); | 
		
	
	
		
			
				|  | @ -2676,6 +2689,12 @@ String templateProcessor(const String& templ) { | 
		
	
		
			
				|  |  |         return prefsSettings.getString("mqttUser", "-1"); |  |  |         return prefsSettings.getString("mqttUser", "-1"); | 
		
	
		
			
				|  |  |     } else if (templ == "MQTT_PWD") { |  |  |     } else if (templ == "MQTT_PWD") { | 
		
	
		
			
				|  |  |         return prefsSettings.getString("mqttPassword", "-1"); |  |  |         return prefsSettings.getString("mqttPassword", "-1"); | 
		
	
		
			
				|  |  |  |  |  |     } else if (templ == "MQTT_USER_LENGTH") { | 
		
	
		
			
				|  |  |  |  |  |         return String(mqttUserLength-1); | 
		
	
		
			
				|  |  |  |  |  |     } else if (templ == "MQTT_PWD_LENGTH") { | 
		
	
		
			
				|  |  |  |  |  |         return String(mqttPasswordLength-1); | 
		
	
		
			
				|  |  |  |  |  |     } else if (templ == "MQTT_SERVER_LENGTH") { | 
		
	
		
			
				|  |  |  |  |  |         return String(mqttServerLength-1); | 
		
	
		
			
				|  |  |     } else if (templ == "IPv4") { |  |  |     } else if (templ == "IPv4") { | 
		
	
		
			
				|  |  |         myIP = WiFi.localIP(); |  |  |         myIP = WiFi.localIP(); | 
		
	
		
			
				|  |  |         snprintf(logBuf, serialLoglength, "%d.%d.%d.%d", myIP[0], myIP[1], myIP[2], myIP[3]); |  |  |         snprintf(logBuf, serialLoglength, "%d.%d.%d.%d", myIP[0], myIP[1], myIP[2], myIP[3]); | 
		
	
	
		
			
				|  | @ -3149,7 +3168,7 @@ void setup() { | 
		
	
		
			
				|  |  |         prefsSettings.putString("ftpuser", (String) ftpUser); |  |  |         prefsSettings.putString("ftpuser", (String) ftpUser); | 
		
	
		
			
				|  |  |         loggerNl((char *) FPSTR(wroteFtpUserToNvs), LOGLEVEL_ERROR); |  |  |         loggerNl((char *) FPSTR(wroteFtpUserToNvs), LOGLEVEL_ERROR); | 
		
	
		
			
				|  |  |     } else { |  |  |     } else { | 
		
	
		
			
				|  |  |         strncpy(ftpUser, nvsFtpUser.c_str(), sizeof(ftpUser)/sizeof(ftpUser[0])); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         strncpy(ftpUser, nvsFtpUser.c_str(), ftpUserLength); | 
		
	
		
			
				|  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredFtpUserFromNvs), nvsFtpUser.c_str()); |  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredFtpUserFromNvs), nvsFtpUser.c_str()); | 
		
	
		
			
				|  |  |         loggerNl(logBuf, LOGLEVEL_INFO); |  |  |         loggerNl(logBuf, LOGLEVEL_INFO); | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
	
		
			
				|  | @ -3160,7 +3179,7 @@ void setup() { | 
		
	
		
			
				|  |  |         prefsSettings.putString("ftppassword", (String) ftpPassword); |  |  |         prefsSettings.putString("ftppassword", (String) ftpPassword); | 
		
	
		
			
				|  |  |         loggerNl((char *) FPSTR(wroteFtpPwdToNvs), LOGLEVEL_ERROR); |  |  |         loggerNl((char *) FPSTR(wroteFtpPwdToNvs), LOGLEVEL_ERROR); | 
		
	
		
			
				|  |  |     } else { |  |  |     } else { | 
		
	
		
			
				|  |  |         strncpy(ftpPassword, nvsFtpPassword.c_str(), sizeof(ftpPassword)/sizeof(ftpPassword[0])); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         strncpy(ftpPassword, nvsFtpPassword.c_str(), ftpPasswordLength); | 
		
	
		
			
				|  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredFtpPwdFromNvs), nvsFtpPassword.c_str()); |  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredFtpPwdFromNvs), nvsFtpPassword.c_str()); | 
		
	
		
			
				|  |  |         loggerNl(logBuf, LOGLEVEL_INFO); |  |  |         loggerNl(logBuf, LOGLEVEL_INFO); | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
	
		
			
				|  | @ -3224,7 +3243,7 @@ void setup() { | 
		
	
		
			
				|  |  |         prefsSettings.putString("mqttServer", (String) mqtt_server); |  |  |         prefsSettings.putString("mqttServer", (String) mqtt_server); | 
		
	
		
			
				|  |  |         loggerNl((char*) FPSTR(wroteMqttServerToNvs), LOGLEVEL_ERROR); |  |  |         loggerNl((char*) FPSTR(wroteMqttServerToNvs), LOGLEVEL_ERROR); | 
		
	
		
			
				|  |  |     } else { |  |  |     } else { | 
		
	
		
			
				|  |  |         strncpy(mqtt_server, nvsMqttServer.c_str(), sizeof(mqtt_server)/sizeof(mqtt_server[0])); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         strncpy(mqtt_server, nvsMqttServer.c_str(), mqttServerLength); | 
		
	
		
			
				|  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredMqttServerFromNvs), nvsMqttServer.c_str()); |  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredMqttServerFromNvs), nvsMqttServer.c_str()); | 
		
	
		
			
				|  |  |         loggerNl(logBuf, LOGLEVEL_INFO); |  |  |         loggerNl(logBuf, LOGLEVEL_INFO); | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
	
		
			
				|  | @ -3235,7 +3254,7 @@ void setup() { | 
		
	
		
			
				|  |  |         prefsSettings.putString("mqttUser", (String) mqttUser); |  |  |         prefsSettings.putString("mqttUser", (String) mqttUser); | 
		
	
		
			
				|  |  |         loggerNl((char *) FPSTR(wroteMqttUserToNvs), LOGLEVEL_ERROR); |  |  |         loggerNl((char *) FPSTR(wroteMqttUserToNvs), LOGLEVEL_ERROR); | 
		
	
		
			
				|  |  |     } else { |  |  |     } else { | 
		
	
		
			
				|  |  |         strncpy(mqttUser, nvsMqttUser.c_str(), sizeof(mqttUser)/sizeof(mqttUser[0])); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         strncpy(mqttUser, nvsMqttUser.c_str(), mqttUserLength); | 
		
	
		
			
				|  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredMqttUserFromNvs), nvsMqttUser.c_str()); |  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredMqttUserFromNvs), nvsMqttUser.c_str()); | 
		
	
		
			
				|  |  |         loggerNl(logBuf, LOGLEVEL_INFO); |  |  |         loggerNl(logBuf, LOGLEVEL_INFO); | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
	
		
			
				|  | @ -3246,7 +3265,7 @@ void setup() { | 
		
	
		
			
				|  |  |         prefsSettings.putString("mqttPassword", (String) mqttPassword); |  |  |         prefsSettings.putString("mqttPassword", (String) mqttPassword); | 
		
	
		
			
				|  |  |         loggerNl((char *) FPSTR(wroteMqttPwdToNvs), LOGLEVEL_ERROR); |  |  |         loggerNl((char *) FPSTR(wroteMqttPwdToNvs), LOGLEVEL_ERROR); | 
		
	
		
			
				|  |  |     } else { |  |  |     } else { | 
		
	
		
			
				|  |  |         strncpy(mqttPassword, nvsMqttPassword.c_str(), sizeof(mqttPassword)/sizeof(mqttPassword[0])); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         strncpy(mqttPassword, nvsMqttPassword.c_str(), mqttPasswordLength); | 
		
	
		
			
				|  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredMqttPwdFromNvs), nvsMqttPassword.c_str()); |  |  |         snprintf(logBuf, serialLoglength, "%s: %s", (char *) FPSTR(restoredMqttPwdFromNvs), nvsMqttPassword.c_str()); | 
		
	
		
			
				|  |  |         loggerNl(logBuf, LOGLEVEL_INFO); |  |  |         loggerNl(logBuf, LOGLEVEL_INFO); | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
	
		
			
				|  | 
 |