start_main aktive_ventile_zaehlen objekt_id_von_ventil_1_angeschlossen objekt_id_von_ventil_2_angeschlossen anlegen_in objekt_id_von_ventil_3_angeschlossen objekt_id_von_ventil_4_angeschlossen start objekt_id_von_ventil_5_angeschlossen max_laufzeit objekt_id_von_ventil_6_angeschlossen Ventil_1_angeschlossen objekt_id_restlaufzeit_ventil_1_eDP Ventil_2_angeschlossen objekt_id_restlaufzeit_ventil_2_eDP Ventil_3_angeschlossen objekt_id_restlaufzeit_ventil_3_eDP Ventil_4_angeschlossen objekt_id_restlaufzeit_ventil_4_eDP Ventil_5_angeschlossen objekt_id_restlaufzeit_ventil_5_eDP Ventil_6_angeschlossen objekt_id_restlaufzeit_ventil_6_eDP objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP objekt_id_laufzeit_alle_ventile_anzeige objekt_id_aktive_ventile_eDP Alexa_verwenden objekt_id_alle_ventile_stop_eDP Alexa_SmartName_Ventil_1 Alexa_SmartName_Ventil_2 objekt_id_angeschlossene_ventile_eDP Alexa_SmartName_Ventil_3 Alexa_SmartName_Ventil_4 Alexa_SmartName_Ventil_5 Alexa_SmartName_Ventil_6 Alexa_SmartName_alle_Ventile_nacheinander Alexa_SmartName_alle_Ventile_stop objekt_id_ventil_1_dp_start_stop_adapter objekt_id_ventil_2_dp_start_stop_adapter objekt_id_ventil_3_dp_start_stop_adapter objekt_id_ventil_4_dp_start_stop_adapter objekt_id_ventil_5_dp_start_stop_adapter angeschlossene_ventile_zaehlen objekt_id_ventil_6_dp_start_stop_adapter objekt_id_alle_ventile_stop_adapter ventil_stop_befehl objekt_id_restlaufzeit_ventil_1_Adapter Status_Ventil_1 Status_Ventil_2 objekt_id_restlaufzeit_ventil_2_Adapter Status_Ventil_3 Status_Ventil_4 objekt_id_restlaufzeit_ventil_3_Adapter Status_Ventil_5 Status_Ventil_6 objekt_id_restlaufzeit_ventil_4_Adapter objekt_id_restlaufzeit_ventil_5_Adapter objekt_id_restlaufzeit_ventil_6_Adapter dp_erstellen laufzeit_ventil restlaufzeit_alle_ventile_anzeige alles_aus Ventil_2 Ventil_3 Ventil_4 Ventil_5 Ventil_6 Datenpunkte_erstellen LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwpmdW5jdGlvbiBjcmVhdGVVc2VyU3RhdGVzKHdoZXJlLCBmb3JjZSwgc3RhdGVzVG9DcmVhdGUsIGNhbGxiYWNrID0gdW5kZWZpbmVkKSB7CiAKICAgIGNvbnN0IFdBUk4gPSBmYWxzZTsgLy8gT25seSBmb3IgMF91c2VyZGF0YS4wOiBUaHJvd3Mgd2FybmluZyBpbiBsb2csIGlmIHN0YXRlIGlzIGFscmVhZHkgZXhpc3RpbmcgYW5kIGZvcmNlPWZhbHNlLiBEZWZhdWx0IGlzIGZhbHNlLCBzbyBubyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgZXhpc3RzLgogICAgY29uc3QgTE9HX0RFQlVHID0gZmFsc2U7IC8vIFRvIGRlYnVnIHRoaXMgZnVuY3Rpb24sIHNldCB0byB0cnVlCiAgICAvLyBQZXIgaXNzdWUgIzQ3NCAoaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCksIHRoZSB1c2VkIGZ1bmN0aW9uIHNldE9iamVjdCgpIGV4ZWN1dGVzIHRoZSBjYWxsYmFjayAKICAgIC8vIGJlZm9yZSB0aGUgc3RhdGUgaXMgYWN0dWFsIGNyZWF0ZWQuIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlciBhcyBhIHdvcmthcm91bmQuCiAgICBjb25zdCBERUxBWSA9IDUwOyAvLyBEZWxheSBpbiBtaWxsaXNlY29uZHMgKG1zKS4gSW5jcmVhc2UgdGhpcyB0byAxMDAsIGlmIGl0IGlzIG5vdCB3b3JraW5nLgoKICAgIC8vIFZhbGlkYXRlICJ3aGVyZSIKICAgIGlmICh3aGVyZS5lbmRzV2l0aCgnLicpKSB3aGVyZSA9IHdoZXJlLnNsaWNlKDAsIC0xKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGRvdAogICAgaWYgKCAod2hlcmUubWF0Y2goL14oKGphdmFzY3JpcHRcLihbMS05XVswLTldfFswLTldKSkkfDBfdXNlcmRhdGFcLjAkKS8pID09IG51bGwpICkgewogICAgICAgIGxvZygnVGhpcyBzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCB0byBjcmVhdGUgc3RhdGVzIHVuZGVyIFsnICsgd2hlcmUgKyAnXScsICdlcnJvcicpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBQcmVwYXJlICJzdGF0ZXNUb0NyZWF0ZSIgc2luY2Ugd2UgYWxzbyBhbGxvdyBhIHNpbmdsZSBzdGF0ZSB0byBjcmVhdGUKICAgIGlmKCFBcnJheS5pc0FycmF5KHN0YXRlc1RvQ3JlYXRlWzBdKSkgc3RhdGVzVG9DcmVhdGUgPSBbc3RhdGVzVG9DcmVhdGVdOyAvLyB3cmFwIGludG8gYXJyYXksIGlmIGp1c3Qgb25lIGFycmF5IGFuZCBub3QgaW5zaWRlIGFuIGFycmF5CgogICAgLy8gQWRkICJ3aGVyZSIgdG8gU1RBVEVTX1RPX0NSRUFURQogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7IGkrKykgewogICAgICAgIGxldCBscFBhdGggPSBzdGF0ZXNUb0NyZWF0ZVtpXVswXS5yZXBsYWNlKC9cLipcLi9nLCAnLicpOyAvLyByZXBsYWNlIGFsbCBtdWx0aXBsZSBkb3RzIGxpa2UgJy4uJywgJy4uLicgd2l0aCBhIHNpbmdsZSAnLicKICAgICAgICBscFBhdGggPSBscFBhdGgucmVwbGFjZSgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pXC4pfDBfdXNlcmRhdGFcLjBcLikvLCcnKSAvLyByZW1vdmUgYW55IGphdmFzY3JpcHQueC4gLyAwX3VzZXJkYXRhLjAuIGZyb20gYmVnaW5uaW5nCiAgICAgICAgbHBQYXRoID0gd2hlcmUgKyAnLicgKyBscFBhdGg7IC8vIGFkZCB3aGVyZSB0byBiZWdpbm5pbmcgb2Ygc3RyaW5nCiAgICAgICAgc3RhdGVzVG9DcmVhdGVbaV1bMF0gPSBscFBhdGg7CiAgICB9CgogICAgaWYgKHdoZXJlICE9ICcwX3VzZXJkYXRhLjAnKSB7CiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciBqYXZhc2NyaXB0LngKICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOwogICAgICAgIHN0YXRlc1RvQ3JlYXRlLmZvckVhY2goZnVuY3Rpb24obG9vcFBhcmFtKSB7CiAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBOb3cgd2UgYXJlIGNyZWF0aW5nIG5ldyBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddJyk7CiAgICAgICAgICAgIGxldCBsb29wSW5pdCA9IChsb29wUGFyYW1bMV1bJ2RlZiddID09IHVuZGVmaW5lZCkgPyBudWxsIDogbG9vcFBhcmFtWzFdWydkZWYnXTsgLy8gbWltaWMgc2FtZSBiZWhhdmlvciBhcyBjcmVhdGVTdGF0ZSBpZiBubyBpbml0IHZhbHVlIGlzIHByb3ZpZGVkCiAgICAgICAgICAgIGNyZWF0ZVN0YXRlKGxvb3BQYXJhbVswXSwgbG9vcEluaXQsIGZvcmNlLCBsb29wUGFyYW1bMV0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgcHJvY2Vzc2VkLicpOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEZ1bmN0aW9uIHRvIGNhbGxiYWNrIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIENyZWF0ZSBTdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wCiAgICAgICAgbGV0IG51bVN0YXRlcyA9IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsKICAgICAgICBsZXQgY291bnRlciA9IC0xOwogICAgICAgIHN0YXRlc1RvQ3JlYXRlLmZvckVhY2goZnVuY3Rpb24obG9vcFBhcmFtKSB7CiAgICAgICAgICAgIGNvdW50ZXIgKz0gMTsKICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nICgnW0RlYnVnXSBDdXJyZW50bHkgcHJvY2Vzc2luZyBmb2xsb3dpbmcgc3RhdGU6IFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsKICAgICAgICAgICAgaWYoICgkKGxvb3BQYXJhbVswXSkubGVuZ3RoID4gMCkgJiYgKGV4aXN0c1N0YXRlKGxvb3BQYXJhbVswXSkpICkgeyAvLyBXb3JrYXJvdW5kIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc4CiAgICAgICAgICAgICAgICAvLyBTdGF0ZSBpcyBleGlzdGluZy4KICAgICAgICAgICAgICAgIGlmIChXQVJOICYmICFmb3JjZSkgbG9nKCdTdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddIGlzIGFscmVhZHkgZXhpc3RpbmcgYW5kIHdpbGwgbm8gbG9uZ2VyIGJlIGNyZWF0ZWQuJywgJ3dhcm4nKTsKICAgICAgICAgICAgICAgIGlmICghV0FSTiAmJiBMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBTdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddIGlzIGFscmVhZHkgZXhpc3RpbmcuIE9wdGlvbiBmb3JjZSAoPW92ZXJ3cml0ZSkgaXMgc2V0IHRvIFsnICsgZm9yY2UgKyAnXS4nKTsKICAgICAgICAgICAgICAgIGlmKCFmb3JjZSkgewogICAgICAgICAgICAgICAgICAgIC8vIFN0YXRlIGV4aXN0cyBhbmQgc2hhbGwgbm90IGJlIG92ZXJ3cml0dGVuIHNpbmNlIGZvcmNlPWZhbHNlCiAgICAgICAgICAgICAgICAgICAgLy8gU28sIHdlIGRvIG5vdCBwcm9jZWVkLgogICAgICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgd2hpY2ggd2UgYXJlIGdvaW5nIHRvIGV4ZWN1dGUgbm93LicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGdvIG91dCBhbmQgY29udGludWUgd2l0aCBuZXh0IGVsZW1lbnQgaW4gbG9vcC4KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODQ1MjkyMC9jb250aW51ZS1pbi1jdXJzb3ItZm9yZWFjaAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gLy8gaWYoIWZvcmNlKQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTdGF0ZSBpcyBub3QgZXhpc3Rpbmcgb3IgZm9yY2UgPSB0cnVlLCBzbyB3ZSBhcmUgY29udGludWluZyB0byBjcmVhdGUgdGhlIHN0YXRlIHRocm91Z2ggc2V0T2JqZWN0KCkuCiAgICAgICAgICAgIGxldCBvYmogPSB7fTsKICAgICAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgICAgICBvYmoubmF0aXZlID0ge307CiAgICAgICAgICAgIG9iai5jb21tb24gPSBsb29wUGFyYW1bMV07CiAgICAgICAgICAgIHNldE9iamVjdChsb29wUGFyYW1bMF0sIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICAgICAgICAgIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdCBmb3Igc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXTogJyArIGVycik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBOb3cgd2UgYXJlIGNyZWF0aW5nIG5ldyBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddJykKICAgICAgICAgICAgICAgICAgICBsZXQgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGxvb3BQYXJhbVsxXS5kZWY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKGxvb3BQYXJhbVswXSwgaW5pdCwgdHJ1ZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gc2V0U3RhdGUgZHVyY2hnZWbDvGhydDogJyArIGxvb3BQYXJhbVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gRnVuY3Rpb24gdG8gY2FsbGJhY2sgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0sIERFTEFZICsgKDIwICogY291bnRlcikgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9Cn0KCi8vQWxsZ2VtZWluZSBEYXRlbnB1bmt0ZSBlcnN0ZWxsZW4uIEFsZXhhX1NtYXJ0TmFtZV9hbGxlX1ZlbnRpbGVfbmFjaGVpbmFuZGVyCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsgCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDFfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwMSBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDJfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwMiBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDNfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwMyBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDRfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwNCBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDVfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwNSBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDZfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwNiBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjA4QW56ZWlnZV9HZXNhbXRsYXVmemVpdF9hbGxlIFZlbnRpbGVfbmFjaGVpbmFuZGVyJywgeyduYW1lJzonQW56ZWlnZSBHZXNhbXRsYXVmemVpdCBhbGxlIFZlbnRpbGUgbmFjaGVpbmFuZGVyJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4JzptYXhfbGF1ZnplaXQsICdkZWYnOjB9XSwgICAgICAgICAgICAKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDlha3RpdmVfVmVudGlsZScsIHsnbmFtZSc6J2FrdGl2ZSBWZW50aWxlJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonVmVudGlsZScsJ2RlZic6MCwgfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAwYW5nZXNjaGxvc3NlbmVfVmVudGlsZScsIHsnbmFtZSc6J2FuZ2VzY2hsb3NzZW5lIFZlbnRpbGUnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOidWZW50aWxlJywnZGVmJzowLCB9XSwgICAgCgpdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpOwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vZmFsbHMgQWxleGEgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4xMGZhbHNlX3N0b3BwdF9CZXdhZXNzZXJ1bmcnLCB7J25hbWUnOidmYWxzZSBzdG9wcHQgQmV3w6Rzc2VydW5nJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOnRydWUsInNtYXJ0TmFtZSI6IHsiZGUiOiBBbGV4YV9TbWFydE5hbWVfYWxsZV9WZW50aWxlX3N0b3AsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDdFaW5nYWJlX0dlc2FtdGxhdWZ6ZWl0X2FsbGUgVmVudGlsZV9uYWNoZWluYW5kZXInLCB7J25hbWUnOidFaW5nYWJlIEdlc2FtdGxhdWZ6ZWl0IGFsbGUgVmVudGlsZSBuYWNoZWluYW5kZXInLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6bWF4X2xhdWZ6ZWl0LCAnZGVmJzowLCJzbWFydE5hbWUiOiB7ImRlIjogQWxleGFfU21hcnROYW1lX2FsbGVfVmVudGlsZV9uYWNoZWluYW5kZXIsInNtYXJ0VHlwZSI6ICJMSUdIVCIsImJ5T04iOiAic3RvcmVkIn0gfV0sICAgICAgIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgbmljaHQgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMTBmYWxzZV9zdG9wcHRfQmV3YWVzc2VydW5nJywgeyduYW1lJzonZmFsc2Ugc3RvcHB0IEJld8Okc3NlcnVuZycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlLCAic21hcnROYW1lIjogZmFsc2UgfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjA3RWluZ2FiZV9HZXNhbXRsYXVmemVpdF9hbGxlIFZlbnRpbGVfbmFjaGVpbmFuZGVyJywgeyduYW1lJzonRWluZ2FiZSBHZXNhbXRsYXVmemVpdCBhbGxlIFZlbnRpbGUgbmFjaGVpbmFuZGVyJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOm1heF9sYXVmemVpdCwgJ2RlZic6MCwgInNtYXJ0TmFtZSI6IGZhbHNlIH1dLCAgICAgIAoKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07Ci8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy9mYWxscyBBbGV4YSB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDEgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSB0cnVlICYmIFZlbnRpbF8xX2FuZ2VzY2hsb3NzZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDFFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfMScsIHsnbmFtZSc6J1ZlbnRpbCAxIEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCAic21hcnROYW1lIjogeyJkZSI6IEFsZXhhX1NtYXJ0TmFtZV9WZW50aWxfMSwic21hcnRUeXBlIjogIkxJR0hUIiwiYnlPTiI6ICJzdG9yZWQifSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgMSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IHRydWUgJiYgVmVudGlsXzFfYW5nZXNjaGxvc3NlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDFFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfMScsIHsnbmFtZSc6J1ZlbnRpbCAxIEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIG5pY2h0IHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgMSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IGZhbHNlICYmIFZlbnRpbF8xX2FuZ2VzY2hsb3NzZW4gPT0gZmFsc2UpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAxRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzEnLCB7J25hbWUnOidWZW50aWwgMSBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9mYWxscyBBbGV4YSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDEgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSAmJiBWZW50aWxfMV9hbmdlc2NobG9zc2VuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAxRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzEnLCB7J25hbWUnOidWZW50aWwgMSBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKCgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vZmFsbHMgQWxleGEgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpbCAyIHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBWZW50aWxfMl9hbmdlc2NobG9zc2VuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAyRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzInLCB7J25hbWUnOidWZW50aWwgMiBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwgInNtYXJ0TmFtZSI6IHsiZGUiOiBBbGV4YV9TbWFydE5hbWVfVmVudGlsXzIsInNtYXJ0VHlwZSI6ICJMSUdIVCIsImJ5T04iOiAic3RvcmVkIn0gfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9mYWxscyBBbGV4YSB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDIgbmljaHQgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSB0cnVlICYmIFZlbnRpbF8yX2FuZ2VzY2hsb3NzZW4gPT0gZmFsc2UpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAyRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzInLCB7J25hbWUnOidWZW50aWwgMiBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9mYWxscyBBbGV4YSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDIgbmljaHQgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSAmJiBWZW50aWxfMl9hbmdlc2NobG9zc2VuID09IGZhbHNlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wMkVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF8yJywgeyduYW1lJzonVmVudGlsIDIgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgbmljaHQgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpbCAyIHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gZmFsc2UgJiYgVmVudGlsXzJfYW5nZXNjaGxvc3NlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wMkVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF8yJywgeyduYW1lJzonVmVudGlsIDIgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy9mYWxscyBBbGV4YSB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDMgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSB0cnVlICYmIFZlbnRpbF8zX2FuZ2VzY2hsb3NzZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDNFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfMycsIHsnbmFtZSc6J1ZlbnRpbCAzIEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCAic21hcnROYW1lIjogeyJkZSI6IEFsZXhhX1NtYXJ0TmFtZV9WZW50aWxfMywic21hcnRUeXBlIjogIkxJR0hUIiwiYnlPTiI6ICJzdG9yZWQifSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgMyBuaWNodCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IHRydWUgJiYgVmVudGlsXzNfYW5nZXNjaGxvc3NlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDNFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfMycsIHsnbmFtZSc6J1ZlbnRpbCAzIEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIG5pY2h0IHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgMyBuaWNodCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IGZhbHNlICYmIFZlbnRpbF8zX2FuZ2VzY2hsb3NzZW4gPT0gZmFsc2UpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAzRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzMnLCB7J25hbWUnOidWZW50aWwgMyBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9mYWxscyBBbGV4YSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDMgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSAmJiBWZW50aWxfM19hbmdlc2NobG9zc2VuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAzRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzMnLCB7J25hbWUnOidWZW50aWwgMyBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovL2ZhbGxzIEFsZXhhIHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgNCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IHRydWUgJiYgVmVudGlsXzRfYW5nZXNjaGxvc3NlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wNEVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF80JywgeyduYW1lJzonVmVudGlsIDQgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsICJzbWFydE5hbWUiOiB7ImRlIjogQWxleGFfU21hcnROYW1lX1ZlbnRpbF80LCJzbWFydFR5cGUiOiAiTElHSFQiLCJieU9OIjogInN0b3JlZCJ9IH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpbCA0IG5pY2h0IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBWZW50aWxfNF9hbmdlc2NobG9zc2VuID09IGZhbHNlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wNEVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF80JywgeyduYW1lJzonVmVudGlsIDQgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgbmljaHQgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpbCA0IG5pY2h0IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gZmFsc2UgJiYgVmVudGlsXzRfYW5nZXNjaGxvc3NlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDRFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfNCcsIHsnbmFtZSc6J1ZlbnRpbCA0IEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIG5pY2h0IHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgNCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IGZhbHNlICYmIFZlbnRpbF80X2FuZ2VzY2hsb3NzZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDRFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfNCcsIHsnbmFtZSc6J1ZlbnRpbCA0IEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vZmFsbHMgQWxleGEgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpbCA1IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBWZW50aWxfNV9hbmdlc2NobG9zc2VuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjA1RWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzUnLCB7J25hbWUnOidWZW50aWwgNSBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwgInNtYXJ0TmFtZSI6IHsiZGUiOiBBbGV4YV9TbWFydE5hbWVfVmVudGlsXzUsInNtYXJ0VHlwZSI6ICJMSUdIVCIsImJ5T04iOiAic3RvcmVkIn0gfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9mYWxscyBBbGV4YSB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGkgNSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IHRydWUgJiYgVmVudGlsXzVfYW5nZXNjaGxvc3NlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDVFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfNScsIHsnbmFtZSc6J1ZlbnRpbCA1IEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIG5pY2h0IHZlcndlbmRldCB3aXJkIHVuZCBWZW50aSA1IG5pY2h0IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gZmFsc2UgJiYgVmVudGlsXzVfYW5nZXNjaGxvc3NlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDVFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfNScsIHsnbmFtZSc6J1ZlbnRpbCA1IEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIG5pY2h0IHZlcndlbmRldCB3aXJkIHVuZCBWZW50aSA1IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gZmFsc2UgJiYgVmVudGlsXzVfYW5nZXNjaGxvc3NlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wNUVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF81JywgeyduYW1lJzonVmVudGlsIDUgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy9mYWxscyBBbGV4YSB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDYgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSB0cnVlICYmIFZlbnRpbF82X2FuZ2VzY2hsb3NzZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDZFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfNicsIHsnbmFtZSc6J1ZlbnRpbCA2IEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCAic21hcnROYW1lIjogeyJkZSI6IEFsZXhhX1NtYXJ0TmFtZV9WZW50aWxfNiwic21hcnRUeXBlIjogIkxJR0hUIiwiYnlPTiI6ICJzdG9yZWQifSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIHZlcndlbmRldCB3aXJkIHVuZCBWZW50aSA2IG5pY2h0IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBWZW50aWxfNl9hbmdlc2NobG9zc2VuID09IGZhbHNlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wNkVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF82JywgeyduYW1lJzonVmVudGlsIDYgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgbmljaHQgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpIDYgbmljaHQgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSAmJiBWZW50aWxfNl9hbmdlc2NobG9zc2VuID09IGZhbHNlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wNkVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF82JywgeyduYW1lJzonVmVudGlsIDYgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgbmljaHQgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpIDYgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSAmJiBWZW50aWxfNl9hbmdlc2NobG9zc2VuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjA2RWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzYnLCB7J25hbWUnOidWZW50aWwgNiBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgovL0Z1bmt0aW9uIG1haW4gbWl0IFZlcnrDtmdlcnVuZyBhdWZydWZlbgp0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAvLyBtYWluKCk7Cn0sIDgwMDApOwptYWluKCk7Cgo= Datenpunkte erstellen main Beschreibe diese Funktion … start_main 2000 ms log ✅ Das Blockly Gardena Bewässerung ist gestartet aktive Ventile bei Blockly Start auf 0 aktive_ventile_zaehlen 0 angeschlossene Ventile eigene DP objekt_id_von_ventil_1_angeschlossen anlegen_in .Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_01_angeschlossen objekt_id_von_ventil_2_angeschlossen anlegen_in .Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_02_angeschlossen objekt_id_von_ventil_3_angeschlossen anlegen_in .Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_03_angeschlossen objekt_id_von_ventil_4_angeschlossen anlegen_in .Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_04_angeschlossen objekt_id_von_ventil_5_angeschlossen anlegen_in .Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_05_angeschlossen objekt_id_von_ventil_6_angeschlossen anlegen_in .Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_06_angeschlossen Restlaufzeit Ventile eigene DP objekt_id_restlaufzeit_ventil_1_eDP anlegen_in .Gardena.Bewaesserung.01Eingabe_und_Anzeige_Restlaufzeit_Ventil_1 objekt_id_restlaufzeit_ventil_2_eDP anlegen_in .Gardena.Bewaesserung.02Eingabe_und_Anzeige_Restlaufzeit_Ventil_2 objekt_id_restlaufzeit_ventil_3_eDP anlegen_in .Gardena.Bewaesserung.03Eingabe_und_Anzeige_Restlaufzeit_Ventil_3 objekt_id_restlaufzeit_ventil_4_eDP anlegen_in .Gardena.Bewaesserung.04Eingabe_und_Anzeige_Restlaufzeit_Ventil_4 objekt_id_restlaufzeit_ventil_5_eDP anlegen_in .Gardena.Bewaesserung.05Eingabe_und_Anzeige_Restlaufzeit_Ventil_5 objekt_id_restlaufzeit_ventil_6_eDP anlegen_in .Gardena.Bewaesserung.06Eingabe_und_Anzeige_Restlaufzeit_Ventil_6 objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP anlegen_in .Gardena.Bewaesserung.07Eingabe_Gesamtlaufzeit_alle Ventile_nacheinander objekt_id_laufzeit_alle_ventile_anzeige anlegen_in .Gardena.Bewaesserung.08Anzeige_Gesamtlaufzeit_alle Ventile_nacheinander aktive Ventile eigener DP objekt_id_aktive_ventile_eDP anlegen_in .Gardena.Bewaesserung.09aktive_Ventile alle Ventile stop eigener DP objekt_id_alle_ventile_stop_eDP anlegen_in .Gardena.Bewaesserung.10false_stoppt_Bewaesserung angeschlossene Ventile eigener DP objekt_id_angeschlossene_ventile_eDP anlegen_in .Gardena.Bewaesserung.00angeschlossene_Ventile angeschlossene Ventile bei Blockly einstellen EQ Ventil_1_angeschlossen TRUE true FALSE Object ID objekt_id_von_ventil_1_angeschlossen TRUE 0 true FALSE Object ID objekt_id_von_ventil_1_angeschlossen FALSE 0 EQ Ventil_2_angeschlossen TRUE true FALSE Object ID objekt_id_von_ventil_2_angeschlossen TRUE 0 true FALSE Object ID objekt_id_von_ventil_2_angeschlossen FALSE 0 EQ Ventil_3_angeschlossen TRUE true FALSE Object ID objekt_id_von_ventil_3_angeschlossen TRUE 0 true FALSE Object ID objekt_id_von_ventil_3_angeschlossen FALSE 0 EQ Ventil_4_angeschlossen TRUE true FALSE Object ID objekt_id_von_ventil_4_angeschlossen TRUE 0 true FALSE Object ID objekt_id_von_ventil_4_angeschlossen FALSE 0 EQ Ventil_5_angeschlossen TRUE true FALSE Object ID objekt_id_von_ventil_5_angeschlossen TRUE 0 true FALSE Object ID objekt_id_von_ventil_5_angeschlossen FALSE 0 EQ Ventil_6_angeschlossen TRUE true FALSE Object ID objekt_id_von_ventil_6_angeschlossen TRUE 0 true FALSE Object ID objekt_id_von_ventil_6_angeschlossen FALSE 0 aktive Ventile zaehlen eigener DP ne default objekt_id_restlaufzeit_ventil_1_eDP default objekt_id_restlaufzeit_ventil_2_eDP default objekt_id_restlaufzeit_ventil_3_eDP default objekt_id_restlaufzeit_ventil_4_eDP default objekt_id_restlaufzeit_ventil_5_eDP default objekt_id_restlaufzeit_ventil_6_eDP aktive_ventile_zaehlen 0 NEQ val objekt_id_restlaufzeit_ventil_1_eDP 0 aktive_ventile_zaehlen 1 NEQ val objekt_id_restlaufzeit_ventil_2_eDP 0 aktive_ventile_zaehlen 1 NEQ val objekt_id_restlaufzeit_ventil_3_eDP 0 aktive_ventile_zaehlen 1 NEQ val objekt_id_restlaufzeit_ventil_4_eDP 0 aktive_ventile_zaehlen 1 NEQ val objekt_id_restlaufzeit_ventil_5_eDP 0 aktive_ventile_zaehlen 1 NEQ val objekt_id_restlaufzeit_ventil_6_eDP 0 aktive_ventile_zaehlen 1 true FALSE Object ID objekt_id_aktive_ventile_eDP TRUE aktive_ventile_zaehlen 0 angeschlossene Ventile zaehlen eigener DP ne default objekt_id_von_ventil_1_angeschlossen default objekt_id_von_ventil_2_angeschlossen default objekt_id_von_ventil_3_angeschlossen default objekt_id_von_ventil_4_angeschlossen default objekt_id_von_ventil_5_angeschlossen default objekt_id_von_ventil_6_angeschlossen angeschlossene_ventile_zaehlen 0 EQ val objekt_id_von_ventil_1_angeschlossen TRUE angeschlossene_ventile_zaehlen 1 EQ val objekt_id_von_ventil_2_angeschlossen TRUE angeschlossene_ventile_zaehlen 1 EQ val objekt_id_von_ventil_3_angeschlossen TRUE angeschlossene_ventile_zaehlen 1 EQ val objekt_id_von_ventil_4_angeschlossen TRUE angeschlossene_ventile_zaehlen 1 EQ val objekt_id_von_ventil_5_angeschlossen TRUE angeschlossene_ventile_zaehlen 1 EQ val objekt_id_von_ventil_6_angeschlossen TRUE angeschlossene_ventile_zaehlen 1 true FALSE Object ID objekt_id_angeschlossene_ventile_eDP TRUE angeschlossene_ventile_zaehlen 0 alle Ventile stoppen eigene DP ne default objekt_id_alle_ventile_stop_eDP state.val true FALSE Object ID objekt_id_restlaufzeit_ventil_1_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_2_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_3_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_4_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_5_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_6_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP TRUE 0 0 true FALSE Object ID objekt_id_laufzeit_alle_ventile_anzeige TRUE 0 0 false FALSE Object ID objekt_id_alle_ventile_stop_adapter TRUE ventil_stop_befehl 0 true TRUE Object ID objekt_id_alle_ventile_stop_eDP TRUE 2000 Ventil 1 ueber die App ne default objekt_id_restlaufzeit_ventil_1_Adapter GT state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_1_eDP TRUE state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_1_eDP TRUE 0 0 Ventil 2 ueber die App ne default objekt_id_restlaufzeit_ventil_2_Adapter GT state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_2_eDP TRUE state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_2_eDP TRUE 0 0 Ventil 3 ueber die App ne default objekt_id_restlaufzeit_ventil_3_Adapter GT state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_3_eDP TRUE state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_3_eDP TRUE 0 0 Ventil 4 ueber die App ne default objekt_id_restlaufzeit_ventil_4_Adapter GT state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_4_eDP TRUE state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_4_eDP TRUE 0 0 Ventil 5 ueber die App ne default objekt_id_restlaufzeit_ventil_5_Adapter GT state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_5_eDP TRUE state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_5_eDP TRUE 0 0 Ventil 6 ueber die App ne default objekt_id_restlaufzeit_ventil_6_Adapter GT state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_6_eDP TRUE state.val 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_6_eDP TRUE 0 0 Ventil 1 ueber eigenen DP ne false default objekt_id_restlaufzeit_ventil_1_eDP EQ val Status_Ventil_1 OK LT aktive_ventile_zaehlen 3 AND GT state.val 0 LTE state.val 59 false FALSE Object ID objekt_id_ventil_1_dp_start_stop_adapter TRUE MULTIPLY 1 state.val 60 0 GT state.val 59 false FALSE Object ID objekt_id_ventil_1_dp_start_stop_adapter TRUE MULTIPLY 59 60 0 EQ state.val 0 false FALSE Object ID objekt_id_ventil_1_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_1_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_1_eDP TRUE 0 0 warn ❗️ Ventil 1 ist nicht angeschlossen oder nicht erreichbar ❗️ true TRUE Object ID objekt_id_restlaufzeit_ventil_1_eDP TRUE 0 1000 Ventil 2 ueber eigenen DP ne false default objekt_id_restlaufzeit_ventil_2_eDP EQ val Status_Ventil_2 OK LT aktive_ventile_zaehlen 3 AND GT state.val 0 LTE state.val 59 false FALSE Object ID objekt_id_ventil_2_dp_start_stop_adapter TRUE MULTIPLY 1 state.val 60 0 GT state.val 59 false FALSE Object ID objekt_id_ventil_2_dp_start_stop_adapter TRUE MULTIPLY 59 60 0 EQ state.val 0 false FALSE Object ID objekt_id_ventil_2_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_2_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_2_eDP TRUE 0 0 warn ❗️ Ventil 2 ist nicht angeschlossen oder nicht erreichbar ❗️ true TRUE Object ID objekt_id_restlaufzeit_ventil_2_eDP TRUE 0 1000 Ventil 3 ueber eigenen DP ne false default objekt_id_restlaufzeit_ventil_3_eDP EQ val Status_Ventil_3 OK LT aktive_ventile_zaehlen 3 AND GT state.val 0 LTE state.val 59 false FALSE Object ID objekt_id_ventil_3_dp_start_stop_adapter TRUE MULTIPLY 1 state.val 60 0 GT state.val 59 false FALSE Object ID objekt_id_ventil_3_dp_start_stop_adapter TRUE MULTIPLY 59 60 0 EQ state.val 0 false FALSE Object ID objekt_id_ventil_3_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_3_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_3_eDP TRUE 0 0 warn ❗️ Ventil 3 ist nicht angeschlossen oder nicht erreichbar ❗️ true TRUE Object ID objekt_id_restlaufzeit_ventil_3_eDP TRUE 0 1000 Ventil 4 ueber eigenen DP ne false default objekt_id_restlaufzeit_ventil_4_eDP EQ val Status_Ventil_4 OK LT aktive_ventile_zaehlen 3 AND GT state.val 0 LTE state.val 59 false FALSE Object ID objekt_id_ventil_4_dp_start_stop_adapter TRUE MULTIPLY 1 state.val 60 0 GT state.val 59 false FALSE Object ID objekt_id_ventil_4_dp_start_stop_adapter TRUE MULTIPLY 59 60 0 EQ state.val 0 false FALSE Object ID objekt_id_ventil_4_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_4_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_4_eDP TRUE 0 0 warn ❗️ Ventil 4 ist nicht angeschlossen oder nicht erreichbar ❗️ true TRUE Object ID objekt_id_restlaufzeit_ventil_4_eDP TRUE 0 1000 Ventil 5 ueber eigenen DP ne false default objekt_id_restlaufzeit_ventil_5_eDP EQ val Status_Ventil_5 OK LT aktive_ventile_zaehlen 3 AND GT state.val 0 LTE state.val 59 false FALSE Object ID objekt_id_ventil_5_dp_start_stop_adapter TRUE MULTIPLY 1 state.val 60 0 GT state.val 59 false FALSE Object ID objekt_id_ventil_5_dp_start_stop_adapter TRUE MULTIPLY 59 60 0 EQ state.val 0 false FALSE Object ID objekt_id_ventil_5_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_5_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_5_eDP TRUE 0 0 warn ❗️ Ventil 5 ist nicht angeschlossen oder nicht erreichbar ❗️ true TRUE Object ID objekt_id_restlaufzeit_ventil_5_eDP TRUE 0 1000 Ventil 6 ueber eigenen DP ne false default objekt_id_restlaufzeit_ventil_6_eDP EQ val Status_Ventil_6 OK LT aktive_ventile_zaehlen 3 AND GT state.val 0 LTE state.val 59 false FALSE Object ID objekt_id_ventil_6_dp_start_stop_adapter TRUE MULTIPLY 1 state.val 60 0 GT state.val 59 false FALSE Object ID objekt_id_ventil_6_dp_start_stop_adapter TRUE MULTIPLY 59 60 0 EQ state.val 0 false FALSE Object ID objekt_id_ventil_6_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_6_eDP TRUE 0 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_6_eDP TRUE 0 0 warn ❗️ Ventil 6 ist nicht angeschlossen oder nicht erreichbar ❗️ true TRUE Object ID objekt_id_restlaufzeit_ventil_6_eDP TRUE 0 1000 alle Ventile nacheinander eigene DP ne default objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP laufzeit_ventil 0 AND LTE state.val MULTIPLY 0 angeschlossene_ventile_zaehlen 59 GTE state.val angeschlossene_ventile_zaehlen true FALSE Object ID objekt_id_laufzeit_alle_ventile_anzeige TRUE ROUNDDOWN 3.1 state.val 0 true FALSE Object ID objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP TRUE ROUNDDOWN 3.1 state.val 0 laufzeit_ventil MULTIPLY 1 DIVIDE 1 state.val 0 angeschlossene_ventile_zaehlen 60000 AND LT state.val angeschlossene_ventile_zaehlen GT state.val 0 true FALSE Object ID objekt_id_laufzeit_alle_ventile_anzeige TRUE MULTIPLY 1 angeschlossene_ventile_zaehlen 1 0 true FALSE Object ID objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP TRUE MULTIPLY 1 angeschlossene_ventile_zaehlen 1 0 GT state.val MULTIPLY 0 angeschlossene_ventile_zaehlen 59 true FALSE Object ID objekt_id_laufzeit_alle_ventile_anzeige TRUE MULTIPLY 1 angeschlossene_ventile_zaehlen 59 0 true FALSE Object ID objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP TRUE MULTIPLY 1 angeschlossene_ventile_zaehlen 59 0 Ventil_2 Ventil_3 Ventil_4 Ventil_5 Ventil_6 GT state.val 0 AND LT aktive_ventile_zaehlen 2 EQ val objekt_id_von_ventil_1_angeschlossen TRUE Ventil 1 false FALSE Object ID objekt_id_ventil_1_dp_start_stop_adapter TRUE MULTIPLY 60000 DIVIDE 1 laufzeit_ventil 60000 60 0 EQ state.val 0 false FALSE Object ID objekt_id_ventil_1_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_1_eDP TRUE 0 0 AND LT aktive_ventile_zaehlen 2 EQ val objekt_id_von_ventil_2_angeschlossen TRUE Ventil_2 laufzeit_ventil ms Ventil 2 GT state.val 0 false FALSE Object ID objekt_id_ventil_2_dp_start_stop_adapter TRUE MULTIPLY 60000 DIVIDE 1 laufzeit_ventil 60000 60 0 EQ state.val 0 Ventil_2 false FALSE Object ID objekt_id_ventil_2_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_2_eDP TRUE 0 0 AND LT aktive_ventile_zaehlen 2 EQ val objekt_id_von_ventil_3_angeschlossen TRUE Ventil_3 laufzeit_ventil ms Ventil 3 GT state.val 0 false FALSE Object ID objekt_id_ventil_3_dp_start_stop_adapter TRUE MULTIPLY 60000 DIVIDE 1 laufzeit_ventil 60000 60 0 EQ state.val 0 Ventil_3 false FALSE Object ID objekt_id_ventil_3_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_3_eDP TRUE 0 0 AND LT aktive_ventile_zaehlen 2 EQ val objekt_id_von_ventil_4_angeschlossen TRUE Ventil_4 laufzeit_ventil ms Ventil 4 GT state.val 0 false FALSE Object ID objekt_id_ventil_4_dp_start_stop_adapter TRUE MULTIPLY 60000 DIVIDE 1 laufzeit_ventil 60000 60 0 EQ state.val 0 Ventil_4 false FALSE Object ID objekt_id_ventil_4_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_4_eDP TRUE 0 0 AND LT aktive_ventile_zaehlen 2 EQ val objekt_id_von_ventil_5_angeschlossen TRUE Ventil_5 laufzeit_ventil ms Ventil 5 GT state.val 0 false FALSE Object ID objekt_id_ventil_5_dp_start_stop_adapter TRUE MULTIPLY 60000 DIVIDE 1 laufzeit_ventil 60000 60 0 EQ state.val 0 Ventil_5 false FALSE Object ID objekt_id_ventil_5_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_5_eDP TRUE 0 0 AND LT aktive_ventile_zaehlen 2 EQ val objekt_id_von_ventil_6_angeschlossen TRUE Ventil_6 laufzeit_ventil ms Ventil 6 GT state.val 0 false FALSE Object ID objekt_id_ventil_6_dp_start_stop_adapter TRUE MULTIPLY 60000 DIVIDE 1 laufzeit_ventil 60000 60 0 EQ state.val 0 Ventil_6 false FALSE Object ID objekt_id_ventil_6_dp_start_stop_adapter TRUE ventil_stop_befehl 0 true FALSE Object ID objekt_id_restlaufzeit_ventil_6_eDP TRUE 0 0 EQ state.val 0 true FALSE Object ID objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP TRUE 0 0 false FALSE Object ID objekt_id_alle_ventile_stop_adapter TRUE ventil_stop_befehl 0 Ventil_2 Ventil_3 Ventil_4 Ventil_5 Ventil_6 Anzeige Laufzeit alle Ventile eigener DP ne default objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP restlaufzeit_alle_ventile_anzeige GT state.val 0 true FALSE objekt_id_laufzeit_alle_ventile_anzeige TRUE val objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP 0 restlaufzeit_alle_ventile_anzeige restlaufzeit_alle_ventile_anzeige 1 min GT val objekt_id_laufzeit_alle_ventile_anzeige 0 true FALSE objekt_id_laufzeit_alle_ventile_anzeige TRUE MINUS 1 val objekt_id_laufzeit_alle_ventile_anzeige 1 0 Eingabe Laufzeit alle Ventile auf 0 eigener DP ne default objekt_id_laufzeit_alle_ventile_anzeige EQ state.val 0 true FALSE objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP 0 0 Alle Ventile Stopp in der App ne default objekt_id_restlaufzeit_ventil_1_Adapter default objekt_id_restlaufzeit_ventil_2_Adapter default objekt_id_restlaufzeit_ventil_3_Adapter default objekt_id_restlaufzeit_ventil_4_Adapter default objekt_id_restlaufzeit_ventil_5_Adapter default objekt_id_restlaufzeit_ventil_6_Adapter alles_aus alles_aus 5000 ms AND EQ val objekt_id_restlaufzeit_ventil_1_Adapter null AND EQ val objekt_id_restlaufzeit_ventil_2_Adapter null AND EQ val objekt_id_restlaufzeit_ventil_3_Adapter null AND EQ val objekt_id_restlaufzeit_ventil_4_Adapter null AND EQ val objekt_id_restlaufzeit_ventil_5_Adapter null EQ val objekt_id_restlaufzeit_ventil_6_Adapter null true FALSE Object ID objekt_id_alle_ventile_stop_eDP FALSE 0 start_main start dp_erstellen alles_aus Ventil_2 Ventil_3 Ventil_4 Ventil_5 Ventil_6 start 1000 ms max_laufzeit 0 Ventil_1_angeschlossen max_laufzeit 59 Ventil_2_angeschlossen max_laufzeit 59 Ventil_3_angeschlossen max_laufzeit 59 Ventil_4_angeschlossen max_laufzeit 59 Ventil_5_angeschlossen max_laufzeit 59 Ventil_6_angeschlossen max_laufzeit 59 Forum Link: https://forum.iobroker.net/post/408094 0_userdata.0 oder javascript.x javascript.x (x=Instanznummer) anlegen_in 0_userdata.0 angeschlossene Ventile auf wahr stellen Ventil_1_angeschlossen TRUE Ventil_2_angeschlossen TRUE Ventil_3_angeschlossen TRUE Ventil_4_angeschlossen TRUE Ventil_5_angeschlossen FALSE Ventil_6_angeschlossen FALSE Falls iot Adapter verwendet wird Alexa_verwenden TRUE SmartName für iot Adapter-Alexa reinschreiben Alexa_SmartName_Ventil_1 Ventil eins Alexa_SmartName_Ventil_2 Ventil zwei Alexa_SmartName_Ventil_3 Ventil drei Alexa_SmartName_Ventil_4 Ventil vier Alexa_SmartName_Ventil_5 Ventil fünf Alexa_SmartName_Ventil_6 Ventil sechs Alexa_SmartName_alle_Ventile_nacheinander alle Ventile Alexa_SmartName_alle_Ventile_stop Bewässerung Ventile start-stop smartgarden Adapter auswählen objekt_id_ventil_1_dp_start_stop_adapter smartgarden.0.LOCATION_xxx.duration_value objekt_id_ventil_2_dp_start_stop_adapter smartgarden.0.LOCATION_xxx.duration_value objekt_id_ventil_3_dp_start_stop_adapter smartgarden.0.LOCATION_xxx.duration_value objekt_id_ventil_4_dp_start_stop_adapter smartgarden.0.LOCATION_xxx.duration_value objekt_id_ventil_5_dp_start_stop_adapter smartgarden.0.LOCATION_xxx.duration_value objekt_id_ventil_6_dp_start_stop_adapter smartgarden.0.LOCATION_xxx.duration_value objekt_id_alle_ventile_stop_adapter smartgarden.0.LOCATION_xxx.stop_all_valves_i ventil_stop_befehl STOP_UNTIL_NEXT_TASK Status Ventile smartgarden Adapter auswählen Status_Ventil_1 smartgarden.0.LOCATION_xxx.state_value Status_Ventil_2 smartgarden.0.LOCATION_xxx.state_value Status_Ventil_3 smartgarden.0.LOCATION_xxx.state_value Status_Ventil_4 smartgarden.0.LOCATION_xxx.state_value Status_Ventil_5 smartgarden.0.LOCATION_xxx.state_value Status_Ventil_6 smartgarden.0.LOCATION_xxx.state_value Ventile Restlaufzeit smartgarden Adapter auswählen objekt_id_restlaufzeit_ventil_1_Adapter smartgarden.0.LOCATION_xxx.duration_leftover_i objekt_id_restlaufzeit_ventil_2_Adapter smartgarden.0.LOCATION_xxx.duration_leftover_i objekt_id_restlaufzeit_ventil_3_Adapter smartgarden.0.LOCATION_xxx.duration_leftover_i objekt_id_restlaufzeit_ventil_4_Adapter smartgarden.0.LOCATION_xxx.duration_leftover_i objekt_id_restlaufzeit_ventil_5_Adapter smartgarden.0.LOCATION_xxx.duration_leftover_i objekt_id_restlaufzeit_ventil_6_Adapter smartgarden.0.LOCATION_xxx.duration_leftover_i dp_erstellen 2000 ms