diff --git a/app/resources/Android/src/main/res/values-da/strings.xml b/app/resources/Android/src/main/res/values-da/strings.xml
new file mode 100644
index 00000000..7131f638
--- /dev/null
+++ b/app/resources/Android/src/main/res/values-da/strings.xml
@@ -0,0 +1,291 @@
+
+
+ "Invalid file:"
+ "Backup file has been modified externally."
+ "Backup file seems empty."
+ "Backup file is incorrect or corrupt."
+ "Remove recipe from snacks?"
+ "Remove recipe from dinner?"
+ "Remove recipe from lunch?"
+ "Remove recipe from breakfast?"
+ "Untitled Recipe"
+ "Star rating"
+ "Created"
+ "Filtered result"
+ "OK"
+ "recipes updated"
+ "recipes already exists"
+ "recipes imported"
+ "recipes found"
+ "Import summary"
+ "separate with spaces"
+ "Tags"
+ "No tags available"
+ "All Tags"
+ "All Categories"
+ "Vietnamese"
+ "Turkish"
+ "Thai"
+ "Swedish"
+ "Sri Lankan"
+ "Spanish"
+ "Scottish"
+ "Russian"
+ "Portuguese"
+ "Nigerian"
+ "Mexican"
+ "Korean"
+ "Kenyan"
+ "Jewish"
+ "Japanese"
+ "Jamaican"
+ "Italian"
+ "Irish"
+ "Indian"
+ "Greek"
+ "German"
+ "French"
+ "Filipino"
+ "English"
+ "Egyptian"
+ "Danish"
+ "Chinese"
+ "British"
+ "Brazilian"
+ "American"
+ "All Cuisines"
+ "Cuisines"
+ "Cuisine"
+ "Are you sure you want to remove"
+ "Units"
+ "Remove unit?"
+ "Remove yield unit?"
+ "Remove category?"
+ "Remove cuisine?"
+ "New unit"
+ "New cuisine"
+ "Challenging"
+ "Moderate"
+ "Easy"
+ "Oldest first"
+ "Newest first"
+ "Last updated"
+ "Difficulty level"
+ "Rating"
+ "Slowest first"
+ "Quickest first"
+ "Your search did not match any recipes in the filtered result"
+ "Recipe not found"
+ "Reset successful"
+ "Reset units list"
+ "Reset yield units list"
+ "Reset categories list"
+ "Reset cuisines list"
+ "Resetting a list will NOT delete your existing entries but only restores the deleted default entries."
+ "Reset"
+ "Helps you choose what to cook when you can\'t decide"
+ "Shake to view random recipe"
+ "Options"
+ "User guide"
+ "Privacy policy"
+ "View on GitHub"
+ "Translator"
+ "Bidragyder"
+ "Deles via EnRecipes. Få det på Play Butik eller fra F-Droid."
+ "Tilladelse nægtet"
+ "Import vellykket"
+ "Check..."
+ "lang tid siden"
+ "Måneder før"
+ "Uger før"
+ "Dage før"
+ "i går"
+ "dag"
+ "Du har prøvet denne opskrift:"
+ "Snackbar"
+ "Aftensmad"
+ "Frokost"
+ "Morgenmad"
+ "Beskæring af et foto"
+ "UDSKIFT FOTO"
+ "Opskrift Foto"
+ "EnRecipes kræver opbevaring tilladelse til at sætte opskriften fotos."
+ "Nødvendig"
+ "Neue-kategori"
+ "Nyt Udbytte Enhed"
+ "Bemærk fjerne?"
+ "Kombination fjerne?"
+ "Forberedelse fjerne?"
+ "Ingredienser fjerne?"
+ "KASSERE"
+ "KASSERE"
+ "Vil du kassere ikke-gemte ændringer i denne opskrift?"
+ "Ikke-Gemte Ændringer"
+ "Søge"
+ "Vil du virkelig slette opskriften"
+ "SLETTE"
+ "Slet opskrift?"
+ "Fjernet fra senere prøve"
+ "Tilføjet i prøve senere"
+ "Fjernet fra favoritter"
+ "Tilføjet Til Favoritter"
+ "Tilføj mindst en opskrift for at udføre en sikkerhedskopi"
+ "EnRecipes kræver tilladelse til opbevaring for at sikkerhedskopiere dine data på denne enhed."
+ "FORTSÆTTE"
+ "IKKE NU"
+ "EnRecipes hukommelse krævede tilladelse til at importere dine data fra en tidligere sikkerhedskopi."
+ "Give tilladelse"
+ "EnRecipes skal genstartes, for at det nyligt indstillede sprog ændres"
+ "EnRecipes skal genstartes for at emneændringen kan træde i kraft."
+ "GENSTARTE"
+ "En genstart er påkrævet"
+ "INDSTILLE"
+ "OPRET NYE"
+ "Dele"
+ "Oversigt"
+ "Opskrift"
+ "Foto"
+ "min"
+ "h"
+ "Min Sunde Opskrift"
+ "Der er intet her! Tilføj nogle opskrifter og prøv igen."
+ "Opskrift vælg"
+ "TILFØJE"
+ "FJERNE"
+ "ANNULLERE"
+ "Sorter efter"
+ "Trin"
+ "Element"
+ "TILFØJ NOTER"
+ "Noter"
+ "Note"
+ "TILFØJE KOMBINATION"
+ "Kombinationer"
+ "TILFØJ TRIN"
+ "Forberedelser"
+ "Forberedelse"
+ "TILFØJE INGREDIENS"
+ "Ingredienser"
+ "Ingrediens"
+ "Udbytte målt i"
+ "Udbyttebeløb"
+ "Tilberedningstid"
+ "Forberedelsestid"
+ "kategori"
+ "Titel"
+ "Opskrift Rediger"
+ "Ny Opskrift"
+ "Vishnu Raghav B"
+ "Forfatter"
+ "til rapportering af problemer, forslag og Feedback"
+ "Deltag i telegram-gruppen"
+ "version"
+ "Understøtter fuld sikkerhedskopier eksporteret af denne App"
+ "Import fra Backup"
+ "Opretter en fileip-fil, der indeholder alle data. Denne fil kan importeres igen."
+ "Eksporter til en sikkerhedskopi"
+ "Database"
+ "Mørk"
+ "Lyst"
+ "Emne"
+ "Systemstandard"
+ "App Sprog"
+ "Interface"
+ "Din søgning matchede ikke Opskrifter i din senere prøveliste"
+ "Din søgning matchede ikke Opskrifter i dine favoritter"
+ "Din søgning stemte ikke overens med opskrifter i denne kategori"
+ "Din søgning stemte ikke overens med opskrifter"
+ "Ingen opskrifter fundet"
+ "Kategori er tom"
+ "Opskrifter, som du markerer som favoritter, er vist her"
+ "Ingen favoritter endnu"
+ "Opskrifter, der er markeret med try later, vises her"
+ "Alle gjort!"
+ "Brug pen-ikonet til at tilføje nogle noter"
+ "Brug pennikonet til at tilføje nogle kombinationer"
+ "Brug penikonet til at tilføje nogle forberedelser"
+ "Brug pen-ikonet til at tilføje nogle ingredienser"
+ "Brug plusknappen til at tilføje en"
+ "Begynd at tilføje dine opskrifter!"
+ "stor"
+ "medium"
+ "lille"
+ "stok"
+ "dusin"
+ "dråbe"
+ "klemme"
+ "stykke"
+ "spaltes"
+ "blad"
+ "in"
+ "cm"
+ "kg"
+ "g"
+ "mg"
+ "Pf"
+ "oz"
+ "l"
+ "ml"
+ "gal"
+ "qt"
+ "pt"
+ "Kop"
+ "fl"
+ "EL"
+ "SL"
+ "TL"
+ "Enhed"
+ "enhed"
+ "Brød"
+ "Patty"
+ "Roller"
+ "Liter"
+ "Ml"
+ "Gallon"
+ "Kop"
+ "Kilo"
+ "Gram"
+ "Pund"
+ "Ounce"
+ "Flydende Ounce"
+ "EL"
+ "TL"
+ "Stykke"
+ "Serverer"
+ "Vegetarisk"
+ "Vegetarisk"
+ "Ikke defineret"
+ "Suppe"
+ "Snackbar"
+ "Side retter"
+ "Skaldyr"
+ "Sauce"
+ "Salater"
+ "Ris"
+ "Fjerkræ"
+ "Pasta"
+ "Noodle"
+ "Kød"
+ "Hovedret"
+ "Mittag"
+ "Sund"
+ "Drink"
+ "Abendessen"
+ "Dessertbuffet"
+ "Morgenmad"
+ "Brød"
+ "Drink"
+ "Grill"
+ "Forret"
+ "Om"
+ "Indstilling"
+ "Kategori"
+ "Måltid planner"
+ "Favorit"
+ "Prøv senere"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "Import failed"
+
diff --git a/app/resources/Android/src/main/res/values-de/strings.xml b/app/resources/Android/src/main/res/values-de/strings.xml
new file mode 100644
index 00000000..c96f458f
--- /dev/null
+++ b/app/resources/Android/src/main/res/values-de/strings.xml
@@ -0,0 +1,291 @@
+
+
+ "Invalid file:"
+ "Backup file has been modified externally."
+ "Backup file seems empty."
+ "Backup file is incorrect or corrupt."
+ "Import failed"
+ "Entferne Rezept von Imbiss?"
+ "Entferne Rezept von Abendessen?"
+ "Entferne Rezept von Mittagessen?"
+ "Entferne Rezept von Frühstück?"
+ "Unbenanntes Rezept"
+ "Sternebewertung"
+ "Erstellt"
+ "gefiltertes Ergebnis"
+ "OK"
+ "Rezepte aktualisiert"
+ "Rezept existiert bereits"
+ "Rezepte importiert"
+ "Rezepte gefunden"
+ "Import Zusammenfassung"
+ "trennen mit Leerzeichen"
+ "Tags"
+ "Keine Tags vorhanden"
+ "Alle Tags"
+ "Alle Kategorien"
+ "Vietnamesisch"
+ "Türkisch"
+ "Thailändisch"
+ "Swedisch"
+ "Sri Lankisch"
+ "Spanisch"
+ "Schottisch"
+ "Russisch"
+ "Portugiesisch"
+ "Nigerianisch"
+ "Mexikanisch"
+ "Koreanisch"
+ "Kenianisch"
+ "Jüdisch"
+ "Japanisch"
+ "Jamaikanisch"
+ "Italienisch"
+ "Irisch"
+ "Indisch"
+ "Griechisch"
+ "Deutsch"
+ "Französisch"
+ "Philipinisch"
+ "English"
+ "Ägyptisch"
+ "Dänisch"
+ "Chinesisch"
+ "Britisch"
+ "Brazilianisch"
+ "Amerikanisch"
+ "Alle Küchen"
+ "Küchen"
+ "Küche"
+ "Bist du sicher, dass du löschen möchtest"
+ "Einheiten"
+ "Einheit löschen?"
+ "Ertragseinheit löschen?"
+ "Kategorie löschen?"
+ "Küche löschen?"
+ "Neue Einheit"
+ "Neue Küche"
+ "Herausfordernd"
+ "Moderat"
+ "Einfach"
+ "Älteste zuerst"
+ "Neueste zuerst"
+ "Zuletzt aktualisiert"
+ "Schwierigkeitsgrad"
+ "Bewertung"
+ "Langsamste zuerst"
+ "Schnellste zuerst"
+ "Deine Suche ergab keine Übereinstimmung mit den Rezepten im gefilterten Ergebnis"
+ "Rezept nicht gefunden"
+ "Zurücksetzen erfolgreich"
+ "Einheiten Liste zurücksetzen"
+ "Ertragseinheiten Liste zurücksetzen"
+ "Kategorien Liste zurücksetzen"
+ "Küchen Liste zurücksetzen"
+ "Das Zurücksetzen einer Liste löscht NICHT deine vorhandenen Einträge, sondern stellt nur die gelöschten Standardeinträge wieder her"
+ "Zurücksetzen"
+ "Hilft dir wenn du dich nicht entscheiden kannst, was gekocht werden soll"
+ "Schütteln um zufälliges Rezept anzuzeigen"
+ "Optionen"
+ "Anleitung"
+ "Datenschutz"
+ "Auf GitHub ansehen"
+ "Übersetzer"
+ "Mitwirkende"
+ "Geteilt über EnRecipes. Hole es Dir aus dem Play Store oder von F-Droid."
+ "Berechtigung verweigert"
+ "Import erfolgreich"
+ "Überprüfen..."
+ "vor langer Zeit"
+ "Monate zuvor"
+ "Wochen zuvor"
+ "Tage zuvor"
+ "gestern"
+ "heute"
+ "Du hast dieses Rezept ausprobiert:"
+ "Imbiss"
+ "Abendessen"
+ "Mittag"
+ "Frühstück"
+ "Foto zuschneiden"
+ "FOTO ERSETZEN"
+ "Rezept Foto"
+ "EnRecipes erfordert Speicherberechtigung, um Rezept Fotos zu setzen."
+ "Erforderlich"
+ "Neue Kategorie"
+ "Neue Ertragseinheit"
+ "Notiz entfernen?"
+ "Kombination entfernen?"
+ "Zubereitung entfernen?"
+ "Zutaten entfernen?"
+ "WEITER BEARBEITEN"
+ "VERWERFEN"
+ "Möchtest Du nicht gespeicherte Änderungen an diesem Rezept verwerfen?"
+ "Nicht gespeicherte Änderungen"
+ "Suche"
+ "Möchtest Du das Rezept wirklich löschen"
+ "LÖSCHEN"
+ "Rezept löschen?"
+ "Aus Später ausprobieren entfernt"
+ "In Später ausprobieren hinzugefügt"
+ "Aus Favoriten entfernt"
+ "Zu Favoriten Hinzugefügt"
+ "Füge mindestens ein Rezept hinzu, um eine Sicherung durchzuführen"
+ "EnRecipes benötigt Speicherberechtigung, um Deine Daten auf diesem Gerät zu sichern."
+ "FORTSETZEN"
+ "NICHT JETZT"
+ "EnRecipes benötigt Speicherberechtigung, um Deine Daten aus einer früheren Sicherung zu importieren."
+ "Erlaubnis erteilen"
+ "EnRecipes muss neu gestartet werden, damit die neu eingestellte Sprache geändert wird"
+ "EnRecipes muss neu gestartet werden, damit der Themenwechsel wirksam wird."
+ "NEUSTARTEN"
+ "Neustart erforderlich"
+ "EINSTELLEN"
+ "NEU ANLEGEN"
+ "Teilen"
+ "Überblick"
+ "Rezept"
+ "Foto"
+ "min"
+ "h"
+ "Mein Gesundes Rezept"
+ "Hier ist nichts! Füge einige Rezepte hinzu und versuche es erneut."
+ "Rezept auswählen"
+ "HINZUFÜGEN"
+ "ENTFERNEN"
+ "ABBRECHEN"
+ "Sortieren nach"
+ "Schritt"
+ "Posten"
+ "NOTIZEN HINZUFÜGEN"
+ "Notizen"
+ "Notiz"
+ "KOMBINATION HINZUFÜGEN"
+ "Kombinationen"
+ "SCHRITT HINZUFÜGEN"
+ "Zubereitungen"
+ "Zubereitung"
+ "ZUTAT HINZUFÜGEN"
+ "Zutaten"
+ "Zutat"
+ "Ertrag gemessen in"
+ "Ertragsmenge"
+ "Kochzeit"
+ "Vorbereitungszeit"
+ "Kategorie"
+ "Titel"
+ "Rezept bearbeiten"
+ "Neues Rezept"
+ "Vishnu Raghav B"
+ "Autor"
+ "für die Meldung von Problemen, Anregungen und Feedback"
+ "Tritt der Telegrammgruppe bei"
+ "Version"
+ "Unterstützt vollständige Backups, die von dieser App exportiert werden"
+ "Importieren vom Backup"
+ "Erzeugt eine zip-Datei, die alle Daten enthält. Diese Datei kann wieder importiert werden."
+ "Exportieren in ein Backup"
+ "Datenbank"
+ "Dunkel"
+ "Hell"
+ "Thema"
+ "System Standard"
+ "App Sprache"
+ "Benutzeroberfläche"
+ "Deine Suche stimmte nicht mit Rezepten in Deiner Später versuchen Liste überein"
+ "Deine Suche stimmte nicht mit Rezepten in Deinen Favoriten überein"
+ "Deine Suche stimmte nicht mit Rezepten in dieser Kategorie überein"
+ "Deine Suche stimmte nicht mit Rezepten überein"
+ "Keine Rezepte gefunden"
+ "Kategorie ist leer"
+ "Rezepte, die Du als Favorit markierst, werden hier aufgelistet"
+ "Noch keine Favoriten"
+ "Rezepte, die mit Später ausprobieren markiert sind, werden hier aufgelistet"
+ "Alles fertig!"
+ "Verwende das Stift-Symbol, um einige Notizen hinzuzufügen"
+ "Verwende das Stift-Symbol, um einige Kombinationen hinzuzufügen"
+ "Verwende das Stift-Symbol, um einige Zubereitungen hinzuzufügen"
+ "Verwende das Stift-Symbol, um einige Zutaten hinzuzufügen"
+ "Verwende das Plus-Symbol, um eins hinzuzufügen"
+ "Beginne deine Rezepte hinzuzufügen!"
+ "groß"
+ "medium"
+ "klein"
+ "Stange"
+ "Dutzend"
+ "Tropfen"
+ "Prise"
+ "Stück"
+ "Nelke"
+ "Blatt"
+ "in"
+ "cm"
+ "kg"
+ "g"
+ "mg"
+ "Pf"
+ "oz"
+ "l"
+ "ml"
+ "gal"
+ "qt"
+ "pt"
+ "Tasse"
+ "fl"
+ "EL"
+ "SL"
+ "TL"
+ "Einheit"
+ "Einheit"
+ "Laib"
+ "Pastete"
+ "Rolle"
+ "Liter"
+ "Milliliter"
+ "Gallone"
+ "Tasse"
+ "Kilogramm"
+ "Gramm"
+ "Pfund"
+ "Unze"
+ "Flüssige Unze"
+ "EL"
+ "TL"
+ "Stück"
+ "Portion"
+ "Vegetarisch"
+ "Vegan"
+ "Unsortiert"
+ "Suppen"
+ "Snacks"
+ "Beilagen"
+ "Meeresfrüchte"
+ "Soßen"
+ "Salate"
+ "Reis"
+ "Geflügel"
+ "Pasta"
+ "Nudeln"
+ "Fleisch"
+ "Hauptspeisen"
+ "Mittag"
+ "Gesund"
+ "Getränke"
+ "Abendessen"
+ "Nachspeisen"
+ "Frühstück"
+ "Brote"
+ "Getränke"
+ "Grill"
+ "Vorspeisen"
+ "Über"
+ "Einstellungen"
+ "Kategorien"
+ "Essensplaner"
+ "Favoriten"
+ "Später versuchen"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+
diff --git a/app/resources/Android/src/main/res/values-es/strings.xml b/app/resources/Android/src/main/res/values-es/strings.xml
new file mode 100644
index 00000000..862a455e
--- /dev/null
+++ b/app/resources/Android/src/main/res/values-es/strings.xml
@@ -0,0 +1,291 @@
+
+
+ "Invalid file:"
+ "Backup file has been modified externally."
+ "Backup file seems empty."
+ "Backup file is incorrect or corrupt."
+ "Remove recipe from snacks?"
+ "Remove recipe from dinner?"
+ "Remove recipe from lunch?"
+ "Remove recipe from breakfast?"
+ "Receta sin título"
+ "Valoración por estrellas"
+ "Creado"
+ "Resultados filtrados"
+ "OK"
+ "recetas actualizadas"
+ "la receta ya existe"
+ "recetas importadas"
+ "recetas encontradas"
+ "Resumen de importación"
+ "separar con espacios"
+ "Etiquetas"
+ "No hay etiquetas disponibles"
+ "Todas las etiquetas"
+ "Todas las categorías"
+ "Vietnamita"
+ "Turca"
+ "Thai"
+ "Sueca"
+ "Sri Lankiana"
+ "Española"
+ "Escocesa"
+ "Rusa"
+ "Portuguesa"
+ "Nigeriana"
+ "Mejicana"
+ "Coreana"
+ "Keniata"
+ "Judía"
+ "Japonés"
+ "Jamaiquino"
+ "Italiano"
+ "Irlandés"
+ "Hindú"
+ "Griega"
+ "Alemana"
+ "Francesa"
+ "Filipina"
+ "Inglesa"
+ "Egipcia"
+ "Danesa"
+ "China"
+ "Británica"
+ "Brasileña"
+ "Americana"
+ "Todas las cocinas"
+ "Comidas"
+ "Comida"
+ "Seguro deseas eliminar"
+ "Unidades"
+ "¿Remover unidad?"
+ "¿Remover unidad de medida?"
+ "¿Remover categoría?"
+ "¿Remover comida?"
+ "Nueva unidad"
+ "Nueva comida"
+ "Desafiante"
+ "Moderada"
+ "Fácil"
+ "Más antiguas primero"
+ "Más nuevas primero"
+ "Última actualización"
+ "Nivel de dificultad"
+ "Rating"
+ "La más lenta primero"
+ "La más rápida primero"
+ "Tu búsqueda no encajó con ninguna receta de los resultados filtrados"
+ "Receta no encontrada"
+ "Reseteo satisfactorio"
+ "Resetea el listado de unidades"
+ "Resetea el listado de unidad de medidas"
+ "Resetea el listado de categorías"
+ "Resetea el listado de comidas"
+ "Resetear un listado NO borrará tus entradas existentes pero restaurará las eliminadas por default."
+ "Reiniciar"
+ "Ayuda a decidir que cocinar cuando no sabes que cocinar"
+ "Sacude para ver una receta aleatoria"
+ "Opciones"
+ "Guía de usuario"
+ "Política de privacidad"
+ "Visita en GitHub"
+ "Traductor"
+ "Contribuyentes"
+ "Compartido via EnRecipes. Consíguela en Play Store o F-Droid."
+ "Permiso denegado"
+ "Importado satisfactoriamente"
+ "Verificando..."
+ "hace mucho tiempo"
+ "hace meses"
+ "semanas atrás"
+ "algunos dias atrás"
+ "ayer"
+ "hoy"
+ "Haz intentado esta receta:"
+ "bocadillos"
+ "cena"
+ "almuerzo"
+ "desayuno"
+ "Recortar foto"
+ "REEMPLAZAR FOTO"
+ "Foto de receta"
+ "EnRecipes requiere el permiso de almacenamiento para colocar la foto de receta."
+ "Requerido"
+ "Nueva categoría"
+ "Nueva unidad de medida"
+ "¿Remover nota?"
+ "¿Remover combinación?"
+ "¿Remover instrucción?"
+ "¿Remover ingrediente?"
+ "CONTINUAR EDITANDO"
+ "DESCARTAR"
+ "¿Seguro que quieres descartar los cambios no guardados de esta receta?"
+ "Cambios no guardados"
+ "Buscar"
+ "Seguro que quieres borrar la receta"
+ "BORRAR"
+ "¿Borrar receta?"
+ "Remueve de Intentar luego"
+ "Agrega a Intentar luego"
+ "Remover de favoritos"
+ "Agregar a favoritos"
+ "Agrega al menos una receta para realizar un respaldo"
+ "EnRecipes requiere el permiso de almacenamiento para respaldar los datos en este dispositivo"
+ "CONTINUAR"
+ "NO AHORA"
+ "EnRecipes requiere el permiso de almacenamiento para importar tus datos de un respaldo previo."
+ "Dar permmiso"
+ "EnRecipes debe reiniciarse para que el cambio de lenguaje surta efecto."
+ "EnRecipes debe reiniciarse para que el cambio de tema surta efecto."
+ "REINICIAR"
+ "Reinicio requerido"
+ "ESTABLECER"
+ "AGREGAR NUEVA"
+ "Compartir"
+ "Resumen"
+ "Receta"
+ "Foto"
+ "min"
+ "hr"
+ "Mi receta saludable"
+ "¡Nada por aquí! Agregar algunas recetas e intenta nuevamente."
+ "Elegir una receta"
+ "AGREGAR"
+ "REMOVER"
+ "CANCELAR"
+ "Ordenada por"
+ "Paso"
+ "Item"
+ "AGREGAR NOTA"
+ "Notas"
+ "Nota"
+ "AGREGA COMBINACIÓN"
+ "Combinaciones"
+ "AGREGAR PASO"
+ "Instrucciones"
+ "Instrucción"
+ "AGREGAR INGREDIENTE"
+ "Ingredientes"
+ "Ingrediente"
+ "Cantidad medida en"
+ "Cantidad"
+ "Tiempo de cocción"
+ "Tiempo de preparación"
+ "Categoria"
+ "Titulo"
+ "Editar receta"
+ "Nueva receta"
+ "Vishnu Raghav B"
+ "Autor"
+ "para reportar problemas, sugerencias y devoluciones"
+ "Únete al grupo de Telegram"
+ "Version"
+ "Soporta respaldos completos exportados por esta app"
+ "Importar de un respaldo"
+ "Generar un archivo zip con tus datos. Este puede ser importado nuevamente."
+ "Exportar un respaldo completo"
+ "Base de datos"
+ "Oscuro"
+ "Claro"
+ "Tema"
+ "Default del sistema"
+ "Lenguaje"
+ "Interfaz"
+ "Tu búsqueda no concuerda con recetas en tu listado de intentar luego"
+ "Tu búsqueda no concuerda con recetas en tus favoritos"
+ "Tu búsqueda no concuerda con recetas de esta categoría"
+ "Tu búsqueda no concuerda con recetas"
+ "No se encontraron recetas"
+ "Categoría vacía"
+ "Las recetas que marques como favoritas serán listadas aquí"
+ "No tienes favoritos todavía"
+ "Las recetas que marques como intentar luego serán listadas aquí"
+ "¡Listo!"
+ "Usa el botón del lapiz para agregar notas"
+ "Usa el botón del lapiz para agregar mezclas"
+ "Usa el boton del lapiz para agregar instrucciones"
+ "Usa el lapiz para agregar ingredientes"
+ "Usa el botón más para agregar una"
+ "¡Comienza a agregar tus recetas!"
+ "grande"
+ "mediano"
+ "pequeño"
+ "rama"
+ "docena"
+ "gota"
+ "pizca"
+ "porción"
+ "clavo"
+ "hoja"
+ "pulg"
+ "cm"
+ "kg"
+ "g"
+ "mg"
+ "lb"
+ "onz"
+ "l"
+ "ml"
+ "gal"
+ "cuarto"
+ "parte"
+ "taza"
+ "oz liq"
+ "tbsp"
+ "dsp"
+ "tsp"
+ "Unidad"
+ "unidad"
+ "Hogaza"
+ "Empanada"
+ "Enrollar"
+ "Litro"
+ "Mililitro"
+ "Galon"
+ "Taza"
+ "Kilogramo"
+ "Gramo"
+ "Libra"
+ "Onza"
+ "Onza líquida"
+ "Cucharada"
+ "Cucharadita"
+ "Pieza"
+ "Servicio"
+ "Vegetariano"
+ "Vegano"
+ "Indefinido"
+ "Sopas"
+ "Bocadillo"
+ "Platos de acompañamiento"
+ "Comida del mar"
+ "Salsas"
+ "Ensaladas"
+ "Arroz"
+ "Pollería"
+ "Pasta"
+ "Fideos"
+ "Carnes"
+ "Platos principales"
+ "Almuerzo"
+ "Saludable"
+ "Drinks"
+ "Cena"
+ "Postres"
+ "Desayuno"
+ "Panes"
+ "Bebidas"
+ "Barbacoa"
+ "Aperitivos"
+ "Acerca de"
+ "Ajustes"
+ "Categorías"
+ "Planificador de comida"
+ "Favoritos"
+ "Probar luego"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "Import failed"
+
diff --git a/app/resources/Android/src/main/res/values-nl/strings.xml b/app/resources/Android/src/main/res/values-nl/strings.xml
new file mode 100644
index 00000000..a7bef2a3
--- /dev/null
+++ b/app/resources/Android/src/main/res/values-nl/strings.xml
@@ -0,0 +1,291 @@
+
+
+ "Invalid file:"
+ "Backup file has been modified externally."
+ "Backup file seems empty."
+ "Backup file is incorrect or corrupt."
+ "Remove recipe from snacks?"
+ "Remove recipe from dinner?"
+ "Remove recipe from lunch?"
+ "Remove recipe from breakfast?"
+ "Untitled Recipe"
+ "Star rating"
+ "Created"
+ "Filtered result"
+ "OK"
+ "recipes updated"
+ "recipes already exists"
+ "recipes imported"
+ "recipes found"
+ "Import summary"
+ "separate with spaces"
+ "Tags"
+ "No tags available"
+ "All Tags"
+ "All Categories"
+ "Vietnamese"
+ "Turkish"
+ "Thai"
+ "Swedish"
+ "Sri Lankan"
+ "Spanish"
+ "Scottish"
+ "Russian"
+ "Portuguese"
+ "Nigerian"
+ "Mexican"
+ "Korean"
+ "Kenyan"
+ "Jewish"
+ "Japanese"
+ "Jamaican"
+ "Italian"
+ "Irish"
+ "Indian"
+ "Greek"
+ "German"
+ "French"
+ "Filipino"
+ "English"
+ "Egyptian"
+ "Danish"
+ "Chinese"
+ "British"
+ "Brazilian"
+ "American"
+ "All Cuisines"
+ "Cuisines"
+ "Cuisine"
+ "Are you sure you want to remove"
+ "Units"
+ "Remove unit?"
+ "Remove yield unit?"
+ "Remove category?"
+ "Remove cuisine?"
+ "New unit"
+ "New cuisine"
+ "Challenging"
+ "Moderate"
+ "Easy"
+ "Oldest first"
+ "Newest first"
+ "Last updated"
+ "Difficulty level"
+ "Rating"
+ "Slowest first"
+ "Quickest first"
+ "Your search did not match any recipes in the filtered result"
+ "Recipe not found"
+ "Reset successful"
+ "Reset units list"
+ "Reset yield units list"
+ "Reset categories list"
+ "Reset cuisines list"
+ "Resetting a list will NOT delete your existing entries but only restores the deleted default entries."
+ "Reset"
+ "Helps you choose what to cook when you can\'t decide"
+ "Shake to view random recipe"
+ "Options"
+ "User guide"
+ "Privacy policy"
+ "View on GitHub"
+ "Translator"
+ "Medewerkers"
+ "Gedeeld via EnRecipes. Haal het in de Play Store of bij F-Droid."
+ "toestemming geweigerd"
+ "Succesvol importeren"
+ "Het controleren..."
+ "lang geleden"
+ "voorgaande maanden"
+ "voorgaande weken"
+ "voorgaande dagen"
+ "Gisteren"
+ "vandaag"
+ "Je probeerde dit recept:"
+ "Hapje"
+ "Diner"
+ "Middag"
+ "Ontbijt"
+ "Een foto afknippen"
+ "FOTO REPLAATSEN"
+ "Receptfoto"
+ "EnRecipes heeft toestemming nodig om receptfoto\'s in te stellen."
+ "Benodigd"
+ "Nieuwe categorie"
+ "Nieuwe opbrengsteenheid"
+ "Noot verwijderen?"
+ "Combinatie verwijderen?"
+ "Voorbereiding verwijderen?"
+ "Ingrediënten verwijderen?"
+ "VERDERE VERWERKING"
+ "AFBREKENING"
+ "Wilt u niet opgeslagen wijzigingen in dit recept weggooien?"
+ "Onopgeslagen veranderingen"
+ "Zoeken"
+ "Wil je echt het recept verwijderen"
+ "VERWIJDEREN"
+ "Recept verwijderen?"
+ "Verwijderd uit Probeer Later"
+ "Toegevoegd in Later proberen"
+ "Uit favorieten verwijderd"
+ "Toegevoegd aan favorieten"
+ "Voeg ten minste één recept toe om een back-up te maken"
+ "EnRecipes heeft toestemming nodig om uw gegevens op dit apparaat op te slaan."
+ "CONTINUE"
+ "NIET NU"
+ "EnRecipes heeft toestemming nodig om uw gegevens uit een eerdere back-up te importeren."
+ "Toestemming"
+ "EnRecipes moeten opnieuw worden opgestart om de nieuw ingestelde taal te wijzigen"
+ "EnRecipes moeten opnieuw worden opgestart om de wijziging van het onderwerp in werking te laten treden."
+ "HERSTART"
+ "Herstart nodig"
+ "SETUP"
+ "NIEUW BIJLAGE"
+ "Deel"
+ "Overzicht"
+ "Recept"
+ "FOTO"
+ "min"
+ "h"
+ "Mijn Gezond Recept"
+ "Niets hier! Voeg wat recepten toe en probeer het opnieuw."
+ "Recept selecteren"
+ "TOEVOEGEN"
+ "VERWIJDEREN"
+ "ANNULEREN"
+ "Sorteren op"
+ "Stap"
+ "Artikel"
+ "OPMERKINGEN TOEVOEGEN"
+ "Opmerkingen"
+ "Opmerking"
+ "COMBINATIE TOEVOEGEN"
+ "Combinaties"
+ "STAPPEN TOEVOEGEN"
+ "Voorbereidingen"
+ "Voorbereiding"
+ "INGREDIENTE TOEVOEGEN"
+ "Ingrediënten"
+ "Ingrediënt"
+ "Opbrengst gemeten in"
+ "Opbrengstbedrag"
+ "Kooktijd"
+ "Voorbereidingstijd"
+ "Categorie"
+ "Titel"
+ "Recept aanpassen"
+ "Nieuw recept"
+ "Vishnu Raghav B"
+ "Auteur"
+ "voor het melden van problemen, suggesties en feedback"
+ "Sluit zich aan bij de telegrammengroep"
+ "Versie"
+ "Ondersteunt volledige back-ups die vanuit deze app worden geëxporteerd"
+ "Importieren vom Backup"
+ "Maakt een zip-bestand aan met alle gegevens. Dit bestand kan opnieuw worden geïmporteerd."
+ "Exporteren naar backup"
+ "Databank"
+ "Donker"
+ "Helder"
+ "Thema"
+ "Systeem Standaard"
+ "App taal"
+ "Gebruikersinterface"
+ "Uw zoekopdracht kwam niet overeen met de recepten in uw Try Later-lijst"
+ "Uw zoekopdracht kwam niet overeen met de recepten in uw favorieten"
+ "Uw zoekopdracht kwam niet overeen met recepten in deze categorie"
+ "Uw zoekopdracht kwam niet overeen met recepten"
+ "Geen recepten gevonden"
+ "Categorie is leeg"
+ "Recepten die u als favoriet markeert staan hier vermeld"
+ "Nog geen favorieten"
+ "Recepten die gemarkeerd zijn met \'Try later\' staan hier vermeld."
+ "Alles klaar!"
+ "Gebruik het potloodicoon om wat aantekeningen toe te voegen"
+ "Gebruik het potloodicoon om enkele combinaties toe te voegen"
+ "Gebruik het potloodicoon om wat voorbereidingen toe te voegen"
+ "Gebruik het potloodicoon om wat ingrediënten toe te voegen"
+ "Gebruik het plusteken om er een toe te voegen"
+ "Begin met het toevoegen van uw recepten!"
+ "groot"
+ "middelgroot"
+ "kleine"
+ "stiksel"
+ "tientallen"
+ "druppel"
+ "knijpen"
+ "deel"
+ "kruidnagel"
+ "blad"
+ "in"
+ "cm"
+ "kg"
+ "g"
+ "mg"
+ "Pf"
+ "oz"
+ "l"
+ "ml"
+ "gal"
+ "qt"
+ "pt"
+ "Beker"
+ "fl"
+ "EL"
+ "SL"
+ "TL"
+ "Eenheid"
+ "eenheid"
+ "Brood"
+ "Pasteitje"
+ "Rol"
+ "Liter"
+ "Milliliter"
+ "Galon"
+ "Beker"
+ "Kilogram"
+ "Oproep"
+ "Pond"
+ "Ounce"
+ "Vloeibare Ounce"
+ "EL"
+ "TL"
+ "Stukje"
+ "Portie"
+ "Vegetarisch"
+ "Veganistisch"
+ "Onbekend"
+ "Soepen"
+ "Hapje"
+ "Bijgerechten"
+ "Zeevruchten"
+ "Sausen"
+ "Salades"
+ "Rijst"
+ "Gevogelte"
+ "Deegwaren"
+ "Noedels"
+ "Vlees"
+ "Hoofdgerechten"
+ "Lunchen"
+ "Gezond"
+ "Drankjes"
+ "Diner"
+ "Toetsen"
+ "Ontbijt"
+ "Broodjes"
+ "Drankjes"
+ "Barbecue"
+ "Voorgerechten"
+ "Over"
+ "Instellingen"
+ "Categorieën"
+ "Maaltijdenplanner"
+ "Favoriten"
+ "Later proberen"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "Import failed"
+
diff --git a/app/resources/Android/src/main/res/values-pt/strings.xml b/app/resources/Android/src/main/res/values-pt/strings.xml
new file mode 100644
index 00000000..2f4cc561
--- /dev/null
+++ b/app/resources/Android/src/main/res/values-pt/strings.xml
@@ -0,0 +1,291 @@
+
+
+ "Invalid file:"
+ "Backup file has been modified externally."
+ "Backup file seems empty."
+ "Backup file is incorrect or corrupt."
+ "Remove recipe from snacks?"
+ "Remove recipe from dinner?"
+ "Remove recipe from lunch?"
+ "Remove recipe from breakfast?"
+ "Receita Sem Título"
+ "Classificação por estrelas"
+ "Criado"
+ "Resultados filtrados"
+ "OK"
+ "receitas atualizadas"
+ "receita já existe"
+ "receitas importadas"
+ "receitas encontradas"
+ "Importar sumário"
+ "separa com espaços"
+ "Etiquetas"
+ "Sem etiquetas disponíveis"
+ "Todas as Etiquetas"
+ "Todas as Categorias"
+ "Vietnamita"
+ "Turca"
+ "Tailandesa"
+ "Sueca"
+ "Cingalês"
+ "Espanhola"
+ "Escocêsa"
+ "Russa"
+ "Portuguesa"
+ "Nigeriana"
+ "Mexicana"
+ "Coreana"
+ "Queniana"
+ "Judaica"
+ "Japonêsa"
+ "Jamaicana"
+ "Italiana"
+ "Irlândesa"
+ "Indiana"
+ "Grega"
+ "Alemã"
+ "Francesa"
+ "Filipina"
+ "Inglêsa"
+ "Egípcia"
+ "Dinamarquêsa"
+ "Chinesa"
+ "Britânica"
+ "Brasileira"
+ "Americana"
+ "Todas as Cozinhas"
+ "Cozinhas"
+ "Cozinha"
+ "Tem certeza que pretende remover"
+ "Unidades"
+ "Remover unidade?"
+ "Remover unidade de porção?"
+ "Remover categoria?"
+ "Remover cozinha?"
+ "Nova unidade"
+ "Nova cozinha"
+ "Desafiadora"
+ "Moderada"
+ "Fácil"
+ "Mais antiga primeiro"
+ "Mais recente primeiro"
+ "Ultima atualização"
+ "Nível de dificuldade"
+ "Avaliação"
+ "Mais lentas primeiro"
+ "Mais rápidas primeiro"
+ "A sua pesquisa não encontrou nenhuma receita no resultado filtrado"
+ "Receita não encontrada"
+ "Redefinição com sucesso"
+ "Redefinir lista de unidades"
+ "Redefinir lista de porções"
+ "Redefinir lista de categorias"
+ "Redefinir lista de cozinhas"
+ "A redefinição de uma lista NÃO excluirá as entradas existentes, mas apenas restaurará as entradas padrão excluídas."
+ "Redefinir"
+ "Ajuda a escolher o que cozinhar quando não consegue decidir"
+ "Agite para ver receita aleatória"
+ "Opções"
+ "Guia de Utilização"
+ "Política de Privacidade"
+ "Ver no GitHub"
+ "Tradutor"
+ "Contribuidores"
+ "Partilhado via EnRecipes. Download na Play Store ou F-Droid."
+ "Permissão recusada"
+ "Importado com sucesso"
+ "A Verificar..."
+ "há muito tempo"
+ "meses atrás"
+ "semanas atrás"
+ "dias atrás"
+ "ontem"
+ "hoje"
+ "Tentou esta receita:"
+ "lanches"
+ "jantar"
+ "almoço"
+ "café da manhã"
+ "Cortar foto"
+ "SUBSTITUIR FOTO"
+ "Foto da receita"
+ "EnRecipes requer permissão de armazenamento para definir a foto da receita."
+ "Requerido"
+ "Nova categoria"
+ "Nova unidade de porção"
+ "Remover nota?"
+ "Remover combinação?"
+ "Remover instrução?"
+ "Remover ingrediente?"
+ "CONTINUAR EDIÇÃO"
+ "DESCARTAR"
+ "Tem certeza que deseja descartar as alterações não salvas nesta receita?"
+ "Alterações não salvas"
+ "Procurar"
+ "Tem certeza que deseja eliminar a receita"
+ "APAGAR"
+ "Eliminar Receita?"
+ "Removida de Tentar Mais Tarde"
+ "Adicionada a Tentar Mais Tarde"
+ "Removido dos Favoritos"
+ "Adicionado aos Favoritos"
+ "Adicione pelo menos uma receita para fazer um backup"
+ "EnRecipes requer permissão de armazenamento para fazer backup de seus dados neste dispositivo."
+ "CONTINUAR"
+ "AGORA NÃO"
+ "EnRecipes requer permissão de armazenamento para importar seus dados de um backup anterior."
+ "Garantir permissão"
+ "EnRecipes precisa ser reiniciada para que a alteração da lingua tenha efeito."
+ "EnRecipes precisa ser reiniciada para que a alteração do tema tenha efeito."
+ "REINICIAR"
+ "É necessário reiniciar"
+ "SET"
+ "ADICIONAR NOVA"
+ "Partilhar"
+ "Visão Global"
+ "Receita"
+ "Foto"
+ "min"
+ "hr"
+ "A Minha Receita Saudável"
+ "Nada aqui! Adicione algumas receitas e tente novamente."
+ "Selecionar a receita"
+ "ADICIONAR"
+ "REMOVER"
+ "CANCELAR"
+ "Ordenar por"
+ "Passo"
+ "Item"
+ "ADICIONAR NOTA"
+ "Notas"
+ "Nota"
+ "ADICIONAR COMBINAÇÕES"
+ "Combinações"
+ "ADICIONAR PASSO"
+ "Instruções"
+ "Instrução"
+ "ADICIONAR INGREDIENTE"
+ "Ingredientes"
+ "Ingredientes"
+ "Porções medidas em"
+ "Quantidade de porções"
+ "Tempo de cozimento"
+ "Tempo de preparação"
+ "Categoria"
+ "Título"
+ "Editar receita"
+ "Nova receita"
+ "Vishnu Raghav B"
+ "Autor"
+ "para reportar problemas, sugestões e feedback"
+ "Entrar no grupo do Telegram"
+ "Versão"
+ "Suporta backups completos exportados por este aplicativo"
+ "Importar do backup"
+ "Gera um arquivo zip que contém todos os seus dados. Este arquivo pode ser importado de volta."
+ "Exportar um backup completo"
+ "Base de Dados"
+ "Escuro"
+ "Claro"
+ "Tema"
+ "Padrão do sistema"
+ "Linguagem da App"
+ "Interface"
+ "A sua pesquisa não encontrou nenhuma receita na sua lista tentar mais tarde"
+ "A sua pesquisa não encontrou nenhuma receita em seus favoritos"
+ "A sua pesquisa não encontrou nenhuma receita nesta categoria"
+ "A sua pesquisa não encontrou nenhuma receita"
+ "Nenhuma receita encontrada"
+ "Categoria parece vazia"
+ "As receitas que marcar como favoritas serão listadas aqui"
+ "Ainda não há favoritos"
+ "As receitas que você marcar como tentativa mais tarde serão listadas aqui"
+ "Tudo feito!"
+ "Use o botão lápis para adicionar algumas notas"
+ "Use o botão lápis para adicionar algumas combinações"
+ "Use o botão lápis para adicionar algumas instruções"
+ "Use o botão lápis para adicionar alguns ingredientes"
+ "Use o botão de adição para adicionar uma"
+ "Comece a adicionar suas receitas!"
+ "grande"
+ "médio"
+ "pequeno"
+ "galho"
+ "dúzia"
+ "solta"
+ "pitada"
+ "peça"
+ "bulbo"
+ "folha"
+ "in"
+ "cm"
+ "kg"
+ "g"
+ "mg"
+ "lb"
+ "oz"
+ "l"
+ "ml"
+ "gal"
+ "qt"
+ "pt"
+ "copo"
+ "fl oz"
+ "colher de sopa"
+ "colher de sobremesa"
+ "colher de chá"
+ "Unidade"
+ "unidade"
+ "Loaf"
+ "Empada"
+ "Rolo"
+ "Litro"
+ "Mililitro"
+ "Gallon"
+ "Copo"
+ "Quilograma"
+ "Grama"
+ "Pound"
+ "Ounce"
+ "Fluid Ounce"
+ "Colher de sopa"
+ "Colher de chá"
+ "Peça"
+ "Porção"
+ "Vegetariano"
+ "Vegan"
+ "Indefinido"
+ "Sopas"
+ "Lanches"
+ "Acompanhamentos"
+ "Marisco"
+ "Molhos"
+ "Saladas"
+ "Arroz"
+ "Aves"
+ "Massa"
+ "Macarrão"
+ "Carne"
+ "Pratos principais"
+ "Almoço"
+ "Saudável"
+ "Bebidas"
+ "Jantar"
+ "Sobremesas"
+ "Café da manhã"
+ "Pães"
+ "Bebidas"
+ "Churrasco"
+ "Aperitivos"
+ "Sobre"
+ "Definições"
+ "Categorias"
+ "Planeador de Refeições"
+ "Favoritos"
+ "Tente Depois"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "Import failed"
+
diff --git a/app/resources/Android/src/main/res/values-ru/strings.xml b/app/resources/Android/src/main/res/values-ru/strings.xml
new file mode 100644
index 00000000..75a34b67
--- /dev/null
+++ b/app/resources/Android/src/main/res/values-ru/strings.xml
@@ -0,0 +1,291 @@
+
+
+ "Invalid file:"
+ "Backup file has been modified externally."
+ "Backup file seems empty."
+ "Backup file is incorrect or corrupt."
+ "Убрать рецепт из закусок?"
+ "Убрать рецепт из ужиныов?"
+ "Убрать рецепт из обедов?"
+ "Убрать рецепт из завтраков?"
+ "Рецепт без названия"
+ "Оценка"
+ "Создано"
+ "Отфильтрованный результат"
+ "ОК"
+ "рецепты обновлены"
+ "рецепты уже существуют"
+ "рецепты импортированы"
+ "рецепты найдены"
+ "Общая информация про импорт"
+ "разделяйте пробелами"
+ "Теги"
+ "Нету доступных тегов"
+ "Все теги"
+ "Все категории"
+ "Вьетнамская"
+ "Турецкая"
+ "Тайская"
+ "Шведская"
+ "Шри-ланкийская"
+ "Испанская"
+ "Шотландская"
+ "Русская"
+ "Нигерийская"
+ "Нигерийская"
+ "Мексиканская"
+ "Корейская"
+ "Кенийская"
+ "Еврейская"
+ "Японская"
+ "Ямайская"
+ "Итальянская"
+ "Ирландская"
+ "Индийская"
+ "Греческая"
+ "Немецкая"
+ "Французская"
+ "Филиппинская"
+ "Английская"
+ "Египетская"
+ "Датская"
+ "Китайская"
+ "Британская"
+ "Бразильская кухня"
+ "Американская"
+ "Все кухни"
+ "Кухни"
+ "Кухня"
+ "Вы уверены что хотите удалить"
+ "Единицы измерения"
+ "Удалить единицу измерения?"
+ "Удалить единицу измерения подачи?"
+ "Удалить категорию?"
+ "Удалить кухню?"
+ "Новая единица измерения"
+ "Новая кухня"
+ "Сложный"
+ "Средний"
+ "Легкий"
+ "Сначала старые"
+ "Сначала новое"
+ "Последнее обновление"
+ "Уровень сложности"
+ "Рейтинг"
+ "Сначала самые медленные"
+ "Самый быстрый сначала"
+ "По вашему запросу не найдено ни одного рецепта в отфильтрованном результате"
+ "Рецепт не найден"
+ "Сброс выполнен успешно"
+ "Сбросить список единиц измерения"
+ "Сбросить список единиц измерения подачи"
+ "Сбросить список категорий"
+ "Сбросить список кухонь"
+ "Сброс списка НЕ удалит ваши существующие записи, а только восстановит удаленные записи по умолчанию."
+ "Сброс"
+ "Помогает выбрать, что приготовить, когда вы не можете решить"
+ "Встряхнуть, чтобы показать случайный рецепт"
+ "Параметры"
+ "Руководство пользователя"
+ "Политика конфиденциальности"
+ "Проект на GitHub"
+ "Переводчик"
+ "Участники"
+ "Отправлено через EnRecipes. Скачайте его в Play Store или F-Droid."
+ "В доступе отказано"
+ "Импортировано успешно"
+ "Проверка ..."
+ "давно"
+ "несколько месяцев назад"
+ "несколько недель назад"
+ "несколько дней назад"
+ "вчера"
+ "сегодня"
+ "Вы пробовали этот рецепт:"
+ "закуски"
+ "ужин"
+ "обед"
+ "завтрак"
+ "Обрезать фотографию"
+ "ЗАМЕНИТЬ ФОТО"
+ "Фото для рецепта"
+ "EnRecipes требует доступ к файлам, чтобы установить фото для рецепта."
+ "Требуется"
+ "Новая категория"
+ "Новая единица измерения подачи"
+ "Удалить заметку?"
+ "Удалить комбинацию?"
+ "Удалить инструкцию?"
+ "Удалить ингредиент?"
+ "ПРОДОЛЖИТЬ РЕДАКТИРОВАНИЕ"
+ "ОТМЕНИТЬ"
+ "Вы уверены, что хотите отменить несохраненные изменения этого рецепта?"
+ "Несохраненные изменения"
+ "Поиск"
+ "Вы уверены, что хотите удалить рецепт"
+ "УДАЛИТЬ"
+ "Удалить рецепт?"
+ "Удалено из \"Попробовать позже\""
+ "Добавлено в \"Попробовать позже\""
+ "Удалено из избранного"
+ "Добавлено в избранное"
+ "Добавьте хотя бы один рецепт для резервного копирования"
+ "EnRecipes требует доступ к файлам для резервного копирования ваших данных на это устройство."
+ "ПРОДОЛЖИТЬ"
+ "НЕ СЕЙЧАС"
+ "EnRecipes требует доступ к файлам, чтобы импортировать ваши данные из предыдущей резервной копии."
+ "Предоставить разрешение"
+ "Необходимо перезапустить приложение, чтобы изменение языка вступило в силу."
+ "Необходимо перезапустить приложение, чтобы изменение темы вступило в силу."
+ "ПЕРЕЗАПУСТИТЬ"
+ "Требуется перезапуск"
+ "УСТАНОВИТЬ"
+ "ДОБАВИТЬ НОВОЕ"
+ "Поделиться"
+ "Краткое описание"
+ "Рецепт"
+ "Фото"
+ "мин"
+ "ч"
+ "Мой полезный рецепт"
+ "Здесь ничего! Добавьте рецепты и попробуйте еще раз."
+ "Выберите рецепт"
+ "ДОБАВИТЬ"
+ "УДАЛИТЬ"
+ "ОТМЕНИТЬ"
+ "Сортировать по"
+ "Шаг"
+ "Ингредиент"
+ "ДОБАВИТЬ ЗАМЕТКУ"
+ "Заметки"
+ "Заметка"
+ "ДОБАВИТЬ КОМБИНАЦИЮ"
+ "Комбинации"
+ "ДОБАВИТЬ ШАГ"
+ "Инструкции"
+ "Инструкция"
+ "ДОБАВИТЬ ИНГРЕДИЕНТ"
+ "Ингредиенты"
+ "Ингредиент"
+ "Подавать в"
+ "Подавать в количестве"
+ "Время готовки"
+ "Время подготовки"
+ "Категория"
+ "Заголовок"
+ "Редактировать рецепт"
+ "Новый рецепт"
+ "Vishnu Raghav B"
+ "Автор"
+ "для сообщения о проблемах, предложений и отзывов"
+ "Присоединяйтесь к группе в Telegram"
+ "Версия"
+ "Поддерживает полные резервные копии, созданные этим приложением"
+ "Импорт из резервной копии"
+ "Создает zip-файл, содержащий все ваши данные. Этот файл можно импортировать обратно."
+ "Экспорт полной резервной копии"
+ "База данных"
+ "Темная"
+ "Светлая"
+ "Тема"
+ "По умолчанию"
+ "Язык приложения"
+ "Интерфейс"
+ "В списке \"Попробовать позже\" по вашему запросу ничего не найдено"
+ "В избранном по вашему запросу ничего не найдено "
+ "По вашему запросу ничего не найдено в этой категории"
+ "По вашему запросу ничего не найдено"
+ "Рецептов не найдено"
+ "Похоже что в категории нет рецептов"
+ "Здесь будут перечислены рецепты, которые вы отметили как любимые."
+ "Пока что нет любимых рецептов"
+ "Здесь будут перечислены рецепты, которые вы хотите попробовать позже"
+ "Все сделано!"
+ "Используйте кнопку карандаша, чтобы добавить заметки"
+ "Используйте кнопку карандаша, чтобы добавить несколько комбинаций"
+ "Используйте кнопку карандаша, чтобы добавить инструкции"
+ "Используйте кнопку карандаша, чтобы добавить ингредиенты"
+ "Используйте кнопку плюса, чтобы добавить рецепт"
+ "Начните добавлять свои рецепты!"
+ "большой"
+ "средний"
+ "маленький"
+ "палочка"
+ "дюжина"
+ "капля"
+ "щепотка"
+ "кусок"
+ "долька"
+ "лист"
+ "дюйм"
+ "см"
+ "кг"
+ "г"
+ "мг"
+ "фунт"
+ "унция"
+ "л"
+ "мл"
+ "галлон"
+ "кварта"
+ "пинта"
+ "чашка"
+ "жидкая унция"
+ "ст.л."
+ "д.л."
+ "ч.л.."
+ "Единица измерения"
+ "единица измерения"
+ "Буханка"
+ "Лепешка"
+ "Рулет"
+ "Литр"
+ "Миллилитр"
+ "Галлон"
+ "Чашка"
+ "Килограмм"
+ "Грамм"
+ "Фунт"
+ "Унция"
+ "Жидкая унция"
+ "Столовая ложка"
+ "Чайная ложка"
+ "Кусок"
+ "Порция"
+ "Вегетарианский"
+ "Веганский"
+ "Не указано"
+ "Супы"
+ "Закуски"
+ "Гарнир"
+ "Морепродукты"
+ "Соусы"
+ "Салаты"
+ "Рис"
+ "Птица"
+ "Макаронные изделия"
+ "Лапша"
+ "Мясо"
+ "Основные блюда"
+ "Обед"
+ "Здоровая пища"
+ "Напитки"
+ "Ужин"
+ "Десерты"
+ "Завтрак"
+ "Выпечка"
+ "Напитки"
+ "Барбекю"
+ "Закуски"
+ "О приложении"
+ "Настройки"
+ "Категории"
+ "Планировщик питания"
+ "Избранное"
+ "Попробовать позже"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "EnRecipes"
+ "Import failed"
+
diff --git a/app/resources/Android/src/main/res/values-ta/strings.xml b/app/resources/Android/src/main/res/values-ta/strings.xml
new file mode 100644
index 00000000..0f1a0449
--- /dev/null
+++ b/app/resources/Android/src/main/res/values-ta/strings.xml
@@ -0,0 +1,291 @@
+
+
+ "தவறான கோப்பு:"
+ "காப்பு கோப்பு வெளிப்புறமாக மாற்றப்பட்டுள்ளது."
+ "காப்பு கோப்பு காலியாக உள்ளது."
+ "காப்பு கோப்பு தவறானது அல்லது சிதைந்துள்ளது."
+ "இறக்குமதி தோல்வியுற்றது"
+ "தின்பண்டங்களிலிருந்து சமையல் குறிப்பை அகற்றவா?"
+ "இரவு உணவில் இருந்து சமையல் குறிப்பை அகற்றவா?"
+ "மதிய உணவில் இருந்து சமையல் குறிப்பை அகற்றவா?"
+ "காலை உணவில் இருந்து சமையல் குறிப்பை அகற்றவா?"
+ "பெயரிடப்படாத சமையல் குறிப்பு"
+ "நட்சத்திர மதிப்பீடு"
+ "உருவாக்கப்பட்டது"
+ "வடிகட்டப்பட்ட முடிவு"
+ "சரி"
+ "சமையல் குறிப்புகள் புதுப்பிக்கப்பட்டது"
+ "சமையல் குறிப்புகள் ஏற்கனவே உள்ளது"
+ "சமையல் குறிப்புகள் இறக்குமதி செய்யப்பட்டது"
+ "சமையல் குறிப்புகள் கண்டறியப்பட்டது"
+ "இறக்குமதி சுருக்கம்"
+ "இடைவெளிகளுடன் பிரிக்கவும்"
+ "குறிச்சொற்கள்"
+ "குறிச்சொற்கள் எதுவுமில்லை"
+ "அனைத்து குறிச்சொற்கள்"
+ "அனைத்து பகுப்புகள்"
+ "வியட்நாமிய"
+ "துருக்கிய"
+ "தாய்"
+ "ஸ்வீடிஷ்"
+ "இலங்கை"
+ "ஸ்பானிஷ்"
+ "ஸ்காட்டிஷ்"
+ "ரஷ்ய"
+ "போர்த்துகீசியம்"
+ "நைஜீரிய"
+ "மெக்சிகன்"
+ "கொரிய"
+ "கென்ய"
+ "யூத"
+ "ஜப்பானிய"
+ "ஜமைக்கா"
+ "இத்தாலிய"
+ "ஐரிஷ்"
+ "இந்திய"
+ "கிரேக்க"
+ "ஜெர்மன்"
+ "பிரஞ்சு"
+ "பிலிப்பைன்ஸ்"
+ "ஆங்கில"
+ "எகிப்திய"
+ "டேனிஷ்"
+ "சீன"
+ "பிரிட்டிஷ்"
+ "பிரேசிலிய"
+ "அமெரிக்க"
+ "அனைத்து உணவு வகைகள்"
+ "உணவு வகைகள்"
+ "உணவு வகை"
+ "இதை நிச்சயமாக அகற்ற விரும்புகிறீர்களா"
+ "அலகுகள்"
+ "அலகை அகற்றவா?"
+ "மகசூல் அலகை அகற்றவா?"
+ "பகுப்பை அகற்றவா?"
+ "உணவு வகையை அகற்றவா?"
+ "புதிய அலகு"
+ "புதிய உணவு வகை"
+ "சவாலானது"
+ "மிதமானது"
+ "எளிது"
+ "பழையன முதலில்"
+ "புதியது முதலில்"
+ "கடைசியாக புதுப்பிக்கப்பட்டது"
+ "சிரமநிலை"
+ "மதிப்பீடு"
+ "மெதுவானவை முதலில்"
+ "விரைவானவை முதலில்"
+ "உங்கள் தேடல் வடிகட்டப்பட்ட முடிவில் எந்த சமையல் குறிப்புகளுடனும் பொருந்தவில்லை"
+ "சமையல் குறிப்பு கிடைக்கவில்லை"
+ "வெற்றிகரமாக மீட்டமைக்கப்பட்டது"
+ "அலகுகள் பட்டியலை மீட்டமை"
+ "மகசூல் அலகுகள் பட்டியலை மீட்டமை"
+ "பகுப்புகள் பட்டியலை மீட்டமை"
+ "உணவு வகைகள் பட்டியலை மீட்டமை"
+ "பட்டியலை மீட்டமைப்பது உங்கள் இருக்கும் உள்ளீடுகளை நீக்காது, ஆனால் நீக்கப்பட்ட இயல்புநிலை உள்ளீடுகளை மட்டுமே மீட்டமைக்கும்."
+ "மீட்டமை"
+ "நீங்கள் தீர்மானிக்க முடியாதபோது என்ன சமைக்க வேண்டும் என்பதைத் தேர்வுசெய்ய உதவும்"
+ "சாதனத்தை அசைத்து சீரற்ற சமையல் குறிப்பை காண்க"
+ "விருப்பங்கள்"
+ "பயனர் வழிகாட்டி"
+ "தனியுரிமைக் கொள்கை"
+ "கிட்ஹப்பில் காண்க"
+ "மொழிபெயர்ப்பாளர்"
+ "பங்களிப்பாளர்கள்"
+ "என்ரெசிபீஸ் வழியாக பகிரப்பட்டது. அதை ப்ளே ஸ்டோர் அல்லது எஃப்-டிரயோடு இருந்து பெறுங்கள்."
+ "அனுமதி மறுக்கப்பட்டது"
+ "வெற்றிகரமாக இறக்குமதி செய்யப்பட்டது"
+ "சரிபார்க்கிறது..."
+ "வெகுகாலத்திற்கு முன்பு"
+ "மாதங்களுக்கு முன்பு"
+ "வாரங்களுக்கு முன்பு"
+ "நாட்களுக்கு முன்பு"
+ "நேற்று"
+ "இன்று"
+ "இச்சமையல் குறிப்பை முயற்சித்தீர்கள்:"
+ "சிற்றிடை உணவு"
+ "இரவு உணவு"
+ "மதிய உணவு"
+ "காலை உணவு"
+ "படத்தை வெட்டு"
+ "புகைப்படத்தை மாற்று"
+ "சமையல் குறிப்பு புகைப்படம்"
+ "சமையல் குறிப்பு புகைப்படத்தை அமைக்க என்ரெசிபீஸ்க்கு சேமிப்பு அனுமதி தேவை."
+ "தேவையான"
+ "புதிய பகுப்பு"
+ "புதிய மகசூல் அலகு"
+ "குறிப்பை அகற்றவா?"
+ "சேர்க்கையை அகற்றவா?"
+ "செய்முறையை அகற்றவா?"
+ "பொருளை அகற்றவா?"
+ "தொடர்ந்து திருத்து"
+ "நிராகரி"
+ "இந்த சமையல் குறிப்பில் சேமிக்கப்படாத மாற்றங்களை நிராகரிக்க விரும்புகிறீர்களா?"
+ "சேமிக்கப்படாத மாற்றங்கள்"
+ "தேடு"
+ "இந்த சமையல் குறிப்பை நீக்க விரும்புகிறீர்களா"
+ "நீக்கு"
+ "சமையல் குறிப்பை நீக்கவா?"
+ "பின்னர் முயற்சிப்பதில் இருந்து நீக்கப்பட்டது"
+ "பின்னர் முயற்சிக்க சேர்க்கப்பட்டது"
+ "பிடித்தவற்றிலிருந்து அகற்றப்பட்டது"
+ "பிடித்தவையில் சேர்க்கப்பட்டது"
+ "காப்புப்பிரதி செய்ய குறைந்தபட்சம் ஒரு சமையல் குறிப்பு சேர்க்கவும்"
+ "இந்தச் சாதனத்தில் உங்கள் தரவை காப்புப் பிரதி எடுக்க என்ரெசிபீஸ்க்கு சேமிப்பக அனுமதி தேவைப்படுகிறது."
+ "தொடர்"
+ "இப்போது இல்லை"
+ "முந்தைய காப்புப்பிரதியிலிருந்து உங்கள் தரவை இறக்குமதி செய்ய என்ரெசிபீஸ்க்கு சேமிப்பு அனுமதி தேவைப்படுகிறது."
+ "அனுமதி வழங்கவும்"
+ "பயன்பாட்டு மொழி நடைமுறைக்கு வருவதற்கு என்ரெசிபீஸ் ஐ மீண்டும் தொடங்க வேண்டும்."
+ "தீம் மாற்றம் நடைமுறைக்கு வருவதற்கு என்ரெசிபீஸ் ஐ மீண்டும் தொடங்க வேண்டும்."
+ "மறுதொடக்கம்"
+ "மறுதொடக்கம் தேவை"
+ "அமை"
+ "புதியனவற்றை சேர்"
+ "பகிர்"
+ "கண்ணோட்டம்"
+ "சமையல் குறிப்பு"
+ "புகைப்படம்"
+ "நிமிடம்"
+ "மணி"
+ "எனது ஆரோக்கியமான சமையல் குறிப்பு"
+ "இங்கு எதுவுமில்லை! சில சமையல் குறிப்பிப்புகளை சேர்த்து மீண்டும் முயற்சிக்கவும்."
+ "ஒரு சமையல் குறிப்பை தேர்ந்தெடுக்கவும்"
+ "சேர்"
+ "அகற்று"
+ "ரத்துசெய்"
+ "வரிசை விதி"
+ "செயஂமுறை"
+ "பொருள்"
+ "குறிப்பைச் சேர்"
+ "குறிப்புகள்"
+ "குறிப்பு"
+ "சேர்க்கையைச் சேர்"
+ "சேர்க்கைகள்"
+ "செய்முறையைச் சேர்"
+ "செய்முறைகள்"
+ "செய்முறை"
+ "பொருளைச் சேர்"
+ "தேவையான பொருட்கள்"
+ "தேவையான பொருள்"
+ "மகசூல் அலகு"
+ "மகசூல் அளவு"
+ "சமைக்கும் நேரம்"
+ "தயாரிப்பு நேரம்"
+ "பகுப்பு"
+ "தலைப்பு"
+ "சமையல் குறிப்பை திருத்து"
+ "புதிய சமையல் குறிப்பு"
+ "பா. விஷ்ணு ராகவ்"
+ "ஆக்கியோன்"
+ "சிக்கல்கள், பரிந்துரைகள் மற்றும் கருத்துக்களைப் புகாரளிக்க"
+ "டெலிகிராம் குழுவில் சேரவும்"
+ "பதிப்பு"
+ "இந்த பயன்பாட்டின் மூலம் ஏற்றுமதி செய்யப்பட்ட முழு காப்புப்பிரதிகளை ஆதரிக்கும்"
+ "காப்புப்பிரதியிலிருந்து இறக்குமதி செய்க"
+ "இது உங்கள் எல்லா தரவையும் கொண்ட ஒரு ஜிப் கோப்பை உருவாக்குகிறது. இந்த கோப்பை மீண்டும் இறக்குமதி செய்யலாம்."
+ "முழு காப்புப்பிரதியை ஏற்றுமதி செய்க"
+ "தரவுத்தளம்"
+ "இருள்"
+ "வெளிச்சம்"
+ "தீம்"
+ "கணினி இயல்புநிலை"
+ "பயன்பாட்டு மொழி"
+ "இடைமுகம்"
+ "உங்கள் தேடல் நீங்கள் முயற்சிக்க வேண்டிய பட்டியலில் உள்ள எந்த சமையல் குறிப்புகளுடனும் பொருந்தவில்ல"
+ "உங்கள் தேடல் உங்களுக்கு பிடித்தவற்றில் எந்த சமையல் குறிப்புகளுடனும் பொருந்தவில்லைை"
+ "உங்கள் தேடல் இப்பகுப்பில் எந்த சமையல் குறிப்புகளுடனும் பொருந்தவில்லை"
+ "உங்கள் தேடல் எந்த சமையல் குறிப்புகளுடனும் பொருந்தவில்லை"
+ "எந்த சமையல் குறிப்புகளும் இல்லை"
+ "இந்த பகுப்பில் எந்த சமையல் குறிப்புகளும் இல்லை"
+ "நீங்கள் பிடித்ததாகக் குறிக்கும் சமையல் குறிப்புகள் இங்கே பட்டியலிடப்படும்"
+ "இன்னும் பிடித்தவை எதுவும் இல்லை"
+ "முயற்சிக்க வேண்டும் என நீங்கள் குறிக்கும் சமையல் குறிப்புகள் இங்கே பட்டியலிடப்படும்"
+ "அனைத்தும் செய்யப்பட்டுள்ளன!"
+ "சில குறிப்புகளைச் சேர்க்க பென்சில் பொத்தானைப் பயன்படுத்தவும்"
+ "சில சேர்க்கைகளைச் சேர்க்க பென்சில் பொத்தானைப் பயன்படுத்தவும்"
+ "செய்முறைகளைச் சேர்க்க பென்சில் பொத்தானைப் பயன்படுத்தவும்"
+ "தேவையான பொருட்களைச் சேர்க்க பென்சில் பொத்தானைப் பயன்படுத்தவும்"
+ "ஒரு சமையல் குறிப்பைச் சேர்க்க பிளஸ் பொத்தானைப் பயன்படுத்தவும்"
+ "உங்கள் சமையல் குறிப்புகளைச் சேர்க்கத் தொடங்குங்கள்!"
+ "பெரிய"
+ "நடுத்தர"
+ "சிறிய"
+ "குச்சி"
+ "டஜன்"
+ "துளி"
+ "கிள்ளு"
+ "துண்டு"
+ "பல்"
+ "இலை"
+ "அங்குலம்"
+ "சென்டிமீட்டர்"
+ "கிலோகிராம்"
+ "கிராம்"
+ "மில்லிகிராம்"
+ "பவுண்டு"
+ "அவுன்ஸ்"
+ "லிட்டர்"
+ "மில்லிலிட்டர்"
+ "கேலன்"
+ "குவிண்ட்"
+ "பைண்ட்"
+ "கோப்பை"
+ "திரவ அவுன்ஸ"
+ "தேக்கரண்டி"
+ "இனிப்பு ஸ்பூன்"
+ "டீஸ்பூன்"
+ "அலகு"
+ "அலகு"
+ "ரொட்டித் துண்டு"
+ "வடை"
+ "ரோல்"
+ "லிட்டர்"
+ "மில்லிலிட்டர்"
+ "கேலன்"
+ "கோப்பை"
+ "கிலோகிராம்"
+ "கிராம்"
+ "பவுண்டு"
+ "அவுன்ஸ்"
+ "திரவ அவுன்ஸ்"
+ "தேக்கரண்டி"
+ "டீஸ்பூன்"
+ "துண்டு"
+ "கூறு"
+ "சைவம்"
+ "வேகன்"
+ "வரையறுக்கப்படாதவை"
+ "சூப்கள்"
+ "தின்பண்டங்கள்"
+ "தொடு கறிகள்"
+ "கடல் உணவு"
+ "சாஸ்கள்"
+ "சாலடுகள்"
+ "சோறு"
+ "கோழி"
+ "பாஸ்தா"
+ "நூடுல்ஸ்"
+ "இறைச்சி"
+ "முக்கிய உணவுகள்"
+ "மதிய உணவு"
+ "ஆரோக்கியமானவை"
+ "மதுபானம்"
+ "இரவு உணவு"
+ "இனிப்புகள்"
+ "காலை உணவு"
+ "ரொட்டிகள்"
+ "பானங்கள்"
+ "பார்பிக்யூ"
+ "பசித்தூண்டி"
+ "பற்றி"
+ "அமைப்புகள்"
+ "பகுப்புகள்"
+ "உணவுத் திட்டம்"
+ "பிடித்தவை"
+ "பின்னர் முயற்சிக்க"
+ "என்ரெசிபீஸ்"
+ "என்ரெசிபீஸ்"
+ "என்ரெசிபீஸ்"
+ "என்ரெசிபீஸ்"
+
diff --git a/app/resources/Android/src/main/res/values/strings.xml b/app/resources/Android/src/main/res/values/strings.xml
index 0df84bce..a57a1f20 100644
--- a/app/resources/Android/src/main/res/values/strings.xml
+++ b/app/resources/Android/src/main/res/values/strings.xml
@@ -1,5 +1,291 @@
+ "Invalid file:"
+ "Backup file has been modified externally."
+ "Backup file seems empty."
+ "Backup file is incorrect or corrupt."
+ "Import failed"
+ "Remove recipe from snacks?"
+ "Remove recipe from dinner?"
+ "Remove recipe from lunch?"
+ "Remove recipe from breakfast?"
+ "Untitled Recipe"
+ "Star rating"
+ "Created"
+ "Filtered result"
+ "OK"
+ "recipes updated"
+ "recipes already exists"
+ "recipes imported"
+ "recipes found"
+ "Import summary"
+ "separate with spaces"
+ "Tags"
+ "No tags available"
+ "All Tags"
+ "All Categories"
+ "Vietnamese"
+ "Turkish"
+ "Thai"
+ "Swedish"
+ "Sri Lankan"
+ "Spanish"
+ "Scottish"
+ "Russian"
+ "Portuguese"
+ "Nigerian"
+ "Mexican"
+ "Korean"
+ "Kenyan"
+ "Jewish"
+ "Japanese"
+ "Jamaican"
+ "Italian"
+ "Irish"
+ "Indian"
+ "Greek"
+ "German"
+ "French"
+ "Filipino"
+ "English"
+ "Egyptian"
+ "Danish"
+ "Chinese"
+ "British"
+ "Brazilian"
+ "American"
+ "All Cuisines"
+ "Cuisines"
+ "Cuisine"
+ "Are you sure you want to remove"
+ "Units"
+ "Remove unit?"
+ "Remove yield unit?"
+ "Remove category?"
+ "Remove cuisine?"
+ "New unit"
+ "New cuisine"
+ "Challenging"
+ "Moderate"
+ "Easy"
+ "Oldest first"
+ "Newest first"
+ "Last updated"
+ "Difficulty level"
+ "Rating"
+ "Slowest first"
+ "Quickest first"
+ "Your search did not match any recipes in the filtered result"
+ "Recipe not found"
+ "Reset successful"
+ "Reset units list"
+ "Reset yield units list"
+ "Reset categories list"
+ "Reset cuisines list"
+ "Resetting a list will NOT delete your existing entries but only restores the deleted default entries."
+ "Reset"
+ "Helps you choose what to cook when you can\'t decide"
+ "Shake to view random recipe"
+ "Options"
+ "User guide"
+ "Privacy policy"
+ "View on GitHub"
+ "Translator"
+ "Contributors"
+ "Shared via EnRecipes. Get it on Play Store or F-Droid."
+ "Permission denied"
+ "Import successful"
+ "Verifying..."
+ "long time ago"
+ "months ago"
+ "weeks ago"
+ "days ago"
+ "yesterday"
+ "today"
+ "You tried this recipe:"
+ "snacks"
+ "dinner"
+ "lunch"
+ "breakfast"
+ "Crop photo"
+ "REPLACE PHOTO"
+ "Recipe photo"
+ "EnRecipes requires storage permission in order to set recipe photo."
+ "Required"
+ "New category"
+ "New yield unit"
+ "Remove note?"
+ "Remove combination?"
+ "Remove instruction?"
+ "Remove ingredient?"
+ "KEEP EDITING"
+ "DISCARD"
+ "Are you sure you want to discard unsaved changes to this recipe?"
+ "Unsaved changes"
+ "Search"
+ "Are you sure you want to delete the recipe"
+ "DELETE"
+ "Delete recipe?"
+ "Removed from Try Later"
+ "Added to Try Later"
+ "Removed from Favourites"
+ "Added to Favourites"
+ "Add at least one recipe to perform a backup"
+ "EnRecipes requires storage permission in order to backup your data to this device."
+ "CONTINUE"
+ "NOT NOW"
+ "EnRecipes requires storage permission in order to import your data from a previous backup."
+ "Grant permission"
+ "EnRecipes needs to be restarted for the app language to take effect."
+ "EnRecipes needs to be restarted for the theme change to take effect."
+ "RESTART"
+ "Restart required"
+ "SET"
+ "ADD NEW"
+ "Share"
+ "Overview"
+ "Recipe"
+ "Photo"
+ "min"
+ "hr"
+ "My Healthy Recipe"
+ "Nothing here! Add some recipes and try again."
+ "Select a recipe"
+ "ADD"
+ "REMOVE"
+ "CANCEL"
+ "Sort by"
+ "Step"
+ "Item"
+ "ADD NOTE"
+ "Notes"
+ "Note"
+ "ADD COMBINATION"
+ "Combinations"
+ "ADD STEP"
+ "Instructions"
+ "Instruction"
+ "ADD INGREDIENT"
+ "Ingredients"
+ "Ingredient"
+ "Yield measured in"
+ "Yield quantity"
+ "Cooking time"
+ "Preparation time"
+ "Category"
+ "Title"
+ "Edit recipe"
+ "New recipe"
+ "Vishnu Raghav B"
+ "Author"
+ "for reporting issues, suggestions and feedback"
+ "Join the Telegram group"
+ "Version"
+ "Supports full backups exported by this app"
+ "Import from backup"
+ "Generates a zip file that contains all your data. This file can be imported back."
+ "Export a full backup"
+ "Database"
+ "Dark"
+ "Light"
+ "Theme"
+ "System default"
+ "App language"
+ "Interface"
+ "Your search did not match any recipes in your try later list"
+ "Your search did not match any recipes in your favourites"
+ "Your search did not match any recipes in this category"
+ "Your search did not match any recipes"
+ "No recipes found"
+ "Category looks empty"
+ "Recipes you mark as favourite will be listed here"
+ "No favourites yet"
+ "Recipes you mark as try later will be listed here"
+ "All done!"
+ "Use the pencil button to add some notes"
+ "Use the pencil button to add some combinations"
+ "Use the pencil button to add some instructions"
+ "Use the pencil button to add some ingredients"
+ "Use the plus button to add one"
+ "Start adding your recipes!"
+ "large"
+ "medium"
+ "small"
+ "stick"
+ "dozen"
+ "drop"
+ "pinch"
+ "piece"
+ "clove"
+ "leaf"
+ "in"
+ "cm"
+ "kg"
+ "g"
+ "mg"
+ "lb"
+ "oz"
+ "l"
+ "ml"
+ "gal"
+ "qt"
+ "pt"
+ "cup"
+ "fl oz"
+ "tbsp"
+ "dsp"
+ "tsp"
+ "Unit"
+ "unit"
+ "Loaf"
+ "Patty"
+ "Roll"
+ "Litre"
+ "Millilitre"
+ "Gallon"
+ "Cup"
+ "Kilogram"
+ "Gram"
+ "Pound"
+ "Ounce"
+ "Fluid Ounce"
+ "Tablespoon"
+ "Teaspoon"
+ "Piece"
+ "Serving"
+ "Vegetarian"
+ "Vegan"
+ "Undefined"
+ "Soups"
+ "Snacks"
+ "Side dishes"
+ "Seafood"
+ "Sauces"
+ "Salads"
+ "Rice"
+ "Poultry"
+ "Pasta"
+ "Noodles"
+ "Meat"
+ "Main dishes"
+ "Lunch"
+ "Healthy"
+ "Drinks"
+ "Dinner"
+ "Desserts"
+ "Breakfast"
+ "Breads"
+ "Beverages"
+ "Barbecue"
+ "Appetizers"
+ "About"
+ "Settings"
+ "Categories"
+ "Meal Planner"
+ "Favourites"
+ "Try Later"
+ "EnRecipes"
+ "EnRecipes"
"EnRecipes"
"EnRecipes"
diff --git a/platforms/android/.gradle/6.4/executionHistory/executionHistory.bin b/platforms/android/.gradle/6.4/executionHistory/executionHistory.bin
index e3cc3891..fda69899 100644
Binary files a/platforms/android/.gradle/6.4/executionHistory/executionHistory.bin and b/platforms/android/.gradle/6.4/executionHistory/executionHistory.bin differ
diff --git a/platforms/android/.gradle/6.4/executionHistory/executionHistory.lock b/platforms/android/.gradle/6.4/executionHistory/executionHistory.lock
index abe4f782..d9d32efa 100644
Binary files a/platforms/android/.gradle/6.4/executionHistory/executionHistory.lock and b/platforms/android/.gradle/6.4/executionHistory/executionHistory.lock differ
diff --git a/platforms/android/.gradle/6.4/fileContent/fileContent.lock b/platforms/android/.gradle/6.4/fileContent/fileContent.lock
index bd68107c..2c0ea3e8 100644
Binary files a/platforms/android/.gradle/6.4/fileContent/fileContent.lock and b/platforms/android/.gradle/6.4/fileContent/fileContent.lock differ
diff --git a/platforms/android/.gradle/6.4/fileHashes/fileHashes.bin b/platforms/android/.gradle/6.4/fileHashes/fileHashes.bin
index 1940cabf..c96df8bf 100644
Binary files a/platforms/android/.gradle/6.4/fileHashes/fileHashes.bin and b/platforms/android/.gradle/6.4/fileHashes/fileHashes.bin differ
diff --git a/platforms/android/.gradle/6.4/fileHashes/fileHashes.lock b/platforms/android/.gradle/6.4/fileHashes/fileHashes.lock
index 3e9a61e2..23c5afbe 100644
Binary files a/platforms/android/.gradle/6.4/fileHashes/fileHashes.lock and b/platforms/android/.gradle/6.4/fileHashes/fileHashes.lock differ
diff --git a/platforms/android/.gradle/6.4/fileHashes/resourceHashesCache.bin b/platforms/android/.gradle/6.4/fileHashes/resourceHashesCache.bin
index 52c8dc16..116984ce 100644
Binary files a/platforms/android/.gradle/6.4/fileHashes/resourceHashesCache.bin and b/platforms/android/.gradle/6.4/fileHashes/resourceHashesCache.bin differ
diff --git a/platforms/android/.gradle/6.4/javaCompile/classAnalysis.bin b/platforms/android/.gradle/6.4/javaCompile/classAnalysis.bin
index 01e7e13f..f4b82a24 100644
Binary files a/platforms/android/.gradle/6.4/javaCompile/classAnalysis.bin and b/platforms/android/.gradle/6.4/javaCompile/classAnalysis.bin differ
diff --git a/platforms/android/.gradle/6.4/javaCompile/jarAnalysis.bin b/platforms/android/.gradle/6.4/javaCompile/jarAnalysis.bin
index 24fa6943..d366b18d 100644
Binary files a/platforms/android/.gradle/6.4/javaCompile/jarAnalysis.bin and b/platforms/android/.gradle/6.4/javaCompile/jarAnalysis.bin differ
diff --git a/platforms/android/.gradle/6.4/javaCompile/javaCompile.lock b/platforms/android/.gradle/6.4/javaCompile/javaCompile.lock
index 930424b6..4be20809 100644
Binary files a/platforms/android/.gradle/6.4/javaCompile/javaCompile.lock and b/platforms/android/.gradle/6.4/javaCompile/javaCompile.lock differ
diff --git a/platforms/android/.gradle/6.4/javaCompile/taskHistory.bin b/platforms/android/.gradle/6.4/javaCompile/taskHistory.bin
index 7680a6e4..e28c7c30 100644
Binary files a/platforms/android/.gradle/6.4/javaCompile/taskHistory.bin and b/platforms/android/.gradle/6.4/javaCompile/taskHistory.bin differ
diff --git a/platforms/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/platforms/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 1e696b19..d8a279b7 100644
Binary files a/platforms/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/platforms/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/platforms/android/.gradle/buildOutputCleanup/cache.properties b/platforms/android/.gradle/buildOutputCleanup/cache.properties
index 2b4015e1..d52b03ba 100644
--- a/platforms/android/.gradle/buildOutputCleanup/cache.properties
+++ b/platforms/android/.gradle/buildOutputCleanup/cache.properties
@@ -1,2 +1,2 @@
-#Tue Dec 29 00:27:03 IST 2020
+#Wed Dec 30 13:12:10 IST 2020
gradle.version=6.4
diff --git a/platforms/android/.gradle/buildOutputCleanup/outputFiles.bin b/platforms/android/.gradle/buildOutputCleanup/outputFiles.bin
index 3b40e635..47ded199 100644
Binary files a/platforms/android/.gradle/buildOutputCleanup/outputFiles.bin and b/platforms/android/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/platforms/android/.gradle/checksums/checksums.lock b/platforms/android/.gradle/checksums/checksums.lock
index 3a67ba62..abef8ba1 100644
Binary files a/platforms/android/.gradle/checksums/checksums.lock and b/platforms/android/.gradle/checksums/checksums.lock differ
diff --git a/platforms/android/.ns-plugins-build-data.json b/platforms/android/.ns-plugins-build-data.json
index 3cc81d3c..634095e4 100644
--- a/platforms/android/.ns-plugins-build-data.json
+++ b/platforms/android/.ns-plugins-build-data.json
@@ -38,8 +38,8 @@
},
"nativescript-plugin-filepicker": {
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-plugin-filepicker/platforms/android/README.md": "45f2f63427be0a461a7e2dfd5ff0ad5bab64068f",
- "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-plugin-filepicker/platforms/android/include.gradle": "06e7e1be49eb6d614094596003280aa7eea789f3",
- "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-plugin-filepicker/platforms/android/nativescript_plugin_filepicker.aar": "e53441dd997d4849f45247b4b4eda20fac860b5d"
+ "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-plugin-filepicker/platforms/android/nativescript_plugin_filepicker.aar": "e53441dd997d4849f45247b4b4eda20fac860b5d",
+ "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-plugin-filepicker/platforms/android/include.gradle": "06e7e1be49eb6d614094596003280aa7eea789f3"
},
"nativescript-ui-calendar": {
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-ui-calendar/platforms/android/typings/calendar.d.ts": "6e196553478b7d7fbe92645b60d0ac7bfa5339db",
@@ -68,8 +68,8 @@
},
"@nativescript-community/text": {
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/AndroidManifest.xml": "b80912f909195692d3bd071566274feba0b37660",
- "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/CustomBackgroundSpan.java": "ae9e0e6d699e669f96ed7042f2145a1ab0bf6727",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/CustomTypefaceSpan.java": "421f984280aa806183057f2ddd53febdbc32d2b1",
+ "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/CustomBackgroundSpan.java": "ae9e0e6d699e669f96ed7042f2145a1ab0bf6727",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/Font.java": "fb4d246ad367d178e11ef08c34ec182418d30890",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/HtmlToSpannedConverter.java": "38643430e4b8cac690b89a07adc3a86f7060f93d",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/URLSpanNoUnderline.java": "b3da85c1d16eff30c54fb5725e1e46fea265d7ce",
diff --git a/platforms/android/.nsprepareinfo b/platforms/android/.nsprepareinfo
index 02c468e0..cd3d0f31 100644
--- a/platforms/android/.nsprepareinfo
+++ b/platforms/android/.nsprepareinfo
@@ -1,7 +1,7 @@
{
- "time": "Tue Dec 29 2020 11:28:21 GMT+0530 (India Standard Time)",
+ "time": "Wed Dec 30 2020 14:50:17 GMT+0530 (India Standard Time)",
"nativePlatformStatus": "3",
"changesRequireBuild": true,
"projectFileHash": "de8936b04a8811e04d93e9717fc4448bf88e2e84157623dd6556d8a57dadf3a1",
- "changesRequireBuildTime": "Tue Dec 29 2020 11:28:21 GMT+0530 (India Standard Time)"
+ "changesRequireBuildTime": "Wed Dec 30 2020 14:50:17 GMT+0530 (India Standard Time)"
}
\ No newline at end of file
diff --git a/platforms/android/app/build/outputs/apk/.nsbuildinfo b/platforms/android/app/build/outputs/apk/.nsbuildinfo
index 80f371a9..65ff5035 100644
--- a/platforms/android/app/build/outputs/apk/.nsbuildinfo
+++ b/platforms/android/app/build/outputs/apk/.nsbuildinfo
@@ -1,4 +1,4 @@
{
- "prepareTime": "Tue Dec 29 2020 11:28:21 GMT+0530 (India Standard Time)",
- "buildTime": "Tue Dec 29 2020 11:28:48 GMT+0530 (India Standard Time)"
+ "prepareTime": "Wed Dec 30 2020 14:50:17 GMT+0530 (India Standard Time)",
+ "buildTime": "Wed Dec 30 2020 14:50:40 GMT+0530 (India Standard Time)"
}
\ No newline at end of file
diff --git a/platforms/android/app/build/outputs/apk/.nshashes b/platforms/android/app/build/outputs/apk/.nshashes
index b5c67cea..0e43eaf9 100644
--- a/platforms/android/app/build/outputs/apk/.nshashes
+++ b/platforms/android/app/build/outputs/apk/.nshashes
@@ -50,8 +50,8 @@
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/src/main/assets/app/resources/Android/src/main/res/drawable-xxxhdpi/photo.png": "6500603c21d7cc1738db44ba26157ab47b621747",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/src/main/assets/app/resources/Android/src/main/res/drawable-xxxhdpi/plus.png": "02eab956eabbe68bb27973582c569b822f130d2a",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/src/main/assets/app/resources/Android/src/main/res/drawable-xxxhdpi/share.png": "ebe8381c0e77d40abd5f41daf94532248caaa9dc",
- "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/src/main/assets/app/runtime.js": "af307a469f93a9d332e8d059f5929677c4505e47",
+ "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/src/main/assets/app/runtime.js": "e46a5b846bc23d10ebce68cde16be7cd70e102f4",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/src/main/assets/app/fonts/boxicons.ttf": "6c9944326ed3c901afcb78a9ed07906f04f9cbb2",
- "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/src/main/assets/app/bundle.js": "d75efaec53f7fc6e02d8ac82ac0c6532f07e86a3",
+ "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/src/main/assets/app/bundle.js": "3fbfd0ad9e7ca4368f83a8f1900ecb003c11948a",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/src/main/assets/app/vendor.js": "cfe29102f0c4d6f7ff8d95a4194ca064f5444a3a"
}
\ No newline at end of file
diff --git a/platforms/android/app/src/main/assets/app/runtime.js b/platforms/android/app/src/main/assets/app/runtime.js
index 381fe27b..4e3f0718 100644
--- a/platforms/android/app/src/main/assets/app/runtime.js
+++ b/platforms/android/app/src/main/assets/app/runtime.js
@@ -83,7 +83,7 @@
/******/
/******/ var hotApplyOnUpdate = true;
/******/ // eslint-disable-next-line no-unused-vars
-/******/ var hotCurrentHash = "1906ceddfce82e674abc";
+/******/ var hotCurrentHash = "b0b35382a88677fade81";
/******/ var hotRequestTimeout = 10000;
/******/ var hotCurrentModuleData = {};
/******/ var hotCurrentChildModule;
@@ -892,4 +892,4 @@
/******/ })
/************************************************************************/
/******/ ([]);
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxRQUFRLG9CQUFvQjtRQUM1QjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsaUJBQWlCLDRCQUE0QjtRQUM3QztRQUNBO1FBQ0Esa0JBQWtCLDJCQUEyQjtRQUM3QztRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsV0FBVztRQUNYO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLGVBQWU7UUFDZjtRQUNBO1FBQ0E7UUFDQTtRQUNBLFdBQVc7UUFDWDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLE1BQU07UUFDTjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7O1FBRUw7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3QjtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHFCQUFxQixnQkFBZ0I7UUFDckM7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQSxxQkFBcUIsZ0JBQWdCO1FBQ3JDO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7O1FBRUw7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0EsS0FBSzs7UUFFTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0Esa0JBQWtCLDhCQUE4QjtRQUNoRDtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBSTtRQUNKOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsSUFBSTtRQUNKO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBLE9BQU87UUFDUDtRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQUk7UUFDSjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxvQkFBb0IsMkJBQTJCO1FBQy9DO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxPQUFPO1FBQ1A7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLG1CQUFtQixjQUFjO1FBQ2pDO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSxnQkFBZ0IsS0FBSztRQUNyQjtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLGdCQUFnQixZQUFZO1FBQzVCO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0EsY0FBYyw0QkFBNEI7UUFDMUM7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFJOztRQUVKO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTs7UUFFQTtRQUNBO1FBQ0EsZUFBZSw0QkFBNEI7UUFDM0M7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQSxlQUFlLDRCQUE0QjtRQUMzQztRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsaUJBQWlCLHVDQUF1QztRQUN4RDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsaUJBQWlCLHVDQUF1QztRQUN4RDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLGlCQUFpQixzQkFBc0I7UUFDdkM7UUFDQTtRQUNBO1FBQ0EsUUFBUTtRQUNSO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLFVBQVU7UUFDVjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxjQUFjLHdDQUF3QztRQUN0RDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0EsT0FBTztRQUNQO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLFNBQVM7UUFDVDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLFFBQVE7UUFDUjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0EsS0FBSztRQUNMOztRQUVBO1FBQ0E7UUFDQTtRQUNBLElBQUk7UUFDSjs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsZUFBZTtRQUNmO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOztRQUVBO1FBQ0Esc0NBQXNDLHVCQUF1Qjs7UUFFN0Q7UUFDQTtRQUNBO1FBQ0E7UUFDQSxnQkFBZ0IsdUJBQXVCO1FBQ3ZDOzs7UUFHQTtRQUNBIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBpbnN0YWxsIGEgSlNPTlAgY2FsbGJhY2sgZm9yIGNodW5rIGxvYWRpbmdcbiBcdGZ1bmN0aW9uIHdlYnBhY2tKc29ucENhbGxiYWNrKGRhdGEpIHtcbiBcdFx0dmFyIGNodW5rSWRzID0gZGF0YVswXTtcbiBcdFx0dmFyIG1vcmVNb2R1bGVzID0gZGF0YVsxXTtcbiBcdFx0dmFyIGV4ZWN1dGVNb2R1bGVzID0gZGF0YVsyXTtcbiBcdFx0Ly8gYWRkIFwibW9yZU1vZHVsZXNcIiB0byB0aGUgbW9kdWxlcyBvYmplY3QsXG4gXHRcdC8vIHRoZW4gZmxhZyBhbGwgXCJjaHVua0lkc1wiIGFzIGxvYWRlZCBhbmQgZmlyZSBjYWxsYmFja1xuIFx0XHR2YXIgbW9kdWxlSWQsIGNodW5rSWQsIGkgPSAwLCByZXNvbHZlcyA9IFtdO1xuIFx0XHRmb3IoO2kgPCBjaHVua0lkcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdGNodW5rSWQgPSBjaHVua0lkc1tpXTtcbiBcdFx0XHRpZihpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcbiBcdFx0XHRcdHJlc29sdmVzLnB1c2goaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdWzBdKTtcbiBcdFx0XHR9XG4gXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gMDtcbiBcdFx0fVxuIFx0XHRmb3IobW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0bW9kdWxlc1ttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGlmKHBhcmVudEpzb25wRnVuY3Rpb24pIHBhcmVudEpzb25wRnVuY3Rpb24oZGF0YSk7XG4gXHRcdHdoaWxlKHJlc29sdmVzLmxlbmd0aCkge1xuIFx0XHRcdHJlc29sdmVzLnNoaWZ0KCkoKTtcbiBcdFx0fVxuXG4gXHRcdC8vIGFkZCBlbnRyeSBtb2R1bGVzIGZyb20gbG9hZGVkIGNodW5rIHRvIGRlZmVycmVkIGxpc3RcbiBcdFx0ZGVmZXJyZWRNb2R1bGVzLnB1c2guYXBwbHkoZGVmZXJyZWRNb2R1bGVzLCBleGVjdXRlTW9kdWxlcyB8fCBbXSk7XG5cbiBcdFx0Ly8gcnVuIGRlZmVycmVkIG1vZHVsZXMgd2hlbiBhbGwgY2h1bmtzIHJlYWR5XG4gXHRcdHJldHVybiBjaGVja0RlZmVycmVkTW9kdWxlcygpO1xuIFx0fTtcbiBcdGZ1bmN0aW9uIGNoZWNrRGVmZXJyZWRNb2R1bGVzKCkge1xuIFx0XHR2YXIgcmVzdWx0O1xuIFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVmZXJyZWRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0dmFyIGRlZmVycmVkTW9kdWxlID0gZGVmZXJyZWRNb2R1bGVzW2ldO1xuIFx0XHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuIFx0XHRcdGZvcih2YXIgaiA9IDE7IGogPCBkZWZlcnJlZE1vZHVsZS5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0dmFyIGRlcElkID0gZGVmZXJyZWRNb2R1bGVbal07XG4gXHRcdFx0XHRpZihpbnN0YWxsZWRDaHVua3NbZGVwSWRdICE9PSAwKSBmdWxmaWxsZWQgPSBmYWxzZTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYoZnVsZmlsbGVkKSB7XG4gXHRcdFx0XHRkZWZlcnJlZE1vZHVsZXMuc3BsaWNlKGktLSwgMSk7XG4gXHRcdFx0XHRyZXN1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IGRlZmVycmVkTW9kdWxlWzBdKTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHJlc3VsdDtcbiBcdH1cbiBcdGZ1bmN0aW9uIGhvdERpc3Bvc2VDaHVuayhjaHVua0lkKSB7XG4gXHQgICAgZGVsZXRlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbiBcdH1cbiBcdHZhciBwYXJlbnRIb3RVcGRhdGVDYWxsYmFjayA9IGdsb2JhbFtcIndlYnBhY2tIb3RVcGRhdGVcIl07XG4gXHRnbG9iYWxbXCJ3ZWJwYWNrSG90VXBkYXRlXCJdID0gICAgIGZ1bmN0aW9uIHdlYnBhY2tIb3RVcGRhdGVDYWxsYmFjayhjaHVua0lkLCBtb3JlTW9kdWxlcykge1xuIFx0ICAgICAgICBob3RBZGRVcGRhdGVDaHVuayhjaHVua0lkLCBtb3JlTW9kdWxlcyk7XG4gXHQgICAgICAgIGlmIChwYXJlbnRIb3RVcGRhdGVDYWxsYmFjaykge1xuIFx0ICAgICAgICAgICAgcGFyZW50SG90VXBkYXRlQ2FsbGJhY2soY2h1bmtJZCwgbW9yZU1vZHVsZXMpO1xuIFx0ICAgICAgICB9XG4gXHQgICAgfVxuXG4gXHQgICAgZnVuY3Rpb24gaG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKSB7XG4gXHQgICAgICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gJy4vJyArIFwiXCIgKyBjaHVua0lkICsgXCIuXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNcIjtcbiBcdCAgICAgICAgdHJ5IHtcbiBcdCAgICAgICAgICAgIHJlcXVpcmUocmVxdWVzdFBhdGgpO1xuIFx0ICAgICAgICB9IGNhdGNoIChlKSB7XG4gXHQgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkhvdCBkb3dubG9hZCBmb3IgdXBkYXRlIGNodW5rIGZhaWxlZC5cIik7XG4gXHQgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuIFx0ICAgICAgICB9XG4gXHQgICAgfVxuXG4gXHQgICAgZnVuY3Rpb24gaG90RG93bmxvYWRNYW5pZmVzdCgpIHtcbiBcdCAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiBcdCAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gJy4vJyArIFwiXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNvblwiO1xuIFx0ICAgICAgICAgICAgdHJ5IHtcbiBcdCAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGUgPSByZXF1aXJlKHJlcXVlc3RQYXRoKTtcbiBcdCAgICAgICAgICAgICAgICByZXNvbHZlKHVwZGF0ZSk7XG4gXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gXHQgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJIb3QgZG93bmxvYWQgZm9yIG1hbmlmZXN0IGZhaWxlZC5cIik7XG4gXHQgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiBcdCAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gXHQgICAgICAgICAgICB9XG4gXHQgICAgICAgIH0pO1xuIFx0ICAgIH1cblxuIFx0dmFyIGhvdEFwcGx5T25VcGRhdGUgPSB0cnVlO1xuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHR2YXIgaG90Q3VycmVudEhhc2ggPSBcIjE5MDZjZWRkZmNlODJlNjc0YWJjXCI7XG4gXHR2YXIgaG90UmVxdWVzdFRpbWVvdXQgPSAxMDAwMDtcbiBcdHZhciBob3RDdXJyZW50TW9kdWxlRGF0YSA9IHt9O1xuIFx0dmFyIGhvdEN1cnJlbnRDaGlsZE1vZHVsZTtcbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0dmFyIGhvdEN1cnJlbnRQYXJlbnRzID0gW107XG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdHZhciBob3RDdXJyZW50UGFyZW50c1RlbXAgPSBbXTtcblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RDcmVhdGVSZXF1aXJlKG1vZHVsZUlkKSB7XG4gXHRcdHZhciBtZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRpZiAoIW1lKSByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXztcbiBcdFx0dmFyIGZuID0gZnVuY3Rpb24ocmVxdWVzdCkge1xuIFx0XHRcdGlmIChtZS5ob3QuYWN0aXZlKSB7XG4gXHRcdFx0XHRpZiAoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XSkge1xuIFx0XHRcdFx0XHRpZiAoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XS5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpID09PSAtMSkge1xuIFx0XHRcdFx0XHRcdGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5wdXNoKG1vZHVsZUlkKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xuIFx0XHRcdFx0XHRob3RDdXJyZW50Q2hpbGRNb2R1bGUgPSByZXF1ZXN0O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKG1lLmNoaWxkcmVuLmluZGV4T2YocmVxdWVzdCkgPT09IC0xKSB7XG4gXHRcdFx0XHRcdG1lLmNoaWxkcmVuLnB1c2gocmVxdWVzdCk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGNvbnNvbGUud2FybihcbiBcdFx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgK1xuIFx0XHRcdFx0XHRcdHJlcXVlc3QgK1xuIFx0XHRcdFx0XHRcdFwiKSBmcm9tIGRpc3Bvc2VkIG1vZHVsZSBcIiArXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWRcbiBcdFx0XHRcdCk7XG4gXHRcdFx0XHRob3RDdXJyZW50UGFyZW50cyA9IFtdO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhyZXF1ZXN0KTtcbiBcdFx0fTtcbiBcdFx0dmFyIE9iamVjdEZhY3RvcnkgPSBmdW5jdGlvbiBPYmplY3RGYWN0b3J5KG5hbWUpIHtcbiBcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG4gXHRcdFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fW25hbWVdO1xuIFx0XHRcdFx0fSxcbiBcdFx0XHRcdHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiBcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfX1tuYW1lXSA9IHZhbHVlO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH07XG4gXHRcdH07XG4gXHRcdGZvciAodmFyIG5hbWUgaW4gX193ZWJwYWNrX3JlcXVpcmVfXykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfX3dlYnBhY2tfcmVxdWlyZV9fLCBuYW1lKSAmJlxuIFx0XHRcdFx0bmFtZSAhPT0gXCJlXCIgJiZcbiBcdFx0XHRcdG5hbWUgIT09IFwidFwiXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIG5hbWUsIE9iamVjdEZhY3RvcnkobmFtZSkpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRmbi5lID0gZnVuY3Rpb24oY2h1bmtJZCkge1xuIFx0XHRcdGlmIChob3RTdGF0dXMgPT09IFwicmVhZHlcIikgaG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbiBcdFx0XHRob3RDaHVua3NMb2FkaW5nKys7XG4gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZShjaHVua0lkKS50aGVuKGZpbmlzaENodW5rTG9hZGluZywgZnVuY3Rpb24oZXJyKSB7XG4gXHRcdFx0XHRmaW5pc2hDaHVua0xvYWRpbmcoKTtcbiBcdFx0XHRcdHRocm93IGVycjtcbiBcdFx0XHR9KTtcblxuIFx0XHRcdGZ1bmN0aW9uIGZpbmlzaENodW5rTG9hZGluZygpIHtcbiBcdFx0XHRcdGhvdENodW5rc0xvYWRpbmctLTtcbiBcdFx0XHRcdGlmIChob3RTdGF0dXMgPT09IFwicHJlcGFyZVwiKSB7XG4gXHRcdFx0XHRcdGlmICghaG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdKSB7XG4gXHRcdFx0XHRcdFx0aG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0aWYgKGhvdENodW5rc0xvYWRpbmcgPT09IDAgJiYgaG90V2FpdGluZ0ZpbGVzID09PSAwKSB7XG4gXHRcdFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9O1xuIFx0XHRmbi50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0XHRpZiAobW9kZSAmIDEpIHZhbHVlID0gZm4odmFsdWUpO1xuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLnQodmFsdWUsIG1vZGUgJiB+MSk7XG4gXHRcdH07XG4gXHRcdHJldHVybiBmbjtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RDcmVhdGVNb2R1bGUobW9kdWxlSWQpIHtcbiBcdFx0dmFyIGhvdCA9IHtcbiBcdFx0XHQvLyBwcml2YXRlIHN0dWZmXG4gXHRcdFx0X2FjY2VwdGVkRGVwZW5kZW5jaWVzOiB7fSxcbiBcdFx0XHRfZGVjbGluZWREZXBlbmRlbmNpZXM6IHt9LFxuIFx0XHRcdF9zZWxmQWNjZXB0ZWQ6IGZhbHNlLFxuIFx0XHRcdF9zZWxmRGVjbGluZWQ6IGZhbHNlLFxuIFx0XHRcdF9zZWxmSW52YWxpZGF0ZWQ6IGZhbHNlLFxuIFx0XHRcdF9kaXNwb3NlSGFuZGxlcnM6IFtdLFxuIFx0XHRcdF9tYWluOiBob3RDdXJyZW50Q2hpbGRNb2R1bGUgIT09IG1vZHVsZUlkLFxuXG4gXHRcdFx0Ly8gTW9kdWxlIEFQSVxuIFx0XHRcdGFjdGl2ZTogdHJ1ZSxcbiBcdFx0XHRhY2NlcHQ6IGZ1bmN0aW9uKGRlcCwgY2FsbGJhY2spIHtcbiBcdFx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmQWNjZXB0ZWQgPSB0cnVlO1xuIFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJmdW5jdGlvblwiKSBob3QuX3NlbGZBY2NlcHRlZCA9IGRlcDtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpXG4gXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxuIFx0XHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gXHRcdFx0XHRlbHNlIGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gXHRcdFx0fSxcbiBcdFx0XHRkZWNsaW5lOiBmdW5jdGlvbihkZXApIHtcbiBcdFx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmRGVjbGluZWQgPSB0cnVlO1xuIFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIilcbiBcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXAubGVuZ3RoOyBpKyspXG4gXHRcdFx0XHRcdFx0aG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBbaV1dID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBdID0gdHJ1ZTtcbiBcdFx0XHR9LFxuIFx0XHRcdGRpc3Bvc2U6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gXHRcdFx0XHRob3QuX2Rpc3Bvc2VIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTtcbiBcdFx0XHR9LFxuIFx0XHRcdGFkZERpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuIFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG4gXHRcdFx0fSxcbiBcdFx0XHRyZW1vdmVEaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiBcdFx0XHRcdHZhciBpZHggPSBob3QuX2Rpc3Bvc2VIYW5kbGVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiBcdFx0XHRcdGlmIChpZHggPj0gMCkgaG90Ll9kaXNwb3NlSGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0fSxcbiBcdFx0XHRpbnZhbGlkYXRlOiBmdW5jdGlvbigpIHtcbiBcdFx0XHRcdHRoaXMuX3NlbGZJbnZhbGlkYXRlZCA9IHRydWU7XG4gXHRcdFx0XHRzd2l0Y2ggKGhvdFN0YXR1cykge1xuIFx0XHRcdFx0XHRjYXNlIFwiaWRsZVwiOlxuIFx0XHRcdFx0XHRcdGhvdFVwZGF0ZSA9IHt9O1xuIFx0XHRcdFx0XHRcdGhvdFVwZGF0ZVttb2R1bGVJZF0gPSBtb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0XHRob3RTZXRTdGF0dXMoXCJyZWFkeVwiKTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcInJlYWR5XCI6XG4gXHRcdFx0XHRcdFx0aG90QXBwbHlJbnZhbGlkYXRlZE1vZHVsZShtb2R1bGVJZCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJwcmVwYXJlXCI6XG4gXHRcdFx0XHRcdGNhc2UgXCJjaGVja1wiOlxuIFx0XHRcdFx0XHRjYXNlIFwiZGlzcG9zZVwiOlxuIFx0XHRcdFx0XHRjYXNlIFwiYXBwbHlcIjpcbiBcdFx0XHRcdFx0XHQoaG90UXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzID1cbiBcdFx0XHRcdFx0XHRcdGhvdFF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcyB8fCBbXSkucHVzaChtb2R1bGVJZCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGRlZmF1bHQ6XG4gXHRcdFx0XHRcdFx0Ly8gaWdub3JlIHJlcXVlc3RzIGluIGVycm9yIHN0YXRlc1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH0sXG5cbiBcdFx0XHQvLyBNYW5hZ2VtZW50IEFQSVxuIFx0XHRcdGNoZWNrOiBob3RDaGVjayxcbiBcdFx0XHRhcHBseTogaG90QXBwbHksXG4gXHRcdFx0c3RhdHVzOiBmdW5jdGlvbihsKSB7XG4gXHRcdFx0XHRpZiAoIWwpIHJldHVybiBob3RTdGF0dXM7XG4gXHRcdFx0XHRob3RTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuIFx0XHRcdH0sXG4gXHRcdFx0YWRkU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkge1xuIFx0XHRcdFx0aG90U3RhdHVzSGFuZGxlcnMucHVzaChsKTtcbiBcdFx0XHR9LFxuIFx0XHRcdHJlbW92ZVN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uKGwpIHtcbiBcdFx0XHRcdHZhciBpZHggPSBob3RTdGF0dXNIYW5kbGVycy5pbmRleE9mKGwpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBob3RTdGF0dXNIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHR9LFxuXG4gXHRcdFx0Ly9pbmhlcml0IGZyb20gcHJldmlvdXMgZGlzcG9zZSBjYWxsXG4gXHRcdFx0ZGF0YTogaG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdXG4gXHRcdH07XG4gXHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IHVuZGVmaW5lZDtcbiBcdFx0cmV0dXJuIGhvdDtcbiBcdH1cblxuIFx0dmFyIGhvdFN0YXR1c0hhbmRsZXJzID0gW107XG4gXHR2YXIgaG90U3RhdHVzID0gXCJpZGxlXCI7XG5cbiBcdGZ1bmN0aW9uIGhvdFNldFN0YXR1cyhuZXdTdGF0dXMpIHtcbiBcdFx0aG90U3RhdHVzID0gbmV3U3RhdHVzO1xuIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGhvdFN0YXR1c0hhbmRsZXJzLmxlbmd0aDsgaSsrKVxuIFx0XHRcdGhvdFN0YXR1c0hhbmRsZXJzW2ldLmNhbGwobnVsbCwgbmV3U3RhdHVzKTtcbiBcdH1cblxuIFx0Ly8gd2hpbGUgZG93bmxvYWRpbmdcbiBcdHZhciBob3RXYWl0aW5nRmlsZXMgPSAwO1xuIFx0dmFyIGhvdENodW5rc0xvYWRpbmcgPSAwO1xuIFx0dmFyIGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0dmFyIGhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307XG4gXHR2YXIgaG90QXZhaWxhYmxlRmlsZXNNYXAgPSB7fTtcbiBcdHZhciBob3REZWZlcnJlZDtcblxuIFx0Ly8gVGhlIHVwZGF0ZSBpbmZvXG4gXHR2YXIgaG90VXBkYXRlLCBob3RVcGRhdGVOZXdIYXNoLCBob3RRdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXM7XG5cbiBcdGZ1bmN0aW9uIHRvTW9kdWxlSWQoaWQpIHtcbiBcdFx0dmFyIGlzTnVtYmVyID0gK2lkICsgXCJcIiA9PT0gaWQ7XG4gXHRcdHJldHVybiBpc051bWJlciA/ICtpZCA6IGlkO1xuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RDaGVjayhhcHBseSkge1xuIFx0XHRpZiAoaG90U3RhdHVzICE9PSBcImlkbGVcIikge1xuIFx0XHRcdHRocm93IG5ldyBFcnJvcihcImNoZWNrKCkgaXMgb25seSBhbGxvd2VkIGluIGlkbGUgc3RhdHVzXCIpO1xuIFx0XHR9XG4gXHRcdGhvdEFwcGx5T25VcGRhdGUgPSBhcHBseTtcbiBcdFx0aG90U2V0U3RhdHVzKFwiY2hlY2tcIik7XG4gXHRcdHJldHVybiBob3REb3dubG9hZE1hbmlmZXN0KGhvdFJlcXVlc3RUaW1lb3V0KS50aGVuKGZ1bmN0aW9uKHVwZGF0ZSkge1xuIFx0XHRcdGlmICghdXBkYXRlKSB7XG4gXHRcdFx0XHRob3RTZXRTdGF0dXMoaG90QXBwbHlJbnZhbGlkYXRlZE1vZHVsZXMoKSA/IFwicmVhZHlcIiA6IFwiaWRsZVwiKTtcbiBcdFx0XHRcdHJldHVybiBudWxsO1xuIFx0XHRcdH1cbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdEF2YWlsYWJsZUZpbGVzTWFwID0gdXBkYXRlLmM7XG4gXHRcdFx0aG90VXBkYXRlTmV3SGFzaCA9IHVwZGF0ZS5oO1xuXG4gXHRcdFx0aG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbiBcdFx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuIFx0XHRcdFx0aG90RGVmZXJyZWQgPSB7XG4gXHRcdFx0XHRcdHJlc29sdmU6IHJlc29sdmUsXG4gXHRcdFx0XHRcdHJlamVjdDogcmVqZWN0XG4gXHRcdFx0XHR9O1xuIFx0XHRcdH0pO1xuIFx0XHRcdGhvdFVwZGF0ZSA9IHt9O1xuIFx0XHRcdGZvcih2YXIgY2h1bmtJZCBpbiBpbnN0YWxsZWRDaHVua3MpXG4gXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvbmUtYmxvY2tzXG4gXHRcdFx0e1xuIFx0XHRcdFx0aG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChcbiBcdFx0XHRcdGhvdFN0YXR1cyA9PT0gXCJwcmVwYXJlXCIgJiZcbiBcdFx0XHRcdGhvdENodW5rc0xvYWRpbmcgPT09IDAgJiZcbiBcdFx0XHRcdGhvdFdhaXRpbmdGaWxlcyA9PT0gMFxuIFx0XHRcdCkge1xuIFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gcHJvbWlzZTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90QWRkVXBkYXRlQ2h1bmsoY2h1bmtJZCwgbW9yZU1vZHVsZXMpIHtcbiBcdFx0aWYgKCFob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSB8fCAhaG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0pXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IGZhbHNlO1xuIFx0XHRmb3IgKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0aG90VXBkYXRlW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKC0taG90V2FpdGluZ0ZpbGVzID09PSAwICYmIGhvdENodW5rc0xvYWRpbmcgPT09IDApIHtcbiBcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCkge1xuIFx0XHRpZiAoIWhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdKSB7XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IHRydWU7XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzKys7XG4gXHRcdFx0aG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RVcGRhdGVEb3dubG9hZGVkKCkge1xuIFx0XHRob3RTZXRTdGF0dXMoXCJyZWFkeVwiKTtcbiBcdFx0dmFyIGRlZmVycmVkID0gaG90RGVmZXJyZWQ7XG4gXHRcdGhvdERlZmVycmVkID0gbnVsbDtcbiBcdFx0aWYgKCFkZWZlcnJlZCkgcmV0dXJuO1xuIFx0XHRpZiAoaG90QXBwbHlPblVwZGF0ZSkge1xuIFx0XHRcdC8vIFdyYXAgZGVmZXJyZWQgb2JqZWN0IGluIFByb21pc2UgdG8gbWFyayBpdCBhcyBhIHdlbGwtaGFuZGxlZCBQcm9taXNlIHRvXG4gXHRcdFx0Ly8gYXZvaWQgdHJpZ2dlcmluZyB1bmNhdWdodCBleGNlcHRpb24gd2FybmluZyBpbiBDaHJvbWUuXG4gXHRcdFx0Ly8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ2NTY2NlxuIFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG4gXHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcbiBcdFx0XHRcdFx0cmV0dXJuIGhvdEFwcGx5KGhvdEFwcGx5T25VcGRhdGUpO1xuIFx0XHRcdFx0fSlcbiBcdFx0XHRcdC50aGVuKFxuIFx0XHRcdFx0XHRmdW5jdGlvbihyZXN1bHQpIHtcbiBcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gXHRcdFx0XHRcdH0sXG4gXHRcdFx0XHRcdGZ1bmN0aW9uKGVycikge1xuIFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdChlcnIpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcbiBcdFx0XHRmb3IgKHZhciBpZCBpbiBob3RVcGRhdGUpIHtcbiBcdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaG90VXBkYXRlLCBpZCkpIHtcbiBcdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzLnB1c2godG9Nb2R1bGVJZChpZCkpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKG91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90QXBwbHkob3B0aW9ucykge1xuIFx0XHRpZiAoaG90U3RhdHVzICE9PSBcInJlYWR5XCIpXG4gXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYXBwbHkoKSBpcyBvbmx5IGFsbG93ZWQgaW4gcmVhZHkgc3RhdHVzXCIpO1xuIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiBcdFx0cmV0dXJuIGhvdEFwcGx5SW50ZXJuYWwob3B0aW9ucyk7XG4gXHR9XG5cbiBcdGZ1bmN0aW9uIGhvdEFwcGx5SW50ZXJuYWwob3B0aW9ucykge1xuIFx0XHRob3RBcHBseUludmFsaWRhdGVkTW9kdWxlcygpO1xuXG4gXHRcdHZhciBjYjtcbiBcdFx0dmFyIGk7XG4gXHRcdHZhciBqO1xuIFx0XHR2YXIgbW9kdWxlO1xuIFx0XHR2YXIgbW9kdWxlSWQ7XG5cbiBcdFx0ZnVuY3Rpb24gZ2V0QWZmZWN0ZWRTdHVmZih1cGRhdGVNb2R1bGVJZCkge1xuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xuIFx0XHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xuXG4gXHRcdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLm1hcChmdW5jdGlvbihpZCkge1xuIFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0Y2hhaW46IFtpZF0sXG4gXHRcdFx0XHRcdGlkOiBpZFxuIFx0XHRcdFx0fTtcbiBcdFx0XHR9KTtcbiBcdFx0XHR3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuIFx0XHRcdFx0dmFyIHF1ZXVlSXRlbSA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWVJdGVtLmlkO1xuIFx0XHRcdFx0dmFyIGNoYWluID0gcXVldWVJdGVtLmNoYWluO1xuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRpZiAoXG4gXHRcdFx0XHRcdCFtb2R1bGUgfHxcbiBcdFx0XHRcdFx0KG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZCAmJiAhbW9kdWxlLmhvdC5fc2VsZkludmFsaWRhdGVkKVxuIFx0XHRcdFx0KVxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGlmIChtb2R1bGUuaG90Ll9zZWxmRGVjbGluZWQpIHtcbiBcdFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtZGVjbGluZWRcIixcbiBcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4sXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG4gXHRcdFx0XHRcdH07XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAobW9kdWxlLmhvdC5fbWFpbikge1xuIFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdHR5cGU6IFwidW5hY2NlcHRlZFwiLFxuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcbiBcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbW9kdWxlLnBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0dmFyIHBhcmVudElkID0gbW9kdWxlLnBhcmVudHNbaV07XG4gXHRcdFx0XHRcdHZhciBwYXJlbnQgPSBpbnN0YWxsZWRNb2R1bGVzW3BhcmVudElkXTtcbiBcdFx0XHRcdFx0aWYgKCFwYXJlbnQpIGNvbnRpbnVlO1xuIFx0XHRcdFx0XHRpZiAocGFyZW50LmhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGVjbGluZWRcIixcbiBcdFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG4gXHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRwYXJlbnRJZDogcGFyZW50SWRcbiBcdFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmIChvdXRkYXRlZE1vZHVsZXMuaW5kZXhPZihwYXJlbnRJZCkgIT09IC0xKSBjb250aW51ZTtcbiBcdFx0XHRcdFx0aWYgKHBhcmVudC5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkge1xuIFx0XHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdKVxuIFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdID0gW107XG4gXHRcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdLCBbbW9kdWxlSWRdKTtcbiBcdFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRkZWxldGUgb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdO1xuIFx0XHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaChwYXJlbnRJZCk7XG4gXHRcdFx0XHRcdHF1ZXVlLnB1c2goe1xuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG4gXHRcdFx0XHRcdFx0aWQ6IHBhcmVudElkXG4gXHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cblxuIFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHR0eXBlOiBcImFjY2VwdGVkXCIsXG4gXHRcdFx0XHRtb2R1bGVJZDogdXBkYXRlTW9kdWxlSWQsXG4gXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXM6IG91dGRhdGVkTW9kdWxlcyxcbiBcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzOiBvdXRkYXRlZERlcGVuZGVuY2llc1xuIFx0XHRcdH07XG4gXHRcdH1cblxuIFx0XHRmdW5jdGlvbiBhZGRBbGxUb1NldChhLCBiKSB7XG4gXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHR2YXIgaXRlbSA9IGJbaV07XG4gXHRcdFx0XHRpZiAoYS5pbmRleE9mKGl0ZW0pID09PSAtMSkgYS5wdXNoKGl0ZW0pO1xuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIGF0IGJlZ2luIGFsbCB1cGRhdGVzIG1vZHVsZXMgYXJlIG91dGRhdGVkXG4gXHRcdC8vIHRoZSBcIm91dGRhdGVkXCIgc3RhdHVzIGNhbiBwcm9wYWdhdGUgdG8gcGFyZW50cyBpZiB0aGV5IGRvbid0IGFjY2VwdCB0aGUgY2hpbGRyZW5cbiBcdFx0dmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307XG4gXHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcbiBcdFx0dmFyIGFwcGxpZWRVcGRhdGUgPSB7fTtcblxuIFx0XHR2YXIgd2FyblVuZXhwZWN0ZWRSZXF1aXJlID0gZnVuY3Rpb24gd2FyblVuZXhwZWN0ZWRSZXF1aXJlKCkge1xuIFx0XHRcdGNvbnNvbGUud2FybihcbiBcdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICsgcmVzdWx0Lm1vZHVsZUlkICsgXCIpIHRvIGRpc3Bvc2VkIG1vZHVsZVwiXG4gXHRcdFx0KTtcbiBcdFx0fTtcblxuIFx0XHRmb3IgKHZhciBpZCBpbiBob3RVcGRhdGUpIHtcbiBcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhvdFVwZGF0ZSwgaWQpKSB7XG4gXHRcdFx0XHRtb2R1bGVJZCA9IHRvTW9kdWxlSWQoaWQpO1xuIFx0XHRcdFx0LyoqIEB0eXBlIHtUT0RPfSAqL1xuIFx0XHRcdFx0dmFyIHJlc3VsdDtcbiBcdFx0XHRcdGlmIChob3RVcGRhdGVbaWRdKSB7XG4gXHRcdFx0XHRcdHJlc3VsdCA9IGdldEFmZmVjdGVkU3R1ZmYobW9kdWxlSWQpO1xuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0cmVzdWx0ID0ge1xuIFx0XHRcdFx0XHRcdHR5cGU6IFwiZGlzcG9zZWRcIixcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogaWRcbiBcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdC8qKiBAdHlwZSB7RXJyb3J8ZmFsc2V9ICovXG4gXHRcdFx0XHR2YXIgYWJvcnRFcnJvciA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGRvQXBwbHkgPSBmYWxzZTtcbiBcdFx0XHRcdHZhciBkb0Rpc3Bvc2UgPSBmYWxzZTtcbiBcdFx0XHRcdHZhciBjaGFpbkluZm8gPSBcIlwiO1xuIFx0XHRcdFx0aWYgKHJlc3VsdC5jaGFpbikge1xuIFx0XHRcdFx0XHRjaGFpbkluZm8gPSBcIlxcblVwZGF0ZSBwcm9wYWdhdGlvbjogXCIgKyByZXN1bHQuY2hhaW4uam9pbihcIiAtPiBcIik7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRzd2l0Y2ggKHJlc3VsdC50eXBlKSB7XG4gXHRcdFx0XHRcdGNhc2UgXCJzZWxmLWRlY2xpbmVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EZWNsaW5lZCkgb3B0aW9ucy5vbkRlY2xpbmVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcbiBcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2Ugb2Ygc2VsZiBkZWNsaW5lOiBcIiArXG4gXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm1vZHVsZUlkICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRjaGFpbkluZm9cbiBcdFx0XHRcdFx0XHRcdCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJkZWNsaW5lZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGVjbGluZWQpIG9wdGlvbnMub25EZWNsaW5lZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcbiBcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4gXHRcdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIG9mIGRlY2xpbmVkIGRlcGVuZGVuY3k6IFwiICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQubW9kdWxlSWQgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdFwiIGluIFwiICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQucGFyZW50SWQgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcInVuYWNjZXB0ZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vblVuYWNjZXB0ZWQpIG9wdGlvbnMub25VbmFjY2VwdGVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZVVuYWNjZXB0ZWQpXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuIFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBcIiArIG1vZHVsZUlkICsgXCIgaXMgbm90IGFjY2VwdGVkXCIgKyBjaGFpbkluZm9cbiBcdFx0XHRcdFx0XHRcdCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJhY2NlcHRlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uQWNjZXB0ZWQpIG9wdGlvbnMub25BY2NlcHRlZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGRvQXBwbHkgPSB0cnVlO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwiZGlzcG9zZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRpc3Bvc2VkKSBvcHRpb25zLm9uRGlzcG9zZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRkb0Rpc3Bvc2UgPSB0cnVlO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRkZWZhdWx0OlxuIFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhjZXB0aW9uIHR5cGUgXCIgKyByZXN1bHQudHlwZSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAoYWJvcnRFcnJvcikge1xuIFx0XHRcdFx0XHRob3RTZXRTdGF0dXMoXCJhYm9ydFwiKTtcbiBcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGFib3J0RXJyb3IpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKGRvQXBwbHkpIHtcbiBcdFx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSBob3RVcGRhdGVbbW9kdWxlSWRdO1xuIFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIHJlc3VsdC5vdXRkYXRlZE1vZHVsZXMpO1xuIFx0XHRcdFx0XHRmb3IgKG1vZHVsZUlkIGluIHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdFx0XHRcdGlmIChcbiBcdFx0XHRcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiBcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzLFxuIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZFxuIFx0XHRcdFx0XHRcdFx0KVxuIFx0XHRcdFx0XHRcdCkge1xuIFx0XHRcdFx0XHRcdFx0aWYgKCFvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pXG4gXHRcdFx0XHRcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSA9IFtdO1xuIFx0XHRcdFx0XHRcdFx0YWRkQWxsVG9TZXQoXG4gXHRcdFx0XHRcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSxcbiBcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXVxuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChkb0Rpc3Bvc2UpIHtcbiBcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWRNb2R1bGVzLCBbcmVzdWx0Lm1vZHVsZUlkXSk7XG4gXHRcdFx0XHRcdGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdID0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIFN0b3JlIHNlbGYgYWNjZXB0ZWQgb3V0ZGF0ZWQgbW9kdWxlcyB0byByZXF1aXJlIHRoZW0gbGF0ZXIgYnkgdGhlIG1vZHVsZSBzeXN0ZW1cbiBcdFx0dmFyIG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcyA9IFtdO1xuIFx0XHRmb3IgKGkgPSAwOyBpIDwgb3V0ZGF0ZWRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0bW9kdWxlSWQgPSBvdXRkYXRlZE1vZHVsZXNbaV07XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0aW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gJiZcbiBcdFx0XHRcdGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmhvdC5fc2VsZkFjY2VwdGVkICYmXG4gXHRcdFx0XHQvLyByZW1vdmVkIHNlbGYtYWNjZXB0ZWQgbW9kdWxlcyBzaG91bGQgbm90IGJlIHJlcXVpcmVkXG4gXHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSAhPT0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlICYmXG4gXHRcdFx0XHQvLyB3aGVuIGNhbGxlZCBpbnZhbGlkYXRlIHNlbGYtYWNjZXB0aW5nIGlzIG5vdCBwb3NzaWJsZVxuIFx0XHRcdFx0IWluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmhvdC5fc2VsZkludmFsaWRhdGVkXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMucHVzaCh7XG4gXHRcdFx0XHRcdG1vZHVsZTogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdHBhcmVudHM6IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLnBhcmVudHMuc2xpY2UoKSxcbiBcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyOiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5ob3QuX3NlbGZBY2NlcHRlZFxuIFx0XHRcdFx0fSk7XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gTm93IGluIFwiZGlzcG9zZVwiIHBoYXNlXG4gXHRcdGhvdFNldFN0YXR1cyhcImRpc3Bvc2VcIik7XG4gXHRcdE9iamVjdC5rZXlzKGhvdEF2YWlsYWJsZUZpbGVzTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGNodW5rSWQpIHtcbiBcdFx0XHRpZiAoaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0gPT09IGZhbHNlKSB7XG4gXHRcdFx0XHRob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHR9KTtcblxuIFx0XHR2YXIgaWR4O1xuIFx0XHR2YXIgcXVldWUgPSBvdXRkYXRlZE1vZHVsZXMuc2xpY2UoKTtcbiBcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiBcdFx0XHRtb2R1bGVJZCA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdGlmICghbW9kdWxlKSBjb250aW51ZTtcblxuIFx0XHRcdHZhciBkYXRhID0ge307XG5cbiBcdFx0XHQvLyBDYWxsIGRpc3Bvc2UgaGFuZGxlcnNcbiBcdFx0XHR2YXIgZGlzcG9zZUhhbmRsZXJzID0gbW9kdWxlLmhvdC5fZGlzcG9zZUhhbmRsZXJzO1xuIFx0XHRcdGZvciAoaiA9IDA7IGogPCBkaXNwb3NlSGFuZGxlcnMubGVuZ3RoOyBqKyspIHtcbiBcdFx0XHRcdGNiID0gZGlzcG9zZUhhbmRsZXJzW2pdO1xuIFx0XHRcdFx0Y2IoZGF0YSk7XG4gXHRcdFx0fVxuIFx0XHRcdGhvdEN1cnJlbnRNb2R1bGVEYXRhW21vZHVsZUlkXSA9IGRhdGE7XG5cbiBcdFx0XHQvLyBkaXNhYmxlIG1vZHVsZSAodGhpcyBkaXNhYmxlcyByZXF1aXJlcyBmcm9tIHRoaXMgbW9kdWxlKVxuIFx0XHRcdG1vZHVsZS5ob3QuYWN0aXZlID0gZmFsc2U7XG5cbiBcdFx0XHQvLyByZW1vdmUgbW9kdWxlIGZyb20gY2FjaGVcbiBcdFx0XHRkZWxldGUgaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG5cbiBcdFx0XHQvLyB3aGVuIGRpc3Bvc2luZyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgZGlzcG9zZSBoYW5kbGVyXG4gXHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcblxuIFx0XHRcdC8vIHJlbW92ZSBcInBhcmVudHNcIiByZWZlcmVuY2VzIGZyb20gYWxsIGNoaWxkcmVuXG4gXHRcdFx0Zm9yIChqID0gMDsgaiA8IG1vZHVsZS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0dmFyIGNoaWxkID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGUuY2hpbGRyZW5bal1dO1xuIFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG4gXHRcdFx0XHRpZHggPSBjaGlsZC5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSB7XG4gXHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gcmVtb3ZlIG91dGRhdGVkIGRlcGVuZGVuY3kgZnJvbSBtb2R1bGUgY2hpbGRyZW5cbiBcdFx0dmFyIGRlcGVuZGVuY3k7XG4gXHRcdHZhciBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcztcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBvdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmIChtb2R1bGUpIHtcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcbiBcdFx0XHRcdFx0XHRpZHggPSBtb2R1bGUuY2hpbGRyZW4uaW5kZXhPZihkZXBlbmRlbmN5KTtcbiBcdFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIG1vZHVsZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIE5vdyBpbiBcImFwcGx5XCIgcGhhc2VcbiBcdFx0aG90U2V0U3RhdHVzKFwiYXBwbHlcIik7XG5cbiBcdFx0aWYgKGhvdFVwZGF0ZU5ld0hhc2ggIT09IHVuZGVmaW5lZCkge1xuIFx0XHRcdGhvdEN1cnJlbnRIYXNoID0gaG90VXBkYXRlTmV3SGFzaDtcbiBcdFx0XHRob3RVcGRhdGVOZXdIYXNoID0gdW5kZWZpbmVkO1xuIFx0XHR9XG4gXHRcdGhvdFVwZGF0ZSA9IHVuZGVmaW5lZDtcblxuIFx0XHQvLyBpbnNlcnQgbmV3IGNvZGVcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBhcHBsaWVkVXBkYXRlKSB7XG4gXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcHBsaWVkVXBkYXRlLCBtb2R1bGVJZCkpIHtcbiBcdFx0XHRcdG1vZHVsZXNbbW9kdWxlSWRdID0gYXBwbGllZFVwZGF0ZVttb2R1bGVJZF07XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gY2FsbCBhY2NlcHQgaGFuZGxlcnNcbiBcdFx0dmFyIGVycm9yID0gbnVsbDtcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBvdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmIChtb2R1bGUpIHtcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRcdHZhciBjYWxsYmFja3MgPSBbXTtcbiBcdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHRcdFx0ZGVwZW5kZW5jeSA9IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2ldO1xuIFx0XHRcdFx0XHRcdGNiID0gbW9kdWxlLmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwZW5kZW5jeV07XG4gXHRcdFx0XHRcdFx0aWYgKGNiKSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tzLmluZGV4T2YoY2IpICE9PSAtMSkgY29udGludWU7XG4gXHRcdFx0XHRcdFx0XHRjYWxsYmFja3MucHVzaChjYik7XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0XHRjYiA9IGNhbGxiYWNrc1tpXTtcbiBcdFx0XHRcdFx0XHR0cnkge1xuIFx0XHRcdFx0XHRcdFx0Y2IobW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMpO1xuIFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuIFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImFjY2VwdC1lcnJvcmVkXCIsXG4gXHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3lJZDogbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV0sXG4gXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuIFx0XHRcdFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuIFx0XHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIExvYWQgc2VsZiBhY2NlcHRlZCBtb2R1bGVzXG4gXHRcdGZvciAoaSA9IDA7IGkgPCBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHR2YXIgaXRlbSA9IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlc1tpXTtcbiBcdFx0XHRtb2R1bGVJZCA9IGl0ZW0ubW9kdWxlO1xuIFx0XHRcdGhvdEN1cnJlbnRQYXJlbnRzID0gaXRlbS5wYXJlbnRzO1xuIFx0XHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IG1vZHVsZUlkO1xuIFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKTtcbiBcdFx0XHR9IGNhdGNoIChlcnIpIHtcbiBcdFx0XHRcdGlmICh0eXBlb2YgaXRlbS5lcnJvckhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuIFx0XHRcdFx0XHR0cnkge1xuIFx0XHRcdFx0XHRcdGl0ZW0uZXJyb3JIYW5kbGVyKGVycik7XG4gXHRcdFx0XHRcdH0gY2F0Y2ggKGVycjIpIHtcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyMixcbiBcdFx0XHRcdFx0XHRcdFx0b3JpZ2luYWxFcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyMjtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1hY2NlcHQtZXJyb3JlZFwiLFxuIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuIFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBoYW5kbGUgZXJyb3JzIGluIGFjY2VwdCBoYW5kbGVycyBhbmQgc2VsZiBhY2NlcHRlZCBtb2R1bGUgbG9hZFxuIFx0XHRpZiAoZXJyb3IpIHtcbiBcdFx0XHRob3RTZXRTdGF0dXMoXCJmYWlsXCIpO1xuIFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gXHRcdH1cblxuIFx0XHRpZiAoaG90UXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzKSB7XG4gXHRcdFx0cmV0dXJuIGhvdEFwcGx5SW50ZXJuYWwob3B0aW9ucykudGhlbihmdW5jdGlvbihsaXN0KSB7XG4gXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbihtb2R1bGVJZCkge1xuIFx0XHRcdFx0XHRpZiAobGlzdC5pbmRleE9mKG1vZHVsZUlkKSA8IDApIGxpc3QucHVzaChtb2R1bGVJZCk7XG4gXHRcdFx0XHR9KTtcbiBcdFx0XHRcdHJldHVybiBsaXN0O1xuIFx0XHRcdH0pO1xuIFx0XHR9XG5cbiBcdFx0aG90U2V0U3RhdHVzKFwiaWRsZVwiKTtcbiBcdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiBcdFx0XHRyZXNvbHZlKG91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdH0pO1xuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RBcHBseUludmFsaWRhdGVkTW9kdWxlcygpIHtcbiBcdFx0aWYgKGhvdFF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcykge1xuIFx0XHRcdGlmICghaG90VXBkYXRlKSBob3RVcGRhdGUgPSB7fTtcbiBcdFx0XHRob3RRdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMuZm9yRWFjaChob3RBcHBseUludmFsaWRhdGVkTW9kdWxlKTtcbiBcdFx0XHRob3RRdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMgPSB1bmRlZmluZWQ7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90QXBwbHlJbnZhbGlkYXRlZE1vZHVsZShtb2R1bGVJZCkge1xuIFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChob3RVcGRhdGUsIG1vZHVsZUlkKSlcbiBcdFx0XHRob3RVcGRhdGVbbW9kdWxlSWRdID0gbW9kdWxlc1ttb2R1bGVJZF07XG4gXHR9XG5cbiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4gXHR2YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuIFx0XHRcInJ1bnRpbWVcIjogMFxuIFx0fTtcblxuIFx0dmFyIGRlZmVycmVkTW9kdWxlcyA9IFtdO1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRob3Q6IGhvdENyZWF0ZU1vZHVsZShtb2R1bGVJZCksXG4gXHRcdFx0cGFyZW50czogKGhvdEN1cnJlbnRQYXJlbnRzVGVtcCA9IGhvdEN1cnJlbnRQYXJlbnRzLCBob3RDdXJyZW50UGFyZW50cyA9IFtdLCBob3RDdXJyZW50UGFyZW50c1RlbXApLFxuIFx0XHRcdGNoaWxkcmVuOiBbXVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBob3RDcmVhdGVSZXF1aXJlKG1vZHVsZUlkKSk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gX193ZWJwYWNrX2hhc2hfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5oID0gZnVuY3Rpb24oKSB7IHJldHVybiBob3RDdXJyZW50SGFzaDsgfTtcblxuIFx0dmFyIGpzb25wQXJyYXkgPSBnbG9iYWxbXCJ3ZWJwYWNrSnNvbnBcIl0gPSBnbG9iYWxbXCJ3ZWJwYWNrSnNvbnBcIl0gfHwgW107XG4gXHR2YXIgb2xkSnNvbnBGdW5jdGlvbiA9IGpzb25wQXJyYXkucHVzaC5iaW5kKGpzb25wQXJyYXkpO1xuIFx0anNvbnBBcnJheS5wdXNoID0gd2VicGFja0pzb25wQ2FsbGJhY2s7XG4gXHRqc29ucEFycmF5ID0ganNvbnBBcnJheS5zbGljZSgpO1xuIFx0Zm9yKHZhciBpID0gMDsgaSA8IGpzb25wQXJyYXkubGVuZ3RoOyBpKyspIHdlYnBhY2tKc29ucENhbGxiYWNrKGpzb25wQXJyYXlbaV0pO1xuIFx0dmFyIHBhcmVudEpzb25wRnVuY3Rpb24gPSBvbGRKc29ucEZ1bmN0aW9uO1xuXG5cbiBcdC8vIHJ1biBkZWZlcnJlZCBtb2R1bGVzIGZyb20gb3RoZXIgY2h1bmtzXG4gXHRjaGVja0RlZmVycmVkTW9kdWxlcygpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxRQUFRLG9CQUFvQjtRQUM1QjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsaUJBQWlCLDRCQUE0QjtRQUM3QztRQUNBO1FBQ0Esa0JBQWtCLDJCQUEyQjtRQUM3QztRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsV0FBVztRQUNYO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLGVBQWU7UUFDZjtRQUNBO1FBQ0E7UUFDQTtRQUNBLFdBQVc7UUFDWDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLE1BQU07UUFDTjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7O1FBRUw7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3QjtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHFCQUFxQixnQkFBZ0I7UUFDckM7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQSxxQkFBcUIsZ0JBQWdCO1FBQ3JDO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7O1FBRUw7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0EsS0FBSzs7UUFFTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0Esa0JBQWtCLDhCQUE4QjtRQUNoRDtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBSTtRQUNKOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsSUFBSTtRQUNKO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBLE9BQU87UUFDUDtRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQUk7UUFDSjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxvQkFBb0IsMkJBQTJCO1FBQy9DO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxPQUFPO1FBQ1A7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLG1CQUFtQixjQUFjO1FBQ2pDO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSxnQkFBZ0IsS0FBSztRQUNyQjtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLGdCQUFnQixZQUFZO1FBQzVCO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0EsY0FBYyw0QkFBNEI7UUFDMUM7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFJOztRQUVKO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTs7UUFFQTtRQUNBO1FBQ0EsZUFBZSw0QkFBNEI7UUFDM0M7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQSxlQUFlLDRCQUE0QjtRQUMzQztRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsaUJBQWlCLHVDQUF1QztRQUN4RDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsaUJBQWlCLHVDQUF1QztRQUN4RDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLGlCQUFpQixzQkFBc0I7UUFDdkM7UUFDQTtRQUNBO1FBQ0EsUUFBUTtRQUNSO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLFVBQVU7UUFDVjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxjQUFjLHdDQUF3QztRQUN0RDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0EsT0FBTztRQUNQO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLFNBQVM7UUFDVDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLFFBQVE7UUFDUjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0EsS0FBSztRQUNMOztRQUVBO1FBQ0E7UUFDQTtRQUNBLElBQUk7UUFDSjs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsZUFBZTtRQUNmO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOztRQUVBO1FBQ0Esc0NBQXNDLHVCQUF1Qjs7UUFFN0Q7UUFDQTtRQUNBO1FBQ0E7UUFDQSxnQkFBZ0IsdUJBQXVCO1FBQ3ZDOzs7UUFHQTtRQUNBIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBpbnN0YWxsIGEgSlNPTlAgY2FsbGJhY2sgZm9yIGNodW5rIGxvYWRpbmdcbiBcdGZ1bmN0aW9uIHdlYnBhY2tKc29ucENhbGxiYWNrKGRhdGEpIHtcbiBcdFx0dmFyIGNodW5rSWRzID0gZGF0YVswXTtcbiBcdFx0dmFyIG1vcmVNb2R1bGVzID0gZGF0YVsxXTtcbiBcdFx0dmFyIGV4ZWN1dGVNb2R1bGVzID0gZGF0YVsyXTtcbiBcdFx0Ly8gYWRkIFwibW9yZU1vZHVsZXNcIiB0byB0aGUgbW9kdWxlcyBvYmplY3QsXG4gXHRcdC8vIHRoZW4gZmxhZyBhbGwgXCJjaHVua0lkc1wiIGFzIGxvYWRlZCBhbmQgZmlyZSBjYWxsYmFja1xuIFx0XHR2YXIgbW9kdWxlSWQsIGNodW5rSWQsIGkgPSAwLCByZXNvbHZlcyA9IFtdO1xuIFx0XHRmb3IoO2kgPCBjaHVua0lkcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdGNodW5rSWQgPSBjaHVua0lkc1tpXTtcbiBcdFx0XHRpZihpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcbiBcdFx0XHRcdHJlc29sdmVzLnB1c2goaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdWzBdKTtcbiBcdFx0XHR9XG4gXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gMDtcbiBcdFx0fVxuIFx0XHRmb3IobW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0bW9kdWxlc1ttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGlmKHBhcmVudEpzb25wRnVuY3Rpb24pIHBhcmVudEpzb25wRnVuY3Rpb24oZGF0YSk7XG4gXHRcdHdoaWxlKHJlc29sdmVzLmxlbmd0aCkge1xuIFx0XHRcdHJlc29sdmVzLnNoaWZ0KCkoKTtcbiBcdFx0fVxuXG4gXHRcdC8vIGFkZCBlbnRyeSBtb2R1bGVzIGZyb20gbG9hZGVkIGNodW5rIHRvIGRlZmVycmVkIGxpc3RcbiBcdFx0ZGVmZXJyZWRNb2R1bGVzLnB1c2guYXBwbHkoZGVmZXJyZWRNb2R1bGVzLCBleGVjdXRlTW9kdWxlcyB8fCBbXSk7XG5cbiBcdFx0Ly8gcnVuIGRlZmVycmVkIG1vZHVsZXMgd2hlbiBhbGwgY2h1bmtzIHJlYWR5XG4gXHRcdHJldHVybiBjaGVja0RlZmVycmVkTW9kdWxlcygpO1xuIFx0fTtcbiBcdGZ1bmN0aW9uIGNoZWNrRGVmZXJyZWRNb2R1bGVzKCkge1xuIFx0XHR2YXIgcmVzdWx0O1xuIFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVmZXJyZWRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0dmFyIGRlZmVycmVkTW9kdWxlID0gZGVmZXJyZWRNb2R1bGVzW2ldO1xuIFx0XHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuIFx0XHRcdGZvcih2YXIgaiA9IDE7IGogPCBkZWZlcnJlZE1vZHVsZS5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0dmFyIGRlcElkID0gZGVmZXJyZWRNb2R1bGVbal07XG4gXHRcdFx0XHRpZihpbnN0YWxsZWRDaHVua3NbZGVwSWRdICE9PSAwKSBmdWxmaWxsZWQgPSBmYWxzZTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYoZnVsZmlsbGVkKSB7XG4gXHRcdFx0XHRkZWZlcnJlZE1vZHVsZXMuc3BsaWNlKGktLSwgMSk7XG4gXHRcdFx0XHRyZXN1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IGRlZmVycmVkTW9kdWxlWzBdKTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHJlc3VsdDtcbiBcdH1cbiBcdGZ1bmN0aW9uIGhvdERpc3Bvc2VDaHVuayhjaHVua0lkKSB7XG4gXHQgICAgZGVsZXRlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbiBcdH1cbiBcdHZhciBwYXJlbnRIb3RVcGRhdGVDYWxsYmFjayA9IGdsb2JhbFtcIndlYnBhY2tIb3RVcGRhdGVcIl07XG4gXHRnbG9iYWxbXCJ3ZWJwYWNrSG90VXBkYXRlXCJdID0gICAgIGZ1bmN0aW9uIHdlYnBhY2tIb3RVcGRhdGVDYWxsYmFjayhjaHVua0lkLCBtb3JlTW9kdWxlcykge1xuIFx0ICAgICAgICBob3RBZGRVcGRhdGVDaHVuayhjaHVua0lkLCBtb3JlTW9kdWxlcyk7XG4gXHQgICAgICAgIGlmIChwYXJlbnRIb3RVcGRhdGVDYWxsYmFjaykge1xuIFx0ICAgICAgICAgICAgcGFyZW50SG90VXBkYXRlQ2FsbGJhY2soY2h1bmtJZCwgbW9yZU1vZHVsZXMpO1xuIFx0ICAgICAgICB9XG4gXHQgICAgfVxuXG4gXHQgICAgZnVuY3Rpb24gaG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKSB7XG4gXHQgICAgICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gJy4vJyArIFwiXCIgKyBjaHVua0lkICsgXCIuXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNcIjtcbiBcdCAgICAgICAgdHJ5IHtcbiBcdCAgICAgICAgICAgIHJlcXVpcmUocmVxdWVzdFBhdGgpO1xuIFx0ICAgICAgICB9IGNhdGNoIChlKSB7XG4gXHQgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkhvdCBkb3dubG9hZCBmb3IgdXBkYXRlIGNodW5rIGZhaWxlZC5cIik7XG4gXHQgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuIFx0ICAgICAgICB9XG4gXHQgICAgfVxuXG4gXHQgICAgZnVuY3Rpb24gaG90RG93bmxvYWRNYW5pZmVzdCgpIHtcbiBcdCAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiBcdCAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gJy4vJyArIFwiXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNvblwiO1xuIFx0ICAgICAgICAgICAgdHJ5IHtcbiBcdCAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGUgPSByZXF1aXJlKHJlcXVlc3RQYXRoKTtcbiBcdCAgICAgICAgICAgICAgICByZXNvbHZlKHVwZGF0ZSk7XG4gXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gXHQgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJIb3QgZG93bmxvYWQgZm9yIG1hbmlmZXN0IGZhaWxlZC5cIik7XG4gXHQgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiBcdCAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gXHQgICAgICAgICAgICB9XG4gXHQgICAgICAgIH0pO1xuIFx0ICAgIH1cblxuIFx0dmFyIGhvdEFwcGx5T25VcGRhdGUgPSB0cnVlO1xuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHR2YXIgaG90Q3VycmVudEhhc2ggPSBcImIwYjM1MzgyYTg4Njc3ZmFkZTgxXCI7XG4gXHR2YXIgaG90UmVxdWVzdFRpbWVvdXQgPSAxMDAwMDtcbiBcdHZhciBob3RDdXJyZW50TW9kdWxlRGF0YSA9IHt9O1xuIFx0dmFyIGhvdEN1cnJlbnRDaGlsZE1vZHVsZTtcbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0dmFyIGhvdEN1cnJlbnRQYXJlbnRzID0gW107XG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdHZhciBob3RDdXJyZW50UGFyZW50c1RlbXAgPSBbXTtcblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RDcmVhdGVSZXF1aXJlKG1vZHVsZUlkKSB7XG4gXHRcdHZhciBtZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRpZiAoIW1lKSByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXztcbiBcdFx0dmFyIGZuID0gZnVuY3Rpb24ocmVxdWVzdCkge1xuIFx0XHRcdGlmIChtZS5ob3QuYWN0aXZlKSB7XG4gXHRcdFx0XHRpZiAoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XSkge1xuIFx0XHRcdFx0XHRpZiAoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XS5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpID09PSAtMSkge1xuIFx0XHRcdFx0XHRcdGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5wdXNoKG1vZHVsZUlkKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xuIFx0XHRcdFx0XHRob3RDdXJyZW50Q2hpbGRNb2R1bGUgPSByZXF1ZXN0O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKG1lLmNoaWxkcmVuLmluZGV4T2YocmVxdWVzdCkgPT09IC0xKSB7XG4gXHRcdFx0XHRcdG1lLmNoaWxkcmVuLnB1c2gocmVxdWVzdCk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGNvbnNvbGUud2FybihcbiBcdFx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgK1xuIFx0XHRcdFx0XHRcdHJlcXVlc3QgK1xuIFx0XHRcdFx0XHRcdFwiKSBmcm9tIGRpc3Bvc2VkIG1vZHVsZSBcIiArXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWRcbiBcdFx0XHRcdCk7XG4gXHRcdFx0XHRob3RDdXJyZW50UGFyZW50cyA9IFtdO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhyZXF1ZXN0KTtcbiBcdFx0fTtcbiBcdFx0dmFyIE9iamVjdEZhY3RvcnkgPSBmdW5jdGlvbiBPYmplY3RGYWN0b3J5KG5hbWUpIHtcbiBcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG4gXHRcdFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fW25hbWVdO1xuIFx0XHRcdFx0fSxcbiBcdFx0XHRcdHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiBcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfX1tuYW1lXSA9IHZhbHVlO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH07XG4gXHRcdH07XG4gXHRcdGZvciAodmFyIG5hbWUgaW4gX193ZWJwYWNrX3JlcXVpcmVfXykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfX3dlYnBhY2tfcmVxdWlyZV9fLCBuYW1lKSAmJlxuIFx0XHRcdFx0bmFtZSAhPT0gXCJlXCIgJiZcbiBcdFx0XHRcdG5hbWUgIT09IFwidFwiXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIG5hbWUsIE9iamVjdEZhY3RvcnkobmFtZSkpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRmbi5lID0gZnVuY3Rpb24oY2h1bmtJZCkge1xuIFx0XHRcdGlmIChob3RTdGF0dXMgPT09IFwicmVhZHlcIikgaG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbiBcdFx0XHRob3RDaHVua3NMb2FkaW5nKys7XG4gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZShjaHVua0lkKS50aGVuKGZpbmlzaENodW5rTG9hZGluZywgZnVuY3Rpb24oZXJyKSB7XG4gXHRcdFx0XHRmaW5pc2hDaHVua0xvYWRpbmcoKTtcbiBcdFx0XHRcdHRocm93IGVycjtcbiBcdFx0XHR9KTtcblxuIFx0XHRcdGZ1bmN0aW9uIGZpbmlzaENodW5rTG9hZGluZygpIHtcbiBcdFx0XHRcdGhvdENodW5rc0xvYWRpbmctLTtcbiBcdFx0XHRcdGlmIChob3RTdGF0dXMgPT09IFwicHJlcGFyZVwiKSB7XG4gXHRcdFx0XHRcdGlmICghaG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdKSB7XG4gXHRcdFx0XHRcdFx0aG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0aWYgKGhvdENodW5rc0xvYWRpbmcgPT09IDAgJiYgaG90V2FpdGluZ0ZpbGVzID09PSAwKSB7XG4gXHRcdFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9O1xuIFx0XHRmbi50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0XHRpZiAobW9kZSAmIDEpIHZhbHVlID0gZm4odmFsdWUpO1xuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLnQodmFsdWUsIG1vZGUgJiB+MSk7XG4gXHRcdH07XG4gXHRcdHJldHVybiBmbjtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RDcmVhdGVNb2R1bGUobW9kdWxlSWQpIHtcbiBcdFx0dmFyIGhvdCA9IHtcbiBcdFx0XHQvLyBwcml2YXRlIHN0dWZmXG4gXHRcdFx0X2FjY2VwdGVkRGVwZW5kZW5jaWVzOiB7fSxcbiBcdFx0XHRfZGVjbGluZWREZXBlbmRlbmNpZXM6IHt9LFxuIFx0XHRcdF9zZWxmQWNjZXB0ZWQ6IGZhbHNlLFxuIFx0XHRcdF9zZWxmRGVjbGluZWQ6IGZhbHNlLFxuIFx0XHRcdF9zZWxmSW52YWxpZGF0ZWQ6IGZhbHNlLFxuIFx0XHRcdF9kaXNwb3NlSGFuZGxlcnM6IFtdLFxuIFx0XHRcdF9tYWluOiBob3RDdXJyZW50Q2hpbGRNb2R1bGUgIT09IG1vZHVsZUlkLFxuXG4gXHRcdFx0Ly8gTW9kdWxlIEFQSVxuIFx0XHRcdGFjdGl2ZTogdHJ1ZSxcbiBcdFx0XHRhY2NlcHQ6IGZ1bmN0aW9uKGRlcCwgY2FsbGJhY2spIHtcbiBcdFx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmQWNjZXB0ZWQgPSB0cnVlO1xuIFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJmdW5jdGlvblwiKSBob3QuX3NlbGZBY2NlcHRlZCA9IGRlcDtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpXG4gXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxuIFx0XHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gXHRcdFx0XHRlbHNlIGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gXHRcdFx0fSxcbiBcdFx0XHRkZWNsaW5lOiBmdW5jdGlvbihkZXApIHtcbiBcdFx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmRGVjbGluZWQgPSB0cnVlO1xuIFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIilcbiBcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXAubGVuZ3RoOyBpKyspXG4gXHRcdFx0XHRcdFx0aG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBbaV1dID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBdID0gdHJ1ZTtcbiBcdFx0XHR9LFxuIFx0XHRcdGRpc3Bvc2U6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gXHRcdFx0XHRob3QuX2Rpc3Bvc2VIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTtcbiBcdFx0XHR9LFxuIFx0XHRcdGFkZERpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuIFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG4gXHRcdFx0fSxcbiBcdFx0XHRyZW1vdmVEaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiBcdFx0XHRcdHZhciBpZHggPSBob3QuX2Rpc3Bvc2VIYW5kbGVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiBcdFx0XHRcdGlmIChpZHggPj0gMCkgaG90Ll9kaXNwb3NlSGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0fSxcbiBcdFx0XHRpbnZhbGlkYXRlOiBmdW5jdGlvbigpIHtcbiBcdFx0XHRcdHRoaXMuX3NlbGZJbnZhbGlkYXRlZCA9IHRydWU7XG4gXHRcdFx0XHRzd2l0Y2ggKGhvdFN0YXR1cykge1xuIFx0XHRcdFx0XHRjYXNlIFwiaWRsZVwiOlxuIFx0XHRcdFx0XHRcdGhvdFVwZGF0ZSA9IHt9O1xuIFx0XHRcdFx0XHRcdGhvdFVwZGF0ZVttb2R1bGVJZF0gPSBtb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0XHRob3RTZXRTdGF0dXMoXCJyZWFkeVwiKTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcInJlYWR5XCI6XG4gXHRcdFx0XHRcdFx0aG90QXBwbHlJbnZhbGlkYXRlZE1vZHVsZShtb2R1bGVJZCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJwcmVwYXJlXCI6XG4gXHRcdFx0XHRcdGNhc2UgXCJjaGVja1wiOlxuIFx0XHRcdFx0XHRjYXNlIFwiZGlzcG9zZVwiOlxuIFx0XHRcdFx0XHRjYXNlIFwiYXBwbHlcIjpcbiBcdFx0XHRcdFx0XHQoaG90UXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzID1cbiBcdFx0XHRcdFx0XHRcdGhvdFF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcyB8fCBbXSkucHVzaChtb2R1bGVJZCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGRlZmF1bHQ6XG4gXHRcdFx0XHRcdFx0Ly8gaWdub3JlIHJlcXVlc3RzIGluIGVycm9yIHN0YXRlc1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH0sXG5cbiBcdFx0XHQvLyBNYW5hZ2VtZW50IEFQSVxuIFx0XHRcdGNoZWNrOiBob3RDaGVjayxcbiBcdFx0XHRhcHBseTogaG90QXBwbHksXG4gXHRcdFx0c3RhdHVzOiBmdW5jdGlvbihsKSB7XG4gXHRcdFx0XHRpZiAoIWwpIHJldHVybiBob3RTdGF0dXM7XG4gXHRcdFx0XHRob3RTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuIFx0XHRcdH0sXG4gXHRcdFx0YWRkU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkge1xuIFx0XHRcdFx0aG90U3RhdHVzSGFuZGxlcnMucHVzaChsKTtcbiBcdFx0XHR9LFxuIFx0XHRcdHJlbW92ZVN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uKGwpIHtcbiBcdFx0XHRcdHZhciBpZHggPSBob3RTdGF0dXNIYW5kbGVycy5pbmRleE9mKGwpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBob3RTdGF0dXNIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHR9LFxuXG4gXHRcdFx0Ly9pbmhlcml0IGZyb20gcHJldmlvdXMgZGlzcG9zZSBjYWxsXG4gXHRcdFx0ZGF0YTogaG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdXG4gXHRcdH07XG4gXHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IHVuZGVmaW5lZDtcbiBcdFx0cmV0dXJuIGhvdDtcbiBcdH1cblxuIFx0dmFyIGhvdFN0YXR1c0hhbmRsZXJzID0gW107XG4gXHR2YXIgaG90U3RhdHVzID0gXCJpZGxlXCI7XG5cbiBcdGZ1bmN0aW9uIGhvdFNldFN0YXR1cyhuZXdTdGF0dXMpIHtcbiBcdFx0aG90U3RhdHVzID0gbmV3U3RhdHVzO1xuIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGhvdFN0YXR1c0hhbmRsZXJzLmxlbmd0aDsgaSsrKVxuIFx0XHRcdGhvdFN0YXR1c0hhbmRsZXJzW2ldLmNhbGwobnVsbCwgbmV3U3RhdHVzKTtcbiBcdH1cblxuIFx0Ly8gd2hpbGUgZG93bmxvYWRpbmdcbiBcdHZhciBob3RXYWl0aW5nRmlsZXMgPSAwO1xuIFx0dmFyIGhvdENodW5rc0xvYWRpbmcgPSAwO1xuIFx0dmFyIGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0dmFyIGhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307XG4gXHR2YXIgaG90QXZhaWxhYmxlRmlsZXNNYXAgPSB7fTtcbiBcdHZhciBob3REZWZlcnJlZDtcblxuIFx0Ly8gVGhlIHVwZGF0ZSBpbmZvXG4gXHR2YXIgaG90VXBkYXRlLCBob3RVcGRhdGVOZXdIYXNoLCBob3RRdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXM7XG5cbiBcdGZ1bmN0aW9uIHRvTW9kdWxlSWQoaWQpIHtcbiBcdFx0dmFyIGlzTnVtYmVyID0gK2lkICsgXCJcIiA9PT0gaWQ7XG4gXHRcdHJldHVybiBpc051bWJlciA/ICtpZCA6IGlkO1xuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RDaGVjayhhcHBseSkge1xuIFx0XHRpZiAoaG90U3RhdHVzICE9PSBcImlkbGVcIikge1xuIFx0XHRcdHRocm93IG5ldyBFcnJvcihcImNoZWNrKCkgaXMgb25seSBhbGxvd2VkIGluIGlkbGUgc3RhdHVzXCIpO1xuIFx0XHR9XG4gXHRcdGhvdEFwcGx5T25VcGRhdGUgPSBhcHBseTtcbiBcdFx0aG90U2V0U3RhdHVzKFwiY2hlY2tcIik7XG4gXHRcdHJldHVybiBob3REb3dubG9hZE1hbmlmZXN0KGhvdFJlcXVlc3RUaW1lb3V0KS50aGVuKGZ1bmN0aW9uKHVwZGF0ZSkge1xuIFx0XHRcdGlmICghdXBkYXRlKSB7XG4gXHRcdFx0XHRob3RTZXRTdGF0dXMoaG90QXBwbHlJbnZhbGlkYXRlZE1vZHVsZXMoKSA/IFwicmVhZHlcIiA6IFwiaWRsZVwiKTtcbiBcdFx0XHRcdHJldHVybiBudWxsO1xuIFx0XHRcdH1cbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdEF2YWlsYWJsZUZpbGVzTWFwID0gdXBkYXRlLmM7XG4gXHRcdFx0aG90VXBkYXRlTmV3SGFzaCA9IHVwZGF0ZS5oO1xuXG4gXHRcdFx0aG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbiBcdFx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuIFx0XHRcdFx0aG90RGVmZXJyZWQgPSB7XG4gXHRcdFx0XHRcdHJlc29sdmU6IHJlc29sdmUsXG4gXHRcdFx0XHRcdHJlamVjdDogcmVqZWN0XG4gXHRcdFx0XHR9O1xuIFx0XHRcdH0pO1xuIFx0XHRcdGhvdFVwZGF0ZSA9IHt9O1xuIFx0XHRcdGZvcih2YXIgY2h1bmtJZCBpbiBpbnN0YWxsZWRDaHVua3MpXG4gXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvbmUtYmxvY2tzXG4gXHRcdFx0e1xuIFx0XHRcdFx0aG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChcbiBcdFx0XHRcdGhvdFN0YXR1cyA9PT0gXCJwcmVwYXJlXCIgJiZcbiBcdFx0XHRcdGhvdENodW5rc0xvYWRpbmcgPT09IDAgJiZcbiBcdFx0XHRcdGhvdFdhaXRpbmdGaWxlcyA9PT0gMFxuIFx0XHRcdCkge1xuIFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gcHJvbWlzZTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90QWRkVXBkYXRlQ2h1bmsoY2h1bmtJZCwgbW9yZU1vZHVsZXMpIHtcbiBcdFx0aWYgKCFob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSB8fCAhaG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0pXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IGZhbHNlO1xuIFx0XHRmb3IgKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0aG90VXBkYXRlW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKC0taG90V2FpdGluZ0ZpbGVzID09PSAwICYmIGhvdENodW5rc0xvYWRpbmcgPT09IDApIHtcbiBcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCkge1xuIFx0XHRpZiAoIWhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdKSB7XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IHRydWU7XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzKys7XG4gXHRcdFx0aG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RVcGRhdGVEb3dubG9hZGVkKCkge1xuIFx0XHRob3RTZXRTdGF0dXMoXCJyZWFkeVwiKTtcbiBcdFx0dmFyIGRlZmVycmVkID0gaG90RGVmZXJyZWQ7XG4gXHRcdGhvdERlZmVycmVkID0gbnVsbDtcbiBcdFx0aWYgKCFkZWZlcnJlZCkgcmV0dXJuO1xuIFx0XHRpZiAoaG90QXBwbHlPblVwZGF0ZSkge1xuIFx0XHRcdC8vIFdyYXAgZGVmZXJyZWQgb2JqZWN0IGluIFByb21pc2UgdG8gbWFyayBpdCBhcyBhIHdlbGwtaGFuZGxlZCBQcm9taXNlIHRvXG4gXHRcdFx0Ly8gYXZvaWQgdHJpZ2dlcmluZyB1bmNhdWdodCBleGNlcHRpb24gd2FybmluZyBpbiBDaHJvbWUuXG4gXHRcdFx0Ly8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ2NTY2NlxuIFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG4gXHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcbiBcdFx0XHRcdFx0cmV0dXJuIGhvdEFwcGx5KGhvdEFwcGx5T25VcGRhdGUpO1xuIFx0XHRcdFx0fSlcbiBcdFx0XHRcdC50aGVuKFxuIFx0XHRcdFx0XHRmdW5jdGlvbihyZXN1bHQpIHtcbiBcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gXHRcdFx0XHRcdH0sXG4gXHRcdFx0XHRcdGZ1bmN0aW9uKGVycikge1xuIFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdChlcnIpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcbiBcdFx0XHRmb3IgKHZhciBpZCBpbiBob3RVcGRhdGUpIHtcbiBcdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaG90VXBkYXRlLCBpZCkpIHtcbiBcdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzLnB1c2godG9Nb2R1bGVJZChpZCkpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKG91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90QXBwbHkob3B0aW9ucykge1xuIFx0XHRpZiAoaG90U3RhdHVzICE9PSBcInJlYWR5XCIpXG4gXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYXBwbHkoKSBpcyBvbmx5IGFsbG93ZWQgaW4gcmVhZHkgc3RhdHVzXCIpO1xuIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiBcdFx0cmV0dXJuIGhvdEFwcGx5SW50ZXJuYWwob3B0aW9ucyk7XG4gXHR9XG5cbiBcdGZ1bmN0aW9uIGhvdEFwcGx5SW50ZXJuYWwob3B0aW9ucykge1xuIFx0XHRob3RBcHBseUludmFsaWRhdGVkTW9kdWxlcygpO1xuXG4gXHRcdHZhciBjYjtcbiBcdFx0dmFyIGk7XG4gXHRcdHZhciBqO1xuIFx0XHR2YXIgbW9kdWxlO1xuIFx0XHR2YXIgbW9kdWxlSWQ7XG5cbiBcdFx0ZnVuY3Rpb24gZ2V0QWZmZWN0ZWRTdHVmZih1cGRhdGVNb2R1bGVJZCkge1xuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xuIFx0XHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xuXG4gXHRcdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLm1hcChmdW5jdGlvbihpZCkge1xuIFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0Y2hhaW46IFtpZF0sXG4gXHRcdFx0XHRcdGlkOiBpZFxuIFx0XHRcdFx0fTtcbiBcdFx0XHR9KTtcbiBcdFx0XHR3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuIFx0XHRcdFx0dmFyIHF1ZXVlSXRlbSA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWVJdGVtLmlkO1xuIFx0XHRcdFx0dmFyIGNoYWluID0gcXVldWVJdGVtLmNoYWluO1xuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRpZiAoXG4gXHRcdFx0XHRcdCFtb2R1bGUgfHxcbiBcdFx0XHRcdFx0KG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZCAmJiAhbW9kdWxlLmhvdC5fc2VsZkludmFsaWRhdGVkKVxuIFx0XHRcdFx0KVxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGlmIChtb2R1bGUuaG90Ll9zZWxmRGVjbGluZWQpIHtcbiBcdFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtZGVjbGluZWRcIixcbiBcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4sXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG4gXHRcdFx0XHRcdH07XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAobW9kdWxlLmhvdC5fbWFpbikge1xuIFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdHR5cGU6IFwidW5hY2NlcHRlZFwiLFxuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcbiBcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbW9kdWxlLnBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0dmFyIHBhcmVudElkID0gbW9kdWxlLnBhcmVudHNbaV07XG4gXHRcdFx0XHRcdHZhciBwYXJlbnQgPSBpbnN0YWxsZWRNb2R1bGVzW3BhcmVudElkXTtcbiBcdFx0XHRcdFx0aWYgKCFwYXJlbnQpIGNvbnRpbnVlO1xuIFx0XHRcdFx0XHRpZiAocGFyZW50LmhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGVjbGluZWRcIixcbiBcdFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG4gXHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRwYXJlbnRJZDogcGFyZW50SWRcbiBcdFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmIChvdXRkYXRlZE1vZHVsZXMuaW5kZXhPZihwYXJlbnRJZCkgIT09IC0xKSBjb250aW51ZTtcbiBcdFx0XHRcdFx0aWYgKHBhcmVudC5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkge1xuIFx0XHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdKVxuIFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdID0gW107XG4gXHRcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdLCBbbW9kdWxlSWRdKTtcbiBcdFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRkZWxldGUgb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdO1xuIFx0XHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaChwYXJlbnRJZCk7XG4gXHRcdFx0XHRcdHF1ZXVlLnB1c2goe1xuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG4gXHRcdFx0XHRcdFx0aWQ6IHBhcmVudElkXG4gXHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cblxuIFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHR0eXBlOiBcImFjY2VwdGVkXCIsXG4gXHRcdFx0XHRtb2R1bGVJZDogdXBkYXRlTW9kdWxlSWQsXG4gXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXM6IG91dGRhdGVkTW9kdWxlcyxcbiBcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzOiBvdXRkYXRlZERlcGVuZGVuY2llc1xuIFx0XHRcdH07XG4gXHRcdH1cblxuIFx0XHRmdW5jdGlvbiBhZGRBbGxUb1NldChhLCBiKSB7XG4gXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHR2YXIgaXRlbSA9IGJbaV07XG4gXHRcdFx0XHRpZiAoYS5pbmRleE9mKGl0ZW0pID09PSAtMSkgYS5wdXNoKGl0ZW0pO1xuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIGF0IGJlZ2luIGFsbCB1cGRhdGVzIG1vZHVsZXMgYXJlIG91dGRhdGVkXG4gXHRcdC8vIHRoZSBcIm91dGRhdGVkXCIgc3RhdHVzIGNhbiBwcm9wYWdhdGUgdG8gcGFyZW50cyBpZiB0aGV5IGRvbid0IGFjY2VwdCB0aGUgY2hpbGRyZW5cbiBcdFx0dmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307XG4gXHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcbiBcdFx0dmFyIGFwcGxpZWRVcGRhdGUgPSB7fTtcblxuIFx0XHR2YXIgd2FyblVuZXhwZWN0ZWRSZXF1aXJlID0gZnVuY3Rpb24gd2FyblVuZXhwZWN0ZWRSZXF1aXJlKCkge1xuIFx0XHRcdGNvbnNvbGUud2FybihcbiBcdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICsgcmVzdWx0Lm1vZHVsZUlkICsgXCIpIHRvIGRpc3Bvc2VkIG1vZHVsZVwiXG4gXHRcdFx0KTtcbiBcdFx0fTtcblxuIFx0XHRmb3IgKHZhciBpZCBpbiBob3RVcGRhdGUpIHtcbiBcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhvdFVwZGF0ZSwgaWQpKSB7XG4gXHRcdFx0XHRtb2R1bGVJZCA9IHRvTW9kdWxlSWQoaWQpO1xuIFx0XHRcdFx0LyoqIEB0eXBlIHtUT0RPfSAqL1xuIFx0XHRcdFx0dmFyIHJlc3VsdDtcbiBcdFx0XHRcdGlmIChob3RVcGRhdGVbaWRdKSB7XG4gXHRcdFx0XHRcdHJlc3VsdCA9IGdldEFmZmVjdGVkU3R1ZmYobW9kdWxlSWQpO1xuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0cmVzdWx0ID0ge1xuIFx0XHRcdFx0XHRcdHR5cGU6IFwiZGlzcG9zZWRcIixcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogaWRcbiBcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdC8qKiBAdHlwZSB7RXJyb3J8ZmFsc2V9ICovXG4gXHRcdFx0XHR2YXIgYWJvcnRFcnJvciA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGRvQXBwbHkgPSBmYWxzZTtcbiBcdFx0XHRcdHZhciBkb0Rpc3Bvc2UgPSBmYWxzZTtcbiBcdFx0XHRcdHZhciBjaGFpbkluZm8gPSBcIlwiO1xuIFx0XHRcdFx0aWYgKHJlc3VsdC5jaGFpbikge1xuIFx0XHRcdFx0XHRjaGFpbkluZm8gPSBcIlxcblVwZGF0ZSBwcm9wYWdhdGlvbjogXCIgKyByZXN1bHQuY2hhaW4uam9pbihcIiAtPiBcIik7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRzd2l0Y2ggKHJlc3VsdC50eXBlKSB7XG4gXHRcdFx0XHRcdGNhc2UgXCJzZWxmLWRlY2xpbmVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EZWNsaW5lZCkgb3B0aW9ucy5vbkRlY2xpbmVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcbiBcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2Ugb2Ygc2VsZiBkZWNsaW5lOiBcIiArXG4gXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm1vZHVsZUlkICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRjaGFpbkluZm9cbiBcdFx0XHRcdFx0XHRcdCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJkZWNsaW5lZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGVjbGluZWQpIG9wdGlvbnMub25EZWNsaW5lZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcbiBcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4gXHRcdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIG9mIGRlY2xpbmVkIGRlcGVuZGVuY3k6IFwiICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQubW9kdWxlSWQgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdFwiIGluIFwiICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQucGFyZW50SWQgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcInVuYWNjZXB0ZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vblVuYWNjZXB0ZWQpIG9wdGlvbnMub25VbmFjY2VwdGVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZVVuYWNjZXB0ZWQpXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuIFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBcIiArIG1vZHVsZUlkICsgXCIgaXMgbm90IGFjY2VwdGVkXCIgKyBjaGFpbkluZm9cbiBcdFx0XHRcdFx0XHRcdCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJhY2NlcHRlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uQWNjZXB0ZWQpIG9wdGlvbnMub25BY2NlcHRlZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGRvQXBwbHkgPSB0cnVlO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwiZGlzcG9zZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRpc3Bvc2VkKSBvcHRpb25zLm9uRGlzcG9zZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRkb0Rpc3Bvc2UgPSB0cnVlO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRkZWZhdWx0OlxuIFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhjZXB0aW9uIHR5cGUgXCIgKyByZXN1bHQudHlwZSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAoYWJvcnRFcnJvcikge1xuIFx0XHRcdFx0XHRob3RTZXRTdGF0dXMoXCJhYm9ydFwiKTtcbiBcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGFib3J0RXJyb3IpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKGRvQXBwbHkpIHtcbiBcdFx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSBob3RVcGRhdGVbbW9kdWxlSWRdO1xuIFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIHJlc3VsdC5vdXRkYXRlZE1vZHVsZXMpO1xuIFx0XHRcdFx0XHRmb3IgKG1vZHVsZUlkIGluIHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdFx0XHRcdGlmIChcbiBcdFx0XHRcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiBcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzLFxuIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZFxuIFx0XHRcdFx0XHRcdFx0KVxuIFx0XHRcdFx0XHRcdCkge1xuIFx0XHRcdFx0XHRcdFx0aWYgKCFvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pXG4gXHRcdFx0XHRcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSA9IFtdO1xuIFx0XHRcdFx0XHRcdFx0YWRkQWxsVG9TZXQoXG4gXHRcdFx0XHRcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSxcbiBcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXVxuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChkb0Rpc3Bvc2UpIHtcbiBcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWRNb2R1bGVzLCBbcmVzdWx0Lm1vZHVsZUlkXSk7XG4gXHRcdFx0XHRcdGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdID0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIFN0b3JlIHNlbGYgYWNjZXB0ZWQgb3V0ZGF0ZWQgbW9kdWxlcyB0byByZXF1aXJlIHRoZW0gbGF0ZXIgYnkgdGhlIG1vZHVsZSBzeXN0ZW1cbiBcdFx0dmFyIG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcyA9IFtdO1xuIFx0XHRmb3IgKGkgPSAwOyBpIDwgb3V0ZGF0ZWRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0bW9kdWxlSWQgPSBvdXRkYXRlZE1vZHVsZXNbaV07XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0aW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gJiZcbiBcdFx0XHRcdGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmhvdC5fc2VsZkFjY2VwdGVkICYmXG4gXHRcdFx0XHQvLyByZW1vdmVkIHNlbGYtYWNjZXB0ZWQgbW9kdWxlcyBzaG91bGQgbm90IGJlIHJlcXVpcmVkXG4gXHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSAhPT0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlICYmXG4gXHRcdFx0XHQvLyB3aGVuIGNhbGxlZCBpbnZhbGlkYXRlIHNlbGYtYWNjZXB0aW5nIGlzIG5vdCBwb3NzaWJsZVxuIFx0XHRcdFx0IWluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmhvdC5fc2VsZkludmFsaWRhdGVkXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMucHVzaCh7XG4gXHRcdFx0XHRcdG1vZHVsZTogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdHBhcmVudHM6IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLnBhcmVudHMuc2xpY2UoKSxcbiBcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyOiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5ob3QuX3NlbGZBY2NlcHRlZFxuIFx0XHRcdFx0fSk7XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gTm93IGluIFwiZGlzcG9zZVwiIHBoYXNlXG4gXHRcdGhvdFNldFN0YXR1cyhcImRpc3Bvc2VcIik7XG4gXHRcdE9iamVjdC5rZXlzKGhvdEF2YWlsYWJsZUZpbGVzTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGNodW5rSWQpIHtcbiBcdFx0XHRpZiAoaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0gPT09IGZhbHNlKSB7XG4gXHRcdFx0XHRob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHR9KTtcblxuIFx0XHR2YXIgaWR4O1xuIFx0XHR2YXIgcXVldWUgPSBvdXRkYXRlZE1vZHVsZXMuc2xpY2UoKTtcbiBcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiBcdFx0XHRtb2R1bGVJZCA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdGlmICghbW9kdWxlKSBjb250aW51ZTtcblxuIFx0XHRcdHZhciBkYXRhID0ge307XG5cbiBcdFx0XHQvLyBDYWxsIGRpc3Bvc2UgaGFuZGxlcnNcbiBcdFx0XHR2YXIgZGlzcG9zZUhhbmRsZXJzID0gbW9kdWxlLmhvdC5fZGlzcG9zZUhhbmRsZXJzO1xuIFx0XHRcdGZvciAoaiA9IDA7IGogPCBkaXNwb3NlSGFuZGxlcnMubGVuZ3RoOyBqKyspIHtcbiBcdFx0XHRcdGNiID0gZGlzcG9zZUhhbmRsZXJzW2pdO1xuIFx0XHRcdFx0Y2IoZGF0YSk7XG4gXHRcdFx0fVxuIFx0XHRcdGhvdEN1cnJlbnRNb2R1bGVEYXRhW21vZHVsZUlkXSA9IGRhdGE7XG5cbiBcdFx0XHQvLyBkaXNhYmxlIG1vZHVsZSAodGhpcyBkaXNhYmxlcyByZXF1aXJlcyBmcm9tIHRoaXMgbW9kdWxlKVxuIFx0XHRcdG1vZHVsZS5ob3QuYWN0aXZlID0gZmFsc2U7XG5cbiBcdFx0XHQvLyByZW1vdmUgbW9kdWxlIGZyb20gY2FjaGVcbiBcdFx0XHRkZWxldGUgaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG5cbiBcdFx0XHQvLyB3aGVuIGRpc3Bvc2luZyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgZGlzcG9zZSBoYW5kbGVyXG4gXHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcblxuIFx0XHRcdC8vIHJlbW92ZSBcInBhcmVudHNcIiByZWZlcmVuY2VzIGZyb20gYWxsIGNoaWxkcmVuXG4gXHRcdFx0Zm9yIChqID0gMDsgaiA8IG1vZHVsZS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0dmFyIGNoaWxkID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGUuY2hpbGRyZW5bal1dO1xuIFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG4gXHRcdFx0XHRpZHggPSBjaGlsZC5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSB7XG4gXHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gcmVtb3ZlIG91dGRhdGVkIGRlcGVuZGVuY3kgZnJvbSBtb2R1bGUgY2hpbGRyZW5cbiBcdFx0dmFyIGRlcGVuZGVuY3k7XG4gXHRcdHZhciBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcztcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBvdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmIChtb2R1bGUpIHtcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcbiBcdFx0XHRcdFx0XHRpZHggPSBtb2R1bGUuY2hpbGRyZW4uaW5kZXhPZihkZXBlbmRlbmN5KTtcbiBcdFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIG1vZHVsZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIE5vdyBpbiBcImFwcGx5XCIgcGhhc2VcbiBcdFx0aG90U2V0U3RhdHVzKFwiYXBwbHlcIik7XG5cbiBcdFx0aWYgKGhvdFVwZGF0ZU5ld0hhc2ggIT09IHVuZGVmaW5lZCkge1xuIFx0XHRcdGhvdEN1cnJlbnRIYXNoID0gaG90VXBkYXRlTmV3SGFzaDtcbiBcdFx0XHRob3RVcGRhdGVOZXdIYXNoID0gdW5kZWZpbmVkO1xuIFx0XHR9XG4gXHRcdGhvdFVwZGF0ZSA9IHVuZGVmaW5lZDtcblxuIFx0XHQvLyBpbnNlcnQgbmV3IGNvZGVcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBhcHBsaWVkVXBkYXRlKSB7XG4gXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcHBsaWVkVXBkYXRlLCBtb2R1bGVJZCkpIHtcbiBcdFx0XHRcdG1vZHVsZXNbbW9kdWxlSWRdID0gYXBwbGllZFVwZGF0ZVttb2R1bGVJZF07XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gY2FsbCBhY2NlcHQgaGFuZGxlcnNcbiBcdFx0dmFyIGVycm9yID0gbnVsbDtcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBvdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmIChtb2R1bGUpIHtcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRcdHZhciBjYWxsYmFja3MgPSBbXTtcbiBcdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHRcdFx0ZGVwZW5kZW5jeSA9IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2ldO1xuIFx0XHRcdFx0XHRcdGNiID0gbW9kdWxlLmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwZW5kZW5jeV07XG4gXHRcdFx0XHRcdFx0aWYgKGNiKSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tzLmluZGV4T2YoY2IpICE9PSAtMSkgY29udGludWU7XG4gXHRcdFx0XHRcdFx0XHRjYWxsYmFja3MucHVzaChjYik7XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0XHRjYiA9IGNhbGxiYWNrc1tpXTtcbiBcdFx0XHRcdFx0XHR0cnkge1xuIFx0XHRcdFx0XHRcdFx0Y2IobW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMpO1xuIFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuIFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImFjY2VwdC1lcnJvcmVkXCIsXG4gXHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3lJZDogbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV0sXG4gXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuIFx0XHRcdFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuIFx0XHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIExvYWQgc2VsZiBhY2NlcHRlZCBtb2R1bGVzXG4gXHRcdGZvciAoaSA9IDA7IGkgPCBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHR2YXIgaXRlbSA9IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlc1tpXTtcbiBcdFx0XHRtb2R1bGVJZCA9IGl0ZW0ubW9kdWxlO1xuIFx0XHRcdGhvdEN1cnJlbnRQYXJlbnRzID0gaXRlbS5wYXJlbnRzO1xuIFx0XHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IG1vZHVsZUlkO1xuIFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKTtcbiBcdFx0XHR9IGNhdGNoIChlcnIpIHtcbiBcdFx0XHRcdGlmICh0eXBlb2YgaXRlbS5lcnJvckhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuIFx0XHRcdFx0XHR0cnkge1xuIFx0XHRcdFx0XHRcdGl0ZW0uZXJyb3JIYW5kbGVyKGVycik7XG4gXHRcdFx0XHRcdH0gY2F0Y2ggKGVycjIpIHtcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyMixcbiBcdFx0XHRcdFx0XHRcdFx0b3JpZ2luYWxFcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyMjtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1hY2NlcHQtZXJyb3JlZFwiLFxuIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuIFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBoYW5kbGUgZXJyb3JzIGluIGFjY2VwdCBoYW5kbGVycyBhbmQgc2VsZiBhY2NlcHRlZCBtb2R1bGUgbG9hZFxuIFx0XHRpZiAoZXJyb3IpIHtcbiBcdFx0XHRob3RTZXRTdGF0dXMoXCJmYWlsXCIpO1xuIFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gXHRcdH1cblxuIFx0XHRpZiAoaG90UXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzKSB7XG4gXHRcdFx0cmV0dXJuIGhvdEFwcGx5SW50ZXJuYWwob3B0aW9ucykudGhlbihmdW5jdGlvbihsaXN0KSB7XG4gXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbihtb2R1bGVJZCkge1xuIFx0XHRcdFx0XHRpZiAobGlzdC5pbmRleE9mKG1vZHVsZUlkKSA8IDApIGxpc3QucHVzaChtb2R1bGVJZCk7XG4gXHRcdFx0XHR9KTtcbiBcdFx0XHRcdHJldHVybiBsaXN0O1xuIFx0XHRcdH0pO1xuIFx0XHR9XG5cbiBcdFx0aG90U2V0U3RhdHVzKFwiaWRsZVwiKTtcbiBcdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiBcdFx0XHRyZXNvbHZlKG91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdH0pO1xuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RBcHBseUludmFsaWRhdGVkTW9kdWxlcygpIHtcbiBcdFx0aWYgKGhvdFF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcykge1xuIFx0XHRcdGlmICghaG90VXBkYXRlKSBob3RVcGRhdGUgPSB7fTtcbiBcdFx0XHRob3RRdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMuZm9yRWFjaChob3RBcHBseUludmFsaWRhdGVkTW9kdWxlKTtcbiBcdFx0XHRob3RRdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMgPSB1bmRlZmluZWQ7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90QXBwbHlJbnZhbGlkYXRlZE1vZHVsZShtb2R1bGVJZCkge1xuIFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChob3RVcGRhdGUsIG1vZHVsZUlkKSlcbiBcdFx0XHRob3RVcGRhdGVbbW9kdWxlSWRdID0gbW9kdWxlc1ttb2R1bGVJZF07XG4gXHR9XG5cbiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4gXHR2YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuIFx0XHRcInJ1bnRpbWVcIjogMFxuIFx0fTtcblxuIFx0dmFyIGRlZmVycmVkTW9kdWxlcyA9IFtdO1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRob3Q6IGhvdENyZWF0ZU1vZHVsZShtb2R1bGVJZCksXG4gXHRcdFx0cGFyZW50czogKGhvdEN1cnJlbnRQYXJlbnRzVGVtcCA9IGhvdEN1cnJlbnRQYXJlbnRzLCBob3RDdXJyZW50UGFyZW50cyA9IFtdLCBob3RDdXJyZW50UGFyZW50c1RlbXApLFxuIFx0XHRcdGNoaWxkcmVuOiBbXVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBob3RDcmVhdGVSZXF1aXJlKG1vZHVsZUlkKSk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gX193ZWJwYWNrX2hhc2hfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5oID0gZnVuY3Rpb24oKSB7IHJldHVybiBob3RDdXJyZW50SGFzaDsgfTtcblxuIFx0dmFyIGpzb25wQXJyYXkgPSBnbG9iYWxbXCJ3ZWJwYWNrSnNvbnBcIl0gPSBnbG9iYWxbXCJ3ZWJwYWNrSnNvbnBcIl0gfHwgW107XG4gXHR2YXIgb2xkSnNvbnBGdW5jdGlvbiA9IGpzb25wQXJyYXkucHVzaC5iaW5kKGpzb25wQXJyYXkpO1xuIFx0anNvbnBBcnJheS5wdXNoID0gd2VicGFja0pzb25wQ2FsbGJhY2s7XG4gXHRqc29ucEFycmF5ID0ganNvbnBBcnJheS5zbGljZSgpO1xuIFx0Zm9yKHZhciBpID0gMDsgaSA8IGpzb25wQXJyYXkubGVuZ3RoOyBpKyspIHdlYnBhY2tKc29ucENhbGxiYWNrKGpzb25wQXJyYXlbaV0pO1xuIFx0dmFyIHBhcmVudEpzb25wRnVuY3Rpb24gPSBvbGRKc29ucEZ1bmN0aW9uO1xuXG5cbiBcdC8vIHJ1biBkZWZlcnJlZCBtb2R1bGVzIGZyb20gb3RoZXIgY2h1bmtzXG4gXHRjaGVja0RlZmVycmVkTW9kdWxlcygpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
\ No newline at end of file
diff --git a/platforms/android/app/src/main/res/values-de/strings.xml b/platforms/android/app/src/main/res/values-de/strings.xml
index 14c880d3..c96f458f 100644
--- a/platforms/android/app/src/main/res/values-de/strings.xml
+++ b/platforms/android/app/src/main/res/values-de/strings.xml
@@ -4,6 +4,7 @@
"Backup file has been modified externally."
"Backup file seems empty."
"Backup file is incorrect or corrupt."
+ "Import failed"
"Entferne Rezept von Imbiss?"
"Entferne Rezept von Abendessen?"
"Entferne Rezept von Mittagessen?"
@@ -287,5 +288,4 @@
"EnRecipes"
"EnRecipes"
"EnRecipes"
- "Import failed"
diff --git a/platforms/android/build-tools/sbg-interfaces-names.txt b/platforms/android/build-tools/sbg-interfaces-names.txt
index 47ad4baa..6b6f113b 100644
--- a/platforms/android/build-tools/sbg-interfaces-names.txt
+++ b/platforms/android/build-tools/sbg-interfaces-names.txt
@@ -1,3 +1,4 @@
+okhttp3.Authenticator
androidx.appcompat.app.ActionBar.DisplayOptions
androidx.appcompat.app.ActionBar.NavigationMode
androidx.appcompat.app.ActionBar.OnMenuVisibilityListener
@@ -8,77 +9,49 @@ androidx.appcompat.app.ActionBarDrawerToggle.DelegateProvider
androidx.appcompat.app.AlertController.AlertParams.OnPrepareListViewListener
androidx.appcompat.app.AppCompatCallback
androidx.appcompat.app.AppCompatDelegate.NightMode
+okhttp3.Interceptor.Chain
android.support.v4.media.MediaBrowserCompat.ConnectionCallback.ConnectionCallbackInternal
android.support.v4.media.MediaBrowserCompat.MediaBrowserImpl
-okhttp3.Authenticator
+okhttp3.package-info
android.support.v4.media.MediaBrowserCompat.MediaBrowserServiceCallbackImpl
android.support.v4.media.MediaBrowserCompat.MediaItem.Flags
android.support.v4.media.MediaBrowserCompatApi21.ConnectionCallback
android.support.v4.media.MediaBrowserCompatApi21.SubscriptionCallback
android.support.v4.media.MediaBrowserCompatApi23.ItemCallback
-okhttp3.Interceptor.Chain
-androidx.appcompat.graphics.drawable.DrawerArrowDrawable.ArrowDirection
-androidx.appcompat.view.ActionMode.Callback
-androidx.appcompat.view.CollapsibleActionView
-net.lingala.zip4j.crypto.Decrypter
-net.lingala.zip4j.crypto.Encrypter
-okhttp3.package-info
-net.lingala.zip4j.crypto.PBKDF2.PRF
-androidx.appcompat.view.menu.CascadingMenuPopup.HorizPosition
android.support.v4.media.MediaBrowserCompatApi26.SubscriptionCallback
-androidx.appcompat.view.menu.MenuBuilder.Callback
-androidx.appcompat.view.menu.MenuBuilder.ItemInvoker
android.support.v4.media.MediaMetadataCompat.BitmapKey
android.support.v4.media.MediaMetadataCompat.LongKey
android.support.v4.media.MediaMetadataCompat.RatingKey
android.support.v4.media.MediaMetadataCompat.TextKey
+net.lingala.zip4j.crypto.Decrypter
+net.lingala.zip4j.crypto.Encrypter
+net.lingala.zip4j.crypto.PBKDF2.PRF
okhttp3.internal.cache.InternalCache
-androidx.appcompat.view.menu.MenuHelper
+okhttp3.Connection
+okhttp3.internal.io.FileSystem
android.support.v4.media.RatingCompat.StarStyle
+okhttp3.internal.http.HttpCodec
android.support.v4.media.RatingCompat.Style
android.support.v4.media.session.IMediaControllerCallback
-androidx.appcompat.view.menu.MenuPresenter.Callback
-androidx.appcompat.view.menu.MenuPresenter
-android.support.v4.media.session.IMediaSession
-androidx.appcompat.view.menu.MenuView.ItemView
-androidx.appcompat.view.menu.MenuView
-androidx.appcompat.view.menu.ShowableListMenu
-android.support.v4.media.session.MediaControllerCompat.MediaControllerImpl
-androidx.appcompat.widget.ActionBarOverlayLayout.ActionBarVisibilityCallback
-android.support.v4.media.session.MediaControllerCompatApi21.Callback
-android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl
-androidx.appcompat.widget.ActionMenuView.ActionMenuChildView
-okhttp3.Connection
-androidx.appcompat.widget.ActionMenuView.OnMenuItemClickListener
-androidx.appcompat.widget.ActivityChooserModel.ActivityChooserModelClient
-androidx.appcompat.widget.ActivityChooserModel.ActivitySorter
-androidx.appcompat.widget.ActivityChooserModel.OnChooseActivityListener
-okhttp3.internal.io.FileSystem
-okhttp3.internal.http.HttpCodec
okhttp3.EventListener.Factory
-android.support.v4.app.INotificationSideChannel
-android.support.v4.os.IResultReceiver
-androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup
okhttp3.Call
okhttp3.CookieJar
+android.support.v4.media.session.IMediaSession
+android.support.v4.media.session.MediaControllerCompat.MediaControllerImpl
+android.support.v4.media.session.MediaControllerCompatApi21.Callback
+android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl
+android.support.v4.app.INotificationSideChannel
+android.support.v4.os.IResultReceiver
+androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback
+androidx.core.app.ActivityCompat.PermissionCompatDelegate
+androidx.core.app.ActivityCompat.RequestPermissionsRequestCodeValidator
+androidx.appcompat.graphics.drawable.DrawerArrowDrawable.ArrowDirection
+androidx.appcompat.view.ActionMode.Callback
+androidx.appcompat.view.CollapsibleActionView
android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener
android.support.v4.media.session.MediaSessionCompat.SessionFlags
-okhttp3.internal.http.UnrepeatableRequestBody
-okhttp3.internal.ws.WebSocketReader.FrameCallback
-okhttp3.Interceptor
-androidx.appcompat.widget.ContentFrameLayout.OnAttachListener
-okhttp3.Callback
-androidx.appcompat.widget.DecorContentParent
-androidx.appcompat.widget.DecorToolbar
-okhttp3.Dns
-androidx.appcompat.widget.FitWindowsViewGroup.OnFitSystemWindowsListener
-androidx.appcompat.widget.FitWindowsViewGroup
-androidx.appcompat.widget.LinearLayoutCompat.DividerMode
-androidx.appcompat.widget.LinearLayoutCompat.OrientationMode
-androidx.appcompat.widget.MenuItemHoverListener
+androidx.appcompat.view.menu.CascadingMenuPopup.HorizPosition
android.support.v4.media.session.MediaSessionCompatApi21.Callback
-androidx.appcompat.widget.PopupMenu.OnDismissListener
-androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener
android.support.v4.media.session.MediaSessionCompatApi23.Callback
android.support.v4.media.session.MediaSessionCompatApi24.Callback
android.support.v4.media.session.PlaybackStateCompat.Actions
@@ -87,129 +60,161 @@ android.support.v4.media.session.PlaybackStateCompat.MediaKeyAction
android.support.v4.media.session.PlaybackStateCompat.RepeatMode
android.support.v4.media.session.PlaybackStateCompat.ShuffleMode
android.support.v4.media.session.PlaybackStateCompat.State
-androidx.appcompat.widget.SearchView.OnCloseListener
-androidx.appcompat.widget.SearchView.OnQueryTextListener
-androidx.appcompat.widget.SearchView.OnSuggestionListener
-okhttp3.internal.http2.PushObserver
-androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback
-okhttp3.internal.tls.TrustRootIndex
-androidx.core.app.ActivityCompat.PermissionCompatDelegate
-androidx.core.app.ActivityCompat.RequestPermissionsRequestCodeValidator
-okhttp3.Call.Factory
-androidx.appcompat.widget.ShareActionProvider.OnShareTargetSelectedListener
-androidx.core.app.CoreComponentFactory.CompatWrapped
-androidx.appcompat.widget.ThemedSpinnerAdapter
-androidx.core.app.FrameMetricsAggregator.MetricType
-androidx.appcompat.widget.Toolbar.OnMenuItemClickListener
-androidx.core.app.JobIntentService.CompatJobEngine
-androidx.core.app.JobIntentService.GenericWorkItem
-androidx.core.app.NotificationBuilderWithBuilderAccessor
+okhttp3.internal.http.UnrepeatableRequestBody
+okhttp3.internal.ws.WebSocketReader.FrameCallback
+okhttp3.Interceptor
androidx.media.AudioAttributesCompat.AttributeContentType
androidx.media.AudioAttributesCompat.AttributeUsage
+androidx.media.AudioAttributesImpl
+okhttp3.Callback
+okhttp3.Dns
+androidx.core.app.CoreComponentFactory.CompatWrapped
+androidx.media.MediaBrowserServiceCompat.MediaBrowserServiceImpl
+androidx.core.app.FrameMetricsAggregator.MetricType
+okhttp3.internal.http2.PushObserver
+androidx.core.app.JobIntentService.CompatJobEngine
+okhttp3.internal.tls.TrustRootIndex
+androidx.core.app.JobIntentService.GenericWorkItem
+androidx.core.app.NotificationBuilderWithBuilderAccessor
androidx.core.app.NotificationCompat.Action.Extender
androidx.core.app.NotificationCompat.Action.SemanticAction
+okhttp3.Call.Factory
androidx.core.app.NotificationCompat.BadgeIconType
-androidx.media.AudioAttributesImpl
-androidx.appcompat.widget.ViewStubCompat.OnInflateListener
-androidx.media.MediaBrowserServiceCompat.MediaBrowserServiceImpl
-androidx.appcompat.widget.WithHint
-androidx.fragment.app.Fragment.OnStartEnterTransitionListener
androidx.media.MediaBrowserServiceCompat.ServiceCallbacks
androidx.media.MediaBrowserServiceCompatApi21.ServiceCompatProxy
androidx.media.MediaBrowserServiceCompatApi23.ServiceCompatProxy
androidx.media.MediaBrowserServiceCompatApi26.ServiceCompatProxy
androidx.media.MediaSessionManager.MediaSessionManagerImpl
androidx.media.MediaSessionManager.RemoteUserInfoImpl
-androidx.core.app.NotificationCompat.Extender
-okhttp3.WebSocket
-androidx.core.app.NotificationCompat.GroupAlertBehavior
androidx.media.VolumeProviderCompat.ControlType
androidx.media.VolumeProviderCompatApi21.Delegate
-okhttp3.WebSocket.Factory
-okhttp3.internal.cache.CacheRequest
-androidx.core.app.NotificationCompat.NotificationVisibility
-androidx.core.app.NotificationCompat.StreamType
com.telerik.android.primitives.widget.sidedrawer.DrawerChangeListener
com.telerik.android.primitives.widget.sidedrawer.DrawerFadeLayer
-androidx.fragment.app.FragmentManager.BackStackEntry
com.telerik.android.primitives.widget.sidedrawer.DrawerTransition
com.telerik.android.primitives.widget.sidedrawer.DrawerTransitionEndedListener
-androidx.fragment.app.FragmentManager.OnBackStackChangedListener
-androidx.fragment.app.FragmentManager.OpGenerator
-okhttp3.internal.http2.Http2Reader.Handler
-androidx.drawerlayout.widget.DrawerLayout.DrawerListener
-com.telerik.android.primitives.widget.sidedrawer.contents.CreateIntentCallback
-androidx.fragment.app.FragmentTransition.Callback
-androidx.lifecycle.Observer
-com.telerik.android.data.CurrentItemChangedListener
-com.telerik.android.data.DataChangedListener
-com.telerik.android.data.ListViewFilterFunction
-com.telerik.android.data.ListViewGroupFunction
-com.telerik.android.data.ListViewSortFunction
-com.telerik.android.data.OnJSONDataSourceCreated
-com.telerik.android.data.SelectionAdapter
+androidx.core.app.NotificationCompat.Extender
+androidx.core.app.NotificationCompat.GroupAlertBehavior
+androidx.core.app.NotificationCompat.NotificationVisibility
+androidx.core.app.NotificationCompat.StreamType
+androidx.appcompat.view.menu.MenuBuilder.Callback
+androidx.appcompat.view.menu.MenuBuilder.ItemInvoker
androidx.core.app.NotificationManagerCompat.Task
-com.telerik.android.data.SelectionChangeListener
-com.telerik.widget.list.CollapsedGroupState
-com.telerik.widget.list.CollapsibleGroupsBehavior.CollapseGroupListener
-com.telerik.widget.list.CurrentPositionChangeListener
-androidx.viewpager2.adapter.StatefulAdapter
+androidx.appcompat.view.menu.MenuHelper
androidx.core.app.RemoteInput.EditChoicesBeforeSending
androidx.core.app.RemoteInput.Source
androidx.core.app.ServiceCompat.StopForegroundFlags
-com.telerik.widget.list.GroupAdapter
-com.telerik.widget.list.ItemReorderBehavior.ItemReorderListener
+okhttp3.WebSocket
+okhttp3.WebSocket.Factory
+okhttp3.internal.cache.CacheRequest
androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener
androidx.core.app.TaskStackBuilder.SupportParentable
-com.couchbase.lite.ArrayInterface
+okhttp3.internal.http2.Http2Reader.Handler
androidx.core.content.FileProvider.PathStrategy
+androidx.core.content.PermissionChecker.PermissionResult
+androidx.core.content.pm.PermissionInfoCompat.Protection
+androidx.core.content.pm.PermissionInfoCompat.ProtectionFlags
+androidx.drawerlayout.widget.DrawerLayout.DrawerListener
+com.telerik.android.primitives.widget.sidedrawer.contents.CreateIntentCallback
+androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry
+androidx.core.content.res.FontResourcesParserCompat.FetchStrategy
+androidx.viewpager2.adapter.StatefulAdapter
+androidx.lifecycle.Observer
+androidx.viewpager2.widget.ViewPager2.OffscreenPageLimit
+androidx.appcompat.view.menu.MenuPresenter.Callback
+androidx.appcompat.view.menu.MenuPresenter
+androidx.appcompat.view.menu.MenuView.ItemView
+androidx.appcompat.view.menu.MenuView
+androidx.appcompat.view.menu.ShowableListMenu
+androidx.core.graphics.TypefaceCompatBaseImpl.StyleExtractor
+androidx.core.graphics.drawable.IconCompat.IconType
+androidx.appcompat.widget.ActionBarOverlayLayout.ActionBarVisibilityCallback
+androidx.core.graphics.drawable.TintAwareDrawable
+androidx.core.graphics.drawable.WrappedDrawable
+androidx.core.internal.package-info
+androidx.core.internal.view.SupportMenu
+androidx.core.internal.view.SupportMenuItem
+androidx.core.internal.view.SupportSubMenu
+androidx.core.net.ConnectivityManagerCompat.RestrictBackgroundStatus
+androidx.appcompat.widget.ActionMenuView.ActionMenuChildView
+androidx.appcompat.widget.ActionMenuView.OnMenuItemClickListener
+androidx.core.os.CancellationSignal.OnCancelListener
+com.couchbase.lite.ArrayInterface
+androidx.appcompat.widget.ActivityChooserModel.ActivityChooserModelClient
+androidx.appcompat.widget.ActivityChooserModel.ActivitySorter
+androidx.appcompat.widget.ActivityChooserModel.OnChooseActivityListener
+androidx.core.os.LocaleListInterface
com.couchbase.lite.CBLError.Code
com.couchbase.lite.CBLError.Domain
com.couchbase.lite.CBLError
com.couchbase.lite.ChangeListener
-androidx.core.content.PermissionChecker.PermissionResult
-androidx.core.content.pm.PermissionInfoCompat.Protection
-androidx.core.content.pm.PermissionInfoCompat.ProtectionFlags
-androidx.viewpager2.widget.ViewPager2.OffscreenPageLimit
androidx.viewpager2.widget.ViewPager2.Orientation
-com.couchbase.lite.DatabaseChangeListener
androidx.viewpager2.widget.ViewPager2.PageTransformer
androidx.viewpager2.widget.ViewPager2.ScrollState
+com.couchbase.lite.DatabaseChangeListener
+androidx.core.os.ParcelableCompatCreatorCallbacks
+androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason
+androidx.core.provider.SelfDestructiveThread.ReplyCallback
com.couchbase.lite.DictionaryInterface
-androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry
-androidx.core.content.res.FontResourcesParserCompat.FetchStrategy
-com.telerik.widget.list.LoadOnDemandBehavior.LoadOnDemandListener
-com.telerik.widget.list.LoadOnDemandBehavior.LoadingListener
+androidx.cursoradapter.widget.CursorFilter.CursorFilterClient
+androidx.cursoradapter.widget.SimpleCursorAdapter.CursorToStringConverter
+androidx.cursoradapter.widget.SimpleCursorAdapter.ViewBinder
com.couchbase.lite.DocumentChangeListener
+androidx.savedstate.SavedStateRegistry.AutoRecreated
+androidx.savedstate.SavedStateRegistry.SavedStateProvider
com.couchbase.lite.DocumentReplicationListener
-com.telerik.widget.list.RadListView.IsEmptyChangedListener
-com.telerik.widget.list.RadListView.ItemClickListener
+androidx.savedstate.SavedStateRegistryOwner
com.couchbase.lite.Endpoint
-com.telerik.widget.list.SelectionBehavior.SelectionChangedListener
+androidx.core.text.TextDirectionHeuristicCompat
+androidx.core.text.TextDirectionHeuristicsCompat.TextDirectionAlgorithm
+androidx.core.text.util.LinkifyCompat.LinkifyMask
+androidx.core.util.Consumer
com.couchbase.lite.FromRouter
+okio.Source
+androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup
+okio.Sink
+okio.package-info
+okio.BufferedSource
com.couchbase.lite.GroupByRouter
com.couchbase.lite.HavingRouter
com.couchbase.lite.Index
com.couchbase.lite.JoinRouter
com.couchbase.lite.LimitRouter
com.couchbase.lite.ListenerToken
-com.telerik.widget.list.SwipeActionsBehavior.SwipeActionsListener
com.couchbase.lite.Logger
-androidx.cursoradapter.widget.CursorFilter.CursorFilterClient
+androidx.appcompat.widget.ContentFrameLayout.OnAttachListener
+androidx.appcompat.widget.DecorContentParent
+androidx.appcompat.widget.DecorToolbar
com.couchbase.lite.MutableArrayInterface
-androidx.cursoradapter.widget.SimpleCursorAdapter.CursorToStringConverter
-androidx.cursoradapter.widget.SimpleCursorAdapter.ViewBinder
-com.telerik.widget.list.SwipeExecuteBehavior.SwipeExecuteDismissedListener
-com.telerik.widget.list.SwipeExecuteBehavior.SwipeExecuteListener
com.couchbase.lite.MutableDictionaryInterface
+androidx.appcompat.widget.FitWindowsViewGroup.OnFitSystemWindowsListener
+androidx.appcompat.widget.FitWindowsViewGroup
+androidx.appcompat.widget.LinearLayoutCompat.DividerMode
+androidx.appcompat.widget.LinearLayoutCompat.OrientationMode
+androidx.core.util.Pools.Pool
+androidx.core.util.Predicate
+androidx.core.util.Supplier
+androidx.core.view.ActionProvider.SubUiVisibilityListener
+androidx.core.view.ActionProvider.VisibilityListener
+okio.BufferedSink
+androidx.appcompat.widget.MenuItemHoverListener
+androidx.print.PrintHelper.OnPrintFinishCallback
+androidx.appcompat.widget.PopupMenu.OnDismissListener
+androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener
com.couchbase.lite.OrderByRouter
com.couchbase.lite.Query
+androidx.core.view.DragStartHelper.OnDragStartListener
com.couchbase.lite.QueryChangeListener
-com.telerik.widget.list.SwipeRefreshBehavior.RefreshListener
+androidx.core.view.GestureDetectorCompat.GestureDetectorCompatImpl
com.couchbase.lite.ReplicationFilter
-com.telerik.widget.list.SwipeRefreshBehavior.SwipeRefreshListener
com.couchbase.lite.ReplicatorChangeListener
+androidx.coordinatorlayout.widget.CoordinatorLayout.AttachedBehavior
+androidx.coordinatorlayout.widget.CoordinatorLayout.DefaultBehavior
+androidx.coordinatorlayout.widget.CoordinatorLayout.DispatchChangeEvent
+androidx.appcompat.widget.SearchView.OnCloseListener
+androidx.appcompat.widget.SearchView.OnQueryTextListener
+androidx.appcompat.widget.SearchView.OnSuggestionListener
com.couchbase.lite.WhereRouter
+androidx.appcompat.widget.ShareActionProvider.OnShareTargetSelectedListener
com.couchbase.litecore.C4Constants.C4DatabaseFlags
com.couchbase.litecore.C4Constants.C4DocumentFlags
com.couchbase.litecore.C4Constants.C4DocumentVersioning
@@ -224,97 +229,424 @@ com.couchbase.litecore.C4Constants.C4RevisionFlags
com.couchbase.litecore.C4Constants.LiteCoreError
com.couchbase.litecore.C4Constants.NetworkError
com.couchbase.litecore.C4Constants
+androidx.core.view.KeyEventDispatcher.Component
+androidx.appcompat.widget.ThemedSpinnerAdapter
+androidx.core.view.LayoutInflaterFactory
com.couchbase.litecore.C4DatabaseObserverListener
+androidx.core.view.MenuItemCompat.OnActionExpandListener
com.couchbase.litecore.C4DocumentObserverListener
+androidx.appcompat.widget.Toolbar.OnMenuItemClickListener
+androidx.core.view.NestedScrollingChild
+androidx.core.view.NestedScrollingChild2
+androidx.core.view.NestedScrollingChild3
com.couchbase.litecore.C4ListenerAPIs
-androidx.asynclayoutinflater.view.AsyncLayoutInflater.OnInflateFinishedListener
+androidx.core.view.NestedScrollingParent
+androidx.core.view.NestedScrollingParent2
+androidx.core.view.NestedScrollingParent3
com.couchbase.litecore.C4PredictiveModel
+androidx.core.view.OnApplyWindowInsetsListener
+androidx.core.view.ScrollingView
com.couchbase.litecore.C4ReplicationFilter
+androidx.core.view.TintableBackgroundView
com.couchbase.litecore.C4ReplicatorListener
com.couchbase.litecore.C4ReplicatorMode
com.couchbase.litecore.C4ReplicatorStatus.C4ReplicatorActivityLevel
com.couchbase.litecore.C4WebSocketCloseCode
-com.yalantis.ucrop.UCropActivity.GestureTypes
+androidx.core.view.ViewCompat.FocusDirection
+androidx.core.view.ViewCompat.FocusRealDirection
+androidx.core.view.ViewCompat.FocusRelativeDirection
+androidx.core.view.ViewCompat.NestedScrollType
+androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat
+androidx.core.view.ViewCompat.ScrollAxis
+androidx.core.view.ViewCompat.ScrollIndicators
com.couchbase.litecore.fleece.Encodable
com.couchbase.litecore.fleece.FLConstants.FLError
+android.nfc.NfcAdapter.CreateBeamUrisCallback
com.couchbase.litecore.fleece.FLConstants.FLValueType
com.couchbase.litecore.fleece.FLEncodable
-com.yalantis.ucrop.UCropFragment.GestureTypes
-com.yalantis.ucrop.UCropFragmentCallback
-com.yalantis.ucrop.callback.BitmapCropCallback
-com.yalantis.ucrop.callback.BitmapLoadCallback
-com.yalantis.ucrop.callback.CropBoundsChangeListener
-com.yalantis.ucrop.callback.OverlayViewChangeListener
-com.couchbase.litecore.fleece.MValue.Delegate
-androidx.core.graphics.TypefaceCompatBaseImpl.StyleExtractor
-com.yalantis.ucrop.util.ImageHeaderParser.Reader
-androidx.cardview.widget.CardViewDelegate
-androidx.cardview.widget.CardViewImpl
-androidx.core.graphics.drawable.IconCompat.IconType
-androidx.cardview.widget.RoundRectDrawableWithShadow.RoundRectHelper
-androidx.savedstate.SavedStateRegistry.AutoRecreated
-androidx.savedstate.SavedStateRegistry.SavedStateProvider
-androidx.savedstate.SavedStateRegistryOwner
-com.yalantis.ucrop.util.RotationGestureDetector.OnRotationGestureListener
-androidx.core.graphics.drawable.TintAwareDrawable
-androidx.core.graphics.drawable.WrappedDrawable
-com.yalantis.ucrop.view.OverlayView.FreestyleMode
-androidx.core.internal.package-info
-androidx.core.internal.view.SupportMenu
-androidx.core.internal.view.SupportMenuItem
-okio.Source
-androidx.core.internal.view.SupportSubMenu
-androidx.core.net.ConnectivityManagerCompat.RestrictBackgroundStatus
-com.yalantis.ucrop.view.TransformImageView.TransformImageListener
-androidx.core.os.CancellationSignal.OnCancelListener
-com.yalantis.ucrop.view.widget.HorizontalProgressWheelView.ScrollingListener
-androidx.core.os.LocaleListInterface
-okio.Sink
-androidx.core.os.ParcelableCompatCreatorCallbacks
-okio.package-info
-androidx.exifinterface.media.ExifInterface.ExifStreamType
-androidx.exifinterface.media.ExifInterface.IfdType
-okio.BufferedSource
-androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason
-androidx.core.provider.SelfDestructiveThread.ReplyCallback
-okio.BufferedSink
-androidx.print.PrintHelper.OnPrintFinishCallback
-androidx.coordinatorlayout.widget.CoordinatorLayout.AttachedBehavior
-androidx.coordinatorlayout.widget.CoordinatorLayout.DefaultBehavior
-androidx.coordinatorlayout.widget.CoordinatorLayout.DispatchChangeEvent
-androidx.core.text.TextDirectionHeuristicCompat
-androidx.core.text.TextDirectionHeuristicsCompat.TextDirectionAlgorithm
-androidx.core.text.util.LinkifyCompat.LinkifyMask
-androidx.appcompat.widget.ResourceManagerInternal.InflateDelegate
-androidx.appcompat.widget.ResourceManagerInternal.ResourceManagerHooks
-androidx.core.util.Consumer
-androidx.core.util.Pools.Pool
-com.tns.ExtractPolicy
-com.tns.FileExtractor
-androidx.core.util.Predicate
-androidx.core.util.Supplier
-com.tns.JavaScriptImplementation
-com.tns.Logger
-com.tns.ManualInstrumentation.Frame
-androidx.core.view.ActionProvider.SubUiVisibilityListener
-androidx.core.view.ActionProvider.VisibilityListener
-androidx.customview.widget.FocusStrategy.BoundsAdapter
-androidx.customview.widget.FocusStrategy.CollectionAdapter
-androidx.transition.AnimatorUtils.AnimatorPauseListenerCompat
-com.tns.NativeScriptHashCodeProvider
-android.nfc.NfcAdapter.CreateBeamUrisCallback
android.nfc.NfcAdapter.ReaderCallback
android.nfc.NfcAdapter.CreateNdefMessageCallback
android.nfc.NfcAdapter.OnNdefPushCompleteCallback
android.nfc.NfcAdapter.OnTagRemovedListener
android.nfc.tech.TagTechnology
-com.tns.NativeScriptWeakHashMap.Entry.Type
+com.couchbase.litecore.fleece.MValue.Delegate
android.renderscript.Allocation.OnBufferAvailableListener
-androidx.transition.GhostView
+androidx.cardview.widget.CardViewDelegate
+androidx.cardview.widget.CardViewImpl
+androidx.cardview.widget.RoundRectDrawableWithShadow.RoundRectHelper
+androidx.appcompat.widget.ViewStubCompat.OnInflateListener
+androidx.appcompat.widget.WithHint
+androidx.fragment.app.Fragment.OnStartEnterTransitionListener
+com.tns.ExtractPolicy
+com.tns.FileExtractor
+com.tns.JavaScriptImplementation
+com.tns.Logger
+com.tns.ManualInstrumentation.Frame
+com.tns.NativeScriptHashCodeProvider
+com.tns.NativeScriptWeakHashMap.Entry.Type
+androidx.core.view.ViewPropertyAnimatorListener
+androidx.core.view.ViewPropertyAnimatorUpdateListener
+androidx.fragment.app.FragmentManager.BackStackEntry
+androidx.fragment.app.FragmentManager.OnBackStackChangedListener
+androidx.fragment.app.FragmentManager.OpGenerator
+androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener
+androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener
com.tns.RuntimeCallable
com.tns.ThreadScheduler
+androidx.core.view.accessibility.AccessibilityViewCommand
+com.tns.bindings.desc.ClassDescriptor
+com.tns.bindings.desc.Descriptor
+androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener
+com.tns.bindings.desc.MethodDescriptor
+android.companion.DeviceFilter
+com.tns.system.classes.caching.ClassCache
+androidx.core.view.inputmethod.InputContentInfoCompat.InputContentInfoCompatImpl
+com.tns.system.classes.loading.ClassStorageService
+com.tns.system.classloaders.ClassLoadersCollection
+fi.iki.elonen.NanoHTTPD.AsyncRunner
+androidx.core.widget.AutoSizeableTextView
+androidx.core.widget.NestedScrollView.OnScrollChangeListener
+fi.iki.elonen.NanoHTTPD.IHTTPSession
+fi.iki.elonen.NanoHTTPD.Response.IStatus
+android.se.omapi.SEService.OnConnectedListener
+androidx.core.widget.TextViewCompat.AutoSizeTextType
+android.database.Cursor
+android.database.DatabaseErrorHandler
+androidx.core.widget.TintableCompoundButton
+androidx.core.widget.TintableCompoundDrawablesView
+androidx.core.widget.TintableImageSourceView
+androidx.recyclerview.widget.AdapterHelper.Callback
+android.database.sqlite.SQLiteDatabase.CursorFactory
+android.database.sqlite.SQLiteCursorDriver
+android.database.sqlite.SQLiteTransactionListener
+androidx.recyclerview.widget.AsyncListDiffer.ListListener
+fi.iki.elonen.NanoHTTPD.ServerSocketFactory
+fi.iki.elonen.NanoHTTPD.TempFile
+androidx.recyclerview.widget.ChildHelper.Callback
+fi.iki.elonen.NanoHTTPD.TempFileManager
+fi.iki.elonen.NanoHTTPD.TempFileManagerFactory
+android.database.CrossProcessCursor
+androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler
+androidx.fragment.app.FragmentTransition.Callback
+androidx.recyclerview.widget.ItemTouchUIUtil
+org.ow2.asmdex.Constants
+androidx.recyclerview.widget.ListUpdateCallback
+com.telerik.android.data.CurrentItemChangedListener
+com.telerik.android.data.DataChangedListener
+androidx.recyclerview.widget.OpReorderer.Callback
+com.telerik.android.data.ListViewFilterFunction
+com.telerik.android.data.ListViewGroupFunction
+com.telerik.android.data.ListViewSortFunction
+com.telerik.android.data.OnJSONDataSourceCreated
+com.telerik.android.data.SelectionAdapter
+com.telerik.android.data.SelectionChangeListener
+com.telerik.widget.list.CollapsedGroupState
+com.telerik.widget.list.CollapsibleGroupsBehavior.CollapseGroupListener
+androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback
+androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.EdgeDirection
+com.telerik.widget.list.CurrentPositionChangeListener
+androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges
+androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener
+androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemAnimatorListener
+android.bluetooth.BluetoothAdapter.LeScanCallback
+androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry
+android.bluetooth.BluetoothProfile.ServiceListener
+android.bluetooth.BluetoothProfile
+androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener
+androidx.recyclerview.widget.RecyclerView.OnItemTouchListener
+androidx.recyclerview.widget.RecyclerView.Orientation
+android.transition.Transition.TransitionListener
+androidx.recyclerview.widget.RecyclerView.RecyclerListener
+android.speech.tts.TextToSpeech.OnUtteranceCompletedListener
+androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider
+android.speech.tts.SynthesisCallback
+android.speech.tts.TextToSpeech.OnInitListener
+android.speech.RecognitionListener
+android.text.ParcelableSpan
+android.text.method.TransformationMethod
+android.text.method.KeyListener
+android.text.method.MovementMethod
+android.text.Html.TagHandler
+android.text.Editable
+android.text.Spanned
+android.text.Html.ImageGetter
+org.ow2.asmdex.Opcodes
+com.telerik.widget.list.GroupAdapter
+com.telerik.widget.list.ItemReorderBehavior.ItemReorderListener
+org.ow2.asmdex.instruction.IDebugDifferenceAddressInstruction
+org.ow2.asmdex.instruction.IDebugDifferenceLineInstruction
+org.ow2.asmdex.instruction.IDebugLocalVariableInstruction
+org.ow2.asmdex.instruction.IDebugLocalVariableStartInstruction
+org.ow2.asmdex.instruction.IDebugRegisterInstruction
+org.ow2.asmdex.instruction.IDebugSourceNameInstruction
+org.ow2.asmdex.instruction.IIndexInstruction
+org.ow2.asmdex.instruction.ILiteralInstruction
+org.ow2.asmdex.instruction.ILongLiteralInstruction
+org.ow2.asmdex.instruction.IOffsetInstruction
+org.ow2.asmdex.instruction.IOneRegisterInstruction
+org.ow2.asmdex.instruction.IPseudoInstruction
+org.ow2.asmdex.instruction.IRegisterArrayInstruction
+org.ow2.asmdex.instruction.IThreeRegistersInstruction
+org.ow2.asmdex.instruction.ITwoRegistersInstruction
+androidx.recyclerview.widget.ThreadUtil.BackgroundCallback
+androidx.recyclerview.widget.ThreadUtil.MainThreadCallback
+androidx.recyclerview.widget.ThreadUtil
+com.telerik.widget.list.LoadOnDemandBehavior.LoadOnDemandListener
+com.telerik.widget.list.LoadOnDemandBehavior.LoadingListener
+androidx.recyclerview.widget.ViewBoundsCheck.Callback
+androidx.recyclerview.widget.ViewBoundsCheck.ViewBounds
+androidx.recyclerview.widget.ViewInfoStore.ProcessCallback
+com.telerik.widget.list.RadListView.IsEmptyChangedListener
+com.telerik.widget.list.RadListView.ItemClickListener
+android.text.InputType
+android.text.GetChars
+android.text.style.LineHeightSpan.WithDensity
+android.text.style.LeadingMarginSpan.LeadingMarginSpan2
+android.text.style.AlignmentSpan
+org.ow2.asmdex.lowLevelUtils.IDalvikValueReader
+org.ow2.asmdex.specificAnnotationParser.ISpecificAnnotationParser
+android.text.style.LeadingMarginSpan
+android.text.style.UpdateLayout
+android.text.style.UpdateAppearance
+android.text.style.WrapTogetherSpan
+android.text.style.LineBackgroundSpan
+org.ow2.asmdex.structureReader.ISwitchCase
+com.telerik.widget.list.SelectionBehavior.SelectionChangedListener
+com.telerik.widget.list.SwipeActionsBehavior.SwipeActionsListener
+kotlin.PublishedApi
+kotlin.native.concurrent.ThreadLocal
+kotlin.native.concurrent.SharedImmutable
+kotlin.ExtensionFunctionType
+kotlin.Lazy
+com.telerik.widget.list.SwipeExecuteBehavior.SwipeExecuteDismissedListener
+com.telerik.widget.list.SwipeExecuteBehavior.SwipeExecuteListener
+kotlin.contracts.ConditionalEffect
+kotlin.contracts.Effect
+kotlin.contracts.SimpleEffect
+kotlin.contracts.ExperimentalContracts
+kotlin.contracts.Returns
+kotlin.contracts.CallsInPlace
+kotlin.contracts.ContractBuilder
+kotlin.contracts.ReturnsNotNull
+kotlin.jvm.JvmSuppressWildcards
+kotlin.jvm.JvmMultifileClass
+kotlin.jvm.Volatile
+kotlin.jvm.JvmDefault
+kotlin.jvm.internal.FunctionBase
+android.text.style.LineHeightSpan
+android.text.style.TabStopSpan
+android.text.style.ParagraphStyle
+android.text.util.Linkify.MatchFilter
+android.text.util.Linkify.TransformFilter
+android.text.TextWatcher
+android.text.Spannable
+android.text.TextUtils.EllipsizeCallback
+android.text.NoCopySpan
+android.text.TextUtils.StringSplitter
+android.text.SpanWatcher
+android.text.InputFilter
+android.text.TextDirectionHeuristic
+kotlin.jvm.internal.ClassBasedDeclarationContainer
+org.ow2.asmdex.structureWriter.IAnnotationsHolder
+android.hardware.Camera.AutoFocusCallback
+android.hardware.Camera.OnZoomChangeListener
+kotlin.jvm.internal.markers.KMutableSet
+kotlin.jvm.internal.markers.KMutableList
+kotlin.jvm.internal.markers.KMutableMap.Entry
+android.hardware.Camera.PreviewCallback
+kotlin.jvm.internal.markers.KMutableIterator
+android.hardware.Camera.FaceDetectionListener
+kotlin.jvm.internal.markers.KMutableListIterator
+kotlin.jvm.internal.markers.KMutableCollection
+kotlin.jvm.internal.markers.KMutableIterable
+kotlin.jvm.internal.markers.KMappedMarker
+kotlin.jvm.internal.markers.KMutableMap
+kotlin.jvm.Strictfp
+kotlin.jvm.JvmStatic
+kotlin.jvm.JvmOverloads
+kotlin.jvm.Transient
+kotlin.jvm.functions.Function8
+kotlin.jvm.functions.FunctionN
+android.hardware.display.DisplayManager.DisplayListener
+kotlin.jvm.functions.Function7
+kotlin.jvm.functions.Function5
+kotlin.jvm.functions.Function9
+kotlin.jvm.functions.Function0
+kotlin.jvm.functions.Function13
+kotlin.jvm.functions.Function4
+kotlin.jvm.functions.Function12
+kotlin.jvm.functions.Function10
+kotlin.jvm.functions.Function2
+android.hardware.SensorListener
+kotlin.jvm.functions.Function6
+kotlin.jvm.functions.Function1
+kotlin.jvm.functions.Function18
+kotlin.jvm.functions.Function22
+kotlin.jvm.functions.Function21
+kotlin.jvm.functions.Function19
+kotlin.jvm.functions.Function11
+kotlin.jvm.functions.Function16
+kotlin.jvm.functions.Function20
+android.hardware.Camera.AutoFocusMoveCallback
+kotlin.jvm.functions.Function14
+kotlin.jvm.functions.Function15
+kotlin.jvm.functions.Function3
+kotlin.jvm.functions.Function17
+android.hardware.Camera.PictureCallback
+kotlin.jvm.Synchronized
+kotlin.jvm.JvmSynthetic
+kotlin.jvm.JvmField
+kotlin.jvm.JvmName
+kotlin.jvm.PurelyImplements
+kotlin.jvm.JvmPackageName
+kotlin.jvm.Throws
+android.hardware.Camera.ShutterCallback
+kotlin.jvm.JvmWildcard
+kotlin.DslMarker
+kotlin.ReplaceWith
+kotlin.internal.NoInfer
+com.telerik.widget.list.SwipeRefreshBehavior.RefreshListener
+com.telerik.widget.list.SwipeRefreshBehavior.SwipeRefreshListener
+kotlin.internal.ContractsDsl
+kotlin.internal.AccessibleLateinitPropertyLiteral
+kotlin.internal.PlatformDependent
+kotlin.internal.Exact
+kotlin.internal.InlineOnly
+kotlin.internal.RequireKotlin
+kotlin.internal.PureReifiable
+kotlin.internal.LowPriorityInOverloadResolution
+kotlin.internal.OnlyInputTypes
+kotlin.internal.HidesMembers
+kotlin.internal.DynamicExtension
+kotlin.UnsafeVariance
+org.ow2.asmdex.util.TextComponent
+kotlin.ranges.ClosedFloatingPointRange
+androidx.multidex.MultiDex.V14.ElementConstructor
+androidx.asynclayoutinflater.view.AsyncLayoutInflater.OnInflateFinishedListener
+com.yalantis.ucrop.UCropActivity.GestureTypes
+kotlin.ranges.ClosedRange
+kotlin.reflect.KMutableProperty1
+kotlin.reflect.KProperty2.Getter
+kotlin.reflect.KAnnotatedElement
+kotlin.reflect.KClassifier
+kotlin.reflect.KProperty.Accessor
+kotlin.reflect.KClass
+kotlin.reflect.KProperty2
+kotlin.reflect.KMutableProperty0.Setter
+kotlin.reflect.KProperty1
+kotlin.reflect.KProperty0.Getter
+kotlin.reflect.KMutableProperty2
+kotlin.reflect.KCallable
+com.yalantis.ucrop.UCropFragment.GestureTypes
+kotlin.reflect.KProperty.Getter
+kotlin.reflect.KDeclarationContainer
+kotlin.reflect.KProperty1.Getter
+kotlin.reflect.KMutableProperty
+kotlin.reflect.KMutableProperty1.Setter
+kotlin.reflect.KMutableProperty0
+kotlin.reflect.KMutableProperty2.Setter
+kotlin.reflect.KMutableProperty.Setter
+com.yalantis.ucrop.UCropFragmentCallback
+com.yalantis.ucrop.callback.BitmapCropCallback
+kotlin.reflect.KParameter
+com.yalantis.ucrop.callback.BitmapLoadCallback
+com.yalantis.ucrop.callback.CropBoundsChangeListener
+kotlin.reflect.KProperty
+com.yalantis.ucrop.callback.OverlayViewChangeListener
+kotlin.reflect.KTypeParameter
+kotlin.reflect.KType
+kotlin.reflect.KFunction
+kotlin.reflect.KProperty0
+kotlin.ExperimentalStdlibApi
+com.yalantis.ucrop.util.ImageHeaderParser.Reader
+kotlin.OptIn
+android.hardware.input.InputManager.InputDeviceListener
+android.hardware.SensorEventListener
+android.hardware.Camera.ErrorCallback
+android.hardware.SensorEventListener2
+androidx.swiperefreshlayout.widget.CircularProgressDrawable.ProgressDrawableSize
+kotlin.coroutines.RestrictsSuspension
+kotlin.coroutines.ContinuationInterceptor
+kotlin.coroutines.jvm.internal.DebugMetadata
+kotlin.coroutines.jvm.internal.CoroutineStackFrame
+androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnChildScrollUpCallback
+androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
+kotlin.coroutines.jvm.internal.SuspendFunction
+kotlin.coroutines.CoroutineContext.Key
+androidx.activity.Cancellable
+androidx.activity.OnBackPressedDispatcherOwner
+kotlin.coroutines.CoroutineContext.Element
+android.service.autofill.Transformation
+android.service.autofill.OnClickAction
+kotlin.coroutines.CoroutineContext
+kotlin.coroutines.Continuation
+android.service.autofill.Sanitizer
+android.service.autofill.Validator
+androidx.versionedparcelable.NonParcelField
+androidx.versionedparcelable.ParcelField
+kotlin.Metadata
+kotlin.UseExperimental
+android.service.carrier.CarrierMessagingService.ResultCallback
+kotlin.text.FlagEnum
+kotlin.text.MatchGroupCollection
+android.webkit.JavascriptInterface
+android.webkit.WebResourceRequest
+android.webkit.WebChromeClient.CustomViewCallback
+android.webkit.DownloadListener
+android.webkit.WebView.FindListener
+android.webkit.WebIconDatabase.IconListener
+android.webkit.WebView.PictureListener
+android.webkit.PluginStub
+android.webkit.ValueCallback
+android.webkit.WebStorage.QuotaUpdater
+android.webkit.GeolocationPermissions.Callback
+kotlin.text.MatchNamedGroupCollection
+com.yalantis.ucrop.util.RotationGestureDetector.OnRotationGestureListener
+com.yalantis.ucrop.view.OverlayView.FreestyleMode
+com.yalantis.ucrop.view.TransformImageView.TransformImageListener
+com.yalantis.ucrop.view.widget.HorizontalProgressWheelView.ScrollingListener
+kotlin.text.MatchResult
+androidx.exifinterface.media.ExifInterface.ExifStreamType
+androidx.exifinterface.media.ExifInterface.IfdType
+kotlin.time.ExperimentalTime
+kotlin.time.TimeSource
+kotlin.experimental.ExperimentalTypeInference
+android.app.LoaderManager.LoaderCallbacks
+android.app.AppOpsManager.OnOpChangedListener
+android.app.SharedElementCallback.OnSharedElementsReadyListener
+android.app.DatePickerDialog.OnDateSetListener
+kotlin.sequences.Sequence
+android.app.Application.ActivityLifecycleCallbacks
+android.app.FragmentManager.OnBackStackChangedListener
+android.app.Notification.Action.Extender
+android.app.KeyguardManager.OnKeyguardExitResult
+android.app.FragmentManager.BackStackEntry
+androidx.versionedparcelable.VersionedParcelable
+androidx.versionedparcelable.VersionedParcelize
+androidx.legacy.app.ActionBarDrawerToggle.Delegate
+androidx.legacy.app.ActionBarDrawerToggle.DelegateProvider
+android.app.PendingIntent.OnFinished
+androidx.arch.core.internal.SafeIterableMap.SupportRemove
+androidx.arch.core.util.Function
+android.app.TimePickerDialog.OnTimeSetListener
+androidx.customview.widget.FocusStrategy.BoundsAdapter
+androidx.customview.widget.FocusStrategy.CollectionAdapter
+kotlin.sequences.DropTakeSequence
+androidx.transition.AnimatorUtils.AnimatorPauseListenerCompat
+kotlin.ExperimentalMultiplatform
+kotlin.BuilderInference
+androidx.appcompat.widget.ResourceManagerInternal.InflateDelegate
+androidx.appcompat.widget.ResourceManagerInternal.ResourceManagerHooks
+androidx.lifecycle.HasDefaultViewModelProviderFactory
+androidx.lifecycle.ViewModelProvider.Factory
+androidx.lifecycle.ViewModelStoreOwner
+org.nativescript.widgets.Async.CompleteCallback
+androidx.transition.GhostView
+kotlin.collections.Grouping
+android.app.ActionBar.TabListener
androidx.transition.Slide.CalculateSlide
androidx.transition.Slide.GravityFlag
+android.app.UiAutomation.AccessibilityEventFilter
androidx.transition.Styleable.ArcMotion
androidx.transition.Styleable.ChangeBounds
androidx.transition.Styleable.ChangeTransform
@@ -328,54 +660,46 @@ androidx.transition.Styleable.TransitionTarget
androidx.transition.Styleable.VisibilityTransition
androidx.transition.Transition.MatchOrder
androidx.transition.Transition.TransitionListener
+org.nativescript.widgets.BottomNavigationBar.TabColorizer
+org.nativescript.widgets.FlexboxLayout.AlignContent
+org.nativescript.widgets.FlexboxLayout.AlignItems
+org.nativescript.widgets.FlexboxLayout.DividerMode
+org.nativescript.widgets.FlexboxLayout.FlexDirection
+org.nativescript.widgets.FlexboxLayout.FlexWrap
+org.nativescript.widgets.FlexboxLayout.JustifyContent
+android.app.ZygotePreload
+android.app.SearchManager.OnDismissListener
+android.app.ActionBar.OnNavigationListener
+android.app.FragmentBreadCrumbs.OnBreadCrumbClickListener
+android.app.AlarmManager.OnAlarmListener
+android.app.SearchManager.OnCancelListener
+android.app.Notification.Extender
+android.app.UiAutomation.OnAccessibilityEventListener
+android.app.ActionBar.OnMenuVisibilityListener
+android.app.WallpaperManager.OnColorsChangedListener
+android.app.Application.OnProvideAssistDataListener
+android.app.admin.DevicePolicyManager.OnClearApplicationUserDataListener
androidx.transition.ViewGroupOverlayImpl
+android.app.backup.BackupHelper
androidx.transition.ViewOverlayImpl
-androidx.core.view.DragStartHelper.OnDragStartListener
-androidx.core.view.GestureDetectorCompat.GestureDetectorCompatImpl
androidx.transition.Visibility.Mode
-com.tns.bindings.desc.ClassDescriptor
-com.tns.bindings.desc.Descriptor
-com.tns.bindings.desc.MethodDescriptor
-android.companion.DeviceFilter
-androidx.core.view.KeyEventDispatcher.Component
+android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener
+android.accessibilityservice.AccessibilityService.MagnificationController.OnMagnificationChangedListener
androidx.transition.WindowIdImpl
-com.tns.system.classes.caching.ClassCache
-androidx.core.view.LayoutInflaterFactory
-com.tns.system.classes.loading.ClassStorageService
-com.tns.system.classloaders.ClassLoadersCollection
-androidx.core.view.MenuItemCompat.OnActionExpandListener
androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener
-fi.iki.elonen.NanoHTTPD.AsyncRunner
-androidx.core.view.NestedScrollingChild
-androidx.core.view.NestedScrollingChild2
-androidx.core.view.NestedScrollingChild3
-androidx.core.view.NestedScrollingParent
-androidx.core.view.NestedScrollingParent2
-androidx.core.view.NestedScrollingParent3
-androidx.core.view.OnApplyWindowInsetsListener
-android.se.omapi.SEService.OnConnectedListener
-androidx.core.view.ScrollingView
-androidx.core.view.TintableBackgroundView
+android.preference.PreferenceDataStore
+android.preference.PreferenceManager.OnActivityStopListener
+android.preference.PreferenceFragment.OnPreferenceStartFragmentCallback
com.telerik.android.common.CollectionChangeListener
+org.nativescript.widgets.TabLayout.TabColorizer
com.telerik.android.common.DependencyPropertyChangedListener
com.telerik.android.common.Function
com.telerik.android.common.Function2
-android.database.Cursor
com.telerik.android.common.Function2Async
-android.database.DatabaseErrorHandler
com.telerik.android.common.Procedure
com.telerik.android.common.Procedure2
-androidx.core.view.ViewCompat.FocusDirection
-androidx.core.view.ViewCompat.FocusRealDirection
-androidx.core.view.ViewCompat.FocusRelativeDirection
-androidx.core.view.ViewCompat.NestedScrollType
-androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat
-androidx.core.view.ViewCompat.ScrollAxis
-androidx.core.view.ViewCompat.ScrollIndicators
-android.database.sqlite.SQLiteDatabase.CursorFactory
-android.database.sqlite.SQLiteCursorDriver
-android.database.sqlite.SQLiteTransactionListener
-android.database.CrossProcessCursor
+org.nativescript.widgets.TabsBar.TabColorizer
+org.nativescript.widgets.image.BitmapOwner
androidx.annotation.experimental.Experimental
androidx.annotation.experimental.UseExperimental
org.intellij.lang.annotations.Flow
@@ -408,275 +732,70 @@ org.jetbrains.annotations.NotNull
org.jetbrains.annotations.Nullable
org.jetbrains.annotations.PropertyKey
org.jetbrains.annotations.TestOnly
+org.nativescript.widgets.image.Worker.OnImageLoadedListener
com.google.android.material.animation.TransformationCallback
-fi.iki.elonen.NanoHTTPD.IHTTPSession
-android.bluetooth.BluetoothAdapter.LeScanCallback
-fi.iki.elonen.NanoHTTPD.Response.IStatus
+androidx.loader.app.LoaderManager.LoaderCallbacks
com.google.android.material.appbar.AppBarLayout.BaseOnOffsetChangedListener
com.google.android.material.appbar.AppBarLayout.LayoutParams.ScrollFlags
+androidx.loader.content.Loader.OnLoadCanceledListener
+androidx.loader.content.Loader.OnLoadCompleteListener
com.google.android.material.appbar.AppBarLayout.OnOffsetChangedListener
-android.bluetooth.BluetoothProfile.ServiceListener
-android.bluetooth.BluetoothProfile
-fi.iki.elonen.NanoHTTPD.ServerSocketFactory
-fi.iki.elonen.NanoHTTPD.TempFile
-fi.iki.elonen.NanoHTTPD.TempFileManager
-fi.iki.elonen.NanoHTTPD.TempFileManagerFactory
-android.transition.Transition.TransitionListener
com.google.android.material.badge.BadgeDrawable.BadgeGravity
-android.speech.tts.TextToSpeech.OnUtteranceCompletedListener
-android.speech.tts.SynthesisCallback
-android.speech.tts.TextToSpeech.OnInitListener
-android.speech.RecognitionListener
com.google.android.material.behavior.SwipeDismissBehavior.OnDismissListener
-android.text.ParcelableSpan
-android.text.method.TransformationMethod
com.google.android.material.bottomappbar.BottomAppBar.AnimationListener
com.google.android.material.bottomappbar.BottomAppBar.FabAlignmentMode
com.google.android.material.bottomappbar.BottomAppBar.FabAnimationMode
-android.text.method.KeyListener
-android.text.method.MovementMethod
-android.text.Html.TagHandler
-android.text.Editable
-android.text.Spanned
-android.text.Html.ImageGetter
-android.text.InputType
-android.text.GetChars
-org.ow2.asmdex.Constants
-android.text.style.LineHeightSpan.WithDensity
-android.text.style.LeadingMarginSpan.LeadingMarginSpan2
com.google.android.material.bottomnavigation.BottomNavigationView.OnNavigationItemReselectedListener
com.google.android.material.bottomnavigation.BottomNavigationView.OnNavigationItemSelectedListener
-android.text.style.AlignmentSpan
com.google.android.material.bottomnavigation.LabelVisibilityMode
-android.text.style.LeadingMarginSpan
com.google.android.material.bottomsheet.BottomSheetBehavior.SaveFlags
-android.text.style.UpdateLayout
-android.text.style.UpdateAppearance
com.google.android.material.bottomsheet.BottomSheetBehavior.State
-android.text.style.WrapTogetherSpan
-android.text.style.LineBackgroundSpan
-androidx.core.view.ViewPropertyAnimatorListener
-androidx.core.view.ViewPropertyAnimatorUpdateListener
-org.ow2.asmdex.Opcodes
-android.text.style.LineHeightSpan
-android.text.style.TabStopSpan
-android.text.style.ParagraphStyle
-android.text.util.Linkify.MatchFilter
-android.text.util.Linkify.TransformFilter
+kotlin.collections.MapWithDefault
+com.tapadoo.alerter.OnHideAlertListener
+com.tapadoo.alerter.OnShowAlertListener
+kotlin.collections.MutableMapWithDefault
com.google.android.material.button.MaterialButton.IconGravity
com.google.android.material.button.MaterialButton.OnCheckedChangeListener
com.google.android.material.button.MaterialButton.OnPressedChangeListener
-androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener
-androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener
-android.text.TextWatcher
-android.text.Spannable
-android.text.TextUtils.EllipsizeCallback
-android.text.NoCopySpan
-android.text.TextUtils.StringSplitter
-android.text.SpanWatcher
-android.text.InputFilter
-android.text.TextDirectionHeuristic
-com.google.android.material.button.MaterialButtonToggleGroup.OnButtonCheckedListener
-android.hardware.Camera.AutoFocusCallback
-android.hardware.Camera.OnZoomChangeListener
-com.google.android.material.card.MaterialCardView.OnCheckedChangeListener
-android.hardware.Camera.PreviewCallback
-android.hardware.Camera.FaceDetectionListener
-androidx.core.view.accessibility.AccessibilityViewCommand
-androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener
-androidx.core.view.inputmethod.InputContentInfoCompat.InputContentInfoCompatImpl
-android.hardware.display.DisplayManager.DisplayListener
-android.hardware.SensorListener
-androidx.core.widget.AutoSizeableTextView
-android.hardware.Camera.AutoFocusMoveCallback
-android.hardware.Camera.PictureCallback
-org.ow2.asmdex.instruction.IDebugDifferenceAddressInstruction
-org.ow2.asmdex.instruction.IDebugDifferenceLineInstruction
-org.ow2.asmdex.instruction.IDebugLocalVariableInstruction
-org.ow2.asmdex.instruction.IDebugLocalVariableStartInstruction
-org.ow2.asmdex.instruction.IDebugRegisterInstruction
-org.ow2.asmdex.instruction.IDebugSourceNameInstruction
-androidx.core.widget.NestedScrollView.OnScrollChangeListener
-org.ow2.asmdex.instruction.IIndexInstruction
-org.ow2.asmdex.instruction.ILiteralInstruction
-org.ow2.asmdex.instruction.ILongLiteralInstruction
-org.ow2.asmdex.instruction.IOffsetInstruction
-org.ow2.asmdex.instruction.IOneRegisterInstruction
-org.ow2.asmdex.instruction.IPseudoInstruction
-org.ow2.asmdex.instruction.IRegisterArrayInstruction
-org.ow2.asmdex.instruction.IThreeRegistersInstruction
-org.ow2.asmdex.instruction.ITwoRegistersInstruction
-android.hardware.Camera.ShutterCallback
-com.google.android.material.chip.ChipDrawable.Delegate
-android.hardware.input.InputManager.InputDeviceListener
-android.hardware.SensorEventListener
-android.hardware.Camera.ErrorCallback
-android.hardware.SensorEventListener2
-androidx.core.widget.TextViewCompat.AutoSizeTextType
-com.google.android.material.chip.ChipGroup.OnCheckedChangeListener
-androidx.core.widget.TintableCompoundButton
-androidx.core.widget.TintableCompoundDrawablesView
-androidx.core.widget.TintableImageSourceView
-androidx.recyclerview.widget.AdapterHelper.Callback
-com.google.android.material.circularreveal.CircularRevealHelper.Delegate
-com.google.android.material.circularreveal.CircularRevealHelper.Strategy
-org.ow2.asmdex.lowLevelUtils.IDalvikValueReader
-androidx.recyclerview.widget.AsyncListDiffer.ListListener
-com.google.android.material.circularreveal.CircularRevealWidget
-com.google.android.material.datepicker.CalendarConstraints.DateValidator
-androidx.recyclerview.widget.ChildHelper.Callback
-com.google.android.material.datepicker.DateSelector
-android.service.autofill.Transformation
-android.service.autofill.OnClickAction
-com.google.android.material.datepicker.MaterialCalendar.OnDayClickListener
-android.service.autofill.Sanitizer
-android.service.autofill.Validator
-com.google.android.material.datepicker.MaterialDatePicker.InputMode
-com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener
-org.ow2.asmdex.specificAnnotationParser.ISpecificAnnotationParser
-android.service.carrier.CarrierMessagingService.ResultCallback
-android.webkit.JavascriptInterface
-android.webkit.WebResourceRequest
-android.webkit.WebChromeClient.CustomViewCallback
-android.webkit.DownloadListener
-android.webkit.WebView.FindListener
-com.google.android.material.expandable.ExpandableTransformationWidget
-com.google.android.material.expandable.ExpandableWidget
-android.webkit.WebIconDatabase.IconListener
-org.ow2.asmdex.structureReader.ISwitchCase
-android.webkit.WebView.PictureListener
-android.webkit.PluginStub
-android.webkit.ValueCallback
-android.webkit.WebStorage.QuotaUpdater
-android.webkit.GeolocationPermissions.Callback
-com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton.Size
-com.google.android.material.floatingactionbutton.FloatingActionButton.Size
-org.ow2.asmdex.structureWriter.IAnnotationsHolder
-com.google.android.material.floatingactionbutton.FloatingActionButtonImpl.InternalTransformationCallback
-com.google.android.material.floatingactionbutton.FloatingActionButtonImpl.InternalVisibilityChangedListener
-android.app.LoaderManager.LoaderCallbacks
-android.app.AppOpsManager.OnOpChangedListener
-android.app.SharedElementCallback.OnSharedElementsReadyListener
-android.app.DatePickerDialog.OnDateSetListener
-com.google.android.material.floatingactionbutton.MotionStrategy
-android.app.Application.ActivityLifecycleCallbacks
-android.app.FragmentManager.OnBackStackChangedListener
-com.google.android.material.internal.Experimental
-android.app.Notification.Action.Extender
-android.app.KeyguardManager.OnKeyguardExitResult
-android.app.FragmentManager.BackStackEntry
-com.google.android.material.internal.NavigationMenuPresenter.NavigationMenuItem
-androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler
-android.app.PendingIntent.OnFinished
-com.google.android.material.internal.TextDrawableHelper.TextDrawableDelegate
-androidx.recyclerview.widget.ItemTouchUIUtil
-android.app.TimePickerDialog.OnTimeSetListener
-com.google.android.material.internal.ViewGroupOverlayImpl
-com.google.android.material.internal.ViewOverlayImpl
-com.google.android.material.internal.ViewUtils.OnApplyWindowInsetsListener
-android.app.ActionBar.TabListener
-com.google.android.material.internal.package-info
-com.google.android.material.navigation.NavigationView.OnNavigationItemSelectedListener
-org.ow2.asmdex.util.TextComponent
-android.app.UiAutomation.AccessibilityEventFilter
-androidx.multidex.MultiDex.V14.ElementConstructor
-androidx.recyclerview.widget.ListUpdateCallback
-com.google.android.material.resources.CancelableFontCallback.ApplyFont
-androidx.recyclerview.widget.OpReorderer.Callback
-com.google.android.material.shadow.ShadowViewDelegate
-com.google.android.material.shape.CornerFamily
-com.google.android.material.shape.CornerSize
-android.app.ZygotePreload
-androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback
-android.app.SearchManager.OnDismissListener
-androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.EdgeDirection
-androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges
-androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener
-com.google.android.material.shape.MaterialShapeDrawable.CompatibilityShadowMode
-androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemAnimatorListener
-android.app.ActionBar.OnNavigationListener
-androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry
-android.app.FragmentBreadCrumbs.OnBreadCrumbClickListener
-android.app.AlarmManager.OnAlarmListener
-android.app.SearchManager.OnCancelListener
-com.google.android.material.shape.ShapeAppearanceModel.CornerSizeUnaryOperator
-com.google.android.material.shape.ShapeAppearancePathProvider.PathListener
-androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener
-androidx.recyclerview.widget.RecyclerView.OnItemTouchListener
-androidx.recyclerview.widget.RecyclerView.Orientation
-androidx.recyclerview.widget.RecyclerView.RecyclerListener
-com.google.android.material.shape.Shapeable
-com.google.android.material.slider.BaseOnChangeListener
-android.app.Notification.Extender
-android.app.UiAutomation.OnAccessibilityEventListener
-com.google.android.material.slider.BaseOnSliderTouchListener
-androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider
-android.app.ActionBar.OnMenuVisibilityListener
-androidx.swiperefreshlayout.widget.CircularProgressDrawable.ProgressDrawableSize
-com.google.android.material.slider.BaseSlider.TooltipDrawableFactory
-android.app.WallpaperManager.OnColorsChangedListener
-android.app.Application.OnProvideAssistDataListener
-androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnChildScrollUpCallback
-androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
-com.google.android.material.slider.LabelFormatter
-com.google.android.material.slider.RangeSlider.OnChangeListener
-com.google.android.material.slider.RangeSlider.OnSliderTouchListener
-androidx.activity.Cancellable
-com.google.android.material.slider.Slider.OnChangeListener
-com.google.android.material.slider.Slider.OnSliderTouchListener
-androidx.activity.OnBackPressedDispatcherOwner
-android.app.admin.DevicePolicyManager.OnClearApplicationUserDataListener
-com.google.android.material.snackbar.BaseTransientBottomBar.AnimationMode
-com.google.android.material.snackbar.BaseTransientBottomBar.BaseCallback.DismissEvent
-com.google.android.material.snackbar.BaseTransientBottomBar.ContentViewCallback
-com.google.android.material.snackbar.BaseTransientBottomBar.Duration
-com.google.android.material.snackbar.BaseTransientBottomBar.OnAttachStateChangeListener
-com.google.android.material.snackbar.BaseTransientBottomBar.OnLayoutChangeListener
-android.app.backup.BackupHelper
-com.google.android.material.snackbar.ContentViewCallback
-com.google.android.material.snackbar.SnackbarManager.Callback
-android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener
-android.accessibilityservice.AccessibilityService.MagnificationController.OnMagnificationChangedListener
-com.google.android.material.tabs.TabLayout.BaseOnTabSelectedListener
-com.google.android.material.tabs.TabLayout.LabelVisibility
-com.google.android.material.tabs.TabLayout.Mode
-com.google.android.material.tabs.TabLayout.OnTabSelectedListener
-android.preference.PreferenceDataStore
-com.google.android.material.tabs.TabLayout.TabGravity
-com.google.android.material.tabs.TabLayout.TabIndicatorGravity
-android.preference.PreferenceManager.OnActivityStopListener
-android.preference.PreferenceFragment.OnPreferenceStartFragmentCallback
android.preference.Preference.OnPreferenceChangeListener
android.preference.PreferenceManager.OnActivityDestroyListener
-com.google.android.material.tabs.TabLayoutMediator.TabConfigurationStrategy
android.preference.Preference.OnPreferenceClickListener
android.preference.PreferenceManager.OnActivityResultListener
android.accounts.AccountManagerFuture
android.accounts.OnAccountsUpdateListener
android.accounts.AccountManagerCallback
+kotlin.ExperimentalUnsignedTypes
android.provider.ContactsContract.DataColumnsWithJoins
android.provider.ContactsContract.PhoneticNameStyle
android.provider.CalendarContract.CalendarCacheColumns
android.provider.Contacts.OrganizationColumns
android.provider.MediaStore.Video.VideoColumns
android.provider.ContactsContract.SyncColumns
+kotlin.Suppress
android.provider.ContactsContract.DataUsageStatColumns
+kotlin.OptionalExpectation
+kotlin.annotation.MustBeDocumented
+kotlin.annotation.Repeatable
+kotlin.annotation.Target
+kotlin.annotation.Retention
android.provider.OpenableColumns
android.provider.ContactsContract.ContactsColumns
android.provider.MediaStore.Audio.ArtistColumns
android.provider.Telephony.TextBasedSmsColumns
android.provider.Contacts.PhonesColumns
+kotlin.Experimental
+kotlin.Function
android.provider.ContactsContract.CommonDataKinds.CommonColumns
android.provider.CalendarContract.ColorsColumns
-androidx.versionedparcelable.NonParcelField
-androidx.versionedparcelable.ParcelField
+kotlin.WasExperimental
+kotlin.properties.ReadWriteProperty
android.provider.CalendarContract.EventDaysColumns
+kotlin.properties.ReadOnlyProperty
android.provider.ContactsContract.ContactOptionsColumns
-com.google.android.material.textfield.TextInputLayout.BoxBackgroundMode
-com.google.android.material.textfield.TextInputLayout.EndIconMode
-com.google.android.material.textfield.TextInputLayout.OnEditTextAttachedListener
-com.google.android.material.textfield.TextInputLayout.OnEndIconChangedListener
android.provider.Contacts.PeopleColumns
+kotlin.js.JsName
+kotlin.Deprecated
+kotlin.ParameterName
android.provider.BaseColumns
android.provider.ContactsContract.CommonDataKinds.BaseTypes
android.provider.MediaStore.DownloadColumns
@@ -685,246 +804,168 @@ android.provider.Contacts.ExtensionsColumns
android.provider.MediaStore.Audio.AudioColumns
android.provider.CalendarContract.RemindersColumns
android.provider.MediaStore.Images.ImageColumns
-androidx.versionedparcelable.VersionedParcelable
-androidx.versionedparcelable.VersionedParcelize
-androidx.legacy.app.ActionBarDrawerToggle.Delegate
-androidx.legacy.app.ActionBarDrawerToggle.DelegateProvider
+kotlin.RequiresOptIn
+kotlin.SinceKotlin
android.provider.ContactsContract.StatusColumns
android.provider.CalendarContract.CalendarSyncColumns
android.provider.ContactsContract.ContactStatusColumns
android.provider.ContactsContract.DisplayNameSources
+com.tapadoo.alerter.SwipeDismissTouchListener.DismissCallbacks
android.provider.SyncStateContract.Columns
android.provider.ContactsContract.PhoneLookupColumns
+kotlin.coroutines.experimental.RestrictsSuspension
+kotlin.coroutines.experimental.ContinuationInterceptor
android.provider.ContactsContract.DeletedContactsColumns
android.provider.ContactsContract.GroupsColumns
android.provider.Contacts.PhotosColumns
+kotlin.coroutines.experimental.CoroutineContext.Key
android.provider.ContactsContract.FullNameStyle
-com.google.android.material.transition.FadeModeEvaluator
android.provider.CalendarContract.ExtendedPropertiesColumns
android.provider.MediaStore.Files.FileColumns
-com.google.android.material.transition.FitModeEvaluator
android.provider.MediaStore.Audio.GenresColumns
+kotlin.coroutines.experimental.CoroutineContext.Element
+kotlin.coroutines.experimental.CoroutineContext
android.provider.Contacts.SettingsColumns
android.provider.CalendarContract.CalendarColumns
-com.google.android.material.transition.MaterialContainerTransform.FadeMode
+androidx.viewpager.widget.ViewPager.DecorView
+kotlin.coroutines.experimental.Continuation
android.provider.CalendarContract.EventsColumns
-com.google.android.material.transition.MaterialContainerTransform.FitMode
-com.google.android.material.transition.MaterialContainerTransform.TransitionDirection
+androidx.viewpager.widget.ViewPager.OnAdapterChangeListener
+androidx.viewpager.widget.ViewPager.OnPageChangeListener
+androidx.viewpager.widget.ViewPager.PageTransformer
android.provider.Telephony.BaseMmsColumns
android.provider.ContactsContract.PresenceColumns
android.provider.ContactsContract.ContactNameColumns
android.provider.ContactsContract.DataColumns
-com.google.android.material.transition.MaterialSharedAxis.Axis
android.provider.ContactsContract.RawContactsColumns
android.provider.Contacts.GroupsColumns
android.provider.Contacts.ContactMethodsColumns
-com.google.android.material.transition.SlideDistanceProvider.GravityFlag
android.provider.Telephony.ThreadsColumns
android.provider.ContactsContract.SettingsColumns
-com.google.android.material.transition.TransitionUtils.CanvasOperation
android.provider.CalendarContract.AttendeesColumns
-com.google.android.material.transition.TransitionUtils.CornerSizeBinaryOperator
-com.google.android.material.transition.VisibilityAnimatorProvider
-com.google.android.material.transition.platform.FadeModeEvaluator
android.provider.ContactsContract.BaseSyncColumns
android.provider.MediaStore.Audio.PlaylistsColumns
android.provider.CalendarContract.SyncColumns
android.provider.Telephony.CanonicalAddressesColumns
android.provider.CalendarContract.CalendarAlertsColumns
-com.google.android.material.transition.platform.FitModeEvaluator
+androidx.lifecycle.FullLifecycleObserver
+androidx.lifecycle.GeneratedAdapter
+androidx.lifecycle.GenericLifecycleObserver
android.provider.Contacts.PresenceColumns
android.provider.MediaStore.Audio.AlbumColumns
-com.google.android.material.transition.platform.MaterialContainerTransform.FadeMode
-com.google.android.material.transition.platform.MaterialContainerTransform.FitMode
-com.google.android.material.transition.platform.MaterialContainerTransform.TransitionDirection
+androidx.lifecycle.LifecycleEventObserver
+androidx.lifecycle.LifecycleObserver
+androidx.lifecycle.LifecycleOwner
android.os.Parcelable.ClassLoaderCreator
android.os.IInterface
+androidx.lifecycle.OnLifecycleEvent
+com.google.android.material.button.MaterialButtonToggleGroup.OnButtonCheckedListener
+com.google.android.material.card.MaterialCardView.OnCheckedChangeListener
+com.google.android.material.chip.ChipDrawable.Delegate
android.os.Parcelable.Creator
-com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback.ShapeProvider
android.os.IBinder.DeathRecipient
android.os.MessageQueue.OnFileDescriptorEventListener
android.os.StrictMode.OnThreadViolationListener
-com.google.android.material.transition.platform.MaterialSharedAxis.Axis
-com.google.android.material.transition.platform.SlideDistanceProvider.GravityFlag
-com.google.android.material.transition.platform.TransitionUtils.CanvasOperation
-com.google.android.material.transition.platform.TransitionUtils.CornerSizeBinaryOperator
android.os.PowerManager.OnThermalStatusChangedListener
-com.google.android.material.transition.platform.VisibilityAnimatorProvider
android.os.RecoverySystem.ProgressListener
-androidx.lifecycle.LifecycleRegistryOwner
-androidx.lifecycle.ReportFragment.ActivityInitializationListener
android.os.FileUtils.ProgressListener
-androidx.arch.core.internal.SafeIterableMap.SupportRemove
android.os.ParcelFileDescriptor.OnCloseListener
-androidx.arch.core.util.Function
-androidx.lifecycle.HasDefaultViewModelProviderFactory
-androidx.lifecycle.ViewModelProvider.Factory
-androidx.lifecycle.ViewModelStoreOwner
-org.nativescript.widgets.Async.CompleteCallback
android.os.MessageQueue.IdleHandler
android.os.StrictMode.OnVmViolationListener
android.os.CancellationSignal.OnCancelListener
android.os.Handler.Callback
-androidx.recyclerview.widget.ThreadUtil.BackgroundCallback
-androidx.recyclerview.widget.ThreadUtil.MainThreadCallback
-androidx.recyclerview.widget.ThreadUtil
-androidx.recyclerview.widget.ViewBoundsCheck.Callback
-androidx.recyclerview.widget.ViewBoundsCheck.ViewBounds
-androidx.recyclerview.widget.ViewInfoStore.ProcessCallback
+com.google.android.material.chip.ChipGroup.OnCheckedChangeListener
android.os.IBinder
android.os.Parcelable
+com.google.android.material.circularreveal.CircularRevealHelper.Delegate
+com.google.android.material.circularreveal.CircularRevealHelper.Strategy
+com.google.android.material.circularreveal.CircularRevealWidget
+com.google.android.material.datepicker.CalendarConstraints.DateValidator
android.content.DialogInterface.OnCancelListener
-org.nativescript.widgets.BottomNavigationBar.TabColorizer
android.content.DialogInterface.OnShowListener
android.content.DialogInterface.OnClickListener
android.content.DialogInterface.OnDismissListener
android.content.ContentProvider.PipeDataWriter
-org.nativescript.widgets.FlexboxLayout.AlignContent
-org.nativescript.widgets.FlexboxLayout.AlignItems
-org.nativescript.widgets.FlexboxLayout.DividerMode
-org.nativescript.widgets.FlexboxLayout.FlexDirection
-org.nativescript.widgets.FlexboxLayout.FlexWrap
-org.nativescript.widgets.FlexboxLayout.JustifyContent
-com.nativescript.text.Font.FontWeight
-com.nativescript.text.Font.genericFontFamilies
+com.google.android.material.datepicker.DateSelector
+com.google.android.material.datepicker.MaterialCalendar.OnDayClickListener
+com.google.android.material.datepicker.MaterialDatePicker.InputMode
+com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener
android.content.IntentSender.OnFinished
-kotlin.PublishedApi
-kotlin.native.concurrent.ThreadLocal
-kotlin.native.concurrent.SharedImmutable
-kotlin.ExtensionFunctionType
-kotlin.Lazy
-kotlin.contracts.ConditionalEffect
-kotlin.contracts.Effect
-kotlin.contracts.SimpleEffect
-kotlin.contracts.ExperimentalContracts
-kotlin.contracts.Returns
-kotlin.contracts.CallsInPlace
android.content.ClipboardManager.OnPrimaryClipChangedListener
-kotlin.contracts.ContractBuilder
-kotlin.contracts.ReturnsNotNull
-kotlin.jvm.JvmSuppressWildcards
-kotlin.jvm.JvmMultifileClass
-kotlin.jvm.Volatile
android.content.DialogInterface.OnKeyListener
android.content.DialogInterface
android.content.DialogInterface.OnMultiChoiceClickListener
-org.nativescript.widgets.TabLayout.TabColorizer
-androidx.viewpager.widget.ViewPager.DecorView
-androidx.viewpager.widget.ViewPager.OnAdapterChangeListener
-androidx.viewpager.widget.ViewPager.OnPageChangeListener
-androidx.viewpager.widget.ViewPager.PageTransformer
-org.nativescript.widgets.TabsBar.TabColorizer
+com.google.android.material.expandable.ExpandableTransformationWidget
+com.google.android.material.expandable.ExpandableWidget
android.content.EntityIterator
android.content.ComponentCallbacks
android.content.SharedPreferences
+com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton.Size
+com.google.android.material.floatingactionbutton.FloatingActionButton.Size
android.content.Loader.OnLoadCanceledListener
android.content.ComponentCallbacks2
android.content.ServiceConnection
-androidx.lifecycle.FullLifecycleObserver
-androidx.lifecycle.GeneratedAdapter
-androidx.lifecycle.GenericLifecycleObserver
+com.google.android.material.floatingactionbutton.FloatingActionButtonImpl.InternalTransformationCallback
+com.google.android.material.floatingactionbutton.FloatingActionButtonImpl.InternalVisibilityChangedListener
android.content.SharedPreferences.Editor
-org.nativescript.widgets.image.BitmapOwner
-androidx.lifecycle.LifecycleEventObserver
-androidx.lifecycle.LifecycleObserver
-androidx.lifecycle.LifecycleOwner
-androidx.lifecycle.OnLifecycleEvent
+com.google.android.material.floatingactionbutton.MotionStrategy
android.content.Loader.OnLoadCompleteListener
android.content.res.XmlResourceParser
-org.nativescript.widgets.image.Worker.OnImageLoadedListener
android.content.SyncStatusObserver
+com.google.android.material.internal.Experimental
android.content.SharedPreferences.OnSharedPreferenceChangeListener
android.drm.DrmManagerClient.OnInfoListener
-androidx.loader.app.LoaderManager.LoaderCallbacks
android.drm.DrmManagerClient.OnEventListener
android.drm.DrmStore.ConstraintsColumns
-androidx.loader.content.Loader.OnLoadCanceledListener
-androidx.loader.content.Loader.OnLoadCompleteListener
android.drm.DrmManagerClient.OnErrorListener
-com.tapadoo.alerter.OnHideAlertListener
-com.tapadoo.alerter.OnShowAlertListener
+com.google.android.material.internal.NavigationMenuPresenter.NavigationMenuItem
android.util.Printer
-kotlin.jvm.JvmDefault
-kotlin.jvm.internal.FunctionBase
-com.tapadoo.alerter.SwipeDismissTouchListener.DismissCallbacks
android.util.AttributeSet
-kotlin.jvm.internal.ClassBasedDeclarationContainer
-kotlin.jvm.internal.markers.KMutableSet
-kotlin.jvm.internal.markers.KMutableList
-kotlin.jvm.internal.markers.KMutableMap.Entry
-kotlin.jvm.internal.markers.KMutableIterator
-kotlin.jvm.internal.markers.KMutableListIterator
-kotlin.jvm.internal.markers.KMutableCollection
-kotlin.jvm.internal.markers.KMutableIterable
-kotlin.jvm.internal.markers.KMappedMarker
-kotlin.jvm.internal.markers.KMutableMap
-kotlin.jvm.Strictfp
-kotlin.jvm.JvmStatic
-kotlin.jvm.JvmOverloads
-kotlin.jvm.Transient
-kotlin.jvm.functions.Function8
-kotlin.jvm.functions.FunctionN
-kotlin.jvm.functions.Function7
-kotlin.jvm.functions.Function5
-kotlin.jvm.functions.Function9
-kotlin.jvm.functions.Function0
-kotlin.jvm.functions.Function13
-kotlin.jvm.functions.Function4
-kotlin.jvm.functions.Function12
-kotlin.jvm.functions.Function10
-kotlin.jvm.functions.Function2
-kotlin.jvm.functions.Function6
-kotlin.jvm.functions.Function1
-kotlin.jvm.functions.Function18
-kotlin.jvm.functions.Function22
-kotlin.jvm.functions.Function21
-kotlin.jvm.functions.Function19
+com.google.android.material.internal.TextDrawableHelper.TextDrawableDelegate
+com.google.android.material.internal.ViewGroupOverlayImpl
+com.google.android.material.internal.ViewOverlayImpl
+com.google.android.material.internal.ViewUtils.OnApplyWindowInsetsListener
+com.google.android.material.internal.package-info
+com.google.android.material.navigation.NavigationView.OnNavigationItemSelectedListener
+com.google.android.material.resources.CancelableFontCallback.ApplyFont
android.media.MediaPlayer.OnCompletionListener
-kotlin.jvm.functions.Function11
+com.google.android.material.shadow.ShadowViewDelegate
+com.google.android.material.shape.CornerFamily
+com.google.android.material.shape.CornerSize
+com.google.android.material.shape.MaterialShapeDrawable.CompatibilityShadowMode
+com.google.android.material.shape.ShapeAppearanceModel.CornerSizeUnaryOperator
+com.google.android.material.shape.ShapeAppearancePathProvider.PathListener
+com.google.android.material.shape.Shapeable
+com.google.android.material.slider.BaseOnChangeListener
+com.google.android.material.slider.BaseOnSliderTouchListener
+com.google.android.material.slider.BaseSlider.TooltipDrawableFactory
+com.google.android.material.slider.LabelFormatter
+com.google.android.material.slider.RangeSlider.OnChangeListener
+com.google.android.material.slider.RangeSlider.OnSliderTouchListener
+com.google.android.material.slider.Slider.OnChangeListener
+com.google.android.material.slider.Slider.OnSliderTouchListener
android.media.MediaScannerConnection.OnScanCompletedListener
-kotlin.jvm.functions.Function16
-kotlin.jvm.functions.Function20
-kotlin.jvm.functions.Function14
android.media.VolumeAutomation
-kotlin.jvm.functions.Function15
-kotlin.jvm.functions.Function3
-kotlin.jvm.functions.Function17
-kotlin.jvm.Synchronized
-kotlin.jvm.JvmSynthetic
-kotlin.jvm.JvmField
-kotlin.jvm.JvmName
-kotlin.jvm.PurelyImplements
-kotlin.jvm.JvmPackageName
-kotlin.jvm.Throws
-kotlin.jvm.JvmWildcard
-kotlin.DslMarker
android.media.AudioTrack.OnRoutingChangedListener
android.media.MediaDrm.HdcpLevel
-kotlin.ReplaceWith
android.media.ImageWriter.OnImageReleasedListener
-kotlin.internal.NoInfer
android.media.MediaSync.OnErrorListener
android.media.RemoteControlClient.OnGetPlaybackPositionListener
android.media.MediaPlayer.OnVideoSizeChangedListener
-kotlin.internal.ContractsDsl
-kotlin.internal.AccessibleLateinitPropertyLiteral
-kotlin.internal.PlatformDependent
-kotlin.internal.Exact
-kotlin.internal.InlineOnly
-kotlin.internal.RequireKotlin
-kotlin.internal.PureReifiable
-kotlin.internal.LowPriorityInOverloadResolution
-kotlin.internal.OnlyInputTypes
+com.google.android.material.snackbar.BaseTransientBottomBar.AnimationMode
+com.google.android.material.snackbar.BaseTransientBottomBar.BaseCallback.DismissEvent
+com.google.android.material.snackbar.BaseTransientBottomBar.ContentViewCallback
+com.google.android.material.snackbar.BaseTransientBottomBar.Duration
+com.google.android.material.snackbar.BaseTransientBottomBar.OnAttachStateChangeListener
+com.google.android.material.snackbar.BaseTransientBottomBar.OnLayoutChangeListener
android.media.session.MediaSessionManager.OnSession2TokensChangedListener
-kotlin.internal.HidesMembers
-kotlin.internal.DynamicExtension
android.media.session.MediaSessionManager.OnActiveSessionsChangedListener
+com.google.android.material.snackbar.ContentViewCallback
android.media.MediaDrm.OnExpirationUpdateListener
android.media.MediaCas.EventListener
android.media.RemoteControlClient.OnPlaybackPositionUpdateListener
-kotlin.UnsafeVariance
+com.google.android.material.snackbar.SnackbarManager.Callback
android.media.MediaPlayer.OnErrorListener
-kotlin.ranges.ClosedFloatingPointRange
android.media.MediaDrm.OnSessionLostStateListener
android.media.AudioRecord.OnRecordPositionUpdateListener
android.media.MediaRecorder.OnErrorListener
@@ -935,98 +976,86 @@ android.media.effect.EffectUpdateListener
android.media.ImageReader.OnImageAvailableListener
android.media.MediaPlayer.OnDrmInfoListener
android.media.AudioTrack.OnPlaybackPositionUpdateListener
+com.google.android.material.tabs.TabLayout.BaseOnTabSelectedListener
+com.google.android.material.tabs.TabLayout.LabelVisibility
+com.google.android.material.tabs.TabLayout.Mode
+com.google.android.material.tabs.TabLayout.OnTabSelectedListener
android.media.tv.TvView.OnUnhandledInputEventListener
+com.google.android.material.tabs.TabLayout.TabGravity
+com.google.android.material.tabs.TabLayout.TabIndicatorGravity
android.media.tv.TvContract.BaseTvColumns
-kotlin.ranges.ClosedRange
-kotlin.reflect.KMutableProperty1
-kotlin.reflect.KProperty2.Getter
-kotlin.reflect.KAnnotatedElement
-kotlin.reflect.KClassifier
-kotlin.reflect.KProperty.Accessor
-kotlin.reflect.KClass
android.media.MediaPlayer.OnDrmPreparedListener
-kotlin.reflect.KProperty2
-kotlin.reflect.KMutableProperty0.Setter
-kotlin.reflect.KProperty1
-kotlin.reflect.KProperty0.Getter
-kotlin.reflect.KMutableProperty2
-kotlin.reflect.KCallable
-kotlin.reflect.KProperty.Getter
-kotlin.reflect.KDeclarationContainer
-kotlin.reflect.KProperty1.Getter
-kotlin.reflect.KMutableProperty
-kotlin.reflect.KMutableProperty1.Setter
-kotlin.reflect.KMutableProperty0
-kotlin.reflect.KMutableProperty2.Setter
-kotlin.reflect.KMutableProperty.Setter
-kotlin.reflect.KParameter
-kotlin.reflect.KProperty
+com.google.android.material.tabs.TabLayoutMediator.TabConfigurationStrategy
android.media.RemoteControlClient.OnMetadataUpdateListener
-kotlin.reflect.KTypeParameter
-kotlin.reflect.KType
-kotlin.reflect.KFunction
-kotlin.reflect.KProperty0
-kotlin.ExperimentalStdlibApi
android.media.AudioRouting.OnRoutingChangedListener
android.media.MediaPlayer.OnSeekCompleteListener
android.media.MicrophoneDirection
-kotlin.OptIn
android.media.AudioManager.OnAudioFocusChangeListener
android.media.MediaPlayer.OnBufferingUpdateListener
android.media.RemoteController.OnClientUpdateListener
android.media.MediaPlayer.OnMediaTimeDiscontinuityListener
android.media.SoundPool.OnLoadCompleteListener
+com.google.android.material.textfield.TextInputLayout.BoxBackgroundMode
+com.google.android.material.textfield.TextInputLayout.EndIconMode
+com.google.android.material.textfield.TextInputLayout.OnEditTextAttachedListener
+com.google.android.material.textfield.TextInputLayout.OnEndIconChangedListener
android.media.MediaDrm.OnEventListener
-kotlin.coroutines.RestrictsSuspension
-kotlin.coroutines.ContinuationInterceptor
android.media.MediaPlayer.OnTimedTextListener
android.media.JetPlayer.OnJetEventListener
android.media.MediaCodec.OnFrameRenderedListener
android.media.AudioRouting
-kotlin.coroutines.jvm.internal.DebugMetadata
-kotlin.coroutines.jvm.internal.CoroutineStackFrame
android.media.MediaPlayer.OnDrmConfigHelper
android.media.MediaDrm.OnKeyStatusChangeListener
android.media.MediaScannerConnection.MediaScannerConnectionClient
-kotlin.coroutines.jvm.internal.SuspendFunction
android.media.midi.MidiManager.OnDeviceOpenedListener
-kotlin.coroutines.CoroutineContext.Key
android.media.MediaPlayer.OnTimedMetaDataAvailableListener
android.media.AudioRecordingMonitor
-kotlin.coroutines.CoroutineContext.Element
android.media.AudioRecord.OnRoutingChangedListener
-kotlin.coroutines.CoroutineContext
android.media.MediaRecorder.OnInfoListener
-kotlin.coroutines.Continuation
android.media.MediaPlayer.OnInfoListener
android.media.audiofx.AudioEffect.OnEnableStatusChangeListener
android.media.audiofx.Visualizer.OnDataCaptureListener
android.media.audiofx.Virtualizer.OnParameterChangeListener
+com.google.android.material.transition.FadeModeEvaluator
+com.google.android.material.transition.FitModeEvaluator
android.media.audiofx.AudioEffect.OnControlStatusChangeListener
android.media.audiofx.EnvironmentalReverb.OnParameterChangeListener
android.media.audiofx.Equalizer.OnParameterChangeListener
android.media.audiofx.BassBoost.OnParameterChangeListener
-kotlin.Metadata
-kotlin.UseExperimental
+com.google.android.material.transition.MaterialContainerTransform.FadeMode
+com.google.android.material.transition.MaterialContainerTransform.FitMode
+com.google.android.material.transition.MaterialContainerTransform.TransitionDirection
android.media.audiofx.PresetReverb.OnParameterChangeListener
android.graphics.SurfaceTexture.OnFrameAvailableListener
-kotlin.text.FlagEnum
-kotlin.text.MatchGroupCollection
+com.google.android.material.transition.MaterialSharedAxis.Axis
+com.google.android.material.transition.SlideDistanceProvider.GravityFlag
+com.google.android.material.transition.TransitionUtils.CanvasOperation
+com.google.android.material.transition.TransitionUtils.CornerSizeBinaryOperator
+com.google.android.material.transition.VisibilityAnimatorProvider
+com.google.android.material.transition.platform.FadeModeEvaluator
+com.google.android.material.transition.platform.FitModeEvaluator
+com.google.android.material.transition.platform.MaterialContainerTransform.FadeMode
+com.google.android.material.transition.platform.MaterialContainerTransform.FitMode
+com.google.android.material.transition.platform.MaterialContainerTransform.TransitionDirection
+com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback.ShapeProvider
+com.google.android.material.transition.platform.MaterialSharedAxis.Axis
+com.google.android.material.transition.platform.SlideDistanceProvider.GravityFlag
android.graphics.drawable.Icon.OnDrawableLoadedListener
+com.google.android.material.transition.platform.TransitionUtils.CanvasOperation
+com.google.android.material.transition.platform.TransitionUtils.CornerSizeBinaryOperator
android.graphics.drawable.Animatable2
-kotlin.text.MatchNamedGroupCollection
+com.google.android.material.transition.platform.VisibilityAnimatorProvider
+androidx.lifecycle.LifecycleRegistryOwner
android.graphics.drawable.Drawable.Callback
+androidx.lifecycle.ReportFragment.ActivityInitializationListener
android.graphics.drawable.Animatable
-kotlin.text.MatchResult
+com.nativescript.text.Font.FontWeight
+com.nativescript.text.Font.genericFontFamilies
android.graphics.PostProcessor
-kotlin.time.ExperimentalTime
-kotlin.time.TimeSource
android.graphics.ImageDecoder.OnHeaderDecodedListener
-kotlin.experimental.ExperimentalTypeInference
android.graphics.ImageDecoder.OnPartialImageListener
android.gesture.GestureOverlayView.OnGesturePerformedListener
android.gesture.GestureOverlayView.OnGestureListener
-kotlin.sequences.Sequence
android.gesture.GestureOverlayView.OnGesturingListener
android.annotation.Nullable
android.annotation.TargetApi
@@ -1056,12 +1085,8 @@ android.icu.lang.UCharacter.IndicPositionalCategory
android.icu.lang.UCharacter.GraphemeClusterBreak
android.icu.text.SymbolTable
android.icu.text.Collator.ReorderCodes
-kotlin.sequences.DropTakeSequence
-kotlin.ExperimentalMultiplatform
-kotlin.BuilderInference
android.icu.text.UnicodeMatcher
android.icu.text.Replaceable
-kotlin.collections.Grouping
android.icu.util.Freezable
android.icu.util.ValueIterator
android.icu.util.RangeValueIterator
@@ -1113,10 +1138,8 @@ android.view.SurfaceHolder
android.view.InputQueue.Callback
android.view.ViewDebug.IntToString
android.view.View.OnClickListener
-kotlin.collections.MapWithDefault
android.view.ViewTreeObserver.OnGlobalFocusChangeListener
android.view.ActionMode.Callback
-kotlin.collections.MutableMapWithDefault
android.view.Window.OnRestrictedCaptionAreaChangedListener
android.view.ViewTreeObserver.OnGlobalLayoutListener
android.view.ActionProvider.VisibilityListener
@@ -1132,31 +1155,14 @@ android.view.LayoutInflater.Filter
android.view.ViewTreeObserver.OnWindowAttachListener
android.view.ScaleGestureDetector.OnScaleGestureListener
android.view.ViewTreeObserver.OnDrawListener
-kotlin.ExperimentalUnsignedTypes
android.view.WindowManager
android.view.SurfaceHolder.Callback2
-kotlin.Suppress
-kotlin.OptionalExpectation
-kotlin.annotation.MustBeDocumented
-kotlin.annotation.Repeatable
-kotlin.annotation.Target
-kotlin.annotation.Retention
android.view.View.OnKeyListener
android.view.ViewTreeObserver.OnPreDrawListener
-kotlin.Experimental
-kotlin.Function
-kotlin.WasExperimental
-kotlin.properties.ReadWriteProperty
-kotlin.properties.ReadOnlyProperty
android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener
android.view.accessibility.AccessibilityEventSource
-kotlin.js.JsName
-kotlin.Deprecated
-kotlin.ParameterName
android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener
-kotlin.RequiresOptIn
android.view.SubMenu
-kotlin.SinceKotlin
android.view.View.OnHoverListener
android.view.ViewGroup.OnHierarchyChangeListener
android.view.ViewParent
@@ -1165,20 +1171,14 @@ android.view.LayoutInflater.Factory2
android.view.ViewDebug.FlagToString
android.view.SurfaceHolder.Callback
android.view.GestureDetector.OnContextClickListener
-kotlin.coroutines.experimental.RestrictsSuspension
-kotlin.coroutines.experimental.ContinuationInterceptor
android.view.View.OnLongClickListener
android.view.ViewTreeObserver.OnWindowFocusChangeListener
android.view.View.OnTouchListener
android.view.MenuItem
-kotlin.coroutines.experimental.CoroutineContext.Key
android.view.Choreographer.FrameCallback
android.view.View.OnContextClickListener
android.view.ViewTreeObserver.OnTouchModeChangeListener
android.view.View.OnApplyWindowInsetsListener
-kotlin.coroutines.experimental.CoroutineContext.Element
-kotlin.coroutines.experimental.CoroutineContext
-kotlin.coroutines.experimental.Continuation
android.view.animation.Interpolator
android.view.animation.Animation.AnimationListener
android.view.PixelCopy.OnPixelCopyFinishedListener
diff --git a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/executionHistory/executionHistory.bin b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/executionHistory/executionHistory.bin
index 4fcc4e61..199e645d 100644
Binary files a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/executionHistory/executionHistory.bin and b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/executionHistory/executionHistory.bin differ
diff --git a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/executionHistory/executionHistory.lock b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/executionHistory/executionHistory.lock
index 7eeb800a..38430a38 100644
Binary files a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/executionHistory/executionHistory.lock and b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/executionHistory/executionHistory.lock differ
diff --git a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileContent/fileContent.lock b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileContent/fileContent.lock
index 5ed4e323..1f4635ba 100644
Binary files a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileContent/fileContent.lock and b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileContent/fileContent.lock differ
diff --git a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileHashes/fileHashes.bin b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileHashes/fileHashes.bin
index 1438b9d6..e35ea0c5 100644
Binary files a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileHashes/fileHashes.bin and b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileHashes/fileHashes.bin differ
diff --git a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileHashes/fileHashes.lock b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileHashes/fileHashes.lock
index 698b9591..ee4578a5 100644
Binary files a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileHashes/fileHashes.lock and b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/fileHashes/fileHashes.lock differ
diff --git a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/javaCompile/javaCompile.lock b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/javaCompile/javaCompile.lock
index 1325d7ed..c697e4ff 100644
Binary files a/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/javaCompile/javaCompile.lock and b/platforms/tempPlugin/nativescript_imagecropper/.gradle/6.4/javaCompile/javaCompile.lock differ
diff --git a/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 20a1580b..bc191f70 100644
Binary files a/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/cache.properties b/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/cache.properties
index a8824e94..eccfb68b 100644
--- a/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/cache.properties
+++ b/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/cache.properties
@@ -1,2 +1,2 @@
-#Tue Dec 29 00:26:51 IST 2020
+#Wed Dec 30 13:11:59 IST 2020
gradle.version=6.4
diff --git a/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/outputFiles.bin b/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/outputFiles.bin
index 552d5ef5..dd0c180e 100644
Binary files a/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/outputFiles.bin and b/platforms/tempPlugin/nativescript_imagecropper/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/platforms/tempPlugin/nativescript_imagecropper/.gradle/checksums/checksums.lock b/platforms/tempPlugin/nativescript_imagecropper/.gradle/checksums/checksums.lock
index 553ea30d..22e9c94f 100644
Binary files a/platforms/tempPlugin/nativescript_imagecropper/.gradle/checksums/checksums.lock and b/platforms/tempPlugin/nativescript_imagecropper/.gradle/checksums/checksums.lock differ
diff --git a/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties b/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
index 77a4dd59..9fead0ea 100644
--- a/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
+++ b/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
@@ -1,4 +1,4 @@
-#Tue Dec 29 00:26:52 IST 2020
+#Wed Dec 30 13:12:01 IST 2020
/home/vrb/.gradle/caches/transforms-2/files-2.1/d4346362d40a6ea03e30b4a0f823b8db/appcompat-1.0.0/res/drawable-xhdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/res/merged/release/drawable-xhdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png
/home/vrb/.gradle/caches/transforms-2/files-2.1/ce3c4e922b74126d6088b5e052bb6fb5/material-1.0.0/res/color/mtrl_bottom_nav_colored_item_tint.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/res/merged/release/color/mtrl_bottom_nav_colored_item_tint.xml
/home/vrb/.gradle/caches/transforms-2/files-2.1/d4346362d40a6ea03e30b4a0f823b8db/appcompat-1.0.0/res/drawable-xhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/res/merged/release/drawable-xhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png
diff --git a/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties b/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
index 5b6839df..a9db8a00 100644
--- a/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
+++ b/platforms/tempPlugin/nativescript_imagecropper/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
@@ -1 +1 @@
-#Tue Dec 29 00:26:51 IST 2020
+#Wed Dec 30 13:12:00 IST 2020
diff --git a/platforms/tempPlugin/social_share/.gradle/6.4/executionHistory/executionHistory.bin b/platforms/tempPlugin/social_share/.gradle/6.4/executionHistory/executionHistory.bin
index bc4f92b2..343322fd 100644
Binary files a/platforms/tempPlugin/social_share/.gradle/6.4/executionHistory/executionHistory.bin and b/platforms/tempPlugin/social_share/.gradle/6.4/executionHistory/executionHistory.bin differ
diff --git a/platforms/tempPlugin/social_share/.gradle/6.4/executionHistory/executionHistory.lock b/platforms/tempPlugin/social_share/.gradle/6.4/executionHistory/executionHistory.lock
index c8fbbdfd..20ea7394 100644
Binary files a/platforms/tempPlugin/social_share/.gradle/6.4/executionHistory/executionHistory.lock and b/platforms/tempPlugin/social_share/.gradle/6.4/executionHistory/executionHistory.lock differ
diff --git a/platforms/tempPlugin/social_share/.gradle/6.4/fileContent/fileContent.lock b/platforms/tempPlugin/social_share/.gradle/6.4/fileContent/fileContent.lock
index 5d6c84f1..4c29c14b 100644
Binary files a/platforms/tempPlugin/social_share/.gradle/6.4/fileContent/fileContent.lock and b/platforms/tempPlugin/social_share/.gradle/6.4/fileContent/fileContent.lock differ
diff --git a/platforms/tempPlugin/social_share/.gradle/6.4/fileHashes/fileHashes.bin b/platforms/tempPlugin/social_share/.gradle/6.4/fileHashes/fileHashes.bin
index 2fd5a2a8..b2fc8b99 100644
Binary files a/platforms/tempPlugin/social_share/.gradle/6.4/fileHashes/fileHashes.bin and b/platforms/tempPlugin/social_share/.gradle/6.4/fileHashes/fileHashes.bin differ
diff --git a/platforms/tempPlugin/social_share/.gradle/6.4/fileHashes/fileHashes.lock b/platforms/tempPlugin/social_share/.gradle/6.4/fileHashes/fileHashes.lock
index 77870770..7b5e75ea 100644
Binary files a/platforms/tempPlugin/social_share/.gradle/6.4/fileHashes/fileHashes.lock and b/platforms/tempPlugin/social_share/.gradle/6.4/fileHashes/fileHashes.lock differ
diff --git a/platforms/tempPlugin/social_share/.gradle/6.4/javaCompile/javaCompile.lock b/platforms/tempPlugin/social_share/.gradle/6.4/javaCompile/javaCompile.lock
index de91b2b4..11aabb08 100644
Binary files a/platforms/tempPlugin/social_share/.gradle/6.4/javaCompile/javaCompile.lock and b/platforms/tempPlugin/social_share/.gradle/6.4/javaCompile/javaCompile.lock differ
diff --git a/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 887f13f2..2d5fd8be 100644
Binary files a/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/cache.properties b/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/cache.properties
index 2a28aea4..becd54b1 100644
--- a/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/cache.properties
+++ b/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/cache.properties
@@ -1,2 +1,2 @@
-#Tue Dec 29 00:26:48 IST 2020
+#Wed Dec 30 13:11:56 IST 2020
gradle.version=6.4
diff --git a/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/outputFiles.bin b/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/outputFiles.bin
index cc91a8d2..5f3dbdde 100644
Binary files a/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/outputFiles.bin and b/platforms/tempPlugin/social_share/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/platforms/tempPlugin/social_share/.gradle/checksums/checksums.lock b/platforms/tempPlugin/social_share/.gradle/checksums/checksums.lock
index 9706d989..0b925fd1 100644
Binary files a/platforms/tempPlugin/social_share/.gradle/checksums/checksums.lock and b/platforms/tempPlugin/social_share/.gradle/checksums/checksums.lock differ
diff --git a/platforms/tempPlugin/social_share/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties b/platforms/tempPlugin/social_share/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
index 8f0a8e3c..4d2bde0c 100644
--- a/platforms/tempPlugin/social_share/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
+++ b/platforms/tempPlugin/social_share/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
@@ -1,2 +1,2 @@
-#Tue Dec 29 00:26:48 IST 2020
+#Wed Dec 30 13:11:57 IST 2020
/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/social_share/src/main/res/xml/provider_paths.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/social_share/build/intermediates/res/merged/release/xml/provider_paths.xml
diff --git a/platforms/tempPlugin/social_share/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties b/platforms/tempPlugin/social_share/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
index c5ded8a9..aeb063e9 100644
--- a/platforms/tempPlugin/social_share/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
+++ b/platforms/tempPlugin/social_share/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
@@ -1,2 +1,2 @@
-#Tue Dec 29 00:26:48 IST 2020
+#Wed Dec 30 13:11:56 IST 2020
/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/social_share/src/main/res/xml/provider_paths.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/social_share/build/intermediates/packaged_res/release/xml/provider_paths.xml
diff --git a/platforms/tempPlugin/text/.gradle/6.4/executionHistory/executionHistory.bin b/platforms/tempPlugin/text/.gradle/6.4/executionHistory/executionHistory.bin
index aa58c4b2..8446500f 100644
Binary files a/platforms/tempPlugin/text/.gradle/6.4/executionHistory/executionHistory.bin and b/platforms/tempPlugin/text/.gradle/6.4/executionHistory/executionHistory.bin differ
diff --git a/platforms/tempPlugin/text/.gradle/6.4/executionHistory/executionHistory.lock b/platforms/tempPlugin/text/.gradle/6.4/executionHistory/executionHistory.lock
index a7b42d3e..1b25a5d7 100644
Binary files a/platforms/tempPlugin/text/.gradle/6.4/executionHistory/executionHistory.lock and b/platforms/tempPlugin/text/.gradle/6.4/executionHistory/executionHistory.lock differ
diff --git a/platforms/tempPlugin/text/.gradle/6.4/fileContent/fileContent.lock b/platforms/tempPlugin/text/.gradle/6.4/fileContent/fileContent.lock
index 1e58f43c..adaffd0f 100644
Binary files a/platforms/tempPlugin/text/.gradle/6.4/fileContent/fileContent.lock and b/platforms/tempPlugin/text/.gradle/6.4/fileContent/fileContent.lock differ
diff --git a/platforms/tempPlugin/text/.gradle/6.4/fileHashes/fileHashes.bin b/platforms/tempPlugin/text/.gradle/6.4/fileHashes/fileHashes.bin
index 27868bff..63ee2117 100644
Binary files a/platforms/tempPlugin/text/.gradle/6.4/fileHashes/fileHashes.bin and b/platforms/tempPlugin/text/.gradle/6.4/fileHashes/fileHashes.bin differ
diff --git a/platforms/tempPlugin/text/.gradle/6.4/fileHashes/fileHashes.lock b/platforms/tempPlugin/text/.gradle/6.4/fileHashes/fileHashes.lock
index 40d949d5..391381f2 100644
Binary files a/platforms/tempPlugin/text/.gradle/6.4/fileHashes/fileHashes.lock and b/platforms/tempPlugin/text/.gradle/6.4/fileHashes/fileHashes.lock differ
diff --git a/platforms/tempPlugin/text/.gradle/6.4/javaCompile/javaCompile.lock b/platforms/tempPlugin/text/.gradle/6.4/javaCompile/javaCompile.lock
index e4ba7ee7..dc7fe6d6 100644
Binary files a/platforms/tempPlugin/text/.gradle/6.4/javaCompile/javaCompile.lock and b/platforms/tempPlugin/text/.gradle/6.4/javaCompile/javaCompile.lock differ
diff --git a/platforms/tempPlugin/text/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/platforms/tempPlugin/text/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index a9b814ce..fa600eba 100644
Binary files a/platforms/tempPlugin/text/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/platforms/tempPlugin/text/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/platforms/tempPlugin/text/.gradle/buildOutputCleanup/cache.properties b/platforms/tempPlugin/text/.gradle/buildOutputCleanup/cache.properties
index 4af4de29..4366a68f 100644
--- a/platforms/tempPlugin/text/.gradle/buildOutputCleanup/cache.properties
+++ b/platforms/tempPlugin/text/.gradle/buildOutputCleanup/cache.properties
@@ -1,2 +1,2 @@
-#Tue Dec 29 00:27:00 IST 2020
+#Wed Dec 30 13:12:08 IST 2020
gradle.version=6.4
diff --git a/platforms/tempPlugin/text/.gradle/buildOutputCleanup/outputFiles.bin b/platforms/tempPlugin/text/.gradle/buildOutputCleanup/outputFiles.bin
index c8e49d24..e9779639 100644
Binary files a/platforms/tempPlugin/text/.gradle/buildOutputCleanup/outputFiles.bin and b/platforms/tempPlugin/text/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/platforms/tempPlugin/text/.gradle/checksums/checksums.lock b/platforms/tempPlugin/text/.gradle/checksums/checksums.lock
index 6e177c4f..dbb4eb8c 100644
Binary files a/platforms/tempPlugin/text/.gradle/checksums/checksums.lock and b/platforms/tempPlugin/text/.gradle/checksums/checksums.lock differ
diff --git a/platforms/tempPlugin/text/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties b/platforms/tempPlugin/text/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
index f2848fe7..52687854 100644
--- a/platforms/tempPlugin/text/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
+++ b/platforms/tempPlugin/text/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
@@ -1 +1 @@
-#Tue Dec 29 00:27:00 IST 2020
+#Wed Dec 30 13:12:09 IST 2020
diff --git a/platforms/tempPlugin/text/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties b/platforms/tempPlugin/text/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
index f2848fe7..22652464 100644
--- a/platforms/tempPlugin/text/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
+++ b/platforms/tempPlugin/text/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
@@ -1 +1 @@
-#Tue Dec 29 00:27:00 IST 2020
+#Wed Dec 30 13:12:08 IST 2020
diff --git a/platforms/tempPlugin/text/plugin-data.json b/platforms/tempPlugin/text/plugin-data.json
index c6474e9b..3432f959 100644
--- a/platforms/tempPlugin/text/plugin-data.json
+++ b/platforms/tempPlugin/text/plugin-data.json
@@ -3,6 +3,6 @@
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/CustomBackgroundSpan.java": "ae9e0e6d699e669f96ed7042f2145a1ab0bf6727",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/CustomTypefaceSpan.java": "421f984280aa806183057f2ddd53febdbc32d2b1",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/Font.java": "fb4d246ad367d178e11ef08c34ec182418d30890",
- "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/URLSpanNoUnderline.java": "b3da85c1d16eff30c54fb5725e1e46fea265d7ce",
- "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/HtmlToSpannedConverter.java": "38643430e4b8cac690b89a07adc3a86f7060f93d"
+ "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/HtmlToSpannedConverter.java": "38643430e4b8cac690b89a07adc3a86f7060f93d",
+ "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/URLSpanNoUnderline.java": "b3da85c1d16eff30c54fb5725e1e46fea265d7ce"
}
\ No newline at end of file
diff --git a/platforms/tempPlugin/ui_material_button/.gradle/6.4/executionHistory/executionHistory.bin b/platforms/tempPlugin/ui_material_button/.gradle/6.4/executionHistory/executionHistory.bin
index 9aebf433..dce4bd7f 100644
Binary files a/platforms/tempPlugin/ui_material_button/.gradle/6.4/executionHistory/executionHistory.bin and b/platforms/tempPlugin/ui_material_button/.gradle/6.4/executionHistory/executionHistory.bin differ
diff --git a/platforms/tempPlugin/ui_material_button/.gradle/6.4/executionHistory/executionHistory.lock b/platforms/tempPlugin/ui_material_button/.gradle/6.4/executionHistory/executionHistory.lock
index 2019d6bc..a7952070 100644
Binary files a/platforms/tempPlugin/ui_material_button/.gradle/6.4/executionHistory/executionHistory.lock and b/platforms/tempPlugin/ui_material_button/.gradle/6.4/executionHistory/executionHistory.lock differ
diff --git a/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileContent/fileContent.lock b/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileContent/fileContent.lock
index b777403d..33469c70 100644
Binary files a/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileContent/fileContent.lock and b/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileContent/fileContent.lock differ
diff --git a/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileHashes/fileHashes.bin b/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileHashes/fileHashes.bin
index ee0f2e03..fe73c6b0 100644
Binary files a/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileHashes/fileHashes.bin and b/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileHashes/fileHashes.bin differ
diff --git a/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileHashes/fileHashes.lock b/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileHashes/fileHashes.lock
index 8ac17d89..316310fe 100644
Binary files a/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileHashes/fileHashes.lock and b/platforms/tempPlugin/ui_material_button/.gradle/6.4/fileHashes/fileHashes.lock differ
diff --git a/platforms/tempPlugin/ui_material_button/.gradle/6.4/javaCompile/javaCompile.lock b/platforms/tempPlugin/ui_material_button/.gradle/6.4/javaCompile/javaCompile.lock
index 19c3b375..7567c885 100644
Binary files a/platforms/tempPlugin/ui_material_button/.gradle/6.4/javaCompile/javaCompile.lock and b/platforms/tempPlugin/ui_material_button/.gradle/6.4/javaCompile/javaCompile.lock differ
diff --git a/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index fe5b44da..45a35706 100644
Binary files a/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/cache.properties b/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/cache.properties
index 2dc6b2a1..b392693d 100644
--- a/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/cache.properties
+++ b/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/cache.properties
@@ -1,2 +1,2 @@
-#Tue Dec 29 00:26:37 IST 2020
+#Wed Dec 30 13:11:49 IST 2020
gradle.version=6.4
diff --git a/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/outputFiles.bin b/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/outputFiles.bin
index 81df1c34..f5c3c9e4 100644
Binary files a/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/outputFiles.bin and b/platforms/tempPlugin/ui_material_button/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/platforms/tempPlugin/ui_material_button/.gradle/checksums/checksums.lock b/platforms/tempPlugin/ui_material_button/.gradle/checksums/checksums.lock
index aa2733cb..6ed6a76d 100644
Binary files a/platforms/tempPlugin/ui_material_button/.gradle/checksums/checksums.lock and b/platforms/tempPlugin/ui_material_button/.gradle/checksums/checksums.lock differ
diff --git a/platforms/tempPlugin/ui_material_button/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties b/platforms/tempPlugin/ui_material_button/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
index f2d724a4..eb71a9d5 100644
--- a/platforms/tempPlugin/ui_material_button/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
+++ b/platforms/tempPlugin/ui_material_button/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
@@ -1,4 +1,4 @@
-#Tue Dec 29 00:26:43 IST 2020
+#Wed Dec 30 13:11:52 IST 2020
/home/vrb/.gradle/caches/transforms-2/files-2.1/ae1bf0e3b8f63074db6797692c14ed12/material-1.2.1/res/layout/design_navigation_item_subheader.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_button/build/intermediates/res/merged/release/layout/design_navigation_item_subheader.xml
/home/vrb/.gradle/caches/transforms-2/files-2.1/70264ed71b86436432b6d3963ae4f060/appcompat-1.2.0/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_button/build/intermediates/res/merged/release/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png
/home/vrb/.gradle/caches/transforms-2/files-2.1/ae1bf0e3b8f63074db6797692c14ed12/material-1.2.1/res/layout/mtrl_picker_header_fullscreen.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_button/build/intermediates/res/merged/release/layout/mtrl_picker_header_fullscreen.xml
diff --git a/platforms/tempPlugin/ui_material_button/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties b/platforms/tempPlugin/ui_material_button/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
index b3cf15db..01798136 100644
--- a/platforms/tempPlugin/ui_material_button/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
+++ b/platforms/tempPlugin/ui_material_button/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
@@ -1,4 +1,4 @@
-#Tue Dec 29 00:26:42 IST 2020
+#Wed Dec 30 13:11:51 IST 2020
/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_button/src/main/res/layout/material_button_icon.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_button/build/intermediates/packaged_res/release/layout/material_button_icon.xml
/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_button/src/main/res/layout/material_button_outline_icon.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_button/build/intermediates/packaged_res/release/layout/material_button_outline_icon.xml
/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_button/src/main/res/layout/material_button_outline.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_button/build/intermediates/packaged_res/release/layout/material_button_outline.xml
diff --git a/platforms/tempPlugin/ui_material_core/.gradle/6.4/executionHistory/executionHistory.bin b/platforms/tempPlugin/ui_material_core/.gradle/6.4/executionHistory/executionHistory.bin
index 507f2092..297db942 100644
Binary files a/platforms/tempPlugin/ui_material_core/.gradle/6.4/executionHistory/executionHistory.bin and b/platforms/tempPlugin/ui_material_core/.gradle/6.4/executionHistory/executionHistory.bin differ
diff --git a/platforms/tempPlugin/ui_material_core/.gradle/6.4/executionHistory/executionHistory.lock b/platforms/tempPlugin/ui_material_core/.gradle/6.4/executionHistory/executionHistory.lock
index f95b2860..a0a49bb0 100644
Binary files a/platforms/tempPlugin/ui_material_core/.gradle/6.4/executionHistory/executionHistory.lock and b/platforms/tempPlugin/ui_material_core/.gradle/6.4/executionHistory/executionHistory.lock differ
diff --git a/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileContent/fileContent.lock b/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileContent/fileContent.lock
index 95db1b50..9d380ac2 100644
Binary files a/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileContent/fileContent.lock and b/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileContent/fileContent.lock differ
diff --git a/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileHashes/fileHashes.bin b/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileHashes/fileHashes.bin
index dae5e1f1..a7645254 100644
Binary files a/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileHashes/fileHashes.bin and b/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileHashes/fileHashes.bin differ
diff --git a/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileHashes/fileHashes.lock b/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileHashes/fileHashes.lock
index 5c3cadd5..3ca57bb1 100644
Binary files a/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileHashes/fileHashes.lock and b/platforms/tempPlugin/ui_material_core/.gradle/6.4/fileHashes/fileHashes.lock differ
diff --git a/platforms/tempPlugin/ui_material_core/.gradle/6.4/javaCompile/javaCompile.lock b/platforms/tempPlugin/ui_material_core/.gradle/6.4/javaCompile/javaCompile.lock
index 87925250..d76ea6d5 100644
Binary files a/platforms/tempPlugin/ui_material_core/.gradle/6.4/javaCompile/javaCompile.lock and b/platforms/tempPlugin/ui_material_core/.gradle/6.4/javaCompile/javaCompile.lock differ
diff --git a/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index c2f0e880..05de8dc9 100644
Binary files a/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/cache.properties b/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/cache.properties
index f32fa202..ede2bc93 100644
--- a/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/cache.properties
+++ b/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/cache.properties
@@ -1,2 +1,2 @@
-#Tue Dec 29 00:26:56 IST 2020
+#Wed Dec 30 13:12:05 IST 2020
gradle.version=6.4
diff --git a/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/outputFiles.bin b/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/outputFiles.bin
index 79c657f7..8e1fb191 100644
Binary files a/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/outputFiles.bin and b/platforms/tempPlugin/ui_material_core/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/platforms/tempPlugin/ui_material_core/.gradle/checksums/checksums.lock b/platforms/tempPlugin/ui_material_core/.gradle/checksums/checksums.lock
index e3a0ed4e..ae86e3b3 100644
Binary files a/platforms/tempPlugin/ui_material_core/.gradle/checksums/checksums.lock and b/platforms/tempPlugin/ui_material_core/.gradle/checksums/checksums.lock differ
diff --git a/platforms/tempPlugin/ui_material_core/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties b/platforms/tempPlugin/ui_material_core/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
index aa534241..4280305f 100644
--- a/platforms/tempPlugin/ui_material_core/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
+++ b/platforms/tempPlugin/ui_material_core/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties
@@ -1,4 +1,4 @@
-#Tue Dec 29 00:26:57 IST 2020
+#Wed Dec 30 13:12:05 IST 2020
/home/vrb/.gradle/caches/transforms-2/files-2.1/ae1bf0e3b8f63074db6797692c14ed12/material-1.2.1/res/layout/design_navigation_item_subheader.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_core/build/intermediates/res/merged/release/layout/design_navigation_item_subheader.xml
/home/vrb/.gradle/caches/transforms-2/files-2.1/70264ed71b86436432b6d3963ae4f060/appcompat-1.2.0/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_core/build/intermediates/res/merged/release/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png
/home/vrb/.gradle/caches/transforms-2/files-2.1/ae1bf0e3b8f63074db6797692c14ed12/material-1.2.1/res/layout/mtrl_picker_header_fullscreen.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_core/build/intermediates/res/merged/release/layout/mtrl_picker_header_fullscreen.xml
diff --git a/platforms/tempPlugin/ui_material_core/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties b/platforms/tempPlugin/ui_material_core/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
index 01d265c8..012995f8 100644
--- a/platforms/tempPlugin/ui_material_core/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
+++ b/platforms/tempPlugin/ui_material_core/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
@@ -1,2 +1,2 @@
-#Tue Dec 29 00:26:56 IST 2020
+#Wed Dec 30 13:12:05 IST 2020
/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_core/src/main/res/layout/material_page.xml=/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/tempPlugin/ui_material_core/build/intermediates/packaged_res/release/layout/material_page.xml
diff --git a/platforms/tempPlugin/ui_material_core/plugin-data.json b/platforms/tempPlugin/ui_material_core/plugin-data.json
index 4395dd73..ca774c1a 100644
--- a/platforms/tempPlugin/ui_material_core/plugin-data.json
+++ b/platforms/tempPlugin/ui_material_core/plugin-data.json
@@ -1,6 +1,6 @@
{
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/AndroidManifest.xml": "9b6f49aa9c71e8a45ec570027e025274ffcadc96",
- "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/include.gradle": "ec90dc697edab3c184ec95b0a42c9f206900f048",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/java/com/nativescript/material/core/Utils.java": "3813226945705be3d52cf19dc945ea9bf2c77e12",
+ "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/include.gradle": "ec90dc697edab3c184ec95b0a42c9f206900f048",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/res/layout/material_page.xml": "29f912255e893697d6abd438f67a854149136292"
}
\ No newline at end of file