arry trenner text to subject id user val alexa_instanz_0 alexa_instanz_1 uebnerschrift_nachrichten_Batterien uebnerschrift_nachrichten_Steckdosen Batterien_Datenpruefung uebnerschrift_nachrichten_Lichter Steckdosen_Datenpruefung uebnerschrift_nachrichten_Bewegungsmelder anzahl_Batterien_aktiv Lichter_Datenpruefung Fenster_Datenpruefung anzahl_Steckdosen_aktiv Bewegungsmelder_Datenpruefung gekippt anzahl_Lichter_aktiv anzahl_Bewegungsmelder_aktiv Tueren_Datenpruefung anzahl_fenster_gekippt anzahl_tueren_gekippt Batterien_Ansage Steckdosen_Ansage anzahl_Batterien_inaktiv Lichter_Ansage Fenster_Ansage anzahl_Steckdosen_inaktiv Bewegungsmelder_Ansage geoffnet anzahl_Lichter_inaktiv anzahl_Bewegungsmelder_inaktiv Tueren_Ansage anzahl_fenster_offen anzahl_tueren_offen angesprochener_echo_instanz_0 angesprochener_echo_instanz_1 etage Batterien nachrichten_ausgabe_Batterien Steckdosen nachrichten_ausgabe_Steckdosen Licht nachrichten_ausgabe_Lichter Alexa_Ansage_verwenden objekt_id_01alexa_eDP Bewegungsmelder nachrichten_ausgabe_Bewegungsmelder anzahl_Batterien_gesamt anzahl_Steckdosen_gesamt emoji_πŸ‘ˆ uebnerschrift_nachrichten_Tueren anzahl_Lichter_gesamt uebnerschrift_nachrichten_Fenster anzahl_Bewegungsmelder_gesamt anzahl_fenster_geschlossen anzahl_tueren_geschlossen speak_volume_instanz_0 07_Ansage_Button_Batterien_eDP 07_Ansage_Button_Steckdosen_eDP speak_volume_instanz_1 07_Ansage_Button_Lichter_eDP 07_Ansage_Button_Bewegungsmelder_eDP 09_Fenster_Ansage_Button_eDP 09_Tueren_Ansage_Button_eDP objekt_id_02hans_eDP liste_Batterien_aktiv Fenster liste_Steckdosen_aktiv emoji_☝️ liste_Lichter_aktiv liste_Bewegungsmelder_aktiv anzahl_fenster_gesamt anzahl_tueren_gesamt angesprochener_echo_instanz_0_neu angesprochener_echo_instanz_1_neu eine einzahl_Batterie einzahl_Steckdose Ansage_Einleitungssatz_Batterien mehrzahl_Batterien ein einzahl_Licht anlegen_in objekt_id_03vicki_eDP Batterien_verwenden 01_anzahl_Batterien_gesamt_eDP Ansage_Einleitungssatz_Steckdosen einzahl_Bewegungsmelder liste_Batterien_inaktiv Ansage_Einleitungssatz_Lichter Ansage_Einleitungssatz_Fenster Tueren liste_Steckdosen_inaktiv Ansage_Einleitungssatz_Bewegungsmelder nachrichten_ausgabe_Tueren liste_Lichter_inaktiv nachrichten_ausgabe_Fenster liste_Bewegungsmelder_inaktiv liste_fenster_offen liste_tueren_offen speak_volume_instanz_0_neu Ansagelautstaerke speak_volume_instanz_1_neu emoji_❗️ 06_liste_Batterien_aktiv_emojis_eDP emoji_⚑️ 06_liste_Steckdosen_aktiv__emojis_eDP Logmeldung_Tueren_Ansage 02_anzahl_Batterien_aktiv_eDP objekt_id_05alexa_ssml_eDP objekt_id_09ende_ssml_eDP emoji_πŸ’‘ 06_liste_Lichter_aktiv_emojis_eDP objekt_id_04conchita_eDP Logmeldung_Batterie_Ansage 02_anzahl_Steckdosen_aktiv_eDP emoji_πŸ‘€ 06_liste_Bewegungsmelder_aktiv_emojis_eDP liste_Batterien_aktiv_gesamt 02_anzahl_Lichter_aktiv_eDP 04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt liste_Steckdosen_aktiv_gesamt 02_anzahl_Bewegungsmelder_aktiv_eDP liste_Lichter_aktiv_gesamt liste_Bewegungsmelder_aktiv_gesamt 04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt Ansage_Einleitungssatz_Tueren liste_fenster_gekippt liste_tueren_gekippt emoji_βœ… 03_liste_Batterien_aktiv_eDP objekt_id_06hans_ssml_eDP pfad_geraete_zaehlen 03_liste_Steckdosen_aktiv_eDP liste_Batterien_aktiv_html 03_liste_Lichter_aktiv_eDP 05_offene_gekippte_Fenster_Liste liste_Steckdosen_aktiv_html 03_liste_Bewegungsmelder_aktiv_eDP einzahl_Tuer liste_Lichter_aktiv_html liste_Bewegungsmelder_aktiv_html 05_offene_gekippte_Tueren_Liste liste_fenster_geschlossen liste_tueren_geschlossen objekt_id_07vicki_ssml_eDP 04_liste_Batterien_gesamt_eDP Steckdosen_verwenden 01_anzahl_Steckdosen_gesamt_eDP liste_Batterien_inaktiv_html liste_Steckdosen_inaktiv_html 02_anzahl_Tueren_offen_eDP 01_anzahl_Tueren_gekippt_eDP liste_Lichter_inaktiv_html 02_anzahl_Fenster_offen_eDP 01_anzahl_Fenster_gekippt_eDP liste_Bewegungsmelder_inaktiv_html liste_fenster_offen_gesamt liste_tueren_offen_gesamt objekt_id_08conchita_ssml_eDP 05_liste_Batterien_html_eDP Logmeldung_Steckdosen_Ansage htmlText liste_fenster_offen_html liste_tueren_offen_html Logmeldung_Lichter_Ansage Logmeldung_Bewegungsmelder_Ansage Logmeldung_Fenster_Ansage Batterien_aktiv Steckdosen_aktiv Lichter_aktiv Bewegungsmelder_aktiv liste_fenster_gekippt_html liste_tueren_gekippt_html 04_liste_Steckdosen_gesamt_eDP Lichter_verwenden 01_anzahl_Lichter_gesamt_eDP selektor_Batterien Batterien_inaktiv selektor_Steckdosen Steckdosen_inaktiv selektor_Lichter Lichter_inaktiv selektor_Bewegungsmelder Bewegungsmelder_inaktiv liste_fenster_geschlossen_html liste_tueren_geschlossen_html blockly_start_batterien_zaehlen_einlesen 05_liste_Steckdosen_html_eDP formatierte_ausgabe_batterien_zum_start 01_anzahl_Bewegungsmelder_gesamt_eDP fenster_offen tueren_offen 04_liste_Lichter_gesamt_eDP Bewegungsmelder_verwenden 08_offene_gekippte_Tueren_Liste_mit_Emojis 08_offene_gekippte_Fenster_Liste_mit_Emojis selektor_Fenster fenster_gekippt selektor_Tueren tueren_gekippt blockly_start_steckdosen_zaehlen_einlesen 05_liste_Lichter_html_eDP wert fenster_geschlossen tueren_geschlossen formatierte_ausgabe_steckdosen_zum_start 04_liste_Bewegungsmelder_gesamt_eDP Fenster_verwenden blockly_start_lichter_zaehlen_einlesen 05_liste_Bewegungsmelder_html_eDP formatierte_ausgabe_lichter_zum_start 03_anzahl_Fenster_geschlossen_eDP Telegram_verwenden emoji_πŸ‘ emoji_πŸ‘ 03_anzahl_Tueren_geschlossen_eDP 04_anzahl_Fenster_gesamt_eDP Tueren_verwenden Email_verwenden 04_anzahl_Tueren_gesamt_eDP blockly_start_bwm_zaehlen_einlesen formatierte_ausgabe_bwm_zum_start 06_gesamte_Fenster_Liste telegram_versand_an_aus_Batterien 07_html_Fenster_Liste telegram_direkt_versenden_Batterien telegram_versand_an_aus_Steckdosen 06_gesamte_Tueren_Liste telegram_direkt_versenden_Steckdosen telegram_versand_an_aus_Lichter 07_html_Tueren_Liste telegram_direkt_versenden_Lichter telegram_versand_an_aus_Bewegungsmelder blockly_start_fenster_zaehlen_einlesen telegram_direkt_versenden_Bewegungsmelder telegram_versand_an_aus_Fenster formatierte_ausgabe_fenster_zum_start Telegram_Empfaenger telegram_direkt_versenden_Fenster telegram_versand_an_aus_Tueren telegram telegram_direkt_versenden_Tueren blockly_start_tueren_zaehlen_einlesen telegram2 email_versand_an_aus_batterien formatierte_ausgabe_tueren_zum_start telegram3 email_direkt_versenden_Batterien email_versand_an_aus_Steckdosen telegram4 email_direkt_versenden_Steckdosen email_versand_an_aus_Lichter telegram5 email_direkt_versenden_Lichter email_versand_an_aus_Bewegungsmelder EMail_Empfaenger telegram6 Betreff email_direkt_versenden_Bewegungsmelder email_versand_an_aus_Fenster email_direkt_versenden_Fenster email_versand_an_aus_Tueren email_direkt_versenden_Tueren email email2 email3 email4 email5 email6 emoji_❌ emoji_🧯 emoji_πŸ”” einzahl_Fenster mehrzahl_Fenster mehrzahl_Tueren mehrzahl_Steckdosen mehrzahl_Licht mehrzahl_Bewegungsmelder arry, trenner cmV0dXJuIGFycnkuam9pbih0cmVubmVyKTs= Beschreibe diese Funktion … EMail_Batterien c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfQmF0dGVyaWVuLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs= Beschreibe diese Funktion … getParentName dmFyIG5hbWUgPSBnZXRPYmplY3QoaWQpLmNvbW1vbi5uYW1lOw0KdmFyIHdlcnQgPSBnZXRTdGF0ZShpZCkudmFsDQoNCi8vSFVFIExhbXBlbg0KaWYgKG5hbWUuc3Vic3RyKCAtMykgPT0gKCcub24nKSkgcmV0dXJuIG5hbWUuc2xpY2UoMCwgLTMpOw0KaWYgKG5hbWUuc3Vic3RyKCAtNikgPT0gKCcuTEVWRUwnKSkgcmV0dXJuIG5hbWUuc2xpY2UoMCwgLTYpOw0KDQovL0hNUEkgU3RlY2tkb3Nlbg0KaWYgKG5hbWUuc3Vic3RyKCAtNikgPT0gKCcuU1RBVEUnKSkgcmV0dXJuIG5hbWUuc2xpY2UoMCwgLTYpOw0KDQovL0hNSVAgQmV3ZWd1bmdzbWVsZGVyIC8gUHLDpHNlbnptZWxkZXINCmlmIChuYW1lLnN1YnN0ciggLTcpID09ICgnLk1PVElPTicpKSByZXR1cm4gbmFtZS5zbGljZSgwLCAtNyk7DQppZiAobmFtZS5zdWJzdHIoIC0yNSkgPT0gKCcuUFJFU0VOQ0VfREVURUNUSU9OX1NUQVRFJykpIHJldHVybiBuYW1lLnNsaWNlKDAsIC0yNSk7DQoNCi8vQW5kZXJlIEJld2VndW5nc21lbGRlcg0KaWYgKG5hbWUuc3Vic3RyKCAtOSkgPT0gKCcucHJlc2VuY2UnKSkgcmV0dXJuIG5hbWUuc2xpY2UoMCwgLTkpOw0KaWYgKG5hbWUuc3Vic3RyKCAtMTMpID09ICgnIFN3aXRjaCBzdGF0ZScpKSByZXR1cm4gbmFtZS5zbGljZSgwLCAtMTMpOw0KDQovL0hNSVAgdW5kIEhNIEJhdHRlcmllbg0KaWYgKG5hbWUuc3Vic3RyKCAtNykgPT0gKCdMT1dfQkFUJykgJiYgd2VydCA9PSB0cnVlKSByZXR1cm4gbmFtZS5zbGljZSgwLCAtMTApIDsNCmlmIChuYW1lLnN1YnN0ciggLTcpID09ICgnTE9XX0JBVCcpICYmIHdlcnQgPT0gZmFsc2UpIHJldHVybiBuYW1lLnNsaWNlKDAsIC0xMCkgOw0KaWYgKG5hbWUuc3Vic3RyKCAtNikgPT0gKCdMT1dCQVQnKSAmJiB3ZXJ0ID09IHRydWUpIHJldHVybiBuYW1lLnNsaWNlKDAsIC05KSA7DQppZiAobmFtZS5zdWJzdHIoIC02KSA9PSAoJ0xPV0JBVCcpICYmIHdlcnQgPT0gZmFsc2UpIHJldHVybiBuYW1lLnNsaWNlKDAsIC05KTsNCi8vaWYgKG5hbWUuc3Vic3RyKCAtMTcpID09ICgnT1BFUkFUSU5HX1ZPTFRBR0UnKSkgcmV0dXJuICBnZXRTdGF0ZShpZCkudmFsLnRvU3RyaW5nKCkucmVwbGFjZSgnLicsICcsJywpICsgJyBWb2x0JyArICcgJyArIG5hbWUuc2xpY2UoMCwgLTIwKSA7DQovL2lmIChuYW1lLnN1YnN0ciggLTE3KSA9PSAoJ09QRVJBVElOR19WT0xUQUdFJykgJiYgd2VydCA+IDApIHJldHVybiAn4pyFICcgKyBuYW1lLnNsaWNlKDAsIC0yMCk7DQovL2lmIChuYW1lLnN1YnN0ciggLTE3KSA9PSAoJ09QRVJBVElOR19WT0xUQUdFJykgJiYgd2VydCA9PSAwKSByZXR1cm4gJ+Kdl++4jyDvuI8nICsgbmFtZS5zbGljZSgwLCAtMjApOw0KDQovL1NvbnN0aWdlDQppZiAobmFtZS5zdWJzdHIoIC02KSA9PSAoJy5zdGF0ZScpKSByZXR1cm4gbmFtZS5zbGljZSgwLCAtNik7DQoNCg0KaWQgPSBpZC5zdWJzdHJpbmcoMCwgaWQubGFzdEluZGV4T2YoJy4nKSk7DQppZihleGlzdHNPYmplY3QoaWQpICYmIGdldE9iamVjdChpZCkudHlwZSA9PSAnZGV2aWNlJykgcmV0dXJuIGdldE9iamVjdChpZCkuY29tbW9uLm5hbWU7DQppZCA9IGlkLnN1YnN0cmluZygwLCBpZC5sYXN0SW5kZXhPZignLicpKTsNCmlmKGV4aXN0c09iamVjdChpZCkgJiYgZ2V0T2JqZWN0KGlkKS50eXBlID09ICdkZXZpY2UnKSByZXR1cm4gZ2V0T2JqZWN0KGlkKS5jb21tb24ubmFtZTsNCg0KZWxzZSByZXR1cm4gJ0dlcmFldCB1bmJla2FubnQnOw0KDQo= Beschreibe diese Funktion … EMail_Steckdosen c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfQmF0dGVyaWVuLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs= Beschreibe diese Funktion … Telegram_Batterien c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9CYXR0ZXJpZW4sCiAgICB1c2VyOiBUZWxlZ3JhbV9FbXBmYWVuZ2VyLAogICAgcGFyc2VfbW9kZTogIk1hcmtkb3duIiwKfSk7 Beschreibe diese Funktion … EMail_Lichter c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfTGljaHRlciwKICAgICB0bzogRU1haWxfRW1wZmFlbmdlciwKICAgICBzdWJqZWN0OiBCZXRyZWZmCiAgfSk7 Beschreibe diese Funktion … existiert_DP cmV0dXJuIGV4aXN0c1N0YXRlKGlkKTs= Beschreibe diese Funktion … Telegram_Steckdosen c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9TdGVja2Rvc2VuLAogICAgdXNlcjogVGVsZWdyYW1fRW1wZmFlbmdlciwKICAgIHBhcnNlX21vZGU6ICJNYXJrZG93biIsCn0pOw== Beschreibe diese Funktion … EMail_BWM c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfQmV3ZWd1bmdzbWVsZGVyLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs= Beschreibe diese Funktion … Batterien_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default 07_Ansage_Button_Batterien_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE Batterien_Ansage 0 log Logmeldung_Batterie_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Telegram_Lichter c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9MaWNodGVyLAogICAgdXNlcjogVGVsZWdyYW1fRW1wZmFlbmdlciwKICAgIHBhcnNlX21vZGU6ICJNYXJrZG93biIsCn0pOw== Beschreibe diese Funktion … EMail_Fenster c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfRmVuc3RlciwKICAgICB0bzogRU1haWxfRW1wZmFlbmdlciwKICAgICBzdWJqZWN0OiBCZXRyZWZmCiAgfSk7 Beschreibe diese Funktion … Datenpunkte_anlegen LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKCmZ1bmN0aW9uIGNyZWF0ZVVzZXJTdGF0ZXMod2hlcmUsIGZvcmNlLCBzdGF0ZXNUb0NyZWF0ZSwgY2FsbGJhY2sgPSB1bmRlZmluZWQpIHsKIAogICAgY29uc3QgV0FSTiA9IGZhbHNlOyAvLyBPbmx5IGZvciAwX3VzZXJkYXRhLjA6IFRocm93cyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgZm9yY2U9ZmFsc2UuIERlZmF1bHQgaXMgZmFsc2UsIHNvIG5vIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBleGlzdHMuCiAgICBjb25zdCBMT0dfREVCVUcgPSBmYWxzZTsgLy8gVG8gZGVidWcgdGhpcyBmdW5jdGlvbiwgc2V0IHRvIHRydWUKICAgIC8vIFBlciBpc3N1ZSAjNDc0IChodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc0KSwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgZXhlY3V0ZXMgdGhlIGNhbGxiYWNrIAogICAgLy8gYmVmb3JlIHRoZSBzdGF0ZSBpcyBhY3R1YWwgY3JlYXRlZC4gVGhlcmVmb3JlLCB3ZSB1c2UgYSBzZXRUaW1lb3V0IGFuZCBjb3VudGVyIGFzIGEgd29ya2Fyb3VuZC4KICAgIGNvbnN0IERFTEFZID0gNTA7IC8vIERlbGF5IGluIG1pbGxpc2Vjb25kcyAobXMpLiBJbmNyZWFzZSB0aGlzIHRvIDEwMCwgaWYgaXQgaXMgbm90IHdvcmtpbmcuCgogICAgLy8gVmFsaWRhdGUgIndoZXJlIgogICAgaWYgKHdoZXJlLmVuZHNXaXRoKCcuJykpIHdoZXJlID0gd2hlcmUuc2xpY2UoMCwgLTEpOyAvLyBSZW1vdmUgdHJhaWxpbmcgZG90CiAgICBpZiAoICh3aGVyZS5tYXRjaCgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pKSR8MF91c2VyZGF0YVwuMCQpLykgPT0gbnVsbCkgKSB7CiAgICAgICAgbG9nKCdUaGlzIHNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IHRvIGNyZWF0ZSBzdGF0ZXMgdW5kZXIgWycgKyB3aGVyZSArICddJywgJ2Vycm9yJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFByZXBhcmUgInN0YXRlc1RvQ3JlYXRlIiBzaW5jZSB3ZSBhbHNvIGFsbG93IGEgc2luZ2xlIHN0YXRlIHRvIGNyZWF0ZQogICAgaWYoIUFycmF5LmlzQXJyYXkoc3RhdGVzVG9DcmVhdGVbMF0pKSBzdGF0ZXNUb0NyZWF0ZSA9IFtzdGF0ZXNUb0NyZWF0ZV07IC8vIHdyYXAgaW50byBhcnJheSwgaWYganVzdCBvbmUgYXJyYXkgYW5kIG5vdCBpbnNpZGUgYW4gYXJyYXkKCiAgICAvLyBBZGQgIndoZXJlIiB0byBTVEFURVNfVE9fQ1JFQVRFCiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IGxwUGF0aCA9IHN0YXRlc1RvQ3JlYXRlW2ldWzBdLnJlcGxhY2UoL1wuKlwuL2csICcuJyk7IC8vIHJlcGxhY2UgYWxsIG11bHRpcGxlIGRvdHMgbGlrZSAnLi4nLCAnLi4uJyB3aXRoIGEgc2luZ2xlICcuJwogICAgICAgIGxwUGF0aCA9IGxwUGF0aC5yZXBsYWNlKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSlcLil8MF91c2VyZGF0YVwuMFwuKS8sJycpIC8vIHJlbW92ZSBhbnkgamF2YXNjcmlwdC54LiAvIDBfdXNlcmRhdGEuMC4gZnJvbSBiZWdpbm5pbmcKICAgICAgICBscFBhdGggPSB3aGVyZSArICcuJyArIGxwUGF0aDsgLy8gYWRkIHdoZXJlIHRvIGJlZ2lubmluZyBvZiBzdHJpbmcKICAgICAgICBzdGF0ZXNUb0NyZWF0ZVtpXVswXSA9IGxwUGF0aDsKICAgIH0KCiAgICBpZiAod2hlcmUgIT0gJzBfdXNlcmRhdGEuMCcpIHsKICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIGphdmFzY3JpcHQueAogICAgICAgIGxldCBudW1TdGF0ZXMgPSBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsKICAgICAgICAgICAgbGV0IGxvb3BJbml0ID0gKGxvb3BQYXJhbVsxXVsnZGVmJ10gPT0gdW5kZWZpbmVkKSA/IG51bGwgOiBsb29wUGFyYW1bMV1bJ2RlZiddOyAvLyBtaW1pYyBzYW1lIGJlaGF2aW9yIGFzIGNyZWF0ZVN0YXRlIGlmIG5vIGluaXQgdmFsdWUgaXMgcHJvdmlkZWQKICAgICAgICAgICAgY3JlYXRlU3RhdGUobG9vcFBhcmFtWzBdLCBsb29wSW5pdCwgZm9yY2UsIGxvb3BQYXJhbVsxXSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gRnVuY3Rpb24gdG8gY2FsbGJhY2sgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciAwX3VzZXJkYXRhLjAKICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOwogICAgICAgIGxldCBjb3VudGVyID0gLTE7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgY291bnRlciArPSAxOwogICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2cgKCdbRGVidWddIEN1cnJlbnRseSBwcm9jZXNzaW5nIGZvbGxvd2luZyBzdGF0ZTogWycgKyBsb29wUGFyYW1bMF0gKyAnXScpOwogICAgICAgICAgICBpZiggKCQobG9vcFBhcmFtWzBdKS5sZW5ndGggPiAwKSAmJiAoZXhpc3RzU3RhdGUobG9vcFBhcmFtWzBdKSkgKSB7IC8vIFdvcmthcm91bmQgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9pb0Jyb2tlci9pb0Jyb2tlci5qYXZhc2NyaXB0L2lzc3Vlcy80NzgKICAgICAgICAgICAgICAgIC8vIFN0YXRlIGlzIGV4aXN0aW5nLgogICAgICAgICAgICAgICAgaWYgKFdBUk4gJiYgIWZvcmNlKSBsb2coJ1N0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgd2lsbCBubyBsb25nZXIgYmUgY3JlYXRlZC4nLCAnd2FybicpOwogICAgICAgICAgICAgICAgaWYgKCFXQVJOICYmIExPR19ERUJVRykgbG9nKCdbRGVidWddIFN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZy4gT3B0aW9uIGZvcmNlICg9b3ZlcndyaXRlKSBpcyBzZXQgdG8gWycgKyBmb3JjZSArICddLicpOwogICAgICAgICAgICAgICAgaWYoIWZvcmNlKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgZXhpc3RzIGFuZCBzaGFsbCBub3QgYmUgb3ZlcndyaXR0ZW4gc2luY2UgZm9yY2U9ZmFsc2UKICAgICAgICAgICAgICAgICAgICAvLyBTbywgd2UgZG8gbm90IHByb2NlZWQuCiAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB3aGljaCB3ZSBhcmUgZ29pbmcgdG8gZXhlY3V0ZSBub3cuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ28gb3V0IGFuZCBjb250aW51ZSB3aXRoIG5leHQgZWxlbWVudCBpbiBsb29wLgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4NDUyOTIwL2NvbnRpbnVlLWluLWN1cnNvci1mb3JlYWNoCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvLyBpZighZm9yY2UpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFN0YXRlIGlzIG5vdCBleGlzdGluZyBvciBmb3JjZSA9IHRydWUsIHNvIHdlIGFyZSBjb250aW51aW5nIHRvIGNyZWF0ZSB0aGUgc3RhdGUgdGhyb3VnaCBzZXRPYmplY3QoKS4KICAgICAgICAgICAgbGV0IG9iaiA9IHt9OwogICAgICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICAgICAgb2JqLmNvbW1vbiA9IGxvb3BQYXJhbVsxXTsKICAgICAgICAgICAgc2V0T2JqZWN0KGxvb3BQYXJhbVswXSwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0IGZvciBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddOiAnICsgZXJyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKQogICAgICAgICAgICAgICAgICAgIGxldCBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbG9vcFBhcmFtWzFdLmRlZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUobG9vcFBhcmFtWzBdLCBpbml0LCB0cnVlLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBzZXRTdGF0ZSBkdXJjaGdlZsO8aHJ0OiAnICsgbG9vcFBhcmFtWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSwgREVMQVkgKyAoMjAgKiBjb3VudGVyKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0KfQoKLy9TdGltbWVuIGZ1ZXIgQWxleGEgc3NtbCBBbnNhZ2UgYW5sZWdlbgppZiAoQWxleGFfQW5zYWdlX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5BbGV4YV9TdGltbWVuLjAxQWxleGEnLCB7J25hbWUnOicwMUFsZXhhJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICJBbGV4YSIsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifX1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5BbGV4YV9TdGltbWVuLjAySGFucycsIHsnbmFtZSc6JzAySGFucycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkhhbnMiLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkFsZXhhX1N0aW1tZW4uMDNWaWNraScsIHsnbmFtZSc6JzAzVmlja2knLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJWaWNraSIsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uQWxleGFfU3RpbW1lbi4wNENvbmNoaXRhJywgeyduYW1lJzonMDRDb25jaGl0YScsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkNvbmNoaXRhIiwic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5BbGV4YV9TdGltbWVuLjA1QWxleGFfc3NtbCcsIHsnbmFtZSc6JzA1QWxleGFfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iQWxleGEiPicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkFsZXhhX1N0aW1tZW4uMDZIYW5zX3NzbWwnLCB7J25hbWUnOicwNkhhbnNfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iSGFucyI+JyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uQWxleGFfU3RpbW1lbi4wN1ZpY2tpX3NzbWwnLCB7J25hbWUnOicwN1ZpY2tpX3NzbWwnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOic8c3BlYWs+PHZvaWNlIG5hbWU9IlZpY2tpIj4nIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5BbGV4YV9TdGltbWVuLjA4Q29uY2hpdGFfc3NtbCcsIHsnbmFtZSc6JzA4Q29uY2hpdGFfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iQ29uY2hpdGEiPicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkFsZXhhX1N0aW1tZW4uMDlzc21sX2VuZGUnLCB7J25hbWUnOicwOXNzbWxfZW5kZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6Jzwvdm9pY2U+PC9zcGVhaz4nIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL0ZlbnN0ZXIKLy9BbnNhZ2UgQnV0dG9uIEZlbnN0ZXJhbnNhZ2UgYW5sZWdlbgppZiAoQWxleGFfQW5zYWdlX3ZlcndlbmRlbiA9PSB0cnVlICYmIEZlbnN0ZXJfdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDlfJytbZXRhZ2VdKydfJytbRmVuc3Rlcl0rJ2Fuc2FnZScsIHsnbmFtZSc6ICcwOV8nK1tldGFnZV0rJ18nK1tGZW5zdGVyXSsnYW5zYWdlJywndHlwZSc6ICdib29sZWFuJywgJ3JlYWQnOiB0cnVlLCAnd3JpdGUnOiB0cnVlLCAncm9sZSc6ICdidXR0b24nLCdkZWYnOnRydWUsICJzbWFydE5hbWUiOiB7ImRlIjogJycrW0ZlbnN0ZXJdKycnKydhbnNhZ2UnKycgJytbZXRhZ2VdLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL0ZlbnN0ZXIgemFlaGxlbiBEYXRlbnB1bmt0ZSBhbmxlZ2VuICAgIAppZiAoRmVuc3Rlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0ZlbnN0ZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wMV9BbnphaGxfJytbRmVuc3Rlcl0rJ19nZWtpcHB0JywgeyduYW1lJzonMDFfQW56YWhsXycrW0ZlbnN0ZXJdKydfZ2VraXBwdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW0ZlbnN0ZXJdKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbRmVuc3Rlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjAyX0FuemFobF8nK1tGZW5zdGVyXSsnX29mZmVuJywgeyduYW1lJzonMDJfQW56YWhsXycrW0ZlbnN0ZXJdKydfb2ZmZW4nLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tGZW5zdGVyXSsnJywgJ2RlZic6MCB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0ZlbnN0ZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wM19BbnphaGxfJytbRmVuc3Rlcl0rJ19nZXNjaGxvc3NlbicsIHsnbmFtZSc6JzAzX0FuemFobF8nK1tGZW5zdGVyXSsnX2dlc2NobG9zc2VuJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbRmVuc3Rlcl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDRfQW56YWhsXycrW0ZlbnN0ZXJdKydfZ2VzYW10JywgeyduYW1lJzonMDRfQW56YWhsXycrW0ZlbnN0ZXJdKydfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbRmVuc3Rlcl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDRfMV9BbnphaGxfJytbRmVuc3Rlcl0rJ19nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgeyduYW1lJzonMDRfMV9BbnphaGxfJytbRmVuc3Rlcl0rJ19nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbRmVuc3Rlcl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDVfb2ZmZW5lX2dla2lwcHRlXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCB7J25hbWUnOicwNV9vZmZlbmVfZ2VraXBwdGVfJytbRmVuc3Rlcl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDZfZ2VzYW10ZV8nK1tGZW5zdGVyXSsnX0xpc3RlJywgeyduYW1lJzonMDZfZ2VzYW10ZV8nK1tGZW5zdGVyXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0ZlbnN0ZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wN19odG1sXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCB7J25hbWUnOicwN19odG1sXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbRmVuc3Rlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA4X29mZmVuZV9nZWtpcHB0ZV8nK1tGZW5zdGVyXSsnX0xpc3RlX21pdF9FbW9qaXMnLCB7J25hbWUnOicwOF9vZmZlbmVfZ2VraXBwdGVfJytbRmVuc3Rlcl0rJ19MaXN0ZV9taXRfRW1vamlzJywgJ3R5cGUnOidtaXhlZCcsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J21peGVkJywgJ2RlZic6J25vY2ggbGVlcicgfV0sICAgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vVGVsZWdyYW0gRmVuc3RlciBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbgppZiAoRmVuc3Rlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBUZWxlZ3JhbV92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsgICAgCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuVGVsZWdyYW1fJytbRmVuc3Rlcl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsIHsnbmFtZSc6J1RlbGVncmFtXycrW0ZlbnN0ZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbRmVuc3Rlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLlRlbGVncmFtXycrW0ZlbnN0ZXJdKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgeyduYW1lJzonVGVsZWdyYW1fJytbRmVuc3Rlcl0rJ3N0YXR1c18nK1tldGFnZV0rJ19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJUZWxlZ3JhbSAiK1tGZW5zdGVyXSsnJysnc3RhdHVzJysnICcrW2V0YWdlXSsnIHNlbmRlbicsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCgpdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CiAgICAKLy9FLU1haWwgRmVuc3RlciBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbgppZiAoRmVuc3Rlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBFbWFpbF92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsgICAgCgogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbRmVuc3Rlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLkVNQUlMXycrW0ZlbnN0ZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidFTUFJTF8nK1tGZW5zdGVyXSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0ZlbnN0ZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy5FTUFJTF8nK1tGZW5zdGVyXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J0VNQUlMXycrW0ZlbnN0ZXJdKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiRU1BSUwgIitbRmVuc3Rlcl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sCl07CgpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vVHVlcmVuCi8vQW5zYWdlIEJ1dHRvbiBUdWVyZW5hbnNhZ2UgYW5sZWdlbgppZiAoQWxleGFfQW5zYWdlX3ZlcndlbmRlbiA9PSB0cnVlICYmIFR1ZXJlbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDlfJytbZXRhZ2VdKydfJytbVHVlcmVuXSsnYW5zYWdlJywgeyduYW1lJzogJzA5XycrW2V0YWdlXSsnXycrW1R1ZXJlbl0rJ2Fuc2FnZScsJ3R5cGUnOiAnYm9vbGVhbicsICdyZWFkJzogdHJ1ZSwgJ3dyaXRlJzogdHJ1ZSwgJ3JvbGUnOiAnYnV0dG9uJywnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICcnK1tUdWVyZW5dKycnKydhbnNhZ2UnKycgJytbZXRhZ2VdLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07ICAgCgovL1R1ZXJlbiB6YWVobGVuIERhdGVucHVua3RlIGFubGVnZW4KaWYgKFR1ZXJlbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsgCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tUdWVyZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wMV9BbnphaGxfJytbVHVlcmVuXSsnX2dla2lwcHQnLCB7J25hbWUnOicwMV9BbnphaGxfJytbVHVlcmVuXSsnX2dla2lwcHQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tUdWVyZW5dKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDJfQW56YWhsXycrW1R1ZXJlbl0rJ19vZmZlbicsIHsnbmFtZSc6JzAyX0FuemFobF8nK1tUdWVyZW5dKydfb2ZmZW4nLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tUdWVyZW5dKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDNfQW56YWhsXycrW1R1ZXJlbl0rJ19nZXNjaGxvc3NlbicsIHsnbmFtZSc6JzAzX0FuemFobF8nK1tUdWVyZW5dKydfZ2VzY2hsb3NzZW4nLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tUdWVyZW5dKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDRfQW56YWhsXycrW1R1ZXJlbl0rJ19nZXNhbXQnLCB7J25hbWUnOicwNF9BbnphaGxfJytbVHVlcmVuXSsnX2dlc2FtdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW1R1ZXJlbl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tUdWVyZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wNF8xX0FuemFobF8nK1tUdWVyZW5dKydfZ2VvZWZmbmV0X3VuZF9nZWtpcHB0X2dlc2FtdCcsIHsnbmFtZSc6JzA0XzFfQW56YWhsXycrW1R1ZXJlbl0rJ19nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbVHVlcmVuXSsnJywgJ2RlZic6MCB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1R1ZXJlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA1X29mZmVuZV9nZWtpcHB0ZV8nK1tUdWVyZW5dKydfTGlzdGUnLCB7J25hbWUnOicwNV9vZmZlbmVfZ2VraXBwdGVfJytbVHVlcmVuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1R1ZXJlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA2X2dlc2FtdGVfJytbVHVlcmVuXSsnX0xpc3RlJywgeyduYW1lJzonMDZfZ2VzYW10ZV8nK1tUdWVyZW5dKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDdfaHRtbF8nK1tUdWVyZW5dKydfTGlzdGUnLCB7J25hbWUnOicwN19odG1sXycrW1R1ZXJlbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tUdWVyZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wOF9vZmZlbmVfZ2VraXBwdGVfJytbVHVlcmVuXSsnX0xpc3RlX21pdF9FbW9qaXMnLCB7J25hbWUnOicwOF9vZmZlbmVfZ2VraXBwdGVfJytbVHVlcmVuXSsnX0xpc3RlX21pdF9FbW9qaXMnLCAndHlwZSc6J21peGVkJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbWl4ZWQnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwgICAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9UZWxlZ3JhbSBUdWVyZW4gIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuCmlmIChUdWVyZW5fdmVyd2VuZGVuID09IHRydWUgJiYgVGVsZWdyYW1fdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuVGVsZWdyYW1fJytbVHVlcmVuXSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgeyduYW1lJzonVGVsZWdyYW1fJytbVHVlcmVuXSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1R1ZXJlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLlRlbGVncmFtXycrW1R1ZXJlbl0rJ3N0YXR1c18nK1tldGFnZV0rJ19zZW5kZW4nLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tUdWVyZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiVGVsZWdyYW0gIitbVHVlcmVuXSsnJysnc3RhdHVzJysnICcrW2V0YWdlXSsnIHNlbmRlbicsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vRS1NYWlsIFR1ZXJlbiBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbgppZiAoVHVlcmVuX3ZlcndlbmRlbiA9PSB0cnVlICYmIEVtYWlsX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWyAgICAKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1R1ZXJlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLkVNQUlMXycrW1R1ZXJlbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsIHsnbmFtZSc6J0VNQUlMXycrW1R1ZXJlbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tUdWVyZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy5FTUFJTF8nK1tUdWVyZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgeyduYW1lJzonRU1BSUxfJytbVHVlcmVuXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNQUlMICIrW1R1ZXJlbl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sCiAgIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vU3RlY2tkb3NlbgovL0Fuc2FnZSBCdXR0b24gU3RlY2tkb3NlbmFuc2FnZSBhbmxlZ2VuCmlmIChBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuID09IHRydWUgJiYgU3RlY2tkb3Nlbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tTdGVja2Rvc2VuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDdfJytbZXRhZ2VdKydfJytbU3RlY2tkb3Nlbl0rJ2Fuc2FnZScsIHsnbmFtZSc6ICcwN18nK1tldGFnZV0rJ18nK1tTdGVja2Rvc2VuXSsnYW5zYWdlJywndHlwZSc6ICdib29sZWFuJywgJ3JlYWQnOiB0cnVlLCAnd3JpdGUnOiB0cnVlLCAncm9sZSc6ICdidXR0b24nLCdkZWYnOnRydWUsICJzbWFydE5hbWUiOiB7ImRlIjogJycrW1N0ZWNrZG9zZW5dKycnKydhbnNhZ2UnKycgJytbZXRhZ2VdLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL1N0ZWNrZG9zZW4gemFlaGxlbiBEYXRlbnB1bmt0ZSBhbmxlZ2VuCmlmIChTdGVja2Rvc2VuX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWyAgICAgICAgCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tTdGVja2Rvc2VuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDFfQW56YWhsXycrW1N0ZWNrZG9zZW5dKydfZ2VzYW10JywgeyduYW1lJzonMDFfQW56YWhsXycrW1N0ZWNrZG9zZW5dKydfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbU3RlY2tkb3Nlbl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tTdGVja2Rvc2VuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDJfQW56YWhsXycrW1N0ZWNrZG9zZW5dKydfYWt0aXYnLCB7J25hbWUnOicwMl9BbnphaGxfJytbU3RlY2tkb3Nlbl0rJ19ha3RpdicsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW1N0ZWNrZG9zZW5dKycnLCAnZGVmJzowIH1dLCAgICAKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1N0ZWNrZG9zZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wM19ha3RpdmVfJytbU3RlY2tkb3Nlbl0rJ19MaXN0ZScsIHsnbmFtZSc6JzAzX2FrdGl2ZV8nK1tTdGVja2Rvc2VuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1N0ZWNrZG9zZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wNF9nZXNhbXRlXycrW1N0ZWNrZG9zZW5dKydfTGlzdGUnLCB7J25hbWUnOicwNF9nZXNhbXRlXycrW1N0ZWNrZG9zZW5dKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbU3RlY2tkb3Nlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA1X2h0bWxfJytbU3RlY2tkb3Nlbl0rJ19MaXN0ZScsIHsnbmFtZSc6JzA1X2h0bWxfJytbU3RlY2tkb3Nlbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tTdGVja2Rvc2VuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDZfYWt0aXZlXycrW1N0ZWNrZG9zZW5dKydfTGlzdGVfbWl0X0Vtb2ppcycsIHsnbmFtZSc6JzA2X2FrdGl2ZV8nK1tTdGVja2Rvc2VuXSsnX0xpc3RlX21pdF9FbW9qaXMnLCAndHlwZSc6J21peGVkJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbWl4ZWQnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwgICAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwogICAgCi8vVGVsZWdyYW0gU3RlY2tkb3NlbiAgTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4KaWYgKFN0ZWNrZG9zZW5fdmVyd2VuZGVuID09IHRydWUgJiYgVGVsZWdyYW1fdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbU3RlY2tkb3Nlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLlRlbGVncmFtXycrW1N0ZWNrZG9zZW5dKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tTdGVja2Rvc2VuXSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1N0ZWNrZG9zZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy5UZWxlZ3JhbV8nK1tTdGVja2Rvc2VuXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J1RlbGVncmFtXycrW1N0ZWNrZG9zZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiVGVsZWdyYW0gIitbU3RlY2tkb3Nlbl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL0UtTWFpbCBTdGVja2Rvc2VuIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuCmlmIChTdGVja2Rvc2VuX3ZlcndlbmRlbiA9PSB0cnVlICYmIEVtYWlsX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWyAgIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbU3RlY2tkb3Nlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLkVNQUlMXycrW1N0ZWNrZG9zZW5dKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidFTUFJTF8nK1tTdGVja2Rvc2VuXSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1N0ZWNrZG9zZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy5FTUFJTF8nK1tTdGVja2Rvc2VuXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J0VNQUlMXycrW1N0ZWNrZG9zZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiRU1BSUwgIitbU3RlY2tkb3Nlbl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sCiAgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy9MaWNodGVyCi8vQW5zYWdlIEJ1dHRvbiBMaWNodGVyYW5zYWdlIGFubGVnZW4KaWYgKEFsZXhhX0Fuc2FnZV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBMaWNodGVyX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbTGljaHRdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wN18nK1tldGFnZV0rJ18nK1tMaWNodF0rJ2Fuc2FnZScsIHsnbmFtZSc6ICcwN18nK1tldGFnZV0rJ18nK1tMaWNodF0rJ2Fuc2FnZScsJ3R5cGUnOiAnYm9vbGVhbicsICdyZWFkJzogdHJ1ZSwgJ3dyaXRlJzogdHJ1ZSwgJ3JvbGUnOiAnYnV0dG9uJywnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICcnK1tMaWNodF0rJycrJ2Fuc2FnZScrJyAnK1tldGFnZV0sInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vTGljaHRlciB6YWVobGVuIERhdGVucHVua3RlIGFubGVnZW4KaWYgKExpY2h0ZXJfdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tMaWNodF0rJ196YWVobGVuLicrW2V0YWdlXSsnLjAxX0FuemFobF8nK1tMaWNodF0rJ19nZXNhbXQnLCB7J25hbWUnOicwMV9BbnphaGxfJytbTGljaHRdKydfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbTGljaHRdKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbTGljaHRdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wMl9BbnphaGxfJytbTGljaHRdKydfYWt0aXYnLCB7J25hbWUnOicwMl9BbnphaGxfJytbTGljaHRdKydfYWt0aXYnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tMaWNodF0rJycsICdkZWYnOjAgfV0sICAgIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbTGljaHRdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wM19ha3RpdmVfJytbTGljaHRdKydfTGlzdGUnLCB7J25hbWUnOicwM19ha3RpdmVfJytbTGljaHRdKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbTGljaHRdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wNF9nZXNhbXRlXycrW0xpY2h0XSsnX0xpc3RlJywgeyduYW1lJzonMDRfZ2VzYW10ZV8nK1tMaWNodF0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tMaWNodF0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA1X2h0bWxfJytbTGljaHRdKydfTGlzdGUnLCB7J25hbWUnOicwNV9odG1sXycrW0xpY2h0XSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0xpY2h0XSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDZfYWt0aXZlXycrW0xpY2h0XSsnX0xpc3RlX21pdF9FbW9qaXMnLCB7J25hbWUnOicwNl9ha3RpdmVfJytbTGljaHRdKydfTGlzdGVfbWl0X0Vtb2ppcycsICd0eXBlJzonbWl4ZWQnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidtaXhlZCcsICdkZWYnOidub2NoIGxlZXInIH1dLCAgIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL1RlbGVncmFtIExpY2h0ZXIgIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuCmlmIChMaWNodGVyX3ZlcndlbmRlbiA9PSB0cnVlICYmIFRlbGVncmFtX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbTGljaHRdKydfemFlaGxlbi4nK1tldGFnZV0rJy5UZWxlZ3JhbV8nK1tMaWNodF0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsIHsnbmFtZSc6J1RlbGVncmFtXycrW0xpY2h0XSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0xpY2h0XSsnX3phZWhsZW4uJytbZXRhZ2VdKycuVGVsZWdyYW1fJytbTGljaHRdKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgeyduYW1lJzonVGVsZWdyYW1fJytbTGljaHRdKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiVGVsZWdyYW0gIitbTGljaHRdKycnKydzdGF0dXMnKycgJytbZXRhZ2VdKycgc2VuZGVuJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9FLU1haWwgTGljaHRlciBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbgppZiAoTGljaHRlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBFbWFpbF92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0xpY2h0XSsnX3phZWhsZW4uJytbZXRhZ2VdKycuRU1BSUxfJytbTGljaHRdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidFTUFJTF8nK1tMaWNodF0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tMaWNodF0rJ196YWVobGVuLicrW2V0YWdlXSsnLkVNQUlMXycrW0xpY2h0XSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J0VNQUlMXycrW0xpY2h0XSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNQUlMICIrW0xpY2h0XSsnJysnc3RhdHVzJysnICcrW2V0YWdlXSsnIHNlbmRlbicsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy9CZXdlZ3VuZ3NtZWxkZXIKLy9BbnNhZ2UgQnV0dG9uIEJld2VndW5nc21lbGRlcmFuc2FnZSBhbmxlZ2VuCmlmIChBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuID09IHRydWUgJiYgQmV3ZWd1bmdzbWVsZGVyX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmV3ZWd1bmdzbWVsZGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDdfJytbZXRhZ2VdKydfJytbQmV3ZWd1bmdzbWVsZGVyXSsnYW5zYWdlJywgeyduYW1lJzogJzA3XycrW2V0YWdlXSsnXycrW0Jld2VndW5nc21lbGRlcl0rJ2Fuc2FnZScsJ3R5cGUnOiAnYm9vbGVhbicsICdyZWFkJzogdHJ1ZSwgJ3dyaXRlJzogdHJ1ZSwgJ3JvbGUnOiAnYnV0dG9uJywnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICcnK1tCZXdlZ3VuZ3NtZWxkZXJdKycnKydhbnNhZ2UnKycgJytbZXRhZ2VdLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL0Jld2VndW5nc21lbGRlciB6YWVobGVuIERhdGVucHVua3RlIGFubGVnZW4KaWYgKEJld2VndW5nc21lbGRlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0Jld2VndW5nc21lbGRlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjAxX0FuemFobF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfZ2VzYW10JywgeyduYW1lJzonMDFfQW56YWhsXycrW0Jld2VndW5nc21lbGRlcl0rJ19nZXNhbXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tCZXdlZ3VuZ3NtZWxkZXJdKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmV3ZWd1bmdzbWVsZGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDJfQW56YWhsXycrW0Jld2VndW5nc21lbGRlcl0rJ19ha3RpdicsIHsnbmFtZSc6JzAyX0FuemFobF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfYWt0aXYnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tCZXdlZ3VuZ3NtZWxkZXJdKycnLCAnZGVmJzowIH1dLCAgICAKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0Jld2VndW5nc21lbGRlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjAzX2FrdGl2ZV8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfTGlzdGUnLCB7J25hbWUnOicwM19ha3RpdmVfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0Jld2VndW5nc21lbGRlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA0X2dlc2FtdGVfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX0xpc3RlJywgeyduYW1lJzonMDRfZ2VzYW10ZV8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmV3ZWd1bmdzbWVsZGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDVfaHRtbF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfTGlzdGUnLCB7J25hbWUnOicwNV9odG1sXycrW0Jld2VndW5nc21lbGRlcl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wNl9ha3RpdmVfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX0xpc3RlX21pdF9FbW9qaXMnLCB7J25hbWUnOicwNl9ha3RpdmVfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX0xpc3RlX21pdF9FbW9qaXMnLCAndHlwZSc6J21peGVkJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbWl4ZWQnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwgICAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9UZWxlZ3JhbSBCZXdlZ3VuZ3NtZWxkZXIgIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuCmlmIChCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuID09IHRydWUgJiYgVGVsZWdyYW1fdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy5UZWxlZ3JhbV8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmV3ZWd1bmdzbWVsZGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuVGVsZWdyYW1fJytbQmV3ZWd1bmdzbWVsZGVyXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J1RlbGVncmFtXycrW0Jld2VndW5nc21lbGRlcl0rJ3N0YXR1c18nK1tldGFnZV0rJ19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJUZWxlZ3JhbSAiK1tCZXdlZ3VuZ3NtZWxkZXJdKycnKydzdGF0dXMnKycgJytbZXRhZ2VdKycgc2VuZGVuJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9FLU1haWwgQmV3ZWd1bmdzbWVsZGVyIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuCmlmIChCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuID09IHRydWUgJiYgRW1haWxfdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy5FTUFJTF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidFTUFJTF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmV3ZWd1bmdzbWVsZGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuRU1BSUxfJytbQmV3ZWd1bmdzbWVsZGVyXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J0VNQUlMXycrW0Jld2VndW5nc21lbGRlcl0rJ3N0YXR1c18nK1tldGFnZV0rJ19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJFTUFJTCAiK1tCZXdlZ3VuZ3NtZWxkZXJdKycnKydzdGF0dXMnKycgJytbZXRhZ2VdKycgc2VuZGVuJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovL0JhdHRlcmllbgovL0Fuc2FnZSBCdXR0b24gQmV3ZWd1bmdzbWVsZGVyYW5zYWdlIGFubGVnZW4KaWYgKEFsZXhhX0Fuc2FnZV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBCYXR0ZXJpZW5fdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCYXR0ZXJpZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wN18nK1tldGFnZV0rJ18nK1tCYXR0ZXJpZW5dKydhbnNhZ2UnLCB7J25hbWUnOiAnMDdfJytbZXRhZ2VdKydfJytbQmF0dGVyaWVuXSsnYW5zYWdlJywndHlwZSc6ICdib29sZWFuJywgJ3JlYWQnOiB0cnVlLCAnd3JpdGUnOiB0cnVlLCAncm9sZSc6ICdidXR0b24nLCdkZWYnOnRydWUsICJzbWFydE5hbWUiOiB7ImRlIjogJycrW0JhdHRlcmllbl0rJycrJ2Fuc2FnZScrJyAnK1tldGFnZV0sInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vQmF0dGVyaWVuIHphZWhsZW4gRGF0ZW5wdW5rdGUgYW5sZWdlbgppZiAoQmF0dGVyaWVuX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmF0dGVyaWVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDFfQW56YWhsXycrW0JhdHRlcmllbl0rJ19nZXNhbXQnLCB7J25hbWUnOicwMV9BbnphaGxfJytbQmF0dGVyaWVuXSsnX2dlc2FtdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW0JhdHRlcmllbl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCYXR0ZXJpZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wMl9BbnphaGxfJytbQmF0dGVyaWVuXSsnX2FrdGl2JywgeyduYW1lJzonMDJfQW56YWhsXycrW0JhdHRlcmllbl0rJ19ha3RpdicsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW0JhdHRlcmllbl0rJycsICdkZWYnOjAgfV0sICAgIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmF0dGVyaWVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDNfYWt0aXZlXycrW0JhdHRlcmllbl0rJ19MaXN0ZScsIHsnbmFtZSc6JzAzX2FrdGl2ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmF0dGVyaWVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDRfZ2VzYW10ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGUnLCB7J25hbWUnOicwNF9nZXNhbXRlXycrW0JhdHRlcmllbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCYXR0ZXJpZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wNV9odG1sXycrW0JhdHRlcmllbl0rJ19MaXN0ZScsIHsnbmFtZSc6JzA1X2h0bWxfJytbQmF0dGVyaWVuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0JhdHRlcmllbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA2X2FrdGl2ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGVfbWl0X0Vtb2ppcycsIHsnbmFtZSc6JzA2X2FrdGl2ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGVfbWl0X0Vtb2ppcycsICd0eXBlJzonbWl4ZWQnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidtaXhlZCcsICdkZWYnOidub2NoIGxlZXInIH1dLCAgIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL1RlbGVncmFtIEJhdHRlcmllbiAgTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4KaWYgKEJhdHRlcmllbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBUZWxlZ3JhbV92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0JhdHRlcmllbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLlRlbGVncmFtXycrW0JhdHRlcmllbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsIHsnbmFtZSc6J1RlbGVncmFtXycrW0JhdHRlcmllbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCYXR0ZXJpZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy5UZWxlZ3JhbV8nK1tCYXR0ZXJpZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgeyduYW1lJzonVGVsZWdyYW1fJytbQmF0dGVyaWVuXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIlRlbGVncmFtICIrW0JhdHRlcmllbl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL0UtTWFpbCBCYXR0ZXJpZW4gTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4KaWYgKEJhdHRlcmllbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBFbWFpbF92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0JhdHRlcmllbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLkVNQUlMXycrW0JhdHRlcmllbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsIHsnbmFtZSc6J0VNQUlMXycrW0JhdHRlcmllbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCYXR0ZXJpZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy5FTUFJTF8nK1tCYXR0ZXJpZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgeyduYW1lJzonRU1BSUxfJytbQmF0dGVyaWVuXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNQUlMICIrW0JhdHRlcmllbl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sICAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovL0FiIGhpZXIgRGF0ZW5wdW5rdGUgbMO2c2NoZW4KLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmlmICghQWxleGFfQW5zYWdlX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsKY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi5BbGV4YV9TdGltbWVuLionKTsgIAppZHNqcy5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7Cn0pfTsKCmlmICghQWxleGFfQW5zYWdlX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsKY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi5BbGV4YV9TdGltbWVuLionKTsgIAppZHN1ZC5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQpOwp9KX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmlmICghQWxleGFfQW5zYWdlX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsKY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi4qLiouKmFuc2FnZScpOyAgCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsKfSl9OwoKaWYgKCFBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICcwX3VzZXJkYXRhJykgewpjb25zdCBpZHN1ZCA9ICQoJzBfdXNlcmRhdGEuMC4qLiouKi4qYW5zYWdlJyk7ICAKaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgewogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkKTsKfSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppZiAoIVRlbGVncmFtX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsKY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi4qLlRlbGVncmFtXyonKTsgCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsKfSl9OwoKaWYgKCFUZWxlZ3JhbV92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJzBfdXNlcmRhdGEnKSB7CmNvbnN0IGlkc3VkID0gJCgnMF91c2VyZGF0YS4wLiouKi5UZWxlZ3JhbV8qJyk7IAppZHN1ZC5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQpOwp9KX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmlmICghRW1haWxfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgewpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi4qLiouRU1BSUxfKicpOyAKaWRzanMuZWFjaChmdW5jdGlvbihpZCwgaSkgewogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkLnN1YnN0cmluZygxMykpOwp9KX07CgppZiAoIUVtYWlsX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsKY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi4qLkVNQUlMXyonKTsgCmlkc3VkLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7Cn0pfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaWYgKCFGZW5zdGVyX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsKY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi5GZW5zdGVyX3phZWhsZW4uKicpOyAKaWRzanMuZWFjaChmdW5jdGlvbihpZCwgaSkgewogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkLnN1YnN0cmluZygxMykpOwp9KX07CgppZiAoIUZlbnN0ZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICcwX3VzZXJkYXRhJykgewpjb25zdCBpZHN1ZCA9ICQoJzBfdXNlcmRhdGEuMC4qLkZlbnN0ZXJfemFlaGxlbi4qJyk7IAppZHN1ZC5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQpOwp9KX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmlmICghVHVlcmVuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsKY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi5Uw7xyZW5femFlaGxlbi4qJyk7IAppZHNqcy5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7Cn0pfTsKCmlmICghVHVlcmVuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsKY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi5Uw7xyZW5femFlaGxlbi4qJyk7IAppZHN1ZC5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQpOwp9KX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmlmICghU3RlY2tkb3Nlbl92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJ2phdmFzY3JpcHQnKSB7CmNvbnN0IGlkc2pzID0gJCgnamF2YXNjcmlwdC4qLiouU3RlY2tkb3Nlbl96YWVobGVuLionKTsgCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsKfSl9OwoKaWYgKCFTdGVja2Rvc2VuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsKY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi5TdGVja2Rvc2VuX3phZWhsZW4uKicpOyAKaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgewogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkKTsKfSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppZiAoIUxpY2h0ZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgewpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi4qLkxpY2h0ZXJfemFlaGxlbi4qJyk7IAppZHNqcy5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7Cn0pfTsKCmlmICghTGljaHRlcl92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJzBfdXNlcmRhdGEnKSB7CmNvbnN0IGlkc3VkID0gJCgnMF91c2VyZGF0YS4wLiouTGljaHRlcl96YWVobGVuLionKTsgCmlkc3VkLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7Cn0pfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaWYgKCFCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgewpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi4qLkJld2VndW5nc21lbGRlcl96YWVobGVuLionKTsgCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsKfSl9OwoKaWYgKCFCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICcwX3VzZXJkYXRhJykgewpjb25zdCBpZHN1ZCA9ICQoJzBfdXNlcmRhdGEuMC4qLkJld2VndW5nc21lbGRlcl96YWVobGVuLionKTsgCmlkc3VkLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7Cn0pfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaWYgKCFCYXR0ZXJpZW5fdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgewpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi5HZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uQmF0dGVyaWVuKicpOwppZHNqcy5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7Cn0pfTsKCmlmICghQmF0dGVyaWVuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsKY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLkJhdHRlcmllbionKTsKaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgewogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkKTsKfSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovL0Z1bmt0aW9uIG1haW4gbWl0IFZlcnTDtmdlcnVuZyBhdWZydWZlbgp0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgbWFpbigpOwp9LCA1MDAwKTsKLy9tYWluKCk7Cgo= Beschreibe diese Funktion … Steckdosen_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default 07_Ansage_Button_Steckdosen_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE Steckdosen_Ansage 0 log Logmeldung_Steckdosen_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Telegram_BWM c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9CZXdlZ3VuZ3NtZWxkZXIsCiAgICB1c2VyOiBUZWxlZ3JhbV9FbXBmYWVuZ2VyLAogICAgcGFyc2VfbW9kZTogIk1hcmtkb3duIiwKfSk7 Beschreibe diese Funktion … EMail_Tueren c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfVHVlcmVuLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs= Beschreibe diese Funktion … Batterien_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default 07_Ansage_Button_Batterien_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE Batterien_Ansage 0 log Logmeldung_Batterie_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… Lichter_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default 07_Ansage_Button_Lichter_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE Lichter_Ansage 0 log Logmeldung_Lichter_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Telegram_Fenster c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9GZW5zdGVyLAogICAgdXNlcjogVGVsZWdyYW1fRW1wZmFlbmdlciwKICAgIHBhcnNlX21vZGU6ICJNYXJrZG93biIsCn0pOw== Beschreibe diese Funktion … echo_name aWYoZXhpc3RzT2JqZWN0KGlkKSkgcmV0dXJuIGdldE9iamVjdChpZCkuY29tbW9uLm5hbWU7 Beschreibe diese Funktion … Steckdosen_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default 07_Ansage_Button_Steckdosen_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE Steckdosen_Ansage 0 log Logmeldung_Batterie_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… Bewegungsmelder_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default 07_Ansage_Button_Bewegungsmelder_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE Bewegungsmelder_Ansage 0 log Logmeldung_Bewegungsmelder_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Telegram_Tueren c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9UdWVyZW4sCiAgICB1c2VyOiBUZWxlZ3JhbV9FbXBmYWVuZ2VyLAogICAgcGFyc2VfbW9kZTogIk1hcmtkb3duIiwKfSk7 Beschreibe diese Funktion … Batterien_vor_versand_pruefen Beschreibe diese Funktion … uebnerschrift_nachrichten_Batterien * etage Batterien status * \n EQ anzahl_Batterien_aktiv 1 nachrichten_ausgabe_Batterien uebnerschrift_nachrichten_Batterien Es ist eine einzahl_Batterie leer emoji_❗️ \n \n TEXT 1 liste_Batterien_aktiv \n GT anzahl_Batterien_aktiv 1 nachrichten_ausgabe_Batterien uebnerschrift_nachrichten_Batterien Es sind anzahl_Batterien_aktiv Batterien leer emoji_❗️ \n \n TEXT 1 liste_Batterien_aktiv \n EQ anzahl_Batterien_aktiv 0 nachrichten_ausgabe_Batterien uebnerschrift_nachrichten_Batterien emoji_βœ… Aktuell gibt es keine leeren Batterien emoji_βœ… true FALSE Object ID 06_liste_Batterien_aktiv_emojis_eDP TRUE nachrichten_ausgabe_Batterien 0 Lichter_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default 07_Ansage_Button_Lichter_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE Lichter_Ansage 0 log Logmeldung_Lichter_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… Fenster_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default 09_Fenster_Ansage_Button_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE Fenster_Ansage 0 log Logmeldung_Fenster_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… stateText Ly9pZihnZXRPYmplY3QoaWQpLmNvbW1vbi5zdGF0ZXMpIHJldHVybiBnZXRPYmplY3QoaWQpLmNvbW1vbi5zdGF0ZXNbdmFsXTsKLy9yZXR1cm4gaWQgKyAnIGhhdCBrZWluZW4gWnVzdGFuZHN0ZXh0JzsKaWYoZ2V0T2JqZWN0KGlkKS5jb21tb24uc3RhdGVzKSByZXR1cm4gKGdldE9iamVjdChpZCkuY29tbW9uLnN0YXRlc1t2YWxdKTsKZWxzZSAKcmV0dXJuIGdldFN0YXRlKGlkKS52YWw7 Beschreibe diese Funktion … Steckdosen_vor_versand_pruefen Beschreibe diese Funktion … uebnerschrift_nachrichten_Steckdosen * etage Steckdosen status * \n EQ anzahl_Steckdosen_aktiv 1 nachrichten_ausgabe_Steckdosen uebnerschrift_nachrichten_Steckdosen Es ist eine einzahl_Steckdose an emoji_⚑️ \n \n TEXT 1 liste_Steckdosen_aktiv \n GT anzahl_Steckdosen_aktiv 1 nachrichten_ausgabe_Steckdosen uebnerschrift_nachrichten_Steckdosen Es sind anzahl_Steckdosen_aktiv Steckdosen an emoji_⚑️ \n \n TEXT 1 liste_Steckdosen_aktiv \n EQ anzahl_Steckdosen_aktiv 0 nachrichten_ausgabe_Steckdosen uebnerschrift_nachrichten_Steckdosen emoji_βœ… Alle Steckdosen sind ausgeschaltet emoji_βœ… true FALSE Object ID 06_liste_Steckdosen_aktiv__emojis_eDP TRUE nachrichten_ausgabe_Steckdosen 0 Bewegungsmelder_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default 07_Ansage_Button_Bewegungsmelder_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE Bewegungsmelder_Ansage 0 log Logmeldung_Bewegungsmelder_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… Tueren_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.ssml speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default 09_Tueren_Ansage_Button_eDP log Logmeldung_Tueren_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE Tueren_Ansage 0 log Logmeldung_Tueren_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Batterien_ansage_wiedergabe Beschreibe diese Funktion … Batterien_Datenpruefung EQ val 02_anzahl_Batterien_aktiv_eDP 0 Ansage_Einleitungssatz_Batterien , alle mehrzahl_Batterien sind voll. NEQ val 02_anzahl_Batterien_aktiv_eDP 0 Ansage_Einleitungssatz_Batterien val 03_liste_Batterien_aktiv_eDP , alle anderen mehrzahl_Batterien sind voll. Batterien_Ansage val objekt_id_01alexa_eDP val objekt_id_05alexa_ssml_eDP Batterien_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_02hans_eDP val objekt_id_06hans_ssml_eDP Batterien_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_03vicki_eDP val objekt_id_07vicki_ssml_eDP Batterien_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_04conchita_eDP val objekt_id_08conchita_ssml_eDP Batterien_Datenpruefung val objekt_id_09ende_ssml_eDP Lichter_vor_versand_pruefen Beschreibe diese Funktion … uebnerschrift_nachrichten_Lichter * etage Licht status * \n EQ anzahl_Lichter_aktiv 1 nachrichten_ausgabe_Lichter uebnerschrift_nachrichten_Lichter Es ist ein einzahl_Licht an emoji_πŸ’‘ \n \n TEXT 1 liste_Lichter_aktiv \n GT anzahl_Lichter_aktiv 1 nachrichten_ausgabe_Lichter uebnerschrift_nachrichten_Lichter Es sind anzahl_Lichter_aktiv Licht an emoji_πŸ’‘ \n \n TEXT 1 liste_Lichter_aktiv \n EQ anzahl_Lichter_aktiv 0 nachrichten_ausgabe_Lichter uebnerschrift_nachrichten_Lichter emoji_βœ… Alle Licht sind ausgeschaltet emoji_βœ… true FALSE Object ID 06_liste_Lichter_aktiv_emojis_eDP TRUE nachrichten_ausgabe_Lichter 0 Fenster_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default 09_Fenster_Ansage_Button_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE Fenster_Ansage 0 log Logmeldung_Fenster_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… main Beschreibe diese Funktion … falls Alexa verwendet wird Alexa_Ansage_verwenden objekt_id_01alexa_eDP anlegen_in .Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.01Alexa objekt_id_02hans_eDP anlegen_in .Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.02Hans objekt_id_03vicki_eDP anlegen_in .Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.03Vicki objekt_id_04conchita_eDP anlegen_in .Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.04Conchita objekt_id_05alexa_ssml_eDP anlegen_in .Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.05Alexa_ssml objekt_id_06hans_ssml_eDP anlegen_in .Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.06Hans_ssml objekt_id_07vicki_ssml_eDP anlegen_in .Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.07Vicki_ssml objekt_id_08conchita_ssml_eDP anlegen_in .Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.08Conchita_ssml objekt_id_09ende_ssml_eDP anlegen_in .Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.09ssml_ende true default objekt_id_01alexa_eDP true FALSE Object ID objekt_id_02hans_eDP FALSE 0 true FALSE Object ID objekt_id_03vicki_eDP FALSE 0 true FALSE Object ID objekt_id_04conchita_eDP FALSE 0 true default objekt_id_02hans_eDP true FALSE Object ID objekt_id_01alexa_eDP FALSE 0 true FALSE Object ID objekt_id_03vicki_eDP FALSE 0 true FALSE Object ID objekt_id_04conchita_eDP FALSE 0 true default objekt_id_03vicki_eDP true FALSE Object ID objekt_id_01alexa_eDP FALSE 0 true FALSE Object ID objekt_id_02hans_eDP FALSE 0 true FALSE Object ID objekt_id_04conchita_eDP FALSE 0 true default objekt_id_04conchita_eDP true FALSE Object ID objekt_id_01alexa_eDP FALSE 0 true FALSE Object ID objekt_id_02hans_eDP FALSE 0 true FALSE Object ID objekt_id_03vicki_eDP FALSE 0 ne default objekt_id_01alexa_eDP default objekt_id_02hans_eDP default objekt_id_03vicki_eDP default objekt_id_04conchita_eDP AND AND val objekt_id_01alexa_eDP val objekt_id_02hans_eDP AND val objekt_id_03vicki_eDP val objekt_id_04conchita_eDP true FALSE Object ID objekt_id_01alexa_eDP TRUE 0 Batterien Batterien_verwenden 01_anzahl_Batterien_gesamt_eDP anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .01_Anzahl_ Batterien _gesamt 02_anzahl_Batterien_aktiv_eDP anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .02_Anzahl_ Batterien _aktiv 03_liste_Batterien_aktiv_eDP anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .03_aktive_ Batterien _Liste 04_liste_Batterien_gesamt_eDP anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .04_gesamte_ Batterien _Liste 05_liste_Batterien_html_eDP anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .05_html_ Batterien _Liste 06_liste_Batterien_aktiv_emojis_eDP anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .06_aktive_ Batterien _Liste_mit_Emojis ne default selektor_Batterien blockly_start_batterien_zaehlen_einlesen 2 sec formatierte_ausgabe_batterien_zum_start 4 sec AND Batterien_verwenden Alexa_Ansage_verwenden Logmeldung_Batterie_Ansage βœ… Die etage Batterien ansage wurde vom ECHO Ansage_Einleitungssatz_Batterien Hier der etage Batterien status fΓΌr Dich. 07_Ansage_Button_Batterien_eDP anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .07_ etage _ Batterien ansage Steckdosen Steckdosen_verwenden 01_anzahl_Steckdosen_gesamt_eDP anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .01_Anzahl_ Steckdosen _gesamt 02_anzahl_Steckdosen_aktiv_eDP anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .02_Anzahl_ Steckdosen _aktiv 03_liste_Steckdosen_aktiv_eDP anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .03_aktive_ Steckdosen _Liste 04_liste_Steckdosen_gesamt_eDP anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .04_gesamte_ Steckdosen _Liste 05_liste_Steckdosen_html_eDP anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .05_html_ Steckdosen _Liste 06_liste_Steckdosen_aktiv__emojis_eDP anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .06_aktive_ Steckdosen _Liste_mit_Emojis ne default selektor_Steckdosen blockly_start_steckdosen_zaehlen_einlesen 2 sec formatierte_ausgabe_steckdosen_zum_start 4 sec AND Steckdosen_verwenden Alexa_Ansage_verwenden Logmeldung_Steckdosen_Ansage βœ… Die etage Steckdosen ansage wurde vom ECHO Ansage_Einleitungssatz_Steckdosen Hier der etage Steckdosen status fΓΌr Dich. 07_Ansage_Button_Steckdosen_eDP anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .07_ etage _ Steckdosen ansage Licht Lichter_verwenden 01_anzahl_Lichter_gesamt_eDP anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .01_Anzahl_ Licht _gesamt 02_anzahl_Lichter_aktiv_eDP anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .02_Anzahl_ Licht _aktiv 03_liste_Lichter_aktiv_eDP anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .03_aktive_ Licht _Liste 04_liste_Lichter_gesamt_eDP anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .04_gesamte_ Licht _Liste 05_liste_Lichter_html_eDP anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .05_html_ Licht _Liste 06_liste_Lichter_aktiv_emojis_eDP anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .06_aktive_ Licht _Liste_mit_Emojis ne default selektor_Lichter blockly_start_lichter_zaehlen_einlesen 2 sec formatierte_ausgabe_lichter_zum_start 4 sec AND Lichter_verwenden Alexa_Ansage_verwenden Logmeldung_Lichter_Ansage βœ… Die etage Licht ansage wurde vom ECHO Ansage_Einleitungssatz_Lichter Hier der etage Licht status fΓΌr Dich. 07_Ansage_Button_Lichter_eDP anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .07_ etage _ Licht ansage Bewegungsmelder Bewegungsmelder_verwenden 01_anzahl_Bewegungsmelder_gesamt_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .01_Anzahl_ Bewegungsmelder _gesamt 02_anzahl_Bewegungsmelder_aktiv_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .02_Anzahl_ Bewegungsmelder _aktiv 03_liste_Bewegungsmelder_aktiv_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .03_aktive_ Bewegungsmelder _Liste 04_liste_Bewegungsmelder_gesamt_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .04_gesamte_ Bewegungsmelder _Liste 05_liste_Bewegungsmelder_html_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .05_html_ Bewegungsmelder _Liste 06_liste_Bewegungsmelder_aktiv_emojis_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .06_aktive_ Bewegungsmelder _Liste_mit_Emojis ne default selektor_Bewegungsmelder blockly_start_bwm_zaehlen_einlesen 2 sec formatierte_ausgabe_bwm_zum_start 4 sec AND Bewegungsmelder_verwenden Alexa_Ansage_verwenden Logmeldung_Bewegungsmelder_Ansage βœ… Die etage Bewegungsmelder ansage wurde vom ECHO Ansage_Einleitungssatz_Bewegungsmelder Hier der etage Bewegungsmelder status fΓΌr Dich. 07_Ansage_Button_Bewegungsmelder_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .07_ etage _ Bewegungsmelder ansage Fenster Fenster_verwenden 01_anzahl_Fenster_gekippt_eDP anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .01_Anzahl_ Fenster _gekippt 02_anzahl_Fenster_offen_eDP anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .02_Anzahl_ Fenster _offen 03_anzahl_Fenster_geschlossen_eDP anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .03_Anzahl_ Fenster _geschlossen 04_anzahl_Fenster_gesamt_eDP anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .04_Anzahl_ Fenster _gesamt 04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .04_1_Anzahl_ Fenster _geoeffnet_und_gekippt_gesamt 05_offene_gekippte_Fenster_Liste anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .05_offene_gekippte_ Fenster _Liste 06_gesamte_Fenster_Liste anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .06_gesamte_ Fenster _Liste 07_html_Fenster_Liste anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .07_html_ Fenster _Liste 08_offene_gekippte_Fenster_Liste_mit_Emojis anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .08_offene_gekippte_ Fenster _Liste_mit_Emojis ne default selektor_Fenster blockly_start_fenster_zaehlen_einlesen 2 sec formatierte_ausgabe_fenster_zum_start 4 sec AND Fenster_verwenden Alexa_Ansage_verwenden Logmeldung_Fenster_Ansage βœ… Die etage Fenster ansage wurde vom ECHO Ansage_Einleitungssatz_Fenster Hier der etage Fenster status fΓΌr Dich. 09_Fenster_Ansage_Button_eDP anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .09_ etage _ Fenster ansage Tueren Tueren_verwenden 01_anzahl_Tueren_gekippt_eDP anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .01_Anzahl_ Tueren _gekippt 02_anzahl_Tueren_offen_eDP anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .02_Anzahl_ Tueren _offen 03_anzahl_Tueren_geschlossen_eDP anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .03_Anzahl_ Tueren _geschlossen 04_anzahl_Tueren_gesamt_eDP anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .04_Anzahl_ Tueren _gesamt 04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .04_1_Anzahl_ Tueren _geoeffnet_und_gekippt_gesamt 05_offene_gekippte_Tueren_Liste anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .05_offene_gekippte_ Tueren _Liste 06_gesamte_Tueren_Liste anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .06_gesamte_ Tueren _Liste 07_html_Tueren_Liste anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .07_html_ Tueren _Liste 08_offene_gekippte_Tueren_Liste_mit_Emojis anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .08_offene_gekippte_ Tueren _Liste_mit_Emojis ne default selektor_Tueren blockly_start_tueren_zaehlen_einlesen 2 sec formatierte_ausgabe_tueren_zum_start 4 sec AND Tueren_verwenden Alexa_Ansage_verwenden Logmeldung_Tueren_Ansage βœ… Die etage Tueren ansage wurde vom ECHO Ansage_Einleitungssatz_Tueren Hier der etage Tueren status fΓΌr Dich. 09_Tueren_Ansage_Button_eDP anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .09_ etage _ Tueren ansage Telegram AND Batterien_verwenden Telegram_verwenden telegram_versand_an_aus_Batterien anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .Telegram_ Batterien _ etage _Versand_an_aus telegram_direkt_versenden_Batterien anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .Telegram_ Batterien status_ etage _senden ne default 02_anzahl_Batterien_aktiv_eDP val telegram_versand_an_aus_Batterien telegram telegram 1 sec nachrichten_ausgabe_Batterien Telegram_Empfaenger any default telegram_direkt_versenden_Batterien nachrichten_ausgabe_Batterien Telegram_Empfaenger AND Steckdosen_verwenden Telegram_verwenden telegram_versand_an_aus_Steckdosen anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .Telegram_ Steckdosen _ etage _Versand_an_aus telegram_direkt_versenden_Steckdosen anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .Telegram_ Steckdosen status_ etage _senden ne default 02_anzahl_Steckdosen_aktiv_eDP val telegram_versand_an_aus_Steckdosen telegram2 telegram2 1 sec nachrichten_ausgabe_Steckdosen Telegram_Empfaenger any default telegram_direkt_versenden_Steckdosen nachrichten_ausgabe_Steckdosen Telegram_Empfaenger AND Lichter_verwenden Telegram_verwenden telegram_versand_an_aus_Lichter anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .Telegram_ Licht _ etage _Versand_an_aus telegram_direkt_versenden_Lichter anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .Telegram_ Licht status_ etage _senden ne default 02_anzahl_Lichter_aktiv_eDP val telegram_versand_an_aus_Lichter telegram3 telegram3 1 sec nachrichten_ausgabe_Lichter Telegram_Empfaenger any default telegram_direkt_versenden_Lichter nachrichten_ausgabe_Lichter Telegram_Empfaenger AND Bewegungsmelder_verwenden Telegram_verwenden telegram_versand_an_aus_Bewegungsmelder anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .Telegram_ Bewegungsmelder _ etage _Versand_an_aus telegram_direkt_versenden_Bewegungsmelder anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .Telegram_ Bewegungsmelder status_ etage _senden ne default 02_anzahl_Bewegungsmelder_aktiv_eDP val telegram_versand_an_aus_Bewegungsmelder telegram4 telegram4 1 sec nachrichten_ausgabe_Bewegungsmelder Telegram_Empfaenger any default telegram_direkt_versenden_Bewegungsmelder nachrichten_ausgabe_Bewegungsmelder Telegram_Empfaenger AND Fenster_verwenden Telegram_verwenden telegram_versand_an_aus_Fenster anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .Telegram_ Fenster _ etage _Versand_an_aus telegram_direkt_versenden_Fenster anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .Telegram_ Fenster status_ etage _senden ne default 04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt val telegram_versand_an_aus_Fenster telegram5 telegram5 1 sec nachrichten_ausgabe_Fenster Telegram_Empfaenger any default telegram_direkt_versenden_Fenster nachrichten_ausgabe_Fenster Telegram_Empfaenger AND Tueren_verwenden Telegram_verwenden telegram_versand_an_aus_Tueren anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .Telegram_ Tueren _ etage _Versand_an_aus telegram_direkt_versenden_Tueren anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .Telegram_ Tueren status_ etage _senden ne default 04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt val telegram_versand_an_aus_Tueren telegram6 telegram6 1 sec nachrichten_ausgabe_Tueren Telegram_Empfaenger any default telegram_direkt_versenden_Tueren nachrichten_ausgabe_Tueren Telegram_Empfaenger EMail AND Batterien_verwenden Email_verwenden email_versand_an_aus_batterien anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .EMAIL_ Batterien _ etage _Versand_an_aus email_direkt_versenden_Batterien anlegen_in pfad_geraete_zaehlen Batterien _zaehlen. etage .EMAIL_ Batterien status_ etage _senden ne default 02_anzahl_Batterien_aktiv_eDP EQ val email_versand_an_aus_batterien TRUE Betreff etage Batterien Status email email 1 sec nachrichten_ausgabe_Batterien EMail_Empfaenger Betreff any default email_direkt_versenden_Batterien Betreff etage Batterien Status nachrichten_ausgabe_Batterien EMail_Empfaenger Betreff AND Steckdosen_verwenden Email_verwenden email_versand_an_aus_Steckdosen anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .EMAIL_ Steckdosen _ etage _Versand_an_aus email_direkt_versenden_Steckdosen anlegen_in pfad_geraete_zaehlen Steckdosen _zaehlen. etage .EMAIL_ Steckdosen status_ etage _senden ne default 02_anzahl_Steckdosen_aktiv_eDP EQ val email_versand_an_aus_Steckdosen TRUE Betreff etage Steckdosen Status email2 email2 1 sec nachrichten_ausgabe_Steckdosen EMail_Empfaenger Betreff any default email_direkt_versenden_Steckdosen Betreff etage Steckdosen Status nachrichten_ausgabe_Steckdosen EMail_Empfaenger Betreff AND Lichter_verwenden Email_verwenden email_versand_an_aus_Lichter anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .EMAIL_ Licht _ etage _Versand_an_aus email_direkt_versenden_Lichter anlegen_in pfad_geraete_zaehlen Licht _zaehlen. etage .EMAIL_ Licht status_ etage _senden ne default 02_anzahl_Lichter_aktiv_eDP EQ val email_versand_an_aus_Lichter TRUE Betreff etage Licht Status email3 email3 1 sec nachrichten_ausgabe_Lichter EMail_Empfaenger Betreff any default email_direkt_versenden_Lichter Betreff etage Licht Status nachrichten_ausgabe_Lichter EMail_Empfaenger Betreff AND Bewegungsmelder_verwenden Email_verwenden email_versand_an_aus_Bewegungsmelder anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .EMAIL_ Bewegungsmelder _ etage _Versand_an_aus email_direkt_versenden_Bewegungsmelder anlegen_in pfad_geraete_zaehlen Bewegungsmelder _zaehlen. etage .EMAIL_ Bewegungsmelder status_ etage _senden ne default 02_anzahl_Bewegungsmelder_aktiv_eDP EQ val email_versand_an_aus_Bewegungsmelder TRUE Betreff etage Bewegungsmelder Status email4 email4 1 sec nachrichten_ausgabe_Bewegungsmelder EMail_Empfaenger Betreff any default email_direkt_versenden_Bewegungsmelder Betreff etage Bewegungsmelder Status nachrichten_ausgabe_Bewegungsmelder EMail_Empfaenger Betreff AND Fenster_verwenden Email_verwenden email_versand_an_aus_Fenster anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .EMAIL_ Fenster _ etage _Versand_an_aus email_direkt_versenden_Fenster anlegen_in pfad_geraete_zaehlen Fenster _zaehlen. etage .EMAIL_ Fenster status_ etage _senden ne default 04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt EQ val email_versand_an_aus_Fenster TRUE Betreff etage Fenster Status email5 email5 1 sec nachrichten_ausgabe_Fenster EMail_Empfaenger Betreff any default email_direkt_versenden_Fenster Betreff etage Fenster Status nachrichten_ausgabe_Fenster EMail_Empfaenger Betreff AND Tueren_verwenden Email_verwenden email_versand_an_aus_Tueren anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .EMAIL_ Tueren _ etage _Versand_an_aus email_direkt_versenden_Tueren anlegen_in pfad_geraete_zaehlen Tueren _zaehlen. etage .EMAIL_ Tueren status_ etage _senden ne default 04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt EQ val email_versand_an_aus_Tueren TRUE Betreff etage Tueren Status email6 email6 1 sec nachrichten_ausgabe_Tueren EMail_Empfaenger Betreff any default email_direkt_versenden_Tueren Betreff etage Tueren Status nachrichten_ausgabe_Tueren EMail_Empfaenger Betreff Steckdosen_ansage_wiedergabe Beschreibe diese Funktion … Steckdosen_Datenpruefung EQ val 02_anzahl_Steckdosen_aktiv_eDP 0 Ansage_Einleitungssatz_Steckdosen , alle Steckdosen sind ausgeschaltet. NEQ val 02_anzahl_Steckdosen_aktiv_eDP 0 Ansage_Einleitungssatz_Steckdosen val 03_liste_Steckdosen_aktiv_eDP , alle anderen Steckdosen sind ausgeschaltet. Steckdosen_Ansage val objekt_id_01alexa_eDP val objekt_id_05alexa_ssml_eDP Steckdosen_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_02hans_eDP val objekt_id_06hans_ssml_eDP Steckdosen_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_03vicki_eDP val objekt_id_07vicki_ssml_eDP Steckdosen_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_04conchita_eDP val objekt_id_08conchita_ssml_eDP Steckdosen_Datenpruefung val objekt_id_09ende_ssml_eDP Bewegungsmelder_vor_versand_pruefen Beschreibe diese Funktion … uebnerschrift_nachrichten_Bewegungsmelder * etage Bewegungsmelder status * \n EQ anzahl_Bewegungsmelder_aktiv 1 nachrichten_ausgabe_Bewegungsmelder uebnerschrift_nachrichten_Bewegungsmelder Es ist ein einzahl_Bewegungsmelder aktiv emoji_πŸ‘€ \n \n TEXT 1 liste_Bewegungsmelder_aktiv \n GT anzahl_Bewegungsmelder_aktiv 1 nachrichten_ausgabe_Bewegungsmelder uebnerschrift_nachrichten_Bewegungsmelder Es sind anzahl_Bewegungsmelder_aktiv Bewegungsmelder an emoji_πŸ‘€ \n \n TEXT 1 liste_Bewegungsmelder_aktiv \n EQ anzahl_Bewegungsmelder_aktiv 0 nachrichten_ausgabe_Bewegungsmelder uebnerschrift_nachrichten_Bewegungsmelder emoji_βœ… Alle Bewegungsmelder sind inaktiv emoji_βœ… true FALSE Object ID 06_liste_Bewegungsmelder_aktiv_emojis_eDP TRUE nachrichten_ausgabe_Bewegungsmelder 0 Tueren_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.ssml speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default 09_Tueren_Ansage_Button_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE Tueren_Ansage 0 log Logmeldung_Tueren_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… Batterien_zaehlen Beschreibe diese Funktion … anzahl_Batterien_aktiv 0 anzahl_Batterien_inaktiv 0 anzahl_Batterien_gesamt 0 liste_Batterien_aktiv liste_Batterien_inaktiv liste_Batterien_aktiv_gesamt liste_Batterien_aktiv_html liste_Batterien_inaktiv_html htmlText <!DOCTYPE html><html lang="de"><head><title> Batterien </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Batterien status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </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> Batterien etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> Batterien_aktiv selektor_Batterien anzahl_Batterien_gesamt 1 OR val Batterien_aktiv GT val Batterien_aktiv 0 anzahl_Batterien_aktiv 1 INSERT LAST liste_Batterien_aktiv Batterien_aktiv Batterien leer INSERT LAST liste_Batterien_aktiv_html Batterien_aktiv Batterien <td><span style="color:#FF0000"> emoji_❗️ </span> Batterien_inaktiv selektor_Batterien OR val Batterien_inaktiv EQ val Batterien_inaktiv 0 anzahl_Batterien_inaktiv 1 INSERT LAST liste_Batterien_inaktiv Batterien_inaktiv Batterien voll INSERT LAST liste_Batterien_inaktiv_html Batterien_inaktiv Batterien <td> voll emoji_βœ… true FALSE Object ID 01_anzahl_Batterien_gesamt_eDP TRUE anzahl_Batterien_gesamt 0 true FALSE Object ID 02_anzahl_Batterien_aktiv_eDP TRUE anzahl_Batterien_aktiv 0 EQ anzahl_Batterien_aktiv 0 true FALSE Object ID 03_liste_Batterien_aktiv_eDP TRUE Batterien_verwenden Aktuell gibt es keine leeren mehrzahl_Batterien 0 true FALSE Object ID 03_liste_Batterien_aktiv_eDP TRUE TEXT 1 liste_Batterien_aktiv , 0 EQ anzahl_Batterien_aktiv 0 true FALSE Object ID 04_liste_Batterien_gesamt_eDP TRUE TEXT 1 liste_Batterien_inaktiv , 0 NEQ anzahl_Batterien_aktiv 0 true FALSE Object ID 04_liste_Batterien_gesamt_eDP TRUE TEXT 1 liste_Batterien_aktiv , , TEXT 1 liste_Batterien_inaktiv , 0 EQ anzahl_Batterien_aktiv anzahl_Batterien_gesamt true FALSE Object ID 04_liste_Batterien_gesamt_eDP TRUE TEXT 1 liste_Batterien_aktiv , 0 EQ anzahl_Batterien_aktiv 0 true FALSE Object ID 05_liste_Batterien_html_eDP TRUE htmlText TEXT 1 liste_Batterien_inaktiv_html <tr><td> </table></body> 0 NEQ anzahl_Batterien_aktiv 0 true FALSE Object ID 05_liste_Batterien_html_eDP TRUE htmlText TEXT 1 liste_Batterien_aktiv_html <tr><td> <tr><td> TEXT 1 liste_Batterien_inaktiv_html <tr><td> </table></body> 0 EQ anzahl_Batterien_aktiv anzahl_Batterien_gesamt true FALSE Object ID 05_liste_Batterien_html_eDP TRUE htmlText TEXT 1 liste_Batterien_aktiv_html <tr><td> </table></body> 0 Version 0.1 erstellt von @dslraser im Juni 2020 Forum Link: https://forum.iobroker.net/post/273896 Fenster Fenster Tueren TΓΌren Steckdosen Steckdosen Licht Lichter Bewegungsmelder Bewegungsmelder Batterien Batterien pfad_geraete_zaehlen .Geraete_zaehlen_optional_Ansagen.Geraete_zaehlen. Bei Nutzung der Instanzen javascript.x muss das Blockly in der gleichen Instanz laufen wo die Datenpunkte angelegt werden anlegen_in 0_userdata.0 etage Haus auf wahr stellen was benutzt werden soll und auch vorhanden ist. Alexa_Ansage_verwenden FALSE Telegram_verwenden FALSE Email_verwenden FALSE Steckdosen_verwenden FALSE Batterien_verwenden FALSE Lichter_verwenden FALSE Bewegungsmelder_verwenden FALSE Fenster_verwenden FALSE Tueren_verwenden FALSE Ansagelautstaerke Alexa bis 100 auswaehlen Ansagelautstaerke 60 Telegram Empfaenger eintragen Telegram_Empfaenger Heiko E-Mail Empfaenger eintragen leere Felder fΓΌr weitere Benutzer mit Semikolon trennen EMail_Empfaenger max.muster@gmx.de Selektoren an die eigene Aufzaehlung anpassen selektor_Fenster (functions='Fenster') selektor_Tueren (functions='Tueren') selektor_Steckdosen (functions='Steckdosen') selektor_Lichter (functions='Licht') selektor_Bewegungsmelder (functions='Bewegungsmelder') selektor_Batterien (functions='Batterien') emoji_βœ… βœ… emoji_❌ ❌ emoji_❗️ ❗️ emoji_πŸ‘ πŸ‘ emoji_☝️ ☝️ emoji_πŸ‘ˆ πŸ‘ˆ emoji_πŸ’‘ πŸ’‘ emoji_⚑️ ⚑️ emoji_πŸ‘€ πŸ‘€ emoji_πŸ‘ πŸ‘ emoji_🧯 🧯 emoji_πŸ”” πŸ”” ein ein eine eine einzahl_Fenster Fenster mehrzahl_Fenster Fenster einzahl_Tuer TΓΌr mehrzahl_Tueren TΓΌren einzahl_Steckdose Steckdose mehrzahl_Steckdosen Steckdosen einzahl_Licht Licht mehrzahl_Licht Lichter einzahl_Bewegungsmelder Bewegungsmelder mehrzahl_Bewegungsmelder Bewegungsmelder einzahl_Batterie Batterie mehrzahl_Batterien Batterien Steckdosen_zaehlen Beschreibe diese Funktion … anzahl_Steckdosen_aktiv 0 anzahl_Steckdosen_inaktiv 0 anzahl_Steckdosen_gesamt 0 liste_Steckdosen_aktiv liste_Steckdosen_inaktiv liste_Steckdosen_aktiv_gesamt liste_Steckdosen_aktiv_html liste_Steckdosen_inaktiv_html htmlText <!DOCTYPE html><html lang="de"><head><title> Steckdosen </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Steckdosen status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </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> Steckdosen etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> Steckdosen_aktiv selektor_Steckdosen anzahl_Steckdosen_gesamt 1 OR val Steckdosen_aktiv GT val Steckdosen_aktiv 0 anzahl_Steckdosen_aktiv 1 INSERT LAST liste_Steckdosen_aktiv Steckdosen_aktiv Steckdosen an INSERT LAST liste_Steckdosen_aktiv_html Steckdosen_aktiv Steckdosen <td><span style="color:#FF0000"> emoji_⚑️ an </span> Steckdosen_inaktiv selektor_Steckdosen OR val Steckdosen_inaktiv EQ val Steckdosen_inaktiv 0 anzahl_Steckdosen_inaktiv 1 INSERT LAST liste_Steckdosen_inaktiv Steckdosen_inaktiv Steckdosen aus INSERT LAST liste_Steckdosen_inaktiv_html Steckdosen_inaktiv Steckdosen <td> aus emoji_πŸ‘ true FALSE Object ID 01_anzahl_Steckdosen_gesamt_eDP TRUE anzahl_Steckdosen_gesamt 0 true FALSE Object ID 02_anzahl_Steckdosen_aktiv_eDP TRUE anzahl_Steckdosen_aktiv 0 EQ anzahl_Steckdosen_aktiv 0 true FALSE Object ID 03_liste_Steckdosen_aktiv_eDP TRUE Steckdosen_verwenden Aktuell sind alle Steckdosen ausgeschaltet 0 true FALSE Object ID 03_liste_Steckdosen_aktiv_eDP TRUE TEXT 1 liste_Steckdosen_aktiv , 0 EQ anzahl_Steckdosen_aktiv 0 true FALSE Object ID 04_liste_Steckdosen_gesamt_eDP TRUE TEXT 1 liste_Steckdosen_inaktiv , 0 NEQ anzahl_Steckdosen_aktiv 0 true FALSE Object ID 04_liste_Steckdosen_gesamt_eDP TRUE TEXT 1 liste_Steckdosen_aktiv , , TEXT 1 liste_Steckdosen_inaktiv , 0 EQ anzahl_Steckdosen_aktiv anzahl_Steckdosen_gesamt true FALSE Object ID 04_liste_Steckdosen_gesamt_eDP TRUE TEXT 1 liste_Steckdosen_aktiv , 0 EQ anzahl_Steckdosen_aktiv 0 true FALSE Object ID 05_liste_Steckdosen_html_eDP TRUE htmlText TEXT 1 liste_Steckdosen_inaktiv_html <tr><td> </table></body> 0 NEQ anzahl_Steckdosen_aktiv 0 true FALSE Object ID 05_liste_Steckdosen_html_eDP TRUE htmlText TEXT 1 liste_Steckdosen_aktiv_html <tr><td> <tr><td> TEXT 1 liste_Steckdosen_inaktiv_html <tr><td> </table></body> 0 EQ anzahl_Steckdosen_aktiv anzahl_Steckdosen_gesamt true FALSE Object ID 05_liste_Steckdosen_html_eDP TRUE htmlText TEXT 1 liste_Steckdosen_aktiv_html <tr><td> </table></body> 0 Bewegungsmelder_ansage_wiedergabe Beschreibe diese Funktion … Bewegungsmelder_Datenpruefung EQ val 02_anzahl_Bewegungsmelder_aktiv_eDP 0 Ansage_Einleitungssatz_Bewegungsmelder , alle Bewegungsmelder sind inaktiv. NEQ val 02_anzahl_Bewegungsmelder_aktiv_eDP 0 Ansage_Einleitungssatz_Bewegungsmelder val 03_liste_Bewegungsmelder_aktiv_eDP , alle anderen Bewegungsmelder sind inaktiv. Bewegungsmelder_Ansage val objekt_id_01alexa_eDP val objekt_id_05alexa_ssml_eDP Bewegungsmelder_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_02hans_eDP val objekt_id_06hans_ssml_eDP Bewegungsmelder_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_03vicki_eDP val objekt_id_07vicki_ssml_eDP Bewegungsmelder_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_04conchita_eDP val objekt_id_08conchita_ssml_eDP Bewegungsmelder_Datenpruefung val objekt_id_09ende_ssml_eDP Tueren_vor_versand_pruefen Beschreibe diese Funktion … gekippt gekippt emoji_πŸ‘ˆ geoffnet geΓΆffnet emoji_☝️ uebnerschrift_nachrichten_Tueren * etage Tueren status * \n AND EQ val 02_anzahl_Tueren_offen_eDP 1 EQ val 01_anzahl_Tueren_gekippt_eDP 0 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es ist eine einzahl_Tuer geoffnet \n \n TEXT 1 liste_tueren_offen \n AND EQ val 02_anzahl_Tueren_offen_eDP 0 EQ val 01_anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es ist eine einzahl_Tuer gekippt \n \n TEXT 1 liste_tueren_gekippt \n AND EQ val 02_anzahl_Tueren_offen_eDP 1 EQ val 01_anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es ist eine einzahl_Tuer geoffnet \n Es ist eine einzahl_Tuer gekippt \n \n TEXT 1 liste_tueren_offen \n \n TEXT 1 liste_tueren_gekippt \n AND EQ val 02_anzahl_Tueren_offen_eDP 0 GT val 01_anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es sind val 01_anzahl_Tueren_gekippt_eDP Tueren gekippt \n \n TEXT 1 liste_tueren_gekippt \n AND GT val 02_anzahl_Tueren_offen_eDP 1 EQ val 01_anzahl_Tueren_gekippt_eDP 0 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es sind val 02_anzahl_Tueren_offen_eDP Tueren geoffnet \n \n TEXT 1 liste_tueren_offen \n AND GT val 02_anzahl_Tueren_offen_eDP 1 EQ val 01_anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es sind val 02_anzahl_Tueren_offen_eDP Tueren geoffnet \n Es ist eine einzahl_Tuer gekippt \n \n TEXT 1 liste_tueren_offen \n \n TEXT 1 liste_tueren_gekippt \n AND EQ val 02_anzahl_Tueren_offen_eDP 1 GT val 01_anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es ist eine einzahl_Tuer geoffnet \n Es sind val 01_anzahl_Tueren_gekippt_eDP Tueren gekippt \n \n TEXT 1 liste_tueren_offen \n \n TEXT 1 liste_tueren_gekippt \n AND GT val 02_anzahl_Tueren_offen_eDP 1 GT val 01_anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es sind val 02_anzahl_Tueren_offen_eDP Tueren geoffnet \n Es sind val 01_anzahl_Tueren_gekippt_eDP Tueren gekippt \n \n TEXT 1 liste_tueren_offen \n \n TEXT 1 liste_tueren_gekippt \n AND EQ val 02_anzahl_Tueren_offen_eDP 0 EQ val 01_anzahl_Tueren_gekippt_eDP 0 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren βœ… Alle Tueren sind geschlossen βœ… true FALSE Object ID 08_offene_gekippte_Tueren_Liste_mit_Emojis TRUE nachrichten_ausgabe_Tueren 0 Lichter_ansage_wiedergabe Beschreibe diese Funktion … Lichter_Datenpruefung EQ val 02_anzahl_Lichter_aktiv_eDP 0 Ansage_Einleitungssatz_Lichter , alle Licht sind ausgeschaltet. NEQ val 02_anzahl_Lichter_aktiv_eDP 0 Ansage_Einleitungssatz_Lichter val 03_liste_Lichter_aktiv_eDP , alle anderen Licht sind ausgeschaltet. Lichter_Ansage val objekt_id_01alexa_eDP val objekt_id_05alexa_ssml_eDP Lichter_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_02hans_eDP val objekt_id_06hans_ssml_eDP Lichter_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_03vicki_eDP val objekt_id_07vicki_ssml_eDP Lichter_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_04conchita_eDP val objekt_id_08conchita_ssml_eDP Lichter_Datenpruefung val objekt_id_09ende_ssml_eDP Fenster_ansage_wiedergabe Beschreibe diese Funktion … Fenster_Datenpruefung EQ val 04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt 0 Ansage_Einleitungssatz_Fenster , alle Fenster sind geschlossen. NEQ val 04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt 0 Ansage_Einleitungssatz_Fenster val 05_offene_gekippte_Fenster_Liste , alle anderen Fenster sind geschlossen. Fenster_Ansage val objekt_id_01alexa_eDP val objekt_id_05alexa_ssml_eDP Fenster_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_02hans_eDP val objekt_id_06hans_ssml_eDP Fenster_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_03vicki_eDP val objekt_id_07vicki_ssml_eDP Fenster_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_04conchita_eDP val objekt_id_08conchita_ssml_eDP Fenster_Datenpruefung val objekt_id_09ende_ssml_eDP Bewegungsmelder_zaehlen Beschreibe diese Funktion … anzahl_Bewegungsmelder_aktiv 0 anzahl_Bewegungsmelder_inaktiv 0 anzahl_Bewegungsmelder_gesamt 0 liste_Bewegungsmelder_aktiv liste_Bewegungsmelder_inaktiv liste_Bewegungsmelder_aktiv_gesamt liste_Bewegungsmelder_aktiv_html liste_Bewegungsmelder_inaktiv_html htmlText <!DOCTYPE html><html lang="de"><head><title> Bewegungsmelder </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Bewegungsmelder status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </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> Bewegungsmelder etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> Bewegungsmelder_aktiv selektor_Bewegungsmelder anzahl_Bewegungsmelder_gesamt 1 OR val Bewegungsmelder_aktiv GT val Bewegungsmelder_aktiv 0 anzahl_Bewegungsmelder_aktiv 1 INSERT LAST liste_Bewegungsmelder_aktiv Bewegungsmelder_aktiv Bewegungsmelder aktiv INSERT LAST liste_Bewegungsmelder_aktiv_html Bewegungsmelder_aktiv Bewegungsmelder <td><span style="color:#FF0000"> emoji_πŸ‘€ aktiv </span> Bewegungsmelder_inaktiv selektor_Bewegungsmelder OR val Bewegungsmelder_aktiv EQ val Bewegungsmelder_aktiv 0 anzahl_Bewegungsmelder_inaktiv 1 INSERT LAST liste_Bewegungsmelder_inaktiv Bewegungsmelder_inaktiv Bewegungsmelder inaktiv INSERT LAST liste_Bewegungsmelder_inaktiv_html Bewegungsmelder_inaktiv Bewegungsmelder <td> inaktiv emoji_πŸ‘ true FALSE Object ID 01_anzahl_Bewegungsmelder_gesamt_eDP TRUE anzahl_Bewegungsmelder_gesamt 0 true FALSE Object ID 02_anzahl_Bewegungsmelder_aktiv_eDP TRUE anzahl_Bewegungsmelder_aktiv 0 EQ anzahl_Bewegungsmelder_aktiv 0 true FALSE Object ID 03_liste_Bewegungsmelder_aktiv_eDP TRUE Bewegungsmelder Aktuell sind alle Bewegungsmelder inaktiv 0 true FALSE Object ID 03_liste_Bewegungsmelder_aktiv_eDP TRUE TEXT 1 liste_Bewegungsmelder_aktiv , 0 EQ anzahl_Bewegungsmelder_aktiv 0 true FALSE Object ID 04_liste_Bewegungsmelder_gesamt_eDP TRUE TEXT 1 liste_Bewegungsmelder_inaktiv , 0 NEQ anzahl_Bewegungsmelder_aktiv 0 true FALSE Object ID 04_liste_Bewegungsmelder_gesamt_eDP TRUE TEXT 1 liste_Bewegungsmelder_aktiv , , TEXT 1 liste_Bewegungsmelder_inaktiv , 0 EQ anzahl_Bewegungsmelder_aktiv anzahl_Bewegungsmelder_gesamt true FALSE Object ID 04_liste_Bewegungsmelder_gesamt_eDP TRUE TEXT 1 liste_Bewegungsmelder_aktiv , 0 EQ anzahl_Bewegungsmelder_aktiv 0 true FALSE Object ID 05_liste_Bewegungsmelder_html_eDP TRUE htmlText TEXT 1 liste_Bewegungsmelder_inaktiv_html <tr><td> </table></body> 0 NEQ anzahl_Bewegungsmelder_aktiv 0 true FALSE Object ID 05_liste_Bewegungsmelder_html_eDP TRUE htmlText TEXT 1 liste_Bewegungsmelder_aktiv_html <tr><td> <tr><td> TEXT 1 liste_Bewegungsmelder_inaktiv_html <tr><td> </table></body> 0 EQ anzahl_Bewegungsmelder_aktiv anzahl_Bewegungsmelder_gesamt true FALSE Object ID 05_liste_Bewegungsmelder_html_eDP TRUE htmlText TEXT 1 liste_Bewegungsmelder_aktiv_html <tr><td> </table></body> 0 Tueren_ansage_wiedergabe Beschreibe diese Funktion … Tueren_Datenpruefung EQ val 04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt 0 Ansage_Einleitungssatz_Fenster , alle Tueren sind geschlossen. NEQ val 04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt 0 Ansage_Einleitungssatz_Tueren val 05_offene_gekippte_Tueren_Liste , alle anderen Tueren sind geschlossen. Tueren_Ansage val objekt_id_01alexa_eDP val objekt_id_05alexa_ssml_eDP Tueren_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_02hans_eDP val objekt_id_06hans_ssml_eDP Tueren_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_03vicki_eDP val objekt_id_07vicki_ssml_eDP Tueren_Datenpruefung val objekt_id_09ende_ssml_eDP val objekt_id_04conchita_eDP val objekt_id_08conchita_ssml_eDP Tueren_Datenpruefung val objekt_id_09ende_ssml_eDP Fenster_zaehlen Beschreibe diese Funktion … anzahl_fenster_gekippt 0 anzahl_fenster_offen 0 anzahl_fenster_geschlossen 0 anzahl_fenster_gesamt 0 liste_fenster_offen liste_fenster_gekippt liste_fenster_geschlossen liste_fenster_offen_gesamt liste_fenster_offen_html liste_fenster_gekippt_html liste_fenster_geschlossen_html 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"> Fenster status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </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 etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> fenster_offen selektor_Fenster anzahl_fenster_gesamt 1 wert val fenster_offen OR EQ fenster_offen wert OPEN EQ fenster_offen wert TRUE anzahl_fenster_offen 1 INSERT LAST liste_fenster_offen fenster_offen geΓΆffnet INSERT LAST liste_fenster_offen_html fenster_offen <td><span style="color:#FF0000"> geΓΆffnet </span> fenster_gekippt selektor_Fenster wert val fenster_gekippt EQ fenster_gekippt wert TILTED anzahl_fenster_gekippt 1 INSERT LAST liste_fenster_gekippt fenster_gekippt gekippt INSERT LAST liste_fenster_gekippt_html fenster_gekippt <td><span style="color:#0000FF"> gekippt </span> fenster_geschlossen selektor_Fenster wert val fenster_geschlossen OR EQ fenster_geschlossen wert CLOSED EQ fenster_geschlossen wert FALSE anzahl_fenster_geschlossen 1 INSERT LAST liste_fenster_geschlossen fenster_geschlossen geschlossen INSERT LAST liste_fenster_geschlossen_html fenster_geschlossen <td>geschlossen true FALSE Object ID 01_anzahl_Fenster_gekippt_eDP TRUE anzahl_fenster_gekippt 0 true FALSE Object ID 02_anzahl_Fenster_offen_eDP TRUE anzahl_fenster_offen 0 true FALSE Object ID 03_anzahl_Fenster_geschlossen_eDP TRUE anzahl_fenster_geschlossen 0 true FALSE Object ID 04_anzahl_Fenster_gesamt_eDP TRUE anzahl_fenster_gesamt 0 true FALSE Object ID 04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt TRUE ADD 1 anzahl_fenster_gekippt 1 anzahl_fenster_offen 0 AND EQ anzahl_fenster_gekippt 0 EQ anzahl_fenster_offen 0 true FALSE Object ID 05_offene_gekippte_Fenster_Liste TRUE Alle Fenster sind geschlossen. 0 AND EQ anzahl_fenster_gekippt 0 NEQ anzahl_fenster_offen 0 true FALSE Object ID 05_offene_gekippte_Fenster_Liste TRUE TEXT 1 liste_fenster_offen , 0 AND NEQ anzahl_fenster_gekippt 0 EQ anzahl_fenster_offen 0 true FALSE Object ID 05_offene_gekippte_Fenster_Liste TRUE TEXT 1 liste_fenster_gekippt , 0 AND NEQ anzahl_fenster_gekippt 0 NEQ anzahl_fenster_offen 0 true FALSE Object ID 05_offene_gekippte_Fenster_Liste TRUE TEXT 1 liste_fenster_offen , , TEXT 1 liste_fenster_gekippt , 0 AND EQ anzahl_fenster_gekippt 0 EQ anzahl_fenster_offen 0 true FALSE Object ID 06_gesamte_Fenster_Liste TRUE TEXT 1 liste_fenster_geschlossen , 0 EQ anzahl_fenster_gesamt anzahl_fenster_offen true FALSE Object ID 06_gesamte_Fenster_Liste TRUE TEXT 1 liste_fenster_offen , 0 EQ anzahl_fenster_gesamt anzahl_fenster_gekippt true FALSE Object ID 06_gesamte_Fenster_Liste TRUE TEXT 1 liste_fenster_gekippt , 0 AND GT anzahl_fenster_offen 0 AND LT anzahl_fenster_offen anzahl_fenster_gesamt EQ anzahl_fenster_gekippt 0 true FALSE Object ID 06_gesamte_Fenster_Liste TRUE TEXT 1 liste_fenster_offen , , TEXT 1 liste_fenster_gekippt , TEXT 1 liste_fenster_geschlossen , 0 AND GT anzahl_fenster_gekippt 0 AND LT anzahl_fenster_gekippt anzahl_fenster_gesamt EQ anzahl_fenster_offen 0 true FALSE Object ID 06_gesamte_Fenster_Liste TRUE TEXT 1 liste_fenster_gekippt , , TEXT 1 liste_fenster_offen , TEXT 1 liste_fenster_geschlossen , 0 AND LT anzahl_fenster_gekippt anzahl_fenster_gesamt AND LT anzahl_fenster_offen anzahl_fenster_gesamt AND GT anzahl_fenster_gekippt 0 GT anzahl_fenster_offen 0 true FALSE Object ID 06_gesamte_Fenster_Liste TRUE TEXT 1 liste_fenster_offen , , TEXT 1 liste_fenster_gekippt , , TEXT 1 liste_fenster_geschlossen , 0 AND LT anzahl_fenster_gekippt anzahl_fenster_gesamt AND LT anzahl_fenster_offen anzahl_fenster_gesamt AND AND GT anzahl_fenster_gekippt 0 GT anzahl_fenster_offen 0 EQ ADD 1 anzahl_fenster_gekippt 1 anzahl_fenster_offen anzahl_fenster_gesamt true FALSE Object ID 06_gesamte_Fenster_Liste TRUE TEXT 1 liste_fenster_offen , , TEXT 1 liste_fenster_gekippt , TEXT 1 liste_fenster_geschlossen , 0 AND EQ anzahl_fenster_gekippt 0 EQ anzahl_fenster_offen 0 true FALSE Object ID 07_html_Fenster_Liste TRUE htmlText TEXT 1 liste_fenster_geschlossen_html <tr><td> </table></body> 0 EQ anzahl_fenster_gesamt anzahl_fenster_offen true FALSE Object ID 07_html_Fenster_Liste TRUE htmlText TEXT 1 liste_fenster_offen_html <tr><td> </table></body> 0 EQ anzahl_fenster_gesamt anzahl_fenster_gekippt true FALSE Object ID 07_html_Fenster_Liste TRUE htmlText TEXT 1 liste_fenster_gekippt_html <tr><td> </table></body> 0 AND GT anzahl_fenster_offen 0 AND LT anzahl_fenster_offen anzahl_fenster_gesamt EQ anzahl_fenster_gekippt 0 true FALSE Object ID 07_html_Fenster_Liste TRUE htmlText TEXT 1 liste_fenster_offen_html <tr><td> <tr><td> TEXT 1 liste_fenster_gekippt_html <tr><td> TEXT 1 liste_fenster_geschlossen_html <tr><td> </table></body> 0 AND GT anzahl_fenster_gekippt 0 AND LT anzahl_fenster_gekippt anzahl_fenster_gesamt EQ anzahl_fenster_offen 0 true FALSE Object ID 07_html_Fenster_Liste TRUE htmlText TEXT 1 liste_fenster_gekippt_html <tr><td> <tr><td> TEXT 1 liste_fenster_offen_html <tr><td> TEXT 1 liste_fenster_geschlossen_html <tr><td> </table></body> 0 AND LT anzahl_fenster_gekippt anzahl_fenster_gesamt AND LT anzahl_fenster_offen anzahl_fenster_gesamt AND GT anzahl_fenster_gekippt 0 GT anzahl_fenster_offen 0 true FALSE Object ID 07_html_Fenster_Liste TRUE htmlText TEXT 1 liste_fenster_offen_html <tr><td> <tr><td> TEXT 1 liste_fenster_gekippt_html <tr><td> <tr><td> TEXT 1 liste_fenster_geschlossen_html <tr><td> </table></body> 0 AND LT anzahl_fenster_gekippt anzahl_fenster_gesamt AND LT anzahl_fenster_offen anzahl_fenster_gesamt AND AND GT anzahl_fenster_gekippt 0 GT anzahl_fenster_offen 0 EQ ADD 1 anzahl_fenster_gekippt 1 anzahl_fenster_offen anzahl_fenster_gesamt true FALSE Object ID 07_html_Fenster_Liste TRUE htmlText TEXT 1 liste_fenster_offen_html <tr><td> <tr><td> TEXT 1 liste_fenster_gekippt_html <tr><td> TEXT 1 liste_fenster_geschlossen_html <tr><td> </table></body> 0 Lichter_zaehlen Beschreibe diese Funktion … anzahl_Lichter_aktiv 0 anzahl_Lichter_inaktiv 0 anzahl_Lichter_gesamt 0 liste_Lichter_aktiv liste_Lichter_inaktiv liste_Lichter_aktiv_gesamt liste_Lichter_aktiv_html liste_Lichter_inaktiv_html htmlText <!DOCTYPE html><html lang="de"><head><title> Licht </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Licht status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </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> Licht etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> Lichter_aktiv selektor_Lichter anzahl_Lichter_gesamt 1 OR val Lichter_aktiv GT val Lichter_aktiv 0 anzahl_Lichter_aktiv 1 INSERT LAST liste_Lichter_aktiv Lichter_aktiv Licht an INSERT LAST liste_Lichter_aktiv_html Lichter_aktiv Licht <td><span style="color:#FF0000"> emoji_πŸ’‘ an </span> Lichter_inaktiv selektor_Lichter OR val Lichter_aktiv EQ val Lichter_aktiv 0 anzahl_Lichter_inaktiv 1 INSERT LAST liste_Lichter_inaktiv Lichter_inaktiv Licht aus INSERT LAST liste_Lichter_inaktiv_html Lichter_inaktiv Licht <td> aus emoji_πŸ‘ true FALSE Object ID 01_anzahl_Lichter_gesamt_eDP TRUE anzahl_Lichter_gesamt 0 true FALSE Object ID 02_anzahl_Lichter_aktiv_eDP TRUE anzahl_Lichter_aktiv 0 EQ anzahl_Lichter_aktiv 0 true FALSE Object ID 03_liste_Lichter_aktiv_eDP TRUE Licht Aktuell sind alle Licht ausgeschaltet 0 true FALSE Object ID 03_liste_Lichter_aktiv_eDP TRUE TEXT 1 liste_Lichter_aktiv , 0 EQ anzahl_Lichter_aktiv 0 true FALSE Object ID 04_liste_Lichter_gesamt_eDP TRUE TEXT 1 liste_Lichter_inaktiv , 0 NEQ anzahl_Lichter_aktiv 0 true FALSE Object ID 04_liste_Lichter_gesamt_eDP TRUE TEXT 1 liste_Lichter_inaktiv , , TEXT 1 liste_Lichter_inaktiv , 0 EQ anzahl_Lichter_aktiv anzahl_Lichter_gesamt true FALSE Object ID 04_liste_Lichter_gesamt_eDP TRUE TEXT 1 liste_Lichter_aktiv , 0 EQ anzahl_Lichter_aktiv 0 true FALSE Object ID 05_liste_Lichter_html_eDP TRUE htmlText TEXT 1 liste_Lichter_inaktiv_html <tr><td> </table></body> 0 NEQ anzahl_Lichter_aktiv 0 true FALSE Object ID 05_liste_Lichter_html_eDP TRUE htmlText TEXT 1 liste_Lichter_aktiv_html <tr><td> <tr><td> TEXT 1 liste_Lichter_inaktiv_html <tr><td> </table></body> 0 EQ anzahl_Lichter_aktiv anzahl_Lichter_gesamt true FALSE Object ID 05_liste_Lichter_html_eDP TRUE htmlText TEXT 1 liste_Lichter_aktiv_html <tr><td> </table></body> 0 Fenster_vor_versand_pruefen Beschreibe diese Funktion … gekippt gekippt emoji_πŸ‘ˆ geoffnet geΓΆffnet emoji_☝️ uebnerschrift_nachrichten_Fenster * etage Fenster status * \n AND EQ val 02_anzahl_Fenster_offen_eDP 1 EQ val 01_anzahl_Fenster_gekippt_eDP 0 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es ist ein Fenster geoffnet \n \n TEXT 1 liste_fenster_offen \n AND EQ val 02_anzahl_Fenster_offen_eDP 0 EQ val 01_anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es ist ein Fenster gekippt \n \n TEXT 1 liste_fenster_gekippt \n AND EQ val 02_anzahl_Fenster_offen_eDP 1 EQ val 01_anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es ist ein Fenster geoffnet \n Es ist ein Fenster gekippt \n \n TEXT 1 liste_fenster_offen \n \n TEXT 1 liste_fenster_gekippt \n AND EQ val 02_anzahl_Fenster_offen_eDP 0 GT val 01_anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es sind val 01_anzahl_Fenster_gekippt_eDP Fenster gekippt \n \n TEXT 1 liste_fenster_gekippt \n AND GT val 02_anzahl_Fenster_offen_eDP 1 EQ val 01_anzahl_Fenster_gekippt_eDP 0 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es sind val 02_anzahl_Fenster_offen_eDP Fenster geoffnet \n \n TEXT 1 liste_fenster_offen \n AND GT val 02_anzahl_Fenster_offen_eDP 1 EQ val 01_anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es sind val 02_anzahl_Fenster_offen_eDP Fenster geoffnet \n Es ist ein Fenster gekippt \n \n TEXT 1 liste_fenster_offen \n \n TEXT 1 liste_fenster_gekippt \n AND EQ val 02_anzahl_Fenster_offen_eDP 1 GT val 01_anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es ist ein Fenster geoffnet \n Es sind val 01_anzahl_Fenster_gekippt_eDP Fenster gekippt \n \n TEXT 1 liste_fenster_offen \n \n TEXT 1 liste_fenster_gekippt \n AND GT val 02_anzahl_Fenster_offen_eDP 1 GT val 01_anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es sind val 02_anzahl_Fenster_offen_eDP Fenster geoffnet \n Es sind val 01_anzahl_Fenster_gekippt_eDP Fenster gekippt \n \n TEXT 1 liste_fenster_offen \n \n TEXT 1 liste_fenster_gekippt \n AND EQ val 02_anzahl_Fenster_offen_eDP 0 EQ val 01_anzahl_Fenster_gekippt_eDP 0 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster βœ… Alle Fenster sind geschlossen βœ… true FALSE Object ID 08_offene_gekippte_Fenster_Liste_mit_Emojis TRUE nachrichten_ausgabe_Fenster 0 Tueren_zaehlen Beschreibe diese Funktion … anzahl_tueren_gekippt 0 anzahl_tueren_offen 0 anzahl_tueren_geschlossen 0 anzahl_tueren_gesamt 0 liste_tueren_offen liste_tueren_gekippt liste_tueren_geschlossen liste_tueren_offen_gesamt liste_tueren_offen_html liste_tueren_gekippt_html liste_tueren_geschlossen_html htmlText <!DOCTYPE html><html lang="de"><head><title> Tueren </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Tueren status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </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> Tueren etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> tueren_offen selektor_Tueren anzahl_tueren_gesamt 1 wert val tueren_offen OR EQ tueren_offen wert OPEN EQ tueren_offen wert TRUE anzahl_tueren_offen 1 INSERT LAST liste_tueren_offen tueren_offen geΓΆffnet INSERT LAST liste_tueren_offen_html tueren_offen <td><span style="color:#FF0000"> geΓΆffnet </span> tueren_gekippt selektor_Tueren wert val tueren_gekippt EQ tueren_gekippt wert TILTED anzahl_tueren_gekippt 1 INSERT LAST liste_tueren_gekippt tueren_gekippt gekippt INSERT LAST liste_tueren_gekippt_html tueren_gekippt <td><span style="color:#0000FF"> gekippt </span> tueren_geschlossen selektor_Tueren wert val tueren_geschlossen OR EQ tueren_geschlossen wert CLOSED EQ tueren_geschlossen wert FALSE anzahl_tueren_geschlossen 1 INSERT LAST liste_tueren_geschlossen tueren_geschlossen geschlossen INSERT LAST liste_tueren_geschlossen_html tueren_geschlossen <td>geschlossen true FALSE Object ID 01_anzahl_Tueren_gekippt_eDP TRUE anzahl_tueren_gekippt 0 true FALSE Object ID 02_anzahl_Tueren_offen_eDP TRUE anzahl_tueren_offen 0 true FALSE Object ID 03_anzahl_Tueren_geschlossen_eDP TRUE anzahl_tueren_geschlossen 0 true FALSE Object ID 04_anzahl_Tueren_gesamt_eDP TRUE anzahl_tueren_gesamt 0 true FALSE Object ID 04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt TRUE ADD 1 anzahl_tueren_gekippt 1 anzahl_tueren_offen 0 AND EQ anzahl_tueren_gekippt 0 EQ anzahl_tueren_offen 0 true FALSE Object ID 05_offene_gekippte_Tueren_Liste TRUE Alle Tueren sind geschlossen. 0 AND EQ anzahl_tueren_gekippt 0 NEQ anzahl_tueren_offen 0 true FALSE Object ID 05_offene_gekippte_Tueren_Liste TRUE TEXT 1 liste_tueren_offen , 0 AND NEQ anzahl_tueren_gekippt 0 EQ anzahl_tueren_offen 0 true FALSE Object ID 05_offene_gekippte_Tueren_Liste TRUE TEXT 1 liste_tueren_gekippt , 0 AND NEQ anzahl_tueren_gekippt 0 NEQ anzahl_tueren_offen 0 true FALSE Object ID 05_offene_gekippte_Tueren_Liste TRUE TEXT 1 liste_tueren_offen , , TEXT 1 liste_tueren_gekippt , 0 AND EQ anzahl_tueren_gekippt 0 EQ anzahl_tueren_offen 0 true FALSE Object ID 06_gesamte_Tueren_Liste TRUE TEXT 1 liste_tueren_geschlossen , 0 EQ anzahl_tueren_gesamt anzahl_tueren_offen true FALSE Object ID 06_gesamte_Fenster_Liste TRUE TEXT 1 liste_tueren_offen , 0 EQ anzahl_tueren_gesamt anzahl_tueren_gekippt true FALSE Object ID 06_gesamte_Tueren_Liste TRUE TEXT 1 liste_tueren_gekippt , 0 AND GT anzahl_tueren_offen 0 AND LT anzahl_tueren_offen anzahl_tueren_gesamt EQ anzahl_tueren_gekippt 0 true FALSE Object ID 06_gesamte_Tueren_Liste TRUE TEXT 1 liste_tueren_offen , , TEXT 1 liste_tueren_gekippt , TEXT 1 liste_tueren_geschlossen , 0 AND GT anzahl_tueren_gekippt 0 AND LT anzahl_tueren_gekippt anzahl_tueren_gesamt EQ anzahl_tueren_offen 0 true FALSE Object ID 06_gesamte_Tueren_Liste TRUE TEXT 1 liste_tueren_gekippt , , TEXT 1 liste_tueren_offen , TEXT 1 liste_tueren_geschlossen , 0 AND LT anzahl_tueren_gekippt anzahl_tueren_gesamt AND LT anzahl_tueren_offen anzahl_tueren_gesamt AND GT anzahl_tueren_gekippt 0 GT anzahl_tueren_offen 0 true FALSE Object ID 06_gesamte_Tueren_Liste TRUE TEXT 1 liste_tueren_offen , , TEXT 1 liste_tueren_gekippt , , TEXT 1 liste_tueren_geschlossen , 0 AND LT anzahl_tueren_gekippt anzahl_tueren_offen AND LT anzahl_tueren_offen anzahl_tueren_gesamt AND AND GT anzahl_tueren_gekippt 0 GT anzahl_tueren_offen 0 EQ ADD 1 anzahl_tueren_gekippt 1 anzahl_tueren_offen anzahl_tueren_gesamt true FALSE Object ID 06_gesamte_Tueren_Liste TRUE TEXT 1 liste_tueren_offen , , TEXT 1 liste_tueren_gekippt , TEXT 1 liste_tueren_geschlossen , 0 AND EQ anzahl_tueren_gekippt 0 EQ anzahl_tueren_offen 0 true FALSE Object ID 07_html_Tueren_Liste TRUE htmlText TEXT 1 liste_tueren_geschlossen_html <tr><td> </table></body> 0 EQ anzahl_tueren_gesamt anzahl_tueren_offen true FALSE Object ID 07_html_Tueren_Liste TRUE htmlText TEXT 1 liste_tueren_offen_html <tr><td> </table></body> 0 EQ anzahl_tueren_gesamt anzahl_tueren_gekippt true FALSE Object ID 07_html_Tueren_Liste TRUE htmlText TEXT 1 liste_tueren_gekippt_html <tr><td> </table></body> 0 AND GT anzahl_tueren_offen 0 AND LT anzahl_tueren_offen anzahl_tueren_gesamt EQ anzahl_tueren_gekippt 0 true FALSE Object ID 07_html_Tueren_Liste TRUE htmlText TEXT 1 liste_tueren_offen_html <tr><td> <tr><td> TEXT 1 liste_tueren_gekippt_html <tr><td> TEXT 1 liste_tueren_geschlossen_html <tr><td> </table></body> 0 AND GT anzahl_tueren_gekippt 0 AND LT anzahl_tueren_gekippt anzahl_tueren_gesamt EQ anzahl_tueren_offen 0 true FALSE Object ID 07_html_Tueren_Liste TRUE htmlText TEXT 1 liste_tueren_gekippt_html <tr><td> <tr><td> TEXT 1 liste_tueren_offen_html <tr><td> TEXT 1 liste_tueren_geschlossen_html <tr><td> </table></body> 0 AND LT anzahl_tueren_gekippt anzahl_tueren_gesamt AND LT anzahl_tueren_offen anzahl_tueren_gesamt AND GT anzahl_tueren_gekippt 0 GT anzahl_tueren_offen 0 true FALSE Object ID 07_html_Tueren_Liste TRUE htmlText TEXT 1 liste_tueren_offen_html <tr><td> <tr><td> TEXT 1 liste_tueren_gekippt_html <tr><td> <tr><td> TEXT 1 liste_tueren_geschlossen_html <tr><td> </table></body> 0 AND LT anzahl_tueren_gekippt anzahl_tueren_gesamt AND LT anzahl_tueren_offen anzahl_tueren_gesamt AND AND GT anzahl_tueren_gekippt 0 GT anzahl_tueren_offen 0 EQ ADD 1 anzahl_tueren_gekippt 1 anzahl_tueren_offen anzahl_tueren_gesamt true FALSE Object ID 07_html_Tueren_Liste TRUE htmlText TEXT 1 liste_tueren_offen_html <tr><td> <tr><td> TEXT 1 liste_tueren_gekippt_html <tr><td> TEXT 1 liste_tueren_geschlossen_html <tr><td> </table></body> 0