textAusgabe
timeout
Erdgeschoss_Anzahl_gekippte_Fenster
Erdgeschoss_Anzahl_offene_Fenster
Erdgeschoss_Anzahl_geschlossene_Fenster
Keller_Anzahl_gekippte_Fenster
Erdgeschoss_Anzahl_Fenster_gesamt
Keller_Anzahl_offene_Fenster
Fenster_Erdgeschoss
Keller_Anzahl_geschlossene_Fenster
Fenster_einfach_Anzahl_Fenster_gekippt
Keller_Anzahl_Fenster_gesamt
Fenster_einfach_Anzahl_Fenster_offen
Fenster_Keller
Fenster_einfach_Anzahl_Fenster_geschlossen
Fenster_Drehgriff_Anzahl_Fenster_gekippt
Fenster_einfach_Anzahl_Fenster_gesamt
Fenster_Drehgriff_Anzahl_Fenster_offen
Fenster_einfach
Fenster_Drehgriff_Anzahl_Fenster_geschlossen
Telegram
Fenster_Drehgriff_Anzahl_Fenster_gesamt
Telegramempfaenger
Fenster_Drehgriff
iQontrol_Liste
E-Mail
offene Fenster
gekippte Fenster
Fenster
Ausgabe
Fenster_Liste
htmlText
Datenpunkte_in_0_userdata.0_anlegen
Ly8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDAxID0gJ0ZlbnN0ZXIuMDFIYXVzdHVlcic7CmNvbnN0IGR0cDAwMSA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMDFIYXVzdHVlcicscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMShpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sIDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHAxKCcwX3VzZXJkYXRhLjAuJyArIGRwMDAxLCBkdHAwMDEpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDAyID0gJ0ZlbnN0ZXIuMDJTY2hsYWZ6aW1tZXJfbGlua3MnOwpjb25zdCBkdHAwMDIgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzAyU2NobGFmemltbWVyX2xpbmtzJyxyb2xlOiAnc3RyaW5nJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAyKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwgMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDIoJzBfdXNlcmRhdGEuMC4nICsgZHAwMDIsIGR0cDAwMik7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMDMgPSAnRmVuc3Rlci4wM1NjaGxhZnppbW1lcl9yZWNodHMnOwpjb25zdCBkdHAwMDMgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzAzU2NobGFmemltbWVyX3JlY2h0cycscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMyhpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sIDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHAzKCcwX3VzZXJkYXRhLjAuJyArIGRwMDAzLCBkdHAwMDMpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDA0ID0gJ0ZlbnN0ZXIuMDRXb2huemltbWVyZmVuc3Rlcl9saW5rcyc7CmNvbnN0IGR0cDAwNCA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMDRXb2huemltbWVyZmVuc3Rlcl9saW5rcycscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwNChpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sIDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA0KCcwX3VzZXJkYXRhLjAuJyArIGRwMDA0LCBkdHAwMDQpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDA1ID0gJ0ZlbnN0ZXIuMDVXb2huemltbWVyX1RlcnJhc3NlbnR1ZXInOwpjb25zdCBkdHAwMDUgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzA1V29obnppbW1lcl9UZXJyYXNzZW50dWVyJyxyb2xlOiAnc3RyaW5nJ307CiAKZnVuY3Rpb24gY3JlYXRlRHA1KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwgMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDUoJzBfdXNlcmRhdGEuMC4nICsgZHAwMDUsIGR0cDAwNSk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMDYgPSAnRmVuc3Rlci4wNldvaG56aW1tZXJmZW5zdGVyX3JlY2h0cyc7CmNvbnN0IGR0cDAwNiA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMDZXb2huemltbWVyZmVuc3Rlcl9yZWNodHMnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDYoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LCAxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwNignMF91c2VyZGF0YS4wLicgKyBkcDAwNiwgZHRwMDA2KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAwNyA9ICdGZW5zdGVyLjA3S3VlY2hlbmZlbnN0ZXJfbGlua3MnOwpjb25zdCBkdHAwMDcgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzA3S3VlY2hlbmZlbnN0ZXJfbGlua3MnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDcoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LCAxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwNygnMF91c2VyZGF0YS4wLicgKyBkcDAwNywgZHRwMDA3KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAwOCA9ICdGZW5zdGVyLjA4S3VlY2hlbmZlbnN0ZXJfbWl0dGUnOwpjb25zdCBkdHAwMDggPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzA4S3VlY2hlbmZlbnN0ZXJfbWl0dGUnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDgoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LCAxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwOCgnMF91c2VyZGF0YS4wLicgKyBkcDAwOCwgZHRwMDA4KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAwOSA9ICdGZW5zdGVyLjA5S3VlY2hlbmZlbnN0ZXJfcmVjaHRzJzsKY29uc3QgZHRwMDA5ID0ge3R5cGU6ICdzdHJpbmcnLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICcwOUt1ZWNoZW5mZW5zdGVyX3JlY2h0cycscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwOShpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sIDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA5KCcwX3VzZXJkYXRhLjAuJyArIGRwMDA5LCBkdHAwMDkpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDEwID0gJ0ZlbnN0ZXIuMTBCYWRlemltbWVyZmVuc3Rlcl9saW5rcyc7CmNvbnN0IGR0cDAxMCA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMTBCYWRlemltbWVyZmVuc3Rlcl9saW5rcycscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMTAoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LCAxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMTAoJzBfdXNlcmRhdGEuMC4nICsgZHAwMTAsIGR0cDAxMCk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMTEgPSAnRmVuc3Rlci4xMUJhZGV6aW1tZXJmZW5zdGVyX3JlY2h0cyc7CmNvbnN0IGR0cDAxMSA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMTFCYWRlemltbWVyZmVuc3Rlcl9yZWNodHMnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDExKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwgMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDExKCcwX3VzZXJkYXRhLjAuJyArIGRwMDExLCBkdHAwMTEpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDEyID0gJ0ZlbnN0ZXIuMTJHYWVzdGV6aW1tZXJmZW5zdGVyX2xpbmtzJzsKY29uc3QgZHRwMDEyID0ge3R5cGU6ICdzdHJpbmcnLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICcxMkdhZXN0ZXppbW1lcmZlbnN0ZXJfbGlua3MnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDEyKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwgMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDEyKCcwX3VzZXJkYXRhLjAuJyArIGRwMDEyLCBkdHAwMTIpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDEzID0gJ0ZlbnN0ZXIuMTNHYWVzdGV6aW1tZXJmZW5zdGVyX3JlY2h0cyc7CmNvbnN0IGR0cDAxMyA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMTNHYWVzdGV6aW1tZXJmZW5zdGVyX3JlY2h0cycscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMTMoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LCAxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMTMoJzBfdXNlcmRhdGEuMC4nICsgZHAwMTMsIGR0cDAxMyk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMTQgPSAnRmVuc3Rlci4xNFdlcmtzdGF0dGZlbnN0ZXInOwpjb25zdCBkdHAwMTQgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzE0V2Vya3N0YXR0ZmVuc3Rlcicscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMTQoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LCAxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMTQoJzBfdXNlcmRhdGEuMC4nICsgZHAwMTQsIGR0cDAxNCk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMTUgPSAnRmVuc3Rlci4xNVZvcnJhdHNrZWxsZXJmZW5zdGVyJzsKY29uc3QgZHRwMDE1ID0ge3R5cGU6ICdzdHJpbmcnLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICcxNVZvcnJhdHNrZWxsZXJmZW5zdGVyJyxyb2xlOiAnc3RyaW5nJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAxNShpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sIDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHAxNSgnMF91c2VyZGF0YS4wLicgKyBkcDAxNSwgZHRwMDE1KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxNiA9ICdGZW5zdGVyLjE2V29obnppbW1lcmtlbGxlcmZlbnN0ZXJfbGlua3MnOwpjb25zdCBkdHAwMTYgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzE2V29obnppbW1lcmtlbGxlcmZlbnN0ZXJfbGlua3MnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDE2KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwgMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDE2KCcwX3VzZXJkYXRhLjAuJyArIGRwMDE2LCBkdHAwMTYpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDE3ID0gJ0ZlbnN0ZXIuMTdXb2huemltbWVya2VsbGVyZmVuc3Rlcl9taXR0ZSc7CmNvbnN0IGR0cDAxNyA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMTdXb2huemltbWVya2VsbGVyZmVuc3Rlcl9taXR0ZScscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMTcoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LCAxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMTcoJzBfdXNlcmRhdGEuMC4nICsgZHAwMTcsIGR0cDAxNyk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMTggPSAnRmVuc3Rlci4xOFdvaG56aW1tZXJrZWxsZXJmZW5zdGVyX3JlY2h0cyc7CmNvbnN0IGR0cDAxOCA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMThXb2huemltbWVya2VsbGVyZmVuc3Rlcl9yZWNodHMnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDE4KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMTgoJzBfdXNlcmRhdGEuMC4nICsgZHAwMTgsIGR0cDAxOCk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMTkgPSAnRmVuc3Rlci4xOUhlaXp1bmdza2VsbGVyZmVuc3Rlcic7CmNvbnN0IGR0cDAxOSA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMTlIZWl6dW5nc2tlbGxlcmZlbnN0ZXInLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDE5KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMTkoJzBfdXNlcmRhdGEuMC4nICsgZHAwMTksIGR0cDAxOSk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMjAgPSAnRmVuc3Rlci4yMFdlaWhuYWNodHNiYXVta2VsbGVyZmVuc3Rlcic7CmNvbnN0IGR0cDAyMCA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMjBXZWlobmFjaHRzYmF1bWtlbGxlcmZlbnN0ZXInLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDIwKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMjAoJzBfdXNlcmRhdGEuMC4nICsgZHAwMjAsIGR0cDAyMCk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMjEgPSAnRmVuc3Rlci4yMVNhdW5ha2VsbGVyZmVuc3Rlcl9saW5rcyc7CmNvbnN0IGR0cDAyMSA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMjFTYXVuYWtlbGxlcmZlbnN0ZXJfbGlua3MnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDIxKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMjEoJzBfdXNlcmRhdGEuMC4nICsgZHAwMjEsIGR0cDAyMSk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMjIgPSAnRmVuc3Rlci4yMlNhdW5ha2VsbGVyZmVuc3Rlcl9yZWNodHMnOwpjb25zdCBkdHAwMjIgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzIyU2F1bmFrZWxsZXJmZW5zdGVyX3JlY2h0cycscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMjIoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHAyMignMF91c2VyZGF0YS4wLicgKyBkcDAyMiwgZHRwMDIyKTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMtLS1GZW5zdGVyIG9mZmVuZS1nZWtpcHB0ZSBGZW5zdGVyIExpc3RlLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDA3OCA9ICdGZW5zdGVyLjc4X29mZmVuZV9nZWtpcHB0ZV9GZW5zdGVyX0xpc3RlJzsKY29uc3QgZHRwMDc4ID0ge3R5cGU6ICdzdHJpbmcnLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICc3OF9vZmZlbmVfZ2VraXBwdGVfRmVuc3Rlcl9MaXN0ZScscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwNzgoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA3OCgnMF91c2VyZGF0YS4wLicgKyBkcDA3OCwgZHRwMDc4KTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMtLS1GZW5zdGVyIGVpbmZhY2ggQW56YWhsIGdla2lwcHQtZ2XDtmZmbmV0LWdlc2NobG9zc2VuLWdlc2FtdC0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwNzkgPSAnRmVuc3Rlci43OV9laW5mYWNoX0FuemFobF9GZW5zdGVyX2dla2lwcHQnOwpjb25zdCBkdHAwNzkgPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzc5X2VpbmZhY2hfQW56YWhsX0ZlbnN0ZXJfZ2VraXBwdCcscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwNzkoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA3OSgnMF91c2VyZGF0YS4wLicgKyBkcDA3OSwgZHRwMDc5KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDA4MCA9ICdGZW5zdGVyLjgwX2VpbmZhY2hfQW56YWhsX0ZlbnN0ZXJfb2ZmZW4nOwpjb25zdCBkdHAwODAgPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzgwX2VpbmZhY2hfQW56YWhsX0ZlbnN0ZXJfb2ZmZW4nLHJvbGU6ICdudW1iZXInfTsKIApmdW5jdGlvbiBjcmVhdGVEcDgwKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwODAoJzBfdXNlcmRhdGEuMC4nICsgZHAwODAsIGR0cDA4MCk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwODEgPSAnRmVuc3Rlci44MV9laW5mYWNoX0FuemFobF9GZW5zdGVyX2dlc2NobG9zc2VuJzsKY29uc3QgZHRwMDgxID0ge3R5cGU6ICdudW1iZXInLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICc4MV9laW5mYWNoX0FuemFobF9GZW5zdGVyX2dlc2NobG9zc2VuJyxyb2xlOiAnbnVtYmVyJ307CiAKZnVuY3Rpb24gY3JlYXRlRHA4MShpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDgxKCcwX3VzZXJkYXRhLjAuJyArIGRwMDgxLCBkdHAwODEpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDgyID0gJ0ZlbnN0ZXIuODJfZWluZmFjaF9BbnphaGxfRmVuc3Rlcl9nZXNhbXQnOwpjb25zdCBkdHAwODIgPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzgyX2VpbmZhY2hfQW56YWhsX0ZlbnN0ZXJfZ2VzYW10Jyxyb2xlOiAnbnVtYmVyJ307CiAKZnVuY3Rpb24gY3JlYXRlRHA4MihpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDgyKCcwX3VzZXJkYXRhLjAuJyArIGRwMDgyLCBkdHAwODIpOwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIy0tLUZlbnN0ZXIgRHJlaGdyaWZmIEFuemFobCBnZWtpcHB0LWdlw7ZmZm5ldC1nZXNjaGxvc3Nlbi1nZXNhbXQtLS0jIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDgzID0gJ0ZlbnN0ZXIuODNfRHJlaGdyaWZmX0FuemFobF9GZW5zdGVyX2dla2lwcHQnOwpjb25zdCBkdHAwODMgPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzgzX0RyZWhncmlmZl9BbnphaGxfRmVuc3Rlcl9nZWtpcHB0Jyxyb2xlOiAnbnVtYmVyJ307CiAKZnVuY3Rpb24gY3JlYXRlRHA4MyhpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDgzKCcwX3VzZXJkYXRhLjAuJyArIGRwMDgzLCBkdHAwODMpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDg0ID0gJ0ZlbnN0ZXIuODRfRHJlaGdyaWZmX0FuemFobF9GZW5zdGVyX29mZmVuJzsKY29uc3QgZHRwMDg0ID0ge3R5cGU6ICdudW1iZXInLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICc4NF9EcmVoZ3JpZmZfQW56YWhsX0ZlbnN0ZXJfb2ZmZW4nLHJvbGU6ICdudW1iZXInfTsKIApmdW5jdGlvbiBjcmVhdGVEcDg0KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwODQoJzBfdXNlcmRhdGEuMC4nICsgZHAwODQsIGR0cDA4NCk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwODUgPSAnRmVuc3Rlci44NV9EcmVoZ3JpZmZfQW56YWhsX0ZlbnN0ZXJfZ2VzY2hsb3NzZW4nOwpjb25zdCBkdHAwODUgPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzg1X0RyZWhncmlmZl9BbnphaGxfRmVuc3Rlcl9nZXNjaGxvc3Nlbicscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwODUoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA4NSgnMF91c2VyZGF0YS4wLicgKyBkcDA4NSwgZHRwMDg1KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDA4NiA9ICdGZW5zdGVyLjg2X0RyZWhncmlmZl9BbnphaGxfRmVuc3Rlcl9nZXNhbXQnOwpjb25zdCBkdHAwODYgPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzg2X0RyZWhncmlmZl9BbnphaGxfRmVuc3Rlcl9nZXNhbXQnLHJvbGU6ICdudW1iZXInfTsKIApmdW5jdGlvbiBjcmVhdGVEcDg2KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwODYoJzBfdXNlcmRhdGEuMC4nICsgZHAwODYsIGR0cDA4Nik7CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0tRmVuc3RlciBLZWxsZXIgQW56YWhsIGdla2lwcHQtZ2XDtmZmbmV0LWdlc2NobG9zc2VuLWdlc2FtdC0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwODcgPSAnRmVuc3Rlci44N19LZWxsZXJfQW56YWhsX0ZlbnN0ZXJfZ2VraXBwdCc7CmNvbnN0IGR0cDA4NyA9IHt0eXBlOiAnbnVtYmVyJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnODdfS2VsbGVyX0FuemFobF9GZW5zdGVyX2dla2lwcHQnLHJvbGU6ICdudW1iZXInfTsKIApmdW5jdGlvbiBjcmVhdGVEcDg3KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwODcoJzBfdXNlcmRhdGEuMC4nICsgZHAwODcsIGR0cDA4Nyk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwODggPSAnRmVuc3Rlci44OF9LZWxsZXJfQW56YWhsX0ZlbnN0ZXJfb2ZmZW4nOwpjb25zdCBkdHAwODggPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzg4X0tlbGxlcl9BbnphaGxfRmVuc3Rlcl9vZmZlbicscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwODgoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA4OCgnMF91c2VyZGF0YS4wLicgKyBkcDA4OCwgZHRwMDg4KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDA4OSA9ICdGZW5zdGVyLjg5X0tlbGxlcl9BbnphaGxfRmVuc3Rlcl9nZXNjaGxvc3Nlbic7CmNvbnN0IGR0cDA4OSA9IHt0eXBlOiAnbnVtYmVyJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnODlfS2VsbGVyX0FuemFobF9GZW5zdGVyX2dlc2NobG9zc2VuJyxyb2xlOiAnbnVtYmVyJ307CiAKZnVuY3Rpb24gY3JlYXRlRHA4OShpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDg5KCcwX3VzZXJkYXRhLjAuJyArIGRwMDg5LCBkdHAwODkpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDkwID0gJ0ZlbnN0ZXIuOTBfS2VsbGVyX0FuemFobF9GZW5zdGVyX2dlc2FtdCc7CmNvbnN0IGR0cDA5MCA9IHt0eXBlOiAnbnVtYmVyJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnOTBfS2VsbGVyX0FuemFobF9GZW5zdGVyX2dlc2FtdCcscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwOTAoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA5MCgnMF91c2VyZGF0YS4wLicgKyBkcDA5MCwgZHRwMDkwKTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMtLS1GZW5zdGVyIEVyZGdlc2Nob3NzIEFuemFobCBnZWtpcHB0LWdlw7ZmZm5ldC1nZXNjaGxvc3Nlbi1nZXNhbXQtLS0jIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDkxID0gJ0ZlbnN0ZXIuOTFfRXJkZ2VzY2hvc3NfQW56YWhsX0ZlbnN0ZXJfZ2VraXBwdCc7CmNvbnN0IGR0cDA5MSA9IHt0eXBlOiAnbnVtYmVyJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnOTFfRXJkZ2VzY2hvc3NfQW56YWhsX0ZlbnN0ZXJfZ2VraXBwdCcscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwOTEoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA5MSgnMF91c2VyZGF0YS4wLicgKyBkcDA5MSwgZHRwMDkxKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDA5MiA9ICdGZW5zdGVyLjkyX0VyZGdlc2Nob3NzX0FuemFobF9GZW5zdGVyX29mZmVuJzsKY29uc3QgZHRwMDkyID0ge3R5cGU6ICdudW1iZXInLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICc5Ml9FcmRnZXNjaG9zc19BbnphaGxfRmVuc3Rlcl9vZmZlbicscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwOTIoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA5MignMF91c2VyZGF0YS4wLicgKyBkcDA5MiwgZHRwMDkyKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDA5MyA9ICdGZW5zdGVyLjkzX0VyZGdlc2Nob3NzX0FuemFobF9GZW5zdGVyX2dlc2NobG9zc2VuJzsKY29uc3QgZHRwMDkzID0ge3R5cGU6ICdudW1iZXInLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICc5M19FcmRnZXNjaG9zc19BbnphaGxfRmVuc3Rlcl9nZXNjaGxvc3Nlbicscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwOTMoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA5MygnMF91c2VyZGF0YS4wLicgKyBkcDA5MywgZHRwMDkzKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDA5NCA9ICdGZW5zdGVyLjk0X0VyZGdlc2Nob3NzX0FuemFobF9GZW5zdGVyX2dlc2FtdCc7CmNvbnN0IGR0cDA5NCA9IHt0eXBlOiAnbnVtYmVyJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnOTRfRXJkZ2VzY2hvc3NfQW56YWhsX0ZlbnN0ZXJfZ2VzYW10Jyxyb2xlOiAnbnVtYmVyJ307CiAKZnVuY3Rpb24gY3JlYXRlRHA5NChpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDk0KCcwX3VzZXJkYXRhLjAuJyArIGRwMDk0LCBkdHAwOTQpOwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIy0tLUZlbnN0ZXIgQW56YWhsIGdla2lwcHQtZ2XDtmZmbmV0LWdlc2NobG9zc2VuLWdlc2FtdC0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwOTUgPSAnRmVuc3Rlci45NV9nZXNhbXRfQW56YWhsX0ZlbnN0ZXJfZ2VraXBwdCc7CmNvbnN0IGR0cDA5NSA9IHt0eXBlOiAnbnVtYmVyJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnOTVfZ2VzYW10X0FuemFobF9GZW5zdGVyX2dla2lwcHQnLHJvbGU6ICdudW1iZXInfTsKIApmdW5jdGlvbiBjcmVhdGVEcDk1KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwOTUoJzBfdXNlcmRhdGEuMC4nICsgZHAwOTUsIGR0cDA5NSk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwOTYgPSAnRmVuc3Rlci45Nl9nZXNhbXRfQW56YWhsX0ZlbnN0ZXJfb2ZmZW4nOwpjb25zdCBkdHAwOTYgPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzk2X2dlc2FtdF9BbnphaGxfRmVuc3Rlcl9vZmZlbicscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwOTYoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA5NignMF91c2VyZGF0YS4wLicgKyBkcDA5NiwgZHRwMDk2KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDA5NyA9ICdGZW5zdGVyLjk3X2dlc2FtdF9BbnphaGxfRmVuc3Rlcl9nZXNjaGxvc3Nlbic7CmNvbnN0IGR0cDA5NyA9IHt0eXBlOiAnbnVtYmVyJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnOTdfZ2VzYW10X0FuemFobF9GZW5zdGVyX2dlc2NobG9zc2VuJyxyb2xlOiAnbnVtYmVyJ307CiAKZnVuY3Rpb24gY3JlYXRlRHA5NyhpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDk3KCcwX3VzZXJkYXRhLjAuJyArIGRwMDk3LCBkdHAwOTcpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDk4ID0gJ0ZlbnN0ZXIuOThfZ2VzYW10X0FuemFobF9GZW5zdGVyX2dlc2FtdCc7CmNvbnN0IGR0cDA5OCA9IHt0eXBlOiAnbnVtYmVyJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnOThfZ2VzYW10X0FuemFobF9GZW5zdGVyX2dlc2FtdCcscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwOTgoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA5OCgnMF91c2VyZGF0YS4wLicgKyBkcDA5OCwgZHRwMDk4KTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMtLS1OYWNocmljaHRlbnZlcnNhbmQgYW5zY2hhbHRlbi1hdXNzY2hhbHRlbi0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwOTkgPSAnTmFjaHJpY2h0ZW52ZXJzYW5kLlRlbGVncmFtLjAxVGVsZWdyYW1fTmFjaHJpY2h0ZW52ZXJzYW5kJzsKY29uc3QgZHRwMDk5ID0ge3R5cGU6ICdib29sZWFuJywgcmVhZDogdHJ1ZSwgd3JpdGU6IHRydWUsIG5hbWU6ICcwMVRlbGVncmFtX05hY2hyaWNodGVudmVyc2FuZCcscm9sZTogJ3N3aXRjaCd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwOTkoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHA5OSgnMF91c2VyZGF0YS4wLicgKyBkcDA5OSwgZHRwMDk5KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDEwMCA9ICdOYWNocmljaHRlbnZlcnNhbmQuRU1haWwuMDFFTWFpbF9OYWNocmljaHRlbnZlcnNhbmQnOwpjb25zdCBkdHAxMDAgPSB7dHlwZTogJ2Jvb2xlYW4nLCByZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZSwgbmFtZTogJzAxRU1haWxfTmFjaHJpY2h0ZW52ZXJzYW5kJyxyb2xlOiAnc3dpdGNoJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAxMDAoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHAxMDAoJzBfdXNlcmRhdGEuMC4nICsgZHAxMDAsIGR0cDEwMCk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAxMDEgPSAnTmFjaHJpY2h0ZW52ZXJzYW5kLmlRb250cm9sLjAxaVFvbnRyb2xfTGlzdGUnOwpjb25zdCBkdHAxMDEgPSB7dHlwZTogJ2Jvb2xlYW4nLCByZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZSwgbmFtZTogJzAxaVFvbnRyb2xfTGlzdGUnLHJvbGU6ICdzd2l0Y2gnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDEwMShpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDEwMSgnMF91c2VyZGF0YS4wLicgKyBkcDEwMSwgZHRwMTAxKTs=
Beschreibe diese Funktion …
iQontrol_File_schreiben
ICBjb25zdCBwYXRoID0gIi9odG1sZmVuc3Rlci5odG1sIjsNCiAgDQogIHdyaXRlRmlsZSgnaXFvbnRyb2wubWV0YScsIHBhdGggLHRleHRBdXNnYWJlLCBmdW5jdGlvbiAoZXJyb3IpIHsNCiAgICBsb2coJ2ZpbGUgd3JpdHRlbicpOw0KfSk7
funktion zum schreiben der datei
Scriptstart
timeout
15
sec
Scriptstart
#####Erdgeschoss#####
0=geschlossen / 1=offen
Haustür
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.01Haustuer
FALSE
geschlossen
0_userdata.0.Fenster.01Haustuer
FALSE
geöffnet
Schlafzimmer Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.02Schlafzimmer_links
FALSE
geschlossen
0_userdata.0.Fenster.02Schlafzimmer_links
FALSE
geöffnet
Schlafzimmer Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.03Schlafzimmer_rechts
FALSE
geschlossen
0_userdata.0.Fenster.03Schlafzimmer_rechts
FALSE
geöffnet
Wohnzimmer Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.04Wohnzimmerfenster_links
FALSE
geschlossen
0_userdata.0.Fenster.04Wohnzimmerfenster_links
FALSE
geöffnet
Wohnzimmer Terrassentür
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.05Wohnzimmer_Terrassentuer
FALSE
geschlossen
0_userdata.0.Fenster.05Wohnzimmer_Terrassentuer
FALSE
geöffnet
Wohnzimmer Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.06Wohnzimmerfenster_rechts
FALSE
geschlossen
0_userdata.0.Fenster.06Wohnzimmerfenster_rechts
FALSE
geöffnet
Küche Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.07Kuechenfenster_links
FALSE
geschlossen
0_userdata.0.Fenster.07Kuechenfenster_links
FALSE
geöffnet
Küche Fenster mitte
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.08Kuechenfenster_mitte
FALSE
geschlossen
0_userdata.0.Fenster.08Kuechenfenster_mitte
FALSE
geöffnet
Küche Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.09Kuechenfenster_rechts
FALSE
geschlossen
0_userdata.0.Fenster.09Kuechenfenster_rechts
FALSE
geöffnet
Badezimmer Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.10Badezimmerfenster_links
FALSE
geschlossen
0_userdata.0.Fenster.10Badezimmerfenster_links
FALSE
geöffnet
Badezimmer Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.11Badezimmerfenster_rechts
FALSE
geschlossen
0_userdata.0.Fenster.11Badezimmerfenster_rechts
FALSE
geöffnet
Gaestezimmer Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.12Gaestezimmerfenster_links
FALSE
geschlossen
0_userdata.0.Fenster.12Gaestezimmerfenster_links
FALSE
geöffnet
Gaestezimmer Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.13Gaestezimmerfenster_rechts
FALSE
geschlossen
0_userdata.0.Fenster.13Gaestezimmerfenster_rechts
FALSE
geöffnet
#####Keller#####
ab hier Drehgriffe
ab hier 0=geschlossen/1=gekippt/2=offen
Keller Werkstatt Fenster
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.14Werkstattfenster
FALSE
geschlossen
EQ
val
hm-rpc.0.xxx.1.STATE
1
0_userdata.0.Fenster.14Werkstattfenster
FALSE
gekippt
0_userdata.0.Fenster.14Werkstattfenster
FALSE
geöffnet
Keller Vorratskeller Fenster
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.15Vorratskellerfenster
FALSE
geschlossen
EQ
val
hm-rpc.0.xxx.1.STATE
1
0_userdata.0.Fenster.15Vorratskellerfenster
FALSE
gekippt
0_userdata.0.Fenster.15Vorratskellerfenster
FALSE
geöffnet
Keller Wohnzimmer Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.16Wohnzimmerkellerfenster_links
FALSE
geschlossen
EQ
val
hm-rpc.0.xxx.1.STATE
1
0_userdata.0.Fenster.16Wohnzimmerkellerfenster_links
FALSE
gekippt
0_userdata.0.Fenster.16Wohnzimmerkellerfenster_links
FALSE
geöffnet
Keller Wohnzimmer Fenster mitte
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.17Wohnzimmerkellerfenster_mitte
FALSE
geschlossen
EQ
val
hm-rpc.0.xxx.1.STATE
1
0_userdata.0.Fenster.17Wohnzimmerkellerfenster_mitte
FALSE
gekippt
0_userdata.0.Fenster.17Wohnzimmerkellerfenster_mitte
FALSE
geöffnet
Keller Wohnzimmer Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.18Wohnzimmerkellerfenster_rechts
FALSE
geschlossen
EQ
val
hm-rpc.0.xxx.1.STATE
1
0_userdata.0.Fenster.18Wohnzimmerkellerfenster_rechts
FALSE
gekippt
0_userdata.0.Fenster.18Wohnzimmerkellerfenster_rechts
FALSE
geöffnet
Keller Heizung Fenster
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.19Heizungskellerfenster
FALSE
geschlossen
EQ
val
hm-rpc.0.xxx.1.STATE
1
0_userdata.0.Fenster.19Heizungskellerfenster
FALSE
gekippt
0_userdata.0.Fenster.19Heizungskellerfenster
FALSE
geöffnet
Keller Weihnachtsbaum Fenster
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.20Weihnachtsbaumkellerfenster
FALSE
geschlossen
EQ
val
hm-rpc.0.xxx.1.STATE
1
0_userdata.0.Fenster.20Weihnachtsbaumkellerfenster
FALSE
gekippt
0_userdata.0.Fenster.20Weihnachtsbaumkellerfenster
FALSE
geöffnet
Keller Sauna Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.21Saunakellerfenster_links
FALSE
geschlossen
EQ
val
hm-rpc.0.xxx.1.STATE
1
0_userdata.0.Fenster.21Saunakellerfenster_links
FALSE
gekippt
0_userdata.0.Fenster.21Saunakellerfenster_links
FALSE
geöffnet
Keller Sauna Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
0
0_userdata.0.Fenster.22Saunakellerfenster_rechts
FALSE
geschlossen
EQ
val
hm-rpc.0.xxx.1.STATE
1
0_userdata.0.Fenster.22Saunakellerfenster_rechts
FALSE
gekippt
0_userdata.0.Fenster.22Saunakellerfenster_rechts
FALSE
geöffnet
Selektor Fenster_Erdgeschoss
any
default
[state.id=STATE](functions='Fenster_Erdgeschoss')
Erdgeschoss_Anzahl_gekippte_Fenster
0
Erdgeschoss_Anzahl_offene_Fenster
0
Erdgeschoss_Anzahl_geschlossene_Fenster
0
Erdgeschoss_Anzahl_Fenster_gesamt
0
Fenster_Erdgeschoss
[state.id=STATE](functions='Fenster_Erdgeschoss')
Erdgeschoss_Anzahl_Fenster_gesamt
1
EQ
val
Fenster_Erdgeschoss
0
Erdgeschoss_Anzahl_geschlossene_Fenster
1
EQ
val
Fenster_Erdgeschoss
1
Erdgeschoss_Anzahl_offene_Fenster
1
EQ
val
Fenster_Erdgeschoss
2
Erdgeschoss_Anzahl_gekippte_Fenster
1
0_userdata.0.Fenster.91_Erdgeschoss_Anzahl_Fenster_gekippt
FALSE
Erdgeschoss_Anzahl_gekippte_Fenster
0_userdata.0.Fenster.92_Erdgeschoss_Anzahl_Fenster_offen
FALSE
Erdgeschoss_Anzahl_offene_Fenster
0_userdata.0.Fenster.93_Erdgeschoss_Anzahl_Fenster_geschlossen
FALSE
Erdgeschoss_Anzahl_geschlossene_Fenster
0_userdata.0.Fenster.94_Erdgeschoss_Anzahl_Fenster_gesamt
FALSE
Erdgeschoss_Anzahl_Fenster_gesamt
Selektor Fenster_Keller
any
default
[state.id=STATE](functions='Fenster_Keller')
Keller_Anzahl_gekippte_Fenster
0
Keller_Anzahl_offene_Fenster
0
Keller_Anzahl_geschlossene_Fenster
0
Keller_Anzahl_Fenster_gesamt
0
Fenster_Keller
[state.id=STATE](functions='Fenster_Keller')
Keller_Anzahl_Fenster_gesamt
1
EQ
val
Fenster_Keller
0
Keller_Anzahl_geschlossene_Fenster
1
EQ
val
Fenster_Keller
1
Keller_Anzahl_gekippte_Fenster
1
EQ
val
Fenster_Keller
2
Keller_Anzahl_offene_Fenster
1
0_userdata.0.Fenster.87_Keller_Anzahl_Fenster_gekippt
FALSE
Keller_Anzahl_gekippte_Fenster
0_userdata.0.Fenster.88_Keller_Anzahl_Fenster_offen
FALSE
Keller_Anzahl_offene_Fenster
0_userdata.0.Fenster.89_Keller_Anzahl_Fenster_geschlossen
FALSE
Keller_Anzahl_geschlossene_Fenster
0_userdata.0.Fenster.90_Keller_Anzahl_Fenster_gesamt
FALSE
Keller_Anzahl_Fenster_gesamt
Selektor Fenster_einfach
any
default
[state.id=STATE](functions='Fenster_einfach')
Fenster_einfach_Anzahl_Fenster_gekippt
0
Fenster_einfach_Anzahl_Fenster_offen
0
Fenster_einfach_Anzahl_Fenster_geschlossen
0
Fenster_einfach_Anzahl_Fenster_gesamt
0
Fenster_einfach
[state.id=STATE](functions='Fenster_einfach')
Fenster_einfach_Anzahl_Fenster_gesamt
1
EQ
val
Fenster_einfach
0
Fenster_einfach_Anzahl_Fenster_geschlossen
1
EQ
val
Fenster_einfach
2
Fenster_einfach_Anzahl_Fenster_gekippt
1
EQ
val
Fenster_einfach
1
Fenster_einfach_Anzahl_Fenster_offen
1
0_userdata.0.Fenster.79_einfach_Anzahl_Fenster_gekippt
FALSE
Fenster_einfach_Anzahl_Fenster_gekippt
0_userdata.0.Fenster.80_einfach_Anzahl_Fenster_offen
FALSE
Fenster_einfach_Anzahl_Fenster_offen
0_userdata.0.Fenster.81_einfach_Anzahl_Fenster_geschlossen
FALSE
Fenster_einfach_Anzahl_Fenster_geschlossen
0_userdata.0.Fenster.82_einfach_Anzahl_Fenster_gesamt
FALSE
Fenster_einfach_Anzahl_Fenster_gesamt
Selektor Fenster_Drehgriff
any
default
[state.id=STATE](functions='Fenster_Drehgriff')
Fenster_Drehgriff_Anzahl_Fenster_gekippt
0
Fenster_Drehgriff_Anzahl_Fenster_offen
0
Fenster_Drehgriff_Anzahl_Fenster_geschlossen
0
Fenster_Drehgriff_Anzahl_Fenster_gesamt
0
Fenster_Drehgriff
[state.id=STATE](functions='Fenster_Drehgriff')
Fenster_Drehgriff_Anzahl_Fenster_gesamt
1
EQ
val
Fenster_Drehgriff
0
Fenster_Drehgriff_Anzahl_Fenster_geschlossen
1
EQ
val
Fenster_Drehgriff
1
Fenster_Drehgriff_Anzahl_Fenster_gekippt
1
EQ
val
Fenster_Drehgriff
2
Fenster_Drehgriff_Anzahl_Fenster_offen
1
0_userdata.0.Fenster.83_Drehgriff_Anzahl_Fenster_gekippt
FALSE
Fenster_Drehgriff_Anzahl_Fenster_gekippt
0_userdata.0.Fenster.84_Drehgriff_Anzahl_Fenster_offen
FALSE
Fenster_Drehgriff_Anzahl_Fenster_offen
0_userdata.0.Fenster.85_Drehgriff_Anzahl_Fenster_geschlossen
FALSE
Fenster_Drehgriff_Anzahl_Fenster_geschlossen
0_userdata.0.Fenster.86_Drehgriff_Anzahl_Fenster_gesamt
FALSE
Fenster_Drehgriff_Anzahl_Fenster_gesamt
any
0_userdata.0.Fenster.87_Keller_Anzahl_Fenster_gekippt
0_userdata.0.Fenster.88_Keller_Anzahl_Fenster_offen
0_userdata.0.Fenster.89_Keller_Anzahl_Fenster_geschlossen
0_userdata.0.Fenster.90_Keller_Anzahl_Fenster_gesamt
0_userdata.0.Fenster.91_Erdgeschoss_Anzahl_Fenster_gekippt
0_userdata.0.Fenster.92_Erdgeschoss_Anzahl_Fenster_offen
0_userdata.0.Fenster.93_Erdgeschoss_Anzahl_Fenster_geschlossen
0_userdata.0.Fenster.94_Erdgeschoss_Anzahl_Fenster_gesamt
0_userdata.0.Fenster.95_gesamt_Anzahl_Fenster_gekippt
FALSE
ADD
1
val
0_userdata.0.Fenster.87_Keller_Anzahl_Fenster_gekippt
1
val
0_userdata.0.Fenster.91_Erdgeschoss_Anzahl_Fenster_gekippt
0_userdata.0.Fenster.96_gesamt_Anzahl_Fenster_offen
FALSE
ADD
1
val
0_userdata.0.Fenster.88_Keller_Anzahl_Fenster_offen
1
val
0_userdata.0.Fenster.92_Erdgeschoss_Anzahl_Fenster_offen
0_userdata.0.Fenster.97_gesamt_Anzahl_Fenster_geschlossen
FALSE
ADD
1
val
0_userdata.0.Fenster.89_Keller_Anzahl_Fenster_geschlossen
1
val
0_userdata.0.Fenster.93_Erdgeschoss_Anzahl_Fenster_geschlossen
0_userdata.0.Fenster.98_gesamt_Anzahl_Fenster_gesamt
FALSE
ADD
1
val
0_userdata.0.Fenster.90_Keller_Anzahl_Fenster_gesamt
1
val
0_userdata.0.Fenster.94_Erdgeschoss_Anzahl_Fenster_gesamt
ne
0_userdata.0.Fenster.97_gesamt_Anzahl_Fenster_geschlossen
Telegram
val
0_userdata.0.Nachrichtenversand.Telegram.01Telegram_Nachrichtenversand
Telegramempfaenger
Heiko
iQontrol_Liste
val
0_userdata.0.Nachrichtenversand.iQontrol.01iQontrol_Liste
E-Mail
val
0_userdata.0.Nachrichtenversand.EMail.01EMail_Nachrichtenversand
offene Fenster
0
gekippte Fenster
0
Fenster
Ausgabe
Fenster_Liste
htmlText
<!DOCTYPE html><html lang="de"><head><title>Fenster</title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
<p style="color:#0000FF; font-family:Helvetica; font-weight: bold">Fensterstatus</p>
<table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);">
<tr style="color:#0000FF"; font-weight: bold"><td>Fenster-Türen   </td><td>Status</td></tr>
hier Fenster mit Wert auf-zu
Haustür
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Haustür geöffnet ☝️
Fenster_Liste
Fenster_Liste
Haustür geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Haustür
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.01Haustuer
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Haustür
<td>
geschlossen
0_userdata.0.Fenster.01Haustuer
FALSE
geschlossen
Schlafzimmer Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Schlafzimmer links geöffnet ☝️
Fenster_Liste
Fenster_Liste
Schlafzimmer links geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Schlafzimmer links
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.02Schlafzimmer_links
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Schlafzimmer links
<td>
geschlossen
0_userdata.0.Fenster.02Schlafzimmer_links
FALSE
geschlossen
Schlafzimmer Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Schlafzimmer rechts geöffnet ☝️
Fenster_Liste
Fenster_Liste
Schlafzimmer rechts geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Schlafzimmer rechts
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.03Schlafzimmer_rechts
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Schlafzimmer rechts
<td>
geschlossen
0_userdata.0.Fenster.03Schlafzimmer_rechts
FALSE
geschlossen
Wohnzimmer Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
- Wohnzimmer links geöffnet ☝️
Fenster_Liste
Wohnzimmer links geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Wohnzimmer links
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.04Wohnzimmerfenster_links
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Wohnzimmer links
<td>
geschlossen
0_userdata.0.Fenster.04Wohnzimmerfenster_links
FALSE
geschlossen
Wohnzimmer Terrassentür
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Terrassentür geöffnet ☝️
Fenster_Liste
Fenster_Liste
Terrassentür geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Terrassentür
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.05Wohnzimmer_Terrassentuer
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Terrassentür
<td>
geschlossen
0_userdata.0.Fenster.05Wohnzimmer_Terrassentuer
FALSE
geschlossen
Wohnzimmer Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Wohnzimmer rechts geöffnet ☝️
Fenster_Liste
Fenster_Liste
Wohnzimmer rechts geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Wohnzimmer rechts
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.06Wohnzimmerfenster_rechts
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Wohnzimmer rechts
<td>
geschlossen
0_userdata.0.Fenster.06Wohnzimmerfenster_rechts
FALSE
geschlossen
Küche Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Küche links geöffnet ☝️
Fenster_Liste
Fenster_Liste
Küche links geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Küche links
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.07Kuechenfenster_links
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Küche links
<td>
geschlossen
0_userdata.0.Fenster.07Kuechenfenster_links
FALSE
geschlossen
Küche Fenster mitte
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Küche mitte geöffnet ☝️
Fenster_Liste
Fenster_Liste
Küche mitte geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Küche mitte
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.08Kuechenfenster_mitte
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Küche mitte
<td>
geschlossen
0_userdata.0.Fenster.08Kuechenfenster_mitte
FALSE
geschlossen
Küche Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Küche rechts geöffnet ☝️
Fenster_Liste
Fenster_Liste
Küche rechts geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Küche rechts
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.09Kuechenfenster_rechts
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Küche rechts
<td>
geschlossen
0_userdata.0.Fenster.09Kuechenfenster_rechts
FALSE
geschlossen
Badezimmer Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Badezimmer links geöffnet ☝️
Fenster_Liste
Fenster_Liste
Badezimmer links geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Badezimmer links
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.10Badezimmerfenster_links
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Badezimmer links
<td>
geschlossen
0_userdata.0.Fenster.10Badezimmerfenster_links
FALSE
geschlossen
Badezimmer Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Badezimmer rechts geöffnet ☝️
Fenster_Liste
Fenster_Liste
Badezimmer rechts geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Badezimmer rechts
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.11Badezimmerfenster_rechts
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Badezimmer rechts
<td>
geschlossen
0_userdata.0.Fenster.11Badezimmerfenster_rechts
FALSE
geschlossen
Gästezimmer Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Gästezimmer links geöffnet ☝️
Fenster_Liste
Fenster_Liste
Gästezimmer links geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Gästezimmer links
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.12Gaestezimmerfenster_links
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Gästezimmer links
<td>
geschlossen
0_userdata.0.Fenster.12Gaestezimmerfenster_links
FALSE
geschlossen
Gästezimmer Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Gästezimmer rechts geöffnet ☝️
Fenster_Liste
Fenster_Liste
Gästezimmer rechts geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Gästezimmer rechts
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.13Gaestezimmerfenster_rechts
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Gästezimmer rechts
<td>
geschlossen
0_userdata.0.Fenster.13Gaestezimmerfenster_rechts
FALSE
geschlossen
ab hier Fenster mit Wert auf-zu-kipp
Werkstatt Fenster
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Werkstatt gekippt 👈
Fenster_Liste
Fenster_Liste
Werkstatt gekippt,
gekippte Fenster
1
htmlText
htmlText
<tr><td>
Werkstatt
<td>
<span style="color:#0000FF"> gekippt </span>
0_userdata.0.Fenster.14Werkstattfenster
FALSE
gekippt
EQ
val
hm-rpc.0.xxx.1.STATE
2
Fenster
Fenster
\n
- Werkstatt geöffnet ☝️
Fenster_Liste
Fenster_Liste
Werkstatt geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Werkstatt
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.14Werkstattfenster
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Werkstatt
<td>
geschlossen
0_userdata.0.Fenster.14Werkstattfenster
FALSE
geschlossen
Vorratskeller Fenster
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Vorratskeller gekippt 👈
Fenster_Liste
Fenster_Liste
Vorratskeller gekippt,
gekippte Fenster
1
htmlText
htmlText
<tr><td>
Vorratskeller
<td>
<span style="color:#0000FF"> gekippt </span>
0_userdata.0.Fenster.15Vorratskellerfenster
FALSE
gekippt
EQ
val
hm-rpc.0.xxx.1.STATE
2
Fenster
Fenster
\n
- Vorratskeller geöffnet ☝️
Fenster_Liste
Fenster_Liste
Vorratskeller geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Vorratskeller
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.15Vorratskellerfenster
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Vorratskeller
<td>
geschlossen
0_userdata.0.Fenster.15Vorratskellerfenster
FALSE
geschlossen
Wohnzimmerkeller Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Wohnzimmer Keller links gekippt 👈
Fenster_Liste
Fenster_Liste
Wohnzimmer Keller links gekippt,
gekippte Fenster
1
htmlText
htmlText
<tr><td>
Wohnzimmer Keller links
<td>
<span style="color:#0000FF"> gekippt </span>
0_userdata.0.Fenster.16Wohnzimmerkellerfenster_links
FALSE
gekippt
EQ
val
hm-rpc.0.xxx.1.STATE
2
Fenster
Fenster
\n
- Wohnzimmer Keller links geöffnet ☝️
Fenster_Liste
Fenster_Liste
Wohnzimmer Keller links geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Wohnzimmer Keller links
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.16Wohnzimmerkellerfenster_links
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Wohnzimmer Keller links
<td>
geschlossen
0_userdata.0.Fenster.16Wohnzimmerkellerfenster_links
FALSE
geschlossen
Wohnzimmerkeller Fenster mitte
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Wohnzimmer Keller mitte gekippt 👈
Fenster_Liste
Fenster_Liste
Wohnzimmer Keller mitte gekippt,
gekippte Fenster
1
htmlText
htmlText
<tr><td>
Wohnzimmer Keller mitte
<td>
<span style="color:#0000FF"> gekippt </span>
0_userdata.0.Fenster.17Wohnzimmerkellerfenster_mitte
FALSE
gekippt
EQ
val
hm-rpc.0.xxx.1.STATE
2
Fenster
Fenster
\n
- Wohnzimmer Keller mitte geöffnet ☝️
Fenster_Liste
Fenster_Liste
Wohnzimmer Keller mitte geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Wohnzimmer Keller mitte
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.17Wohnzimmerkellerfenster_mitte
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Wohnzimmer Keller mitte
<td>
geschlossen
0_userdata.0.Fenster.17Wohnzimmerkellerfenster_mitte
FALSE
geschlossen
Wohnzimmerkeller Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Wohnzimmer Keller rechts gekippt 👈
Fenster_Liste
Fenster_Liste
Wohnzimmer Keller rechts gekippt,
gekippte Fenster
1
htmlText
htmlText
<tr><td>
Wohnzimmer Keller rechts
<td>
<span style="color:#0000FF"> gekippt </span>
0_userdata.0.Fenster.18Wohnzimmerkellerfenster_rechts
FALSE
gekippt
EQ
val
hm-rpc.0.xxx.1.STATE
2
Fenster
Fenster
\n
- Wohnzimmer Keller rechts geöffnet ☝️
Fenster_Liste
Fenster_Liste
Wohnzimmer Keller rechts geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Wohnzimmer Keller rechts
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.18Wohnzimmerkellerfenster_rechts
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Wohnzimmer Keller rechts
<td>
geschlossen
0_userdata.0.Fenster.18Wohnzimmerkellerfenster_rechts
FALSE
geschlossen
Heizungskeller Fenster
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Heizung Keller gekippt 👈
Fenster_Liste
Fenster_Liste
Heizung Keller gekippt,
gekippte Fenster
1
htmlText
htmlText
<tr><td>
Heizung Keller
<td>
<span style="color:#0000FF"> gekippt </span>
0_userdata.0.Fenster.19Heizungskellerfenster
FALSE
gekippt
EQ
val
hm-rpc.0.xxx.1.STATE
2
Fenster
Fenster
\n
- Heizung Keller geöffnet ☝️
Fenster_Liste
Fenster_Liste
Heizung Keller geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Heizung Keller
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.19Heizungskellerfenster
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Heizung Keller
<td>
geschlossen
0_userdata.0.Fenster.19Heizungskellerfenster
FALSE
geschlossen
Weihnachtsbaumkeller Fenster
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- W-Baum Keller gekippt 👈
Fenster_Liste
Fenster_Liste
W-Baum Keller gekippt,
gekippte Fenster
1
htmlText
htmlText
<tr><td>
W-Baum Keller
<td>
<span style="color:#0000FF"> gekippt </span>
0_userdata.0.Fenster.20Weihnachtsbaumkellerfenster
FALSE
gekippt
EQ
val
hm-rpc.0.xxx.1.STATE
2
Fenster
Fenster
\n
- W-Baum Keller geöffnet ☝️
Fenster_Liste
Fenster_Liste
W-Baum Keller geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
W-Baum Keller
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.20Weihnachtsbaumkellerfenster
FALSE
geöffnet
htmlText
htmlText
<tr><td>
W-Baum Keller
<td>
geschlossen
0_userdata.0.Fenster.20Weihnachtsbaumkellerfenster
FALSE
geschlossen
Saunakeller Fenster links
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Sauna links gekippt 👈
Fenster_Liste
Fenster_Liste
Sauna links gekippt,
gekippte Fenster
1
htmlText
htmlText
<tr><td>
Sauna links
<td>
<span style="color:#0000FF"> gekippt </span>
0_userdata.0.Fenster.21Saunakellerfenster_links
FALSE
gekippt
EQ
val
hm-rpc.0.xxx.1.STATE
2
Fenster
Fenster
\n
- Sauna links geöffnet ☝️
Fenster_Liste
Fenster_Liste
Sauna links geöffnet,
offene Fenster
1
htmlText
htmlText
<tr><td>
Sauna links
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.21Saunakellerfenster_links
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Sauna links
<td>
geschlossen
0_userdata.0.Fenster.21Saunakellerfenster_links
FALSE
geschlossen
Saunakeller Fenster rechts
EQ
val
hm-rpc.0.xxx.1.STATE
1
Fenster
Fenster
\n
- Sauna rechts gekippt 👈
Fenster_Liste
Fenster_Liste
Sauna rechts gekippt,
gekippte Fenster
1
htmlText
htmlText
<tr><td>
Sauna rechts
<td>
<span style="color:#0000FF"> gekippt </span>
0_userdata.0.Fenster.22Saunakellerfenster_rechts
FALSE
gekippt
EQ
val
hm-rpc.0.xxx.1.STATE
2
Fenster
Fenster
\n
- Sauna rechts offen ☝️
Fenster_Liste
Fenster_Liste
Sauna rechts offen,
offene Fenster
1
htmlText
htmlText
<tr><td>
Sauna rechts
<td>
<span style="color:#FF0000"> geöffnet </span>
0_userdata.0.Fenster.22Saunakellerfenster_rechts
FALSE
geöffnet
htmlText
htmlText
<tr><td>
Sauna rechts
<td>
geschlossen
0_userdata.0.Fenster.22Saunakellerfenster_rechts
FALSE
geschlossen
ab hier Ausgabe
AND
EQ
offene Fenster
1
EQ
gekippte Fenster
0
Ausgabe
Es ist ein Fenster offen ☝️
\n
Fenster
0_userdata.0.Fenster.78_offene_gekippte_Fenster_Liste
FALSE
Fenster_Liste
AND
EQ
offene Fenster
0
EQ
gekippte Fenster
1
Ausgabe
Es ist ein Fenster gekippt 👈
\n
Fenster
0_userdata.0.Fenster.78_offene_gekippte_Fenster_Liste
FALSE
Fenster_Liste
AND
EQ
offene Fenster
1
EQ
gekippte Fenster
1
Ausgabe
Es ist ein Fenster offen ☝️
\n
Es ist ein Fenster gekippt 👈
\n
Fenster
0_userdata.0.Fenster.78_offene_gekippte_Fenster_Liste
FALSE
Fenster_Liste
AND
EQ
offene Fenster
0
GT
gekippte Fenster
1
Ausgabe
Es sind
gekippte Fenster
Fenster gekippt 👈
\n
Fenster
0_userdata.0.Fenster.78_offene_gekippte_Fenster_Liste
FALSE
Fenster_Liste
AND
GT
offene Fenster
1
EQ
gekippte Fenster
0
Ausgabe
Es sind
offene Fenster
Fenster offen ☝️
\n
Fenster
0_userdata.0.Fenster.78_offene_gekippte_Fenster_Liste
FALSE
Fenster_Liste
AND
GT
offene Fenster
1
EQ
gekippte Fenster
1
Ausgabe
Es sind
offene Fenster
Fenster offen ☝️
\n
Es ist ein Fenster gekippt 👈
\n
Fenster
0_userdata.0.Fenster.78_offene_gekippte_Fenster_Liste
FALSE
Fenster_Liste
AND
EQ
offene Fenster
1
GT
gekippte Fenster
1
Ausgabe
Es ist ein Fenster offen ☝️
\n
Es sind
gekippte Fenster
Fenster gekippt 👈
\n
Fenster
0_userdata.0.Fenster.78_offene_gekippte_Fenster_Liste
FALSE
Fenster_Liste
AND
GT
offene Fenster
1
GT
gekippte Fenster
1
Ausgabe
Es sind
offene Fenster
Fenster offen ☝️
\n
Es sind
gekippte Fenster
Fenster gekippt 👈
\n
Fenster
0_userdata.0.Fenster.78_offene_gekippte_Fenster_Liste
FALSE
Fenster_Liste
AND
EQ
offene Fenster
0
EQ
gekippte Fenster
0
Ausgabe
🔒 Alle Fenster und Türen sind geschlossen 🔒
0_userdata.0.Fenster.78_offene_gekippte_Fenster_Liste
FALSE
Alle Fenster und Türen sind geschlossen.
EQ
Telegram
TRUE
FALSE
default
text
Ausgabe
Telegramempfaenger
EQ
E-Mail
TRUE
FALSE
heiko.huebner@freenet.de
Ausgabe
Fensterstatus
EQ
iQontrol_Liste
TRUE
htmlText
htmlText
</table></body>
htmlText
htmlText
die iQontrol Liste wurde deaktiviert !
htmlText