Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skriptsammlung für den neuen ALEXA2.0 Adapter

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Skriptsammlung für den neuen ALEXA2.0 Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • dslraser
      dslraser Forum Testing Most Active last edited by

      genau so habe ich gestern angefangen alles bei mir umzustellen. (ich wußte es vorher auch nicht besser)

      Dann fährt auch der Staubsauger oder Rasenmäher (oder eben alle anderen geschalteten Geräte) nicht selbst los.

      1 Reply Last reply Reply Quote 0
      • B
        Belei last edited by

        @dslraser:

        Alexa, sind noch irgendwo Fenster auf…

        Ich habe meine Ansage/Abfrage über das Gewerk Fenster verändert und lasse mir nun Raumnamen mit geöffneten Fenstern ansagen.

        Das Gewerk für dieses Script heißt Fenster

        <u>Wenn bei Euch das Gewerk für Fensterkontakte anders heißt muss das im Script angepasst werden.</u>

        (mit der Ansage einzelner Fenster wurde bei mir das 250 Zeichen Limit von Alexa speak gesprengt.)

        Bei mehreren Echos/Alexas wird die Anfrage an dem Gerät beantwortet wo sie gestellt wurde. Ich habe hier mehrere Echos in mehreren Räumen im Blockly, zu sehen an den gelben Kommentaren.

        Script 1 zum Gewerk Fenster:

        -…........................... `

        An welchen Stellen muss ich das den genau ändern? Das Wort Fenster kommt ja ziemlich oft vor.

        Danke

        1 Reply Last reply Reply Quote 0
        • dslraser
          dslraser Forum Testing Most Active last edited by

          da![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201809 ... 706729.jpg">https://uploads.tapatalk-cdn.com/20180922/2621ffd9f4619a5963c66ead45706729.jpg</link_text>" />

          1 Reply Last reply Reply Quote 0
          • B
            Belei last edited by

            Danke für die schnelle Antwort, hab ich gefunden und geändert.

            Ich glaube aber irgentwas läuft bei mir noch nicht…

            Habe alle 3 Scripte erstellt und aktiviert.

            Unter Object steht bei Script 1 und 2: True aber bei Script 3 : False

            Und als ergebniss bei Objects/Fenster/Ansage hab ich alles doppelt:

            Fenster_Schlafzimmer_links, und Fenster_Schlafzimmer_links, und Fenster_Wohnzimmer_1, und Fenster_Wohnzimmer_1

            und es werden auch die doppelte Anzahl Fenster gezählt.

            Und im Log steht:
            3799_error.jpg

            1 Reply Last reply Reply Quote 0
            • dslraser
              dslraser Forum Testing Most Active last edited by

              Das Script zum entfernen doppelter Raumnamen muß unter global laufen, hast Du es da ?

              Und bitte anschließend den JS Adapter neu starten.

              1 Reply Last reply Reply Quote 0
              • B
                Belei last edited by

                Ja ist unter Global und ein neustart hat leider keine änderung gebracht.

                Script läuft jetzt ohne Fehler im Log durch aber ergebniss sind immer noch die doppelten Fenster.

                3799_objects.jpg

                1 Reply Last reply Reply Quote 0
                • dslraser
                  dslraser Forum Testing Most Active last edited by

                  @Belei:

                  Ja ist unter Global und ein neustart hat leider keine änderung gebracht.

                  Script läuft jetzt ohne Fehler im Log durch aber ergebniss sind immer noch die doppelten Fenster.

                  filename="objects.JPG" index="0">~~ `

                  Im Screenshot kann man nicht alles sehen…(also rechts...)

                  Mach mal ein Fenster auf und zu und einen Screenshot wo alles drauf ist.

                  1 Reply Last reply Reply Quote 0
                  • B
                    Belei last edited by

                    Hatte 1 Fenster zusätzlich geöffnet dann waren es 8 statt 6.

                    Screenshot:
                    3799_objects1.jpg

                    3799_scripte.jpg

                    1 Reply Last reply Reply Quote 0
                    • dslraser
                      dslraser Forum Testing Most Active last edited by

                      Hast Du nur das Script neu gestartet ?

                      (kommt mir so vor ?)

                      Starte bitte noch mal den JS Adapter neu, also Deine Instanz vom Adapter.

                      1 Reply Last reply Reply Quote 0
                      • B
                        Belei last edited by

                        Doch hab schon alles neugestartet( script, js Adapter,Host und komplett den Pie)

                        3799_java.jpg

                        1 Reply Last reply Reply Quote 0
                        • dslraser
                          dslraser Forum Testing Most Active last edited by

                          Hm, dann weiß ich auch nicht was bei Dir schief läuft.

                          Bitte poste mal Dein Script hier in Code Tags. Dann schaue ich morgen (also heute Vormittag) mal drüber.

                          1 Reply Last reply Reply Quote 0
                          • B
                            Belei last edited by

                            Super vielen Dank und Gute Nacht.

                            Scripts1

                            // Status Zahl Fenster
                            
                            var logging = true;
                            
                            var idAnzahlAuf = 'javascript.0.Status.Fenster.Anzahl_auf',
                                idAnzahl = 'javascript.0.Status.Fenster.Anzahl',
                                idText = 'javascript.0.Status.Fenster.Text',
                                idRaum = 'javascript.0.Status.Fenster.Raum',
                                idAnsage = 'javascript.0.Status.Fenster.Ansage';
                            
                            // Ab hier nix mehr ändern
                            createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Fenster
                                type: 'number',
                                name: 'Anzahl aller Fenster',
                                min: 0,
                                def: 0,
                                role: 'value'
                            });
                            createState(idAnzahlAuf, { // Anzahl der Fenster, die auf sind als Variable unter Javascript.0 anlegen
                                type: 'number',
                                name: 'Anzahl der geoeffneten Fenster',
                                min: 0,
                                def: 0,
                                role: 'value'
                            });
                            createState(idText, { // Anzahl der geoeffneten Fenster und deren Namen als Variable unter Javascript.0 anlegen
                                type: 'string',
                                name: 'geoeffnete Fenster',
                                desc: 'Namen der geoeffneten Fenster',
                                def: ' ',
                                role: 'value'
                            });
                            createState(idAnsage, {
                                type: 'string',
                                name: 'geoeffnete Fenster (Ansage)',
                                desc: 'Namen der geoeffneten Fenster (für Ansage aufbereitet)',
                                def: ' ',
                                role: 'value'
                            });
                            createState(idRaum, { // Räume, in denen Fenster geoeffnet sind
                                type: 'string',
                                name: 'Räume mit geoeffneten Fenster',
                                desc: 'Namen der Räume, in denen Fenster geoeffnet sind',
                                def: ' ',
                                role: 'value'
                            });
                            
                            var cacheSelectorState = $('channel[state.id=*.STATE](functions="Verschluss")'); // Gewerk Fenster
                            
                            function checkDevices(obj) {
                                // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster auf 0
                                var anzahlFensterAuf = 0;
                                var anzahlFenster = 0;
                                var textFensterAuf = [];
                                var textRaum = [];
                                if (logging) {
                                    log('++++++ Fenster Anzahl ++++ ');
                                    log('#### SCHALTER ##### ');
                                }
                                cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
                                    var obj = getObject(id);
                                    var name = getObject(id).common.name;
                                    var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                                    var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                                    var raumname = getObject(id, "rooms");
                            
                                    if (logging) {
                                        log('-------');
                                        log('Kanal: ' + name);
                                        log('Status: ' + status);
                                    }
                                    if (status) { // wenn Zustand = true, dann wird die Anzahl der Fenster hochgezählt
                                        ++anzahlFensterAuf;
                                        textFensterAuf.push(devicename); // Zu Array hinzufügen
                                        textRaum.push(raumname.enumNames); //
                                    }
                                    ++anzahlFenster; // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
                                    });
                            
                            textRaum = deleteDuplicates(textRaum); 
                            
                                // Array mit Fensternamen sortieren
                                textFensterAuf.sort();
                                textRaum.sort();
                                // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon auf) ausgegeben
                                if (logging) log("Text: " + textFensterAuf);
                                if (logging) log("Anzahl Fenster: " + anzahlFenster + " # davon Fenster auf: " + anzahlFensterAuf);
                                // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                setState(idText, textFensterAuf.join(', und ')); // Schreibt die aktuelle Namen der geoeffneten Fenster
                                setState(idAnzahlAuf, textFensterAuf.length); // Schreibt die aktuelle Anzahl der geoeffneten Fenster
                                setState(idAnzahl, anzahlFenster); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Fenster
                                // setState(idRaum, textRaum.join(',
                            ')); // Räume, in denen Fenster geoeffnet sind
                                setState(idRaum, textRaum.join(', und ')); // Räume, in denen Fenster geoeffnet sind
                            }
                            
                            // Trigger
                            cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Fenster
                                if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                checkDevices();
                            });
                            
                            function main() {
                                setTimeout(function() {
                                    if (logging) log('Auslöser Skriptstart');
                                    checkDevices();
                                }, 2000);
                            }
                            
                            main(); // Skriptstart-Auslöser
                            
                            // Aufbereitung für Ansage
                            function strip_tags(data) {
                                var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                                return (rueckgabe);
                            }
                            
                            on(idText, function(obj) {
                                var text = obj.state.val;
                                text = (getState(idAnzahl).val > 0) ? '' + strip_tags(text) : 'Alle Fenster sind ausgeschaltet';
                                setState(idAnsage, text);
                            });
                            

                            Script2 (global)

                            // Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
                            function deleteDuplicates(arr) { 
                                var temp = {}; 
                                for (var i = 0; i < arr.length; i++) temp[arr[i]] = true; 
                                var r = []; 
                                for (var k in temp) r.push(k); 
                                return r;
                            }
                            

                            Script3 (import in Blocky) und die Echos noch nicht angepasst

                            var Ausgabetext, timeout, timeout2;
                            
                            setState("alexa2.0.History.#trigger"/*Trigger/Rescan*/, true);
                            if (getState("javascript.0.Status.Fenster.Anzahl_auf").val == 0) {
                              Ausgabetext = String('aktuell sind') + String(getState("javascript.0.Status.Fenster.Ansage").val);
                              timeout = setTimeout(function () {
                                // Wohnzimmer
                                if (getState("alexa2.0.History.name").val == 'Wohnzimmer') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Küche
                                if (getState("alexa2.0.History.name").val == 'Küche') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Badezimmer
                                if (getState("alexa2.0.History.name").val == 'Badezimmer') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Gästezimmer
                                if (getState("alexa2.0.History.name").val == 'Gästezimmer') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Flur
                                if (getState("alexa2.0.History.name").val == 'Flur') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Schlafzimmer
                                if (getState("alexa2.0.History.name").val == 'Schlafzimmer') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Keller-Flur
                                if (getState("alexa2.0.History.name").val == 'Keller-Flur') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Werkstatt
                                if (getState("alexa2.0.History.name").val == 'Werkstatt') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                              }, 500);
                            }
                            if (getState("javascript.0.Status.Fenster.Anzahl_auf").val != 0) {
                              Ausgabetext = ['Im Moment sind im ',getState("javascript.0.Status.Fenster.Raum").val,'geöffnete Fenster'].join('');
                              timeout2 = setTimeout(function () {
                                // Wohnzimmer
                                if (getState("alexa2.0.History.name").val == 'Wohnzimmer') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Küche
                                if (getState("alexa2.0.History.name").val == 'Küche') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Badezimmer
                                if (getState("alexa2.0.History.name").val == 'Badezimmer') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Gästezimmer
                                if (getState("alexa2.0.History.name").val == 'Gästezimmer') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Flur
                                if (getState("alexa2.0.History.name").val == 'Flur') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Schlafzimmer
                                if (getState("alexa2.0.History.name").val == 'Schlafzimmer') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                                // Keller-Flur
                                if (getState("alexa2.0.History.name").val == 'Keller-Flur') {
                                  setState("alexa2.0.Echo-Devices.xxx.speak", Ausgabetext);
                                }
                                // Werkstatt
                                if (getState("alexa2.0.History.name").val == 'Werkstatt') {
                                  setState("alexa2.0.Echo-Devices.xxx.Commands.speak", Ausgabetext);
                                }
                              }, 500);
                            }
                            
                            //JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4aHRtbCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMiU0MEo3JTQwb2IlMkZyc1I5T0NZTiUyQiFoSTclMjIlMjB4JTNEJTIyLTUxMyUyMiUyMHklM0QlMjItMTA2MyUyMiUzRSUzQ211dGF0aW9uJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxleGEyLjAuSGlzdG9yeS4lMjN0cmlnZ2VyJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFRkFMU0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfYm9vbGVhbiUyMiUyMGlkJTNEJTIyb0klNURLUy0lMjM3JTdCJTYwTGgoVyUyMyU1RE1CN0MlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJCT09MJTIyJTNFVFJVRSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sc19pZiUyMiUyMGlkJTNEJTIyJTdCX0pUJTdDM01wdip0U09WV0QzUHo2JTIyJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySUYwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyRCUzRiUyQypRR0JCd2F1Q20lMkNRdGUlM0RRLSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFRVElM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJnZXRfdmFsdWUlMjIlMjBpZCUzRCUyMiU1RGlyTHdMV0d1bCU1RC54JTdCbSU2MC4lMjMuJTQwJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXZhbCUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFamF2YXNjcmlwdC4wLlN0YXR1cy5GZW5zdGVyLkFuemFobF9hdWYlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMjVMTDZ4aTRGXzclN0QtYUVpJTVFakhZJTQwJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTlVNJTIyJTNFMCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8wJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX3NldCUyMiUyMGlkJTNEJTIyNVZGZkhZVEIhUzdBJTVFQSolM0ZTaWNBJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTNFQXVzZ2FiZXRleHQlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dF9qb2luJTIyJTIwaWQlM0QlMjI0JTNGayU1QjByZUNSbi5tamt4SGc0MX4lMjIlM0UlM0NtdXRhdGlvbiUyMGl0ZW1zJTNEJTIyMiUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQUREMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMjc1WilXbiU2MFlGJTQwJTNCMzh+YklNJTNCcEElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFYWt0dWVsbCUyMHNpbmQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBREQxJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjJWaCUyRjhyeFUlNUR5RCEzbVQlN0QweSU1QmVDJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXZhbCUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFamF2YXNjcmlwdC4wLlN0YXR1cy5GZW5zdGVyLkFuc2FnZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGltZW91dHNfc2V0dGltZW91dCUyMiUyMGlkJTNEJTIyeEFfTUolNUUlNDAlM0RBQiUzRC1XdERUZSgzJTdEJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRXRpbWVvdXQlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkRFTEFZJTIyJTNFNTAwJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJVTklUJTIyJTNFbXMlM0MlMkZmaWVsZCUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJTVEFURU1FTlQlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb21tZW50JTIyJTIwaWQlM0QlMjJzMzBiMiU3QmZTUSUzQWEwdUMzJTYwJTJCUVdVJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ09NTUVOVCUyMiUzRVdvaG56aW1tZXIlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sc19pZiUyMiUyMGlkJTNEJTIybChFMjQlM0RxJTVEbCU1RGIlMkNHSkRqNGRTaiUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMk1Ld0puMEMhTyU1RHhjIX4uOSU3Q0IlNjAqJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIycC1TSGJKNURtd3I2ZGp4ZzJvaEglMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5IaXN0b3J5Lm5hbWUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyJTNGJTdEQSUzQjgoSXlNRiUyNUYlNDAodCU1REtjfiUyQiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0VXb2huemltbWVyJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sJTIyJTIwaWQlM0QlMjIpTSU1RWpMY1ohaENwaiUyQ1glM0QlN0ItJTYwblYlMjIlM0UlM0NtdXRhdGlvbiUyMGRlbGF5X2lucHV0JTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkVjaG8tRGV2aWNlcy54eHguQ29tbWFuZHMuc3BlYWslM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjJwKWJOT2RjWkZWb3ExZSU1RU01Vi0uJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTNFQXVzZ2FiZXRleHQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb21tZW50JTIyJTIwaWQlM0QlMjJBcyUyQ2RHKHhPJTVCQiU0MHdJWWN5QUclM0ZoJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ09NTUVOVCUyMiUzRUslQzMlQkNjaGUlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sc19pZiUyMiUyMGlkJTNEJTIyd3JILSU3RFAoODRtbjdZJTJGcmc4QSU1Qi4lMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjJrZy5RS0I3NTFOYVMlMjNJaGsxVmxnJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIycW5UejFPZTMxc3ElM0FOWGptYnhJSiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0V2YWwlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkhpc3RvcnkubmFtZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjIzJTNEVy4lM0ZjOEJaTiUyQlFyR1g0eEwlN0RoJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRUslQzMlQkNjaGUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMiU3RCUzRmRLJTJCJTJCKlYuN0pRY2pHJTdCM3VoQiUyMiUzRSUzQ211dGF0aW9uJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxleGEyLjAuRWNoby1EZXZpY2VzLnh4eC5Db21tYW5kcy5zcGVhayUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyV0lUSF9ERUxBWSUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMnFIb04lNUR+dTFGSSU0MGlEUXMqMkMydiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUzRUF1c2dhYmV0ZXh0JTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29tbWVudCUyMiUyMGlkJTNEJTIyX2FteHo2QiUzRDlGJTdEXzJ1RUdzSyU3RCU2MCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTU1FTlQlMjIlM0VCYWRlemltbWVyJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMi5uN0p0R3dESkRHZmFleWwhOCpCJTIyJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySUYwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIySS0lNDA5JTI1JTdCTmchJTI1JTdEOXJFJTIzSUVTYyUzQiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFRVElM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJnZXRfdmFsdWUlMjIlMjBpZCUzRCUyMmMlM0ZkU2VHIWZ1JTVEVzhVTyU0MCUzRkQ0STMlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5IaXN0b3J5Lm5hbWUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyTWl2R1YlNDAqa3QpM3JZOUNPS3BLQSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0VCYWRlemltbWVyJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sJTIyJTIwaWQlM0QlMjJ6VHdYY35yOExkdDB1LTVUTmNWbiUyMiUzRSUzQ211dGF0aW9uJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxleGEyLjAuRWNoby1EZXZpY2VzLnh4eC5Db21tYW5kcy5zcGVhayUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyV0lUSF9ERUxBWSUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMipYKn5xUUczJTVEfiU1Qk5DJTdCV01NbmRXJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTNFQXVzZ2FiZXRleHQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb21tZW50JTIyJTIwaWQlM0QlMjJDSk5HNTklNUIlM0ZDSiU3Q1UtJTNEQmYlNURjKXolMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJDT01NRU5UJTIyJTNFRyVDMyVBNHN0ZXppbW1lciUzQyUyRmZpZWxkJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX2lmJTIyJTIwaWQlM0QlMjJPQyU1RGsxXyU3RGlEbEV4UVBWYyUzRChpYiUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMk9CSVh3NmhKJTQwJTVEMlhyJTYwSEJJejVoJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIyJTNEeH41VylucyUyRlZWJTNCYyU3Q1JGcVFjRSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0V2YWwlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkhpc3RvcnkubmFtZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJJeFclM0FocGxJdkRRbTFheCUzRCU0MFglMkJNJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRUclQzMlQTRzdGV6aW1tZXIlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMmclMkIyJTVEd3ZzcmhSOHZ4djdjJTJDa0pfJTIyJTNFJTNDbXV0YXRpb24lMjBkZWxheV9pbnB1dCUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5FY2hvLURldmljZXMueHh4LkNvbW1hbmRzLnNwZWFrJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFRkFMU0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyNXE2JTJGen5TJTYwMERlSjZzWXJXaGoxJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTNFQXVzZ2FiZXRleHQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb21tZW50JTIyJTIwaWQlM0QlMjJDNiUyQ3dTaCUzRkJFWiUyQ0clM0FCOVRsJTQwJTIzdyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTU1FTlQlMjIlM0VGbHVyJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMmwlMkZnJTQwVU53NnB6ZVE2XzY5OFIlM0EtJTIyJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySUYwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyJTNEWilENnFyQ3pZMm9VJTJGZlZWOTNBJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIyU3RzYUcyQ0IlM0IqNWY1d0l2SCUyQ2tFJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXZhbCUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxleGEyLjAuSGlzdG9yeS5uYW1lJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMjdOJTNCeXk3Y0MlM0R0RSU2MCU3RE1ZT0ZmRjYlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFRmx1ciUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8wJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbCUyMiUyMGlkJTNEJTIyNSUyMy1WODg3UWhDQ1NBekklMkJ0d29rJTIyJTNFJTNDbXV0YXRpb24lMjBkZWxheV9pbnB1dCUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5FY2hvLURldmljZXMueHh4LkNvbW1hbmRzLnNwZWFrJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFRkFMU0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyTnVyRSUzQSUyNUtfeiElNUVWbGooZm41cUklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlM0VBdXNnYWJldGV4dCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbW1lbnQlMjIlMjBpZCUzRCUyMnFLRDNiRHhIViUzQk5CdHVGRnMlN0NlLiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTU1FTlQlMjIlM0VTY2hsYWZ6aW1tZXIlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sc19pZiUyMiUyMGlkJTNEJTIyaU16KEglN0RjMSUyM05PJTQwS1ZObmhubFElMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjJ6JTYwdnl5QVd2YVlkeHQ4WVp0JTJDME8lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjJtRUYpbmFxd0olMjN4TENlMU5lS08lM0ElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5IaXN0b3J5Lm5hbWUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyRjclM0ElM0FmYjRjb2tlSkpEJTNBZmt+cFYlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFU2NobGFmemltbWVyJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sJTIyJTIwaWQlM0QlMjIlN0IycyUyRmglMkZ4cGttJTVERiUyQjFpay1mNG0lMjIlM0UlM0NtdXRhdGlvbiUyMGRlbGF5X2lucHV0JTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkVjaG8tRGV2aWNlcy54eHguQ29tbWFuZHMuc3BlYWslM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjJmdDdVZjMzJTQwSUIxenVfeGRUQXhuJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTNFQXVzZ2FiZXRleHQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb21tZW50JTIyJTIwaWQlM0QlMjJ3SVlaMWJMT1NqRmklM0ROeFQ5V2NNJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ09NTUVOVCUyMiUzRUtlbGxlci1GbHVyJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMiUyNUVFSyhwS0olMjVsR28pMzJjUjdxRiUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMjdNYihhbk0lNURrUjkwNTYpZ3hxblclMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjJ4Rn5iNyU2MCU3QmZWJTdDJTdDNG4lN0R6Qi0lN0QudSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0V2YWwlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkhpc3RvcnkubmFtZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJWSCU1RTJDSnNQR09kITZoR29xZEs0JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRUtlbGxlci1GbHVyJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sJTIyJTIwaWQlM0QlMjJGXyU1QnhlelhleXJ+KihBJTNEcS5ZRkolMjIlM0UlM0NtdXRhdGlvbiUyMGRlbGF5X2lucHV0JTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkVjaG8tRGV2aWNlcy54eHguQ29tbWFuZHMuc3BlYWslM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjJTanRySUolM0ZnQTIwb2o4OE4lN0NzcmIlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlM0VBdXNnYWJldGV4dCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbW1lbnQlMjIlMjBpZCUzRCUyMkUlMjNEMWElMkYlMkNyY0glNjBkbTMlM0ZOeCU1RSUzQXElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJDT01NRU5UJTIyJTNFV2Vya3N0YXR0JTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMiUzRHN+ZCUzQS1XSWcxJTIzVEUlNjAlNUV6ZjklNUI0JTIyJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySUYwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyKiUzQVglMjVWTSU1RSUyQjJNb1lsLSUzQXUhV0slNjAlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjI2Zm5SV3lLMCUzQlAoLnglM0JIJTdCKTIyVCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0V2YWwlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkhpc3RvcnkubmFtZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJTJTNBJTIza2VSRU53MWdHakhXTFVEIS0lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFV2Vya3N0YXR0JTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sJTIyJTIwaWQlM0QlMjJxbCU0MCU2MDQoUE50alNfQU0wYkVxRCUyQiUyMiUzRSUzQ211dGF0aW9uJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxleGEyLjAuRWNoby1EZXZpY2VzLnh4eC5Db21tYW5kcy5zcGVhayUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyV0lUSF9ERUxBWSUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMlAlNUJvak1xUURWUm91dSUyM3ZOfiU3QiU1QiUyNSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUzRUF1c2dhYmV0ZXh0JTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX2lmJTIyJTIwaWQlM0QlMjJOJTJCRiUyQiUyRmZZYkRlTVpMJTIzKEhhRW8lN0MlMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjJUJTJCKW5aKCU1RHc0TGdEWSUyRiU3QyUzRnA1NmclMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRU5FUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIyayUzREJYZEV1UW83JTNGTW8lMjViZGZkbmclMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VqYXZhc2NyaXB0LjAuU3RhdHVzLkZlbnN0ZXIuQW56YWhsX2F1ZiUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJtYXRoX251bWJlciUyMiUyMGlkJTNEJTIyai1ibEd5QyUzQlY0alRMSEt2aWtYciUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTAlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19zZXQlMjIlMjBpZCUzRCUyMm1rJTJDLS1uJTI1OHglN0RlMVdzaE9DQmMuJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTNFQXVzZ2FiZXRleHQlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dF9qb2luJTIyJTIwaWQlM0QlMjJFdzNWVHc3cUclN0NGeCUzQSU3RHZxM2hJUiUyMiUzRSUzQ211dGF0aW9uJTIwaXRlbXMlM0QlMjIzJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBREQwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyTG8wJTQwckdzTiU1RWd0MWlaJTIzJTQwfkElMkY3JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRUltJTIwTW9tZW50JTIwc2luZCUyMGltJTIwJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQUREMSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIyaSUzRiU1QlplJTJDVzIzJTdDTSU2MF9TNSU0MGQlM0YlM0JxJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXZhbCUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFamF2YXNjcmlwdC4wLlN0YXR1cy5GZW5zdGVyLlJhdW0lM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBREQyJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyTnFFb2I5JTNCOFVUMTF3VCU2MGRDUWklMjMlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFZ2UlQzMlQjZmZm5ldGUlMjBGZW5zdGVyJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c19zZXR0aW1lb3V0JTIyJTIwaWQlM0QlMjIlNUVjJTJDYlEpJTVFISU1QihIR3oyUXJXdyUyRnUlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGltZW91dDIlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkRFTEFZJTIyJTNFNTAwJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJVTklUJTIyJTNFbXMlM0MlMkZmaWVsZCUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJTVEFURU1FTlQlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb21tZW50JTIyJTIwaWQlM0QlMjIzZTUlNUJjUi1sUTJQJTQwZzMtViU1RFQuKiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTU1FTlQlMjIlM0VXb2huemltbWVyJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMkthdXhXVUVKQVAyc3ApRCUyNUNkbTklMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjJGNE1LKGZiWThXVSU1QnlXTyklNDBafk8lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjJPZSU0MClWTSUyQjFZJTYwXzFZSm4lM0Y2eHlsJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXZhbCUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxleGEyLjAuSGlzdG9yeS5uYW1lJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMlE4JTQwVDhxJTdDUCU1REQqV1I2YUclMjMqajAlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFV29obnppbW1lciUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8wJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbCUyMiUyMGlkJTNEJTIyciU3Q3clM0ZHS0YyUjhBJTI1V1NYJTQwQVAlNUIlN0MlMjIlM0UlM0NtdXRhdGlvbiUyMGRlbGF5X2lucHV0JTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkVjaG8tRGV2aWNlcy54eHguQ29tbWFuZHMuc3BlYWslM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjJIVGNLZDJWOUYpJTNEayUzQUFlNG1TJTdERiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUzRUF1c2dhYmV0ZXh0JTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29tbWVudCUyMiUyMGlkJTNEJTIyTGclNDAlM0FoYS1hMnglMkMwcmZoQy4lNURfJTNEJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ09NTUVOVCUyMiUzRUslQzMlQkNjaGUlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sc19pZiUyMiUyMGlkJTNEJTIyRFRXRDNLS19mMkNtb3dXbCU3RER3JTJCJTIyJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySUYwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyKnJ+ayUyNVBvIXZ6VVFIeWJVJTYwKXN2JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIyMjg1TCUyQ3FUJTQwZVdrWlMoJTIzaGdYbmwlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5IaXN0b3J5Lm5hbWUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIydyFIdE0lMkNuYiUyQ0tJMWFxYU9lSTM2JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRUslQzMlQkNjaGUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMl9IJTdCJTI1azRiJTdDc2ohJTNBUCU1RXJEdSUyNSU3RCUzQiUyMiUzRSUzQ211dGF0aW9uJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxleGEyLjAuRWNoby1EZXZpY2VzLnh4eC5Db21tYW5kcy5zcGVhayUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyV0lUSF9ERUxBWSUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMn41MUI4KDMlN0JzdHExQnBSMUp+cCUyNSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUzRUF1c2dhYmV0ZXh0JTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29tbWVudCUyMiUyMGlkJTNEJTIyMFklM0I4YyUzRFJHJTI1ZiUzQnFxUDJ5eWpibSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTU1FTlQlMjIlM0VCYWRlemltbWVyJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMkpTJTYwemZwcVp+TmlCaFd4YV8lM0JnSCUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMi03QVZXcHNhNDJMYWxKc2VxenYlN0IlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjJjbTZzTXIlN0MqcENzeHglN0I5dUNNcm0lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5IaXN0b3J5Lm5hbWUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyNyUyQnN6eUliQkJQIWR0Q35EMWgpTyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0VCYWRlemltbWVyJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sJTIyJTIwaWQlM0QlMjJIZyUzQkRxJTI1Z0pFWGclN0JTTFYlM0J0NiU3QjYlMjIlM0UlM0NtdXRhdGlvbiUyMGRlbGF5X2lucHV0JTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkVjaG8tRGV2aWNlcy54eHguQ29tbWFuZHMuc3BlYWslM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjIqbFglN0JaTSU2MFZCVGMlN0RBJTYwMSFnTTlIJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTNFQXVzZ2FiZXRleHQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb21tZW50JTIyJTIwaWQlM0QlMjIlM0FLYSUyQlcqdXdJViUzQWgocGp6cV9oJTJDJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ09NTUVOVCUyMiUzRUclQzMlQTRzdGV6aW1tZXIlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sc19pZiUyMiUyMGlkJTNEJTIyVWclMjM4bUgxRkkhaWNLJTJGKVFFWWpRJTIyJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySUYwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyKSU0MDc2cTRNWiUyRiU3RG9DSF9tTEtXTzQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjJpSS1Ia3ZVWEZDJTQwJTNCJTNCXyUyQiU1QlRjUlAlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5IaXN0b3J5Lm5hbWUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyJTIzJTNBJTNERHAlNUREdDFnaWwqV09QaiUyRmglN0IlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFRyVDMyVBNHN0ZXppbW1lciUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8wJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbCUyMiUyMGlkJTNEJTIyeW9IbnolNUVXRzU4JTNEJTJCWCklN0NTLXU4JTIzJTIyJTNFJTNDbXV0YXRpb24lMjBkZWxheV9pbnB1dCUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5FY2hvLURldmljZXMueHh4LkNvbW1hbmRzLnNwZWFrJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFRkFMU0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyWThMSENQUEguLk9uRUpOJTVFc2pGUSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUzRUF1c2dhYmV0ZXh0JTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29tbWVudCUyMiUyMGlkJTNEJTIyITQwTW1ndSlUMEEzLXFQYUY5eU8lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJDT01NRU5UJTIyJTNFRmx1ciUzQyUyRmZpZWxkJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX2lmJTIyJTIwaWQlM0QlMjJiJTJGU2dFMVlqVCUyQ2xkJTVCbm4lN0QlN0IlMjVSSCUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMmMpU2pXJTNCamVYJTdDJTIzRmglMkZDaGElMkMlMkMzJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIySDklM0QlN0RGJTJGIVhLWTlVQm5uYnJ+RCUyRiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0V2YWwlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkhpc3RvcnkubmFtZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJyJTVFRWdJIUZRJTNCLURQV0ZGX0QhQzElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFRmx1ciUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8wJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbCUyMiUyMGlkJTNEJTIyJTNCN2p5b3U5ZiUyQlYoJTYwNSoqJTNCQ0RWJTNGJTIyJTNFJTNDbXV0YXRpb24lMjBkZWxheV9pbnB1dCUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5FY2hvLURldmljZXMueHh4LkNvbW1hbmRzLnNwZWFrJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFRkFMU0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyUV9rOWtTSlZOUDVlJTI1YTgoKHhoZSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUzRUF1c2dhYmV0ZXh0JTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29tbWVudCUyMiUyMGlkJTNEJTIyJTYwJTNGazhZTCU1QiUzQiFtRTUlM0ItTmRkVlRjJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ09NTUVOVCUyMiUzRVNjaGxhZnppbW1lciUzQyUyRmZpZWxkJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX2lmJTIyJTIwaWQlM0QlMjJ6eWVBbjN3TWMhJTNCaFlaRGhLKWh5JTIyJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySUYwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyYnElM0RCLXJHJTdEc3clN0Q3Z0cxJTdCJTJGWS0uJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIyWnIlNjBTLWw4RSElN0Q4LjQlN0IlMkNxTTkqaSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0V2YWwlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkhpc3RvcnkubmFtZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJ0ZSUyQmdTd2hXaVZSNCUyQ3NjWVYlMjVjYSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0VTY2hsYWZ6aW1tZXIlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMmdySDYlMjN3aFkxLk4tcSU1QnBMTTVYLiUyMiUzRSUzQ211dGF0aW9uJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxleGEyLjAuRWNoby1EZXZpY2VzLnh4eC5Db21tYW5kcy5zcGVhayUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyV0lUSF9ERUxBWSUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMiU1QmhNZiU1RSUzQnAlN0MlMkNDYVpWeWQlMkJxVG1+JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTNFQXVzZ2FiZXRleHQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb21tZW50JTIyJTIwaWQlM0QlMjJOMyU0MEsyQlJDN0M1TjlkYUJ5Y3ZfJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ09NTUVOVCUyMiUzRUtlbGxlci1GbHVyJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMkhQeE9keHM0TiUyNWoydW1XVGZVTkclMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjJEWCUzRGtDUSUyRiUyQ0U2a3FZc1ElN0QlMkYlM0QlNUJlJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIyWGlvblBSYTkxblExNk5LKE45JTJCLiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0V2YWwlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRWFsZXhhMi4wLkhpc3RvcnkubmFtZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJaQiU3RG1FV0VSS1olMkZmYn4qTHdkMUElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFS2VsbGVyLUZsdXIlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMmtQTEclMkI5ZGVjZyppR1VtODclNjAtMiUyMiUzRSUzQ211dGF0aW9uJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxleGEyLjAuRWNoby1EZXZpY2VzLnh4eC5zcGVhayUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyV0lUSF9ERUxBWSUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMiU3RC5JJTJCNy1Gcnc0ZmpqMS1OJTVCQWVQJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTNFQXVzZ2FiZXRleHQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb21tZW50JTIyJTIwaWQlM0QlMjJDfkw5dyU1QkdfYi5IYiolMjU3b1R+YUUlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJDT01NRU5UJTIyJTNFV2Vya3N0YXR0JTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMiU2MCUzQm90JTdDaSUzQSopSSU3Q0V3VyU0MHpTJTJDQjIlMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjJIIWxkU1l0UiU3Q0MlN0MlNUVWY3F4UyUzQlh0JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIySSlvNkEyVTIoJTJDQTdlJTdDNC44bG8uJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXZhbCUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxleGEyLjAuSGlzdG9yeS5uYW1lJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMnM0b3dTLld3KSU3QjZheWVrJTNGVnpGYiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0VXZXJrc3RhdHQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMjVHaCphVmwteChJUENuRiU0MDUlMkM1JTJGJTIyJTNFJTNDbXV0YXRpb24lMjBkZWxheV9pbnB1dCUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhbGV4YTIuMC5FY2hvLURldmljZXMueHh4LkNvbW1hbmRzLnNwZWFrJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFRkFMU0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyZG1PJTdCeVIlM0IlN0NnJTQwKHJaSkUlMkNIWDRrJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTNFQXVzZ2FiZXRleHQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnhtbCUzRQ==
                            
                            1 Reply Last reply Reply Quote 0
                            • dslraser
                              dslraser Forum Testing Most Active last edited by

                              Hier nochmal das Script was ich einsetze, abgeändert auf Verschluss.

                              ! ````
                              // Status Fenster. Das Script zählt alle Fenster im Gewerk Verschluss mit der id=*.STATE
                              ! var logging = true;
                              ! var
                              idAnzahlAuf = 'javascript.0.Status.Fenster.Anzahl_auf',
                              idAnzahl = 'javascript.0.Status.Fenster.Anzahl',
                              idText = 'javascript.0.Status.Fenster.Text',
                              idRaum = 'javascript.0.Status.Fenster.Raum',
                              idAnsage = 'javascript.0.Status.Fenster.Ansage';
                              ! // Ab hier nix mehr ändern
                              createState(idAnzahl, { // Anzahl der vorhandenen Fenster
                              type: 'number',
                              name: 'Anzahl aller Fenster',
                              min: 0,
                              def: 0,
                              role: 'value'
                              });
                              createState(idAnzahlAuf, { // Anzahl der Fenster, die auf sind
                              type: 'number',
                              name: 'Anzahl der geoeffneten Fenster',
                              min: 0,
                              def: 0,
                              role: 'value'
                              });
                              createState(idText, { // Anzahl der geoeffneten Fenster und deren Namen
                              type: 'string',
                              name: 'geoeffnete Fenster',
                              desc: 'Namen der geoeffneten Fenster',
                              def: ' ',
                              role: 'value'
                              });
                              createState(idAnsage, {
                              type: 'string',
                              name: 'geoeffnete Fenster (Ansage)',
                              desc: 'Namen der geoeffneten Fenster (für Ansage aufbereitet)',
                              def: ' ',
                              role: 'value'
                              });
                              createState(idRaum, { // Räume, in denen Fenster geoeffnet sind
                              type: 'string',
                              name: 'Räume mit geoeffneten Fenster',
                              desc: 'Namen der Räume, in denen Fenster geoeffnet sind',
                              def: ' ',
                              role: 'value'
                              });
                              ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Verschluss
                              ! function checkDevices(obj) {
                              // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Verschluss auf 0
                              var anzahlFensterAuf = 0;
                              var anzahlFenster = 0;
                              var textFensterAuf = [];
                              var textRaum = [];
                              if (logging) {
                              log('++++++ Fenster Anzahl ++++ ');
                              log('#### SCHALTER ##### ');
                              }
                              cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Verschluss
                              var obj = getObject(id);
                              var name = getObject(id).common.name;
                              var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                              var devicename = name.substring(0, name.indexOf(".STATE")); //.STATE aus Text entfernen
                              var raumname = getObject(id, "rooms");
                              ! if (logging) {
                              log('-------');
                              log('Kanal: ' + name);
                              log('Status: ' + status);
                              }
                              if (status) { // wenn Zustand = true, dann wird die Anzahl der Fenster hochgezählt
                              ++anzahlFensterAuf;
                              textFensterAuf.push(devicename); // Zu Array hinzufügen
                              textRaum.push(raumname.enumNames); //
                              }
                              ++anzahlFenster; // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
                              });

                              textRaum = deleteDuplicates(textRaum); 
                              
                              // Array mit Fensternamen sortieren
                              textFensterAuf.sort();
                              textRaum.sort();
                              // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon auf) ausgegeben
                              if (logging) log("Text: " + textFensterAuf);
                              if (logging) log("Anzahl Fenster: " + anzahlFenster + " # davon Fenster auf: " + anzahlFensterAuf);
                              // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                              setState(idText, textFensterAuf.join(',\nund\n')); // Schreibt die aktuelle Namen der geoeffneten Fenster
                              setState(idAnzahlAuf, textFensterAuf.length); // Schreibt die aktuelle Anzahl der geoeffneten Fenster
                              setState(idAnzahl, anzahlFenster); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Verschluss
                              // setState(idRaum, textRaum.join(',
                              

                              ')); // Räume, in denen Fenster geoeffnet sind
                              setState(idRaum, textRaum.join(',\nund\n')); // Räume, in denen Fenster geoeffnet sind
                              }

                              ! // Trigger
                              cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Verschluss
                              if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                              checkDevices();
                              });
                              ! function main() {
                              setTimeout(function() {
                              if (logging) log('Auslöser Skriptstart');
                              checkDevices();
                              }, 2000);
                              }
                              ! main(); // Skriptstart-Auslöser
                              ! // Aufbereitung für Ansage
                              function strip_tags(data) {
                              var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                              return (rueckgabe);
                              }
                              ! on(idText, function(obj) {
                              var text = obj.state.val;
                              text = (text.length > 1) ? ' ' + strip_tags(text) : 'Alle Fenster geschlossen';
                              setState(idAnsage, text);
                              });

                              
                              Halte mal Dein Script an und lösche die erstellten Datenpunkte. Dann das Script hier einfügen und starten. Sollte wieder bzw. immer noch was doppelt sein dann starte noch einmal den JS Adapter neu.
                              
                               ![3822_js-adapter.jpg](/assets/uploads/files/3822_js-adapter.jpg) 
                              
                              Wenn es dann immer noch nicht läuft, zeige mal Deine Aufzählungen
                              
                               ![3822_funktion.jpg](/assets/uploads/files/3822_funktion.jpg) 
                              1 Reply Last reply Reply Quote 0
                              • B
                                Belei last edited by

                                Funktioniert leider immer noch nicht…

                                Habe den Script gestopt ersetzt, die Datenpunkte Fenste gelöscht und js neugestartet.

                                Punkte wurden wieder neu angelegt.

                                Sollte denn bei Script2 auch true kommen?

                                Log von script1

                                12:06:55.830	[info]	javascript.0 Start javascript script.js.common.Skript1
                                12:06:55.830	[info]	javascript.0 script.js.common.Skript1: registered 27 subscriptions and 0 schedules
                                12:06:57.021	[info]	javascript.0 script.js.common.Skript1: Auslöser Skriptstart
                                12:06:57.022	[info]	javascript.0 script.js.common.Skript1: ++++++ Fenster Anzahl ++++
                                12:06:57.022	[info]	javascript.0 script.js.common.Skript1: #### SCHALTER #####
                                12:06:57.023	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.023	[info]	javascript.0 script.js.common.Skript1: Kanal: Test_Kontakt_oben_benni:1.STATE
                                12:06:57.024	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.025	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.026	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Wohnzimmer_2_links.STATE
                                12:06:57.026	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.027	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.028	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Wohnzimmer_1.STATE
                                12:06:57.028	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.029	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.030	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Wohnzimmer_2_rechts.STATE
                                12:06:57.030	[info]	javascript.0 script.js.common.Skript1: Status: true
                                12:06:57.031	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.031	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Schlafzimmer_rechts.STATE
                                12:06:57.032	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.033	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.034	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Schlafzimmer_links.STATE
                                12:06:57.034	[info]	javascript.0 script.js.common.Skript1: Status: true
                                12:06:57.035	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.035	[info]	javascript.0 script.js.common.Skript1: Kanal: Tür_Wohnzimmer_Wintergarten.STATE
                                12:06:57.036	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.037	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.037	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Hwr:1.STATE
                                12:06:57.040	[info]	javascript.0 script.js.common.Skript1: Status: true
                                12:06:57.041	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.042	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Kinderzimmer.STATE
                                12:06:57.043	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.044	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.044	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Wohnzimmer_4_links:1.STATE
                                12:06:57.045	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.045	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.046	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Badezimmer.STATE
                                12:06:57.047	[info]	javascript.0 script.js.common.Skript1: Status: true
                                12:06:57.047	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.048	[info]	javascript.0 script.js.common.Skript1: Kanal: Test_Kontakt_oben_benni:1.STATE
                                12:06:57.048	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.049	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.049	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Wohnzimmer_2_links.STATE
                                12:06:57.050	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.050	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.051	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Wohnzimmer_1.STATE
                                12:06:57.051	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.052	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.052	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Wohnzimmer_2_rechts.STATE
                                12:06:57.053	[info]	javascript.0 script.js.common.Skript1: Status: true
                                12:06:57.053	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.054	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Schlafzimmer_rechts.STATE
                                12:06:57.054	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.055	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.056	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Schlafzimmer_links.STATE
                                12:06:57.056	[info]	javascript.0 script.js.common.Skript1: Status: true
                                12:06:57.056	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.057	[info]	javascript.0 script.js.common.Skript1: Kanal: Tür_Wohnzimmer_Wintergarten.STATE
                                12:06:57.057	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.058	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.058	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Hwr:1.STATE
                                12:06:57.059	[info]	javascript.0 script.js.common.Skript1: Status: true
                                12:06:57.059	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.059	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Kinderzimmer.STATE
                                12:06:57.060	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.060	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.060	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Wohnzimmer_4_links:1.STATE
                                12:06:57.061	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.061	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.061	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Badezimmer.STATE
                                12:06:57.062	[info]	javascript.0 script.js.common.Skript1: Status: true
                                12:06:57.067	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.068	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Flur:1.STATE
                                12:06:57.069	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.071	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.071	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Flur:1.STATE
                                12:06:57.072	[info]	javascript.0 script.js.common.Skript1: Status: false
                                12:06:57.072	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.075	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Kueche:1.STATE
                                12:06:57.076	[info]	javascript.0 script.js.common.Skript1: Status: true
                                12:06:57.076	[info]	javascript.0 script.js.common.Skript1: -------
                                12:06:57.076	[info]	javascript.0 script.js.common.Skript1: Kanal: Fenster_Kueche:1.STATE
                                12:06:57.077	[info]	javascript.0 script.js.common.Skript1: Status: true
                                12:06:57.078	[info]	javascript.0 script.js.common.Skript1: Text: Fenster_Badezimmer,Fenster_Badezimmer,Fenster_Hwr:1,Fenster_Hwr:1,Fenster_Kueche:1,Fenster_Kueche:1,Fenster_Schlafzimmer_links,Fenster_Schlafzimmer_links,Fenster_Wohnzimmer_2_rechts,Fenster_Wohnzimmer_2_rechts
                                12:06:57.078	[info]	javascript.0 script.js.common.Skript1: Anzahl Fenster: 26 # davon Fenster auf: 10
                                

                                3799_dingens.jpg

                                1 Reply Last reply Reply Quote 0
                                • dslraser
                                  dslraser Forum Testing Most Active last edited by

                                  Also bei Script2 steht bei mir auch false(spielt also keine Rolle)

                                  Die 26 Fenster scheinen ja zu stimmen, oder ?

                                  Nur warum die Fenster im Log immer zwei Mal erscheinen verstehe ich auch nicht ?

                                  Das einzige was mir jetzt noch einfällt wäre mal in den Aufzählungen die Funktion Verschluss zu löschen

                                  und Sie dann über einen Neustart des Rega Adapter neu einzulesen. Und dann noch mal den JS Aapter und das Script neu zu starten.

                                  (die Räume in den Aufzählungen werden ja wohl nicht doppelt da sein….)

                                  Vielleicht kann noch Jemand anderes was dazu sagen...

                                  1 Reply Last reply Reply Quote 0
                                  • B
                                    Belei last edited by

                                    DANKE 😄

                                    Ich glaub jetzt machts klick….

                                    Es sind eigentlich nur 13 Fenster, auch in der Aufzählung sind ja "alle" Fenster doppelt drin mit gleichem Namen?!!

                                    EDIT:

                                    Sie wurden doppelt eingelesen 1x über HM-RPC.0 und 1x über HM-RPC.2

                                    Hab sie jetzt mal einzeln gelöscht und jetzt stimmt auch die anzeige…..

                                    Jetzt an Alexa ran, da brauch ich bestimmt auch noch Hilfe :?

                                    1 Reply Last reply Reply Quote 0
                                    • B
                                      Belei last edited by

                                      Sooom Alexa spricht jetzt auch mit mir aber sie sagt:

                                      ,undBadezimmer,undHauswirtschaftsraum,undKüche,undWohnzimmer (ist auch der text unterRäume mit geöffneten Fenstern)

                                      als es kommt zu anfang gleich ein und.

                                      1 Reply Last reply Reply Quote 0
                                      • dslraser
                                        dslraser Forum Testing Most Active last edited by

                                        Bei mir steht immer ein Raum zuerst, aber das ', \und\n', kannst Du ändern (ich habe das nur, damit Alexa nicht alles runter rattert und für mein Telegramm Menü) Das Komma lässt Alexa mit kurzer Pause sprechen.

                                        Dir sollte ein Komma reichen. ' ,' reichen

                                        Ändern kannst Du es in Zeile 92 und 96 (wie im Screenshot)

                                        3822_bildschirmfoto_2018-09-23_um_15.39.27.png

                                        3822_bildschirmfoto_2018-09-23_um_15.40.48.png

                                        1 Reply Last reply Reply Quote 0
                                        • B
                                          Belei last edited by

                                          Ok jetzt gehts auch ohne Änderung, da war bei mir noch was in der Raum Zuordnung falsch. Der Badezimmerkontakt hatte kein Raum, daher hat er mit

                                          ("leer" und) angefangen.

                                          Super Vielen Dank an dich DSLRaser :!:

                                          1 Reply Last reply Reply Quote 0
                                          • dslraser
                                            dslraser Forum Testing Most Active last edited by

                                            freut mich das nun alles läuft<emoji seq="1f44d">👍</emoji>

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            956
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            45
                                            184
                                            39681
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo