diff --git a/software/plugins/external-item-search/.gitignore b/software/plugins/external-item-search/.gitignore
index 216783d79..04c0a083b 100644
--- a/software/plugins/external-item-search/.gitignore
+++ b/software/plugins/external-item-search/.gitignore
@@ -37,3 +37,11 @@ nb-configuration.xml
# Plugin directory
/.quarkus/cli/plugins/
+
+# Quarkus CLI
+.quarkus/
+
+# Eclipse (anywhere in project)
+**/.settings/
+**/.project
+.classpath
\ No newline at end of file
diff --git a/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/README.md b/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/README.md
new file mode 100644
index 000000000..198bf560b
--- /dev/null
+++ b/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/README.md
@@ -0,0 +1,4 @@
+# Open Food Facts
+[search](https://wiki.openfoodfacts.org/API/Read/Search)
+[barcode](https://openfoodfacts.github.io/documentation/docs/Product-Opener/v3/products/get-api-v3-product-code)
+[docs](https://openfoodfacts.github.io/documentation/docs)
\ No newline at end of file
diff --git a/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_barcode.json b/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_barcode.json
new file mode 100644
index 000000000..21fc6eaca
--- /dev/null
+++ b/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_barcode.json
@@ -0,0 +1,6847 @@
+{
+ "request": {
+ "urlPathPattern": "/openfoodfacts/api/v3/product/3046920029759",
+ "method": "GET"
+ },
+ "response": {
+ "status": 200,
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "delayDistribution": {
+ "type": "lognormal",
+ "median": 5000,
+ "sigma": 0.4
+ },
+ "jsonBody": {
+ "code": "3046920029759",
+ "errors": [],
+ "product": {
+ "_id": "3046920029759",
+ "_keywords": [
+ "90",
+ "and",
+ "bar",
+ "botana",
+ "cacao",
+ "chocolate",
+ "cocoa",
+ "dark",
+ "dot",
+ "dulce",
+ "edelbitter-schokolade",
+ "extra",
+ "extra-fine-dark-chocolate",
+ "fine",
+ "fino",
+ "green",
+ "it",
+ "lindt",
+ "negro",
+ "product",
+ "producto",
+ "snack",
+ "su",
+ "sweet",
+ "triman"
+ ],
+ "added_countries_tags": [],
+ "additives_n": 0,
+ "additives_original_tags": [],
+ "additives_tags": [],
+ "allergens": "",
+ "allergens_from_ingredients": "",
+ "allergens_from_user": "(en) ",
+ "allergens_hierarchy": [],
+ "allergens_lc": "en",
+ "allergens_tags": [],
+ "amino_acids_prev_tags": [],
+ "amino_acids_tags": [],
+ "brands": "Lindt",
+ "brands_tags": [
+ "lindt"
+ ],
+ "categories": "Dark chocolate bar, Extra fine dark chocolates, Botanas, Cacao y sus productos, Chocolates negros, Chocolates negros extra finos, Snacks dulces",
+ "categories_hierarchy": [
+ "en:snacks",
+ "en:sweet-snacks",
+ "en:cocoa-and-its-products",
+ "en:chocolates",
+ "en:dark-chocolates",
+ "en:dark-chocolate-bar",
+ "en:extra-fine-dark-chocolates",
+ "en:Botanas",
+ "en:Cacao y sus productos",
+ "en:Chocolates negros",
+ "en:Chocolates negros extra finos",
+ "en:Snacks dulces"
+ ],
+ "categories_lc": "en",
+ "categories_properties": {
+ "agribalyse_proxy_food_code:en": "31005"
+ },
+ "categories_properties_tags": [
+ "all-products",
+ "categories-known",
+ "agribalyse-food-code-unknown",
+ "agribalyse-proxy-food-code-31005",
+ "agribalyse-proxy-food-code-known",
+ "ciqual-food-code-unknown",
+ "agribalyse-known",
+ "agribalyse-31005"
+ ],
+ "categories_tags": [
+ "en:snacks",
+ "en:sweet-snacks",
+ "en:cocoa-and-its-products",
+ "en:chocolates",
+ "en:dark-chocolates",
+ "en:dark-chocolate-bar",
+ "en:extra-fine-dark-chocolates",
+ "en:Botanas",
+ "en:Cacao y sus productos",
+ "en:Chocolates negros",
+ "en:Chocolates negros extra finos",
+ "en:Snacks dulces"
+ ],
+ "category_properties": {},
+ "checkers": [],
+ "checkers_tags": [],
+ "ciqual_food_name_tags": [
+ "unknown"
+ ],
+ "cities_tags": [],
+ "code": "3046920029759",
+ "codes_tags": [
+ "code-13",
+ "3046920029xxx",
+ "304692002xxxx",
+ "30469200xxxxx",
+ "3046920xxxxxx",
+ "304692xxxxxxx",
+ "30469xxxxxxxx",
+ "3046xxxxxxxxx",
+ "304xxxxxxxxxx",
+ "30xxxxxxxxxxx",
+ "3xxxxxxxxxxxx"
+ ],
+ "compared_to_category": "en:snacks-dulces",
+ "complete": 0,
+ "completeness": 0.9,
+ "correctors": [],
+ "correctors_tags": [
+ "javichu",
+ "gatien",
+ "manu1400",
+ "kyzh",
+ "tacite",
+ "garber1199",
+ "boism",
+ "scanbot",
+ "standardanalysis",
+ "neptuno",
+ "kiliweb",
+ "solveig-yuka",
+ "yuka.WTRJcVNha0ZvL3RTZ1BJN3J3SEZ3OVJ0MnFPbVJseTlPY3NLSWc9PQ",
+ "yuka.U2F3TFNaUXFyOHNLc01JUDNULzYzOXhiK2JINUJYKytMTklOSWc9PQ",
+ "moon-rabbit",
+ "yuka.Uy9rZ09xUXFnK010dGZRMTBqZnNwdjFLLzQzMUJUdVlBZXBNSVE9PQ",
+ "openfoodfacts-contributors",
+ "sebleouf",
+ "yuka.UTdrSkFabzdqT0kya2NRYXBFMkY2czVPd01PTFdUeXBNdGdlSWc9PQ",
+ "yuka.UktVOUc2OWIrZk1scXZjVm9objMvTjlOblp1SWRqMmFlN1llSWc9PQ",
+ "yuka.ZktzQ0Q1MEUvdHRVZy9ZZSt6TGUydUo3eExpV2NXS3dOUG9VSWc9PQ",
+ "yuka.ZTQwS0hvOWVsdFF2by9BU3h6WHUvY050d0kzMWUxR2RkdThUSWc9PQ",
+ "yuka.ZVA4R0xwMGhqZFZhbWZZbi9Tbm8rdHROOXFHZ1cwbWxkOGNTSVE9PQ",
+ "yuka.ZUw4eE41WUl1T2NieXNRUjBSZm44ZkVsellhd1FYS1dJdkllSWc9PQ",
+ "yuka.SDZzWVNMa1luT2dSaGNSaHBpTFo1b2xGK0xXYlgwVG1CTnNCSVE9PQ",
+ "yukafix",
+ "magasins-u",
+ "fgouget",
+ "pascal-h",
+ "date-limite-app",
+ "foodrepo",
+ "marmotte73",
+ "ccrdz",
+ "roboto-app",
+ "vaiton",
+ "charlesnepote",
+ "musarana",
+ "inf",
+ "zixianglim",
+ "teolemon",
+ "jumati",
+ "stephane",
+ "ariesmars",
+ "dahlqvist",
+ "sashay",
+ "nur",
+ "quechoisir",
+ "zipotlan",
+ "quentinbrd",
+ "ibwocoruytrc",
+ "thaialagata",
+ "off.f437954f-0a6f-4e52-8293-85d8e69cf333",
+ "swipe-studio",
+ "driveoff",
+ "packbot",
+ "tolgato",
+ "franzmari",
+ "smoothie-app",
+ "duhowpi",
+ "spotter",
+ "aleene",
+ "taiko",
+ "jo23",
+ "redfriend",
+ "angelbcn",
+ "insectproductadd",
+ "kjr",
+ "predatorix",
+ "skuma",
+ "moncoachigbas",
+ "macrofactor",
+ "chevalstar",
+ "nutrinet-sante",
+ "factfinds",
+ "freemox",
+ "alia",
+ "fighter-food-facts",
+ "navig491",
+ "oliwua",
+ "foodless",
+ "doodledoo",
+ "alarieux",
+ "avis9",
+ "jimmix",
+ "ompopo",
+ "boterman76",
+ "municorn-calorie-counter-app",
+ "auroralifescience",
+ "andrey-arhangel",
+ "thejerem76",
+ "graistergarden",
+ "prepperapp",
+ "intolerapp",
+ "bodysupport",
+ "igweni",
+ "monsieurtanuki",
+ "odinh",
+ "tvlf"
+ ],
+ "countries": "Algeria, Austria, Belgium, Bulgaria, Canada, Czech Republic, Finland, France, French Polynesia, Germany, Ireland, Italy, Mauritius, Monaco, Morocco, Netherlands, Norway, Poland, Portugal, Réunion, Romania, Singapore, Spain, Sweden, Switzerland, Tunisia, United Kingdom",
+ "countries_beforescanbot": "Argelia,Austria,Bélgica,Bulgaria,Canadá,República Checa,Finlandia,Francia,Polinesia Francesa,Alemania,Irlanda,Italia,Mauricio,Marruecos,Países Bajos,Noruega,Reunión,Rumania,Singapur,España,Suecia,Suiza,Túnez,Reino Unido",
+ "countries_hierarchy": [
+ "en:algeria",
+ "en:austria",
+ "en:belgium",
+ "en:bulgaria",
+ "en:canada",
+ "en:czech-republic",
+ "en:finland",
+ "en:france",
+ "en:french-polynesia",
+ "en:germany",
+ "en:ireland",
+ "en:italy",
+ "en:mauritius",
+ "en:monaco",
+ "en:morocco",
+ "en:netherlands",
+ "en:norway",
+ "en:poland",
+ "en:portugal",
+ "en:reunion",
+ "en:romania",
+ "en:singapore",
+ "en:spain",
+ "en:sweden",
+ "en:switzerland",
+ "en:tunisia",
+ "en:united-kingdom"
+ ],
+ "countries_lc": "en",
+ "countries_tags": [
+ "en:algeria",
+ "en:austria",
+ "en:belgium",
+ "en:bulgaria",
+ "en:canada",
+ "en:czech-republic",
+ "en:finland",
+ "en:france",
+ "en:french-polynesia",
+ "en:germany",
+ "en:ireland",
+ "en:italy",
+ "en:mauritius",
+ "en:monaco",
+ "en:morocco",
+ "en:netherlands",
+ "en:norway",
+ "en:poland",
+ "en:portugal",
+ "en:reunion",
+ "en:romania",
+ "en:singapore",
+ "en:spain",
+ "en:sweden",
+ "en:switzerland",
+ "en:tunisia",
+ "en:united-kingdom"
+ ],
+ "created_t": 1348995410,
+ "creator": "openfoodfacts-contributors",
+ "data_quality_bugs_tags": [],
+ "data_quality_completeness_tags": [
+ "en:photo-and-data-to-be-checked-by-an-experienced-contributor",
+ "en:ingredients-de-photo-selected",
+ "en:ingredients-de-completed",
+ "en:ingredients-completed-at-least-for-one-language",
+ "en:ingredients-en-photo-selected",
+ "en:ingredients-en-completed",
+ "en:ingredients-es-photo-selected",
+ "en:ingredients-es-completed",
+ "en:ingredients-fi-photo-selected",
+ "en:ingredients-fi-completed",
+ "en:ingredients-fr-photo-selected",
+ "en:ingredients-fr-completed",
+ "en:ingredients-it-photo-selected",
+ "en:ingredients-it-completed",
+ "en:ingredients-ja-photo-selected",
+ "en:ingredients-ja-to-be-completed",
+ "en:ingredients-nb-photo-selected",
+ "en:ingredients-nb-to-be-completed",
+ "en:ingredients-nl-photo-to-be-selected",
+ "en:ingredients-nl-completed",
+ "en:ingredients-pl-photo-selected",
+ "en:ingredients-pl-to-be-completed",
+ "en:ingredients-sv-photo-selected",
+ "en:ingredients-sv-completed",
+ "en:nutrition-photo-selected",
+ "en:categories-completed",
+ "en:nutrition-completed",
+ "en:packaging-photo-selected",
+ "en:packagings-completed",
+ "en:front-photo-selected",
+ "en:product-name-completed",
+ "en:quantity-completed",
+ "en:brands-completed",
+ "en:expiration-date-completed"
+ ],
+ "data_quality_dimensions": {
+ "accuracy": {
+ "overall": "0.00"
+ },
+ "completeness": {
+ "general_information": "1.00",
+ "ingredients": "0.82",
+ "nutrition": "1.00",
+ "overall": "0.88",
+ "packaging": "1.00"
+ }
+ },
+ "data_quality_errors_tags": [],
+ "data_quality_info_tags": [
+ "en:packaging-data-incomplete",
+ "en:ingredients-percent-analysis-ok",
+ "en:food-groups-1-known",
+ "en:food-groups-2-known",
+ "en:food-groups-3-unknown"
+ ],
+ "data_quality_tags": [
+ "en:photo-and-data-to-be-checked-by-an-experienced-contributor",
+ "en:ingredients-de-photo-selected",
+ "en:ingredients-de-completed",
+ "en:ingredients-completed-at-least-for-one-language",
+ "en:ingredients-en-photo-selected",
+ "en:ingredients-en-completed",
+ "en:ingredients-es-photo-selected",
+ "en:ingredients-es-completed",
+ "en:ingredients-fi-photo-selected",
+ "en:ingredients-fi-completed",
+ "en:ingredients-fr-photo-selected",
+ "en:ingredients-fr-completed",
+ "en:ingredients-it-photo-selected",
+ "en:ingredients-it-completed",
+ "en:ingredients-ja-photo-selected",
+ "en:ingredients-ja-to-be-completed",
+ "en:ingredients-nb-photo-selected",
+ "en:ingredients-nb-to-be-completed",
+ "en:ingredients-nl-photo-to-be-selected",
+ "en:ingredients-nl-completed",
+ "en:ingredients-pl-photo-selected",
+ "en:ingredients-pl-to-be-completed",
+ "en:ingredients-sv-photo-selected",
+ "en:ingredients-sv-completed",
+ "en:nutrition-photo-selected",
+ "en:categories-completed",
+ "en:nutrition-completed",
+ "en:packaging-photo-selected",
+ "en:packagings-completed",
+ "en:front-photo-selected",
+ "en:product-name-completed",
+ "en:quantity-completed",
+ "en:brands-completed",
+ "en:expiration-date-completed",
+ "en:packaging-data-incomplete",
+ "en:ingredients-percent-analysis-ok",
+ "en:food-groups-1-known",
+ "en:food-groups-2-known",
+ "en:food-groups-3-unknown",
+ "en:ingredients-en-ending-comma",
+ "en:environmental-score-origins-of-ingredients-origins-are-100-percent-unknown",
+ "en:environmental-score-production-system-no-label"
+ ],
+ "data_quality_warnings_tags": [
+ "en:ingredients-en-ending-comma",
+ "en:environmental-score-origins-of-ingredients-origins-are-100-percent-unknown",
+ "en:environmental-score-production-system-no-label"
+ ],
+ "data_sources": "Database - FoodRepo / openfood.ch, Databases, App - yuka, Apps, App - Horizon, App - InFood, App - Open Food Facts, App - smoothie-openfoodfacts, App - mon-coach-ig-bas, App - macrofactor, App - caloriecounterapp, App - Speisekammer, App - intolerapp",
+ "data_sources_tags": [
+ "database-foodrepo-openfood-ch",
+ "databases",
+ "app-yuka",
+ "apps",
+ "app-horizon",
+ "app-infood",
+ "app-open-food-facts",
+ "app-smoothie-openfoodfacts",
+ "app-mon-coach-ig-bas",
+ "app-macrofactor",
+ "app-caloriecounterapp",
+ "app-speisekammer",
+ "app-intolerapp"
+ ],
+ "debug_param_sorted_langs": [
+ "de",
+ "en",
+ "es",
+ "fi",
+ "fr",
+ "it",
+ "ja",
+ "nb",
+ "nl",
+ "pl",
+ "sv"
+ ],
+ "debug_tags": [
+ "43"
+ ],
+ "ecoscore_data": {
+ "adjustments": {
+ "origins_of_ingredients": {
+ "aggregated_origins": [
+ {
+ "epi_score": 0,
+ "origin": "en:unknown",
+ "percent": 100.0,
+ "transportation_score": 0
+ }
+ ],
+ "epi_score": 0,
+ "epi_value": -5,
+ "origins_from_categories": [
+ "en:unknown"
+ ],
+ "origins_from_origins_field": [
+ "en:unknown"
+ ],
+ "transportation_score": 0,
+ "transportation_scores": {
+ "ad": 0,
+ "al": 0,
+ "at": 0,
+ "ax": 0,
+ "ba": 0,
+ "be": 0,
+ "bg": 0,
+ "ch": 0,
+ "cy": 0,
+ "cz": 0,
+ "de": 0,
+ "dk": 0,
+ "dz": 0,
+ "ee": 0,
+ "eg": 0,
+ "es": 0,
+ "fi": 0,
+ "fo": 0,
+ "fr": 0,
+ "gg": 0,
+ "gi": 0,
+ "gr": 0,
+ "hr": 0,
+ "hu": 0,
+ "ie": 0,
+ "il": 0,
+ "im": 0,
+ "is": 0,
+ "it": 0,
+ "je": 0,
+ "lb": 0,
+ "li": 0,
+ "lt": 0,
+ "lu": 0,
+ "lv": 0,
+ "ly": 0,
+ "ma": 0,
+ "mc": 0,
+ "md": 0,
+ "me": 0,
+ "mk": 0,
+ "mt": 0,
+ "nl": 0,
+ "no": 0,
+ "pl": 0,
+ "ps": 0,
+ "pt": 0,
+ "ro": 0,
+ "rs": 0,
+ "se": 0,
+ "si": 0,
+ "sj": 0,
+ "sk": 0,
+ "sm": 0,
+ "sy": 0,
+ "tn": 0,
+ "tr": 0,
+ "ua": 0,
+ "uk": 0,
+ "us": 0,
+ "va": 0,
+ "world": 0,
+ "xk": 0
+ },
+ "transportation_value": 0,
+ "transportation_values": {
+ "ad": 0,
+ "al": 0,
+ "at": 0,
+ "ax": 0,
+ "ba": 0,
+ "be": 0,
+ "bg": 0,
+ "ch": 0,
+ "cy": 0,
+ "cz": 0,
+ "de": 0,
+ "dk": 0,
+ "dz": 0,
+ "ee": 0,
+ "eg": 0,
+ "es": 0,
+ "fi": 0,
+ "fo": 0,
+ "fr": 0,
+ "gg": 0,
+ "gi": 0,
+ "gr": 0,
+ "hr": 0,
+ "hu": 0,
+ "ie": 0,
+ "il": 0,
+ "im": 0,
+ "is": 0,
+ "it": 0,
+ "je": 0,
+ "lb": 0,
+ "li": 0,
+ "lt": 0,
+ "lu": 0,
+ "lv": 0,
+ "ly": 0,
+ "ma": 0,
+ "mc": 0,
+ "md": 0,
+ "me": 0,
+ "mk": 0,
+ "mt": 0,
+ "nl": 0,
+ "no": 0,
+ "pl": 0,
+ "ps": 0,
+ "pt": 0,
+ "ro": 0,
+ "rs": 0,
+ "se": 0,
+ "si": 0,
+ "sj": 0,
+ "sk": 0,
+ "sm": 0,
+ "sy": 0,
+ "tn": 0,
+ "tr": 0,
+ "ua": 0,
+ "uk": 0,
+ "us": 0,
+ "va": 0,
+ "world": 0,
+ "xk": 0
+ },
+ "value": -5,
+ "values": {
+ "ad": -5,
+ "al": -5,
+ "at": -5,
+ "ax": -5,
+ "ba": -5,
+ "be": -5,
+ "bg": -5,
+ "ch": -5,
+ "cy": -5,
+ "cz": -5,
+ "de": -5,
+ "dk": -5,
+ "dz": -5,
+ "ee": -5,
+ "eg": -5,
+ "es": -5,
+ "fi": -5,
+ "fo": -5,
+ "fr": -5,
+ "gg": -5,
+ "gi": -5,
+ "gr": -5,
+ "hr": -5,
+ "hu": -5,
+ "ie": -5,
+ "il": -5,
+ "im": -5,
+ "is": -5,
+ "it": -5,
+ "je": -5,
+ "lb": -5,
+ "li": -5,
+ "lt": -5,
+ "lu": -5,
+ "lv": -5,
+ "ly": -5,
+ "ma": -5,
+ "mc": -5,
+ "md": -5,
+ "me": -5,
+ "mk": -5,
+ "mt": -5,
+ "nl": -5,
+ "no": -5,
+ "pl": -5,
+ "ps": -5,
+ "pt": -5,
+ "ro": -5,
+ "rs": -5,
+ "se": -5,
+ "si": -5,
+ "sj": -5,
+ "sk": -5,
+ "sm": -5,
+ "sy": -5,
+ "tn": -5,
+ "tr": -5,
+ "ua": -5,
+ "uk": -5,
+ "us": -5,
+ "va": -5,
+ "world": -5,
+ "xk": -5
+ },
+ "warning": "origins_are_100_percent_unknown"
+ },
+ "packaging": {
+ "non_recyclable_and_non_biodegradable_materials": 0,
+ "packagings": [
+ {
+ "environmental_score_material_score": 36,
+ "environmental_score_shape_ratio": 0.1,
+ "food_contact": 1,
+ "material": "en:light-aluminium",
+ "number_of_units": 1,
+ "quantity_per_unit": "100 g",
+ "quantity_per_unit_unit": "g",
+ "quantity_per_unit_value": 100,
+ "recycling": "en:recycle-in-sorting-bin",
+ "shape": "en:sheet",
+ "weight_measured": 1.2
+ },
+ {
+ "environmental_score_material_score": 92,
+ "environmental_score_shape_ratio": 1,
+ "material": "en:cardboard",
+ "number_of_units": 1,
+ "quantity_per_unit": "100 g",
+ "quantity_per_unit_unit": "g",
+ "quantity_per_unit_value": 100,
+ "recycling": "en:recycle-in-sorting-bin",
+ "shape": "en:sleeve",
+ "weight_measured": 10.2
+ }
+ ],
+ "score": 85.6,
+ "value": -1
+ },
+ "production_system": {
+ "labels": [],
+ "value": 0,
+ "warning": "no_label"
+ },
+ "threatened_species": {}
+ },
+ "agribalyse": {
+ "agribalyse_proxy_food_code": "31005",
+ "co2_agriculture": 17.8,
+ "co2_consumption": 0,
+ "co2_distribution": 0.0209,
+ "co2_packaging": 0.705,
+ "co2_processing": 0.194,
+ "co2_total": 19.1,
+ "co2_transportation": 0.308,
+ "code": "31005",
+ "dqr": "1.886436469961008",
+ "ef_agriculture": 0.851,
+ "ef_consumption": 0,
+ "ef_distribution": 0.0049,
+ "ef_packaging": 0.0741,
+ "ef_processing": 0.0218,
+ "ef_total": 0.98,
+ "ef_transportation": 0.0286,
+ "is_beverage": 0,
+ "name_en": "Dark chocolate bar, less than 70% cocoa",
+ "name_fr": "Chocolat noir à moins de 70% de cacao, à croquer, tablette",
+ "score": 32,
+ "version": "3.2"
+ },
+ "grade": "e",
+ "grades": {
+ "ad": "e",
+ "al": "e",
+ "at": "e",
+ "ax": "e",
+ "ba": "e",
+ "be": "e",
+ "bg": "e",
+ "ch": "e",
+ "cy": "e",
+ "cz": "e",
+ "de": "e",
+ "dk": "e",
+ "dz": "e",
+ "ee": "e",
+ "eg": "e",
+ "es": "e",
+ "fi": "e",
+ "fo": "e",
+ "fr": "e",
+ "gg": "e",
+ "gi": "e",
+ "gr": "e",
+ "hr": "e",
+ "hu": "e",
+ "ie": "e",
+ "il": "e",
+ "im": "e",
+ "is": "e",
+ "it": "e",
+ "je": "e",
+ "lb": "e",
+ "li": "e",
+ "lt": "e",
+ "lu": "e",
+ "lv": "e",
+ "ly": "e",
+ "ma": "e",
+ "mc": "e",
+ "md": "e",
+ "me": "e",
+ "mk": "e",
+ "mt": "e",
+ "nl": "e",
+ "no": "e",
+ "pl": "e",
+ "ps": "e",
+ "pt": "e",
+ "ro": "e",
+ "rs": "e",
+ "se": "e",
+ "si": "e",
+ "sj": "e",
+ "sk": "e",
+ "sm": "e",
+ "sy": "e",
+ "tn": "e",
+ "tr": "e",
+ "ua": "e",
+ "uk": "e",
+ "us": "e",
+ "va": "e",
+ "world": "e",
+ "xk": "e"
+ },
+ "missing": {
+ "labels": 1,
+ "origins": 1
+ },
+ "missing_data_warning": 1,
+ "previous_data": {
+ "agribalyse": {
+ "agribalyse_proxy_food_code": "31005",
+ "co2_agriculture": 15.887773,
+ "co2_consumption": 0,
+ "co2_distribution": 0.017263204,
+ "co2_packaging": 0.10402936,
+ "co2_processing": 0.45803597,
+ "co2_total": 16.878582384,
+ "co2_transportation": 0.41148085,
+ "code": "31005",
+ "dqr": "2.99",
+ "ef_agriculture": 0.77882279,
+ "ef_consumption": 0,
+ "ef_distribution": 0.0046101581,
+ "ef_packaging": 0.010330022,
+ "ef_processing": 0.043605116,
+ "ef_total": 0.8797669371,
+ "ef_transportation": 0.042398851,
+ "is_beverage": 0,
+ "name_en": "Dark chocolate bar, less than 70% cocoa",
+ "name_fr": "Chocolat noir à moins de 70% de cacao, à croquer, tablette",
+ "score": 35,
+ "version": "3.1.1"
+ },
+ "grade": "e",
+ "score": 29
+ },
+ "score": 26,
+ "scores": {
+ "ad": 26,
+ "al": 26,
+ "at": 26,
+ "ax": 26,
+ "ba": 26,
+ "be": 26,
+ "bg": 26,
+ "ch": 26,
+ "cy": 26,
+ "cz": 26,
+ "de": 26,
+ "dk": 26,
+ "dz": 26,
+ "ee": 26,
+ "eg": 26,
+ "es": 26,
+ "fi": 26,
+ "fo": 26,
+ "fr": 26,
+ "gg": 26,
+ "gi": 26,
+ "gr": 26,
+ "hr": 26,
+ "hu": 26,
+ "ie": 26,
+ "il": 26,
+ "im": 26,
+ "is": 26,
+ "it": 26,
+ "je": 26,
+ "lb": 26,
+ "li": 26,
+ "lt": 26,
+ "lu": 26,
+ "lv": 26,
+ "ly": 26,
+ "ma": 26,
+ "mc": 26,
+ "md": 26,
+ "me": 26,
+ "mk": 26,
+ "mt": 26,
+ "nl": 26,
+ "no": 26,
+ "pl": 26,
+ "ps": 26,
+ "pt": 26,
+ "ro": 26,
+ "rs": 26,
+ "se": 26,
+ "si": 26,
+ "sj": 26,
+ "sk": 26,
+ "sm": 26,
+ "sy": 26,
+ "tn": 26,
+ "tr": 26,
+ "ua": 26,
+ "uk": 26,
+ "us": 26,
+ "va": 26,
+ "world": 26,
+ "xk": 26
+ },
+ "status": "known"
+ },
+ "ecoscore_grade": "e",
+ "ecoscore_score": 26,
+ "ecoscore_tags": [
+ "e"
+ ],
+ "editors": [
+ "",
+ "kyzh",
+ "tacite",
+ "manu1400",
+ "javichu",
+ "gatien"
+ ],
+ "editors_tags": [
+ "alarieux",
+ "aleene",
+ "alia",
+ "andrey-arhangel",
+ "angelbcn",
+ "ariesmars",
+ "auroralifescience",
+ "avis9",
+ "bcatelin",
+ "bodysupport",
+ "boism",
+ "boterman76",
+ "ccrdz",
+ "charlesnepote",
+ "chevalstar",
+ "dahlqvist",
+ "date-limite-app",
+ "doodledoo",
+ "driveoff",
+ "duhowpi",
+ "ecoscore-impact-estimator",
+ "emeterio",
+ "factfinds",
+ "fgouget",
+ "fighter-food-facts",
+ "fms08",
+ "foodless",
+ "foodrepo",
+ "foodvisor",
+ "franzmari",
+ "freemox",
+ "garber1199",
+ "gatien",
+ "graistergarden",
+ "ibwocoruytrc",
+ "igweni",
+ "inf",
+ "insectproductadd",
+ "intolerapp",
+ "javichu",
+ "jimmix",
+ "jo23",
+ "jumati",
+ "keragui",
+ "kiliweb",
+ "kjr",
+ "kyzh",
+ "maciej-lawniczak",
+ "macrofactor",
+ "magasins-u",
+ "manu1400",
+ "marmotte73",
+ "moncoachigbas",
+ "monsieurtanuki",
+ "moon-rabbit",
+ "municorn-calorie-counter-app",
+ "musarana",
+ "mvainola",
+ "navig491",
+ "neptuno",
+ "nur",
+ "nutrinet-sante",
+ "october-food-facts",
+ "odinh",
+ "off.f437954f-0a6f-4e52-8293-85d8e69cf333",
+ "oliwua",
+ "ompopo",
+ "openfoodfacts-contributors",
+ "packbot",
+ "pascal-h",
+ "predatorix",
+ "prepperapp",
+ "quechoisir",
+ "quentinbrd",
+ "redfriend",
+ "roboto-app",
+ "sashay",
+ "scanbot",
+ "sebleouf",
+ "skuma",
+ "smoothie-app",
+ "solveig-yuka",
+ "spotter",
+ "standardanalysis",
+ "stephane",
+ "swipe-studio",
+ "tacite",
+ "taiko",
+ "teolemon",
+ "thaialagata",
+ "thejerem76",
+ "tolgato",
+ "tvlf",
+ "tylili23",
+ "vaiton",
+ "yosa",
+ "yuka.R0s4cEYva09vcWcwaGZBeDNqN1VvUHQ0N2NHUlZtK1lNZEFWSVE9PQ",
+ "yuka.SDZzWVNMa1luT2dSaGNSaHBpTFo1b2xGK0xXYlgwVG1CTnNCSVE9PQ",
+ "yuka.U2F3TFNaUXFyOHNLc01JUDNULzYzOXhiK2JINUJYKytMTklOSWc9PQ",
+ "yuka.UTdrSkFabzdqT0kya2NRYXBFMkY2czVPd01PTFdUeXBNdGdlSWc9PQ",
+ "yuka.UktVOUc2OWIrZk1scXZjVm9objMvTjlOblp1SWRqMmFlN1llSWc9PQ",
+ "yuka.Uy9rZ09xUXFnK010dGZRMTBqZnNwdjFLLzQzMUJUdVlBZXBNSVE9PQ",
+ "yuka.VElrcVRidy9oZlVHcHZNWTRqYUwyNDVrbUthUVlFQ3NCc29XSVE9PQ",
+ "yuka.WHExZk1MczZqNlVYcThGaXpEL3ArNDR0M0pPT2ZuS2RKT3NhSVE9PQ",
+ "yuka.WHI0YURMb3hoYVFCdWNFZDJnM1E1ZXRXL2NLclpHMnBCOXBBSVE9PQ",
+ "yuka.WHJFZUtiMGZsTVVsdnN3bDhBTGExZjlzeXFPaloxR1lJUHBJSUE9PQ",
+ "yuka.WTRJcVNha0ZvL3RTZ1BJN3J3SEZ3OVJ0MnFPbVJseTlPY3NLSWc9PQ",
+ "yuka.YWI0bUNyNDhpUFlqcGYwZzJTTFZxL0ZTMTYrTFFUMlRlK2tnSVE9PQ",
+ "yuka.ZDdoY1Q3UUcvT01haWN3RDh6V042TjExeWFLMkRUeUpDN0JOSVE9PQ",
+ "yuka.ZTQwS0hvOWVsdFF2by9BU3h6WHUvY050d0kzMWUxR2RkdThUSWc9PQ",
+ "yuka.ZUw4eE41WUl1T2NieXNRUjBSZm44ZkVsellhd1FYS1dJdkllSWc9PQ",
+ "yuka.ZVA4R0xwMGhqZFZhbWZZbi9Tbm8rdHROOXFHZ1cwbWxkOGNTSVE9PQ",
+ "yuka.ZktzQ0Q1MEUvdHRVZy9ZZSt6TGUydUo3eExpV2NXS3dOUG9VSWc9PQ",
+ "yuka.ZlBncFFLME9yS2NsdXZBNDd4enE1UFowNTYrV2YxbW1FTEpBSUE9PQ",
+ "yukafix",
+ "zipotlan",
+ "zixianglim"
+ ],
+ "emb_codes": "",
+ "emb_codes_20141016": "LINDT & SPRÜNGLI SAS,CHOCOLADEFABRIKEN LINDT & SPRÜNGLI AG",
+ "emb_codes_hierarchy": [],
+ "emb_codes_lc": "en",
+ "emb_codes_orig": "",
+ "emb_codes_tags": [],
+ "entry_dates_tags": [
+ "2012-09-30",
+ "2012-09",
+ "2012"
+ ],
+ "environment_impact_level": "",
+ "environment_impact_level_tags": [],
+ "expiration_date": "28/02/24",
+ "food_groups": "en:chocolate-products",
+ "food_groups_tags": [
+ "en:sugary-snacks",
+ "en:chocolate-products"
+ ],
+ "fruits-vegetables-nuts_100g_estimate": 0,
+ "generic_name": "Extra fine dark chocolate 90% cocoa",
+ "generic_name_de": "Edelbitterschokolade 90% Kakao",
+ "generic_name_en": "Extra fine dark chocolate 90% cocoa",
+ "generic_name_es": "Chocolate negro",
+ "generic_name_fi": "Hieno tumma suklaa jossa 90% kaakaota",
+ "generic_name_fr": "Chocolat noir extra-fin traditionnel à 90% de cacao",
+ "generic_name_it": "Cioccolato fondente 90%",
+ "generic_name_ja": "",
+ "generic_name_nb": "",
+ "generic_name_nl": "",
+ "generic_name_pl": "",
+ "generic_name_sv": "Fin mörk choklad med 90% kakao",
+ "grades": {},
+ "id": "3046920029759",
+ "image_front_small_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_en.544.200.jpg",
+ "image_front_thumb_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_en.544.100.jpg",
+ "image_front_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_en.544.400.jpg",
+ "image_ingredients_small_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_en.529.200.jpg",
+ "image_ingredients_thumb_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_en.529.100.jpg",
+ "image_ingredients_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_en.529.400.jpg",
+ "image_nutrition_small_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_en.546.200.jpg",
+ "image_nutrition_thumb_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_en.546.100.jpg",
+ "image_nutrition_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_en.546.400.jpg",
+ "image_packaging_small_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_en.531.200.jpg",
+ "image_packaging_thumb_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_en.531.100.jpg",
+ "image_packaging_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_en.531.400.jpg",
+ "image_small_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_en.544.200.jpg",
+ "image_thumb_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_en.544.100.jpg",
+ "image_url": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_en.544.400.jpg",
+ "images": {
+ "1": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 299
+ },
+ "full": {
+ "h": 2592,
+ "w": 1936
+ }
+ },
+ "uploaded_t": 1361474452,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "10": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 3264,
+ "w": 2448
+ }
+ },
+ "uploaded_t": "1474660001",
+ "uploader": "bcatelin"
+ },
+ "100": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "400": {
+ "h": 400,
+ "w": 185
+ },
+ "full": {
+ "h": 1280,
+ "w": 592
+ }
+ },
+ "uploaded_t": 1755508027,
+ "uploader": "municorn-calorie-counter-app"
+ },
+ "101": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "400": {
+ "h": 400,
+ "w": 185
+ },
+ "full": {
+ "h": 1280,
+ "w": 592
+ }
+ },
+ "uploaded_t": 1755508039,
+ "uploader": "municorn-calorie-counter-app"
+ },
+ "102": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 61
+ },
+ "400": {
+ "h": 400,
+ "w": 245
+ },
+ "full": {
+ "h": 1700,
+ "w": 1042
+ }
+ },
+ "uploaded_t": 1759516638,
+ "uploader": "macrofactor"
+ },
+ "103": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 299
+ },
+ "full": {
+ "h": 669,
+ "w": 500
+ }
+ },
+ "uploaded_t": 1759516649,
+ "uploader": "macrofactor"
+ },
+ "104": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "400": {
+ "h": 400,
+ "w": 185
+ },
+ "full": {
+ "h": 1280,
+ "w": 592
+ }
+ },
+ "uploaded_t": 1761596263,
+ "uploader": "municorn-calorie-counter-app"
+ },
+ "105": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "400": {
+ "h": 400,
+ "w": 185
+ },
+ "full": {
+ "h": 1280,
+ "w": 592
+ }
+ },
+ "uploaded_t": 1761596275,
+ "uploader": "municorn-calorie-counter-app"
+ },
+ "106": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "400": {
+ "h": 400,
+ "w": 185
+ },
+ "full": {
+ "h": 1280,
+ "w": 592
+ }
+ },
+ "uploaded_t": 1763403702,
+ "uploader": "municorn-calorie-counter-app"
+ },
+ "107": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "400": {
+ "h": 400,
+ "w": 185
+ },
+ "full": {
+ "h": 1280,
+ "w": 592
+ }
+ },
+ "uploaded_t": 1763403712,
+ "uploader": "municorn-calorie-counter-app"
+ },
+ "108": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 78
+ },
+ "400": {
+ "h": 400,
+ "w": 310
+ },
+ "full": {
+ "h": 1794,
+ "w": 1391
+ }
+ },
+ "uploaded_t": 1766662027,
+ "uploader": "graistergarden"
+ },
+ "109": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "400": {
+ "h": 400,
+ "w": 184
+ },
+ "full": {
+ "h": 3655,
+ "w": 1681
+ }
+ },
+ "uploaded_t": 1770893631,
+ "uploader": "foodless"
+ },
+ "11": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 3264,
+ "w": 2448
+ }
+ },
+ "uploaded_t": "1474660021",
+ "uploader": "bcatelin"
+ },
+ "110": {
+ "sizes": {
+ "100": {
+ "h": 54,
+ "w": 100
+ },
+ "400": {
+ "h": 215,
+ "w": 400
+ },
+ "full": {
+ "h": 1589,
+ "w": 2958
+ }
+ },
+ "uploaded_t": 1773255497,
+ "uploader": "igweni"
+ },
+ "111": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 43
+ },
+ "400": {
+ "h": 400,
+ "w": 171
+ },
+ "full": {
+ "h": 2744,
+ "w": 1176
+ }
+ },
+ "uploaded_t": 1775997757,
+ "uploader": "foodless"
+ },
+ "112": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 51
+ },
+ "400": {
+ "h": 400,
+ "w": 203
+ },
+ "full": {
+ "h": 1389,
+ "w": 704
+ }
+ },
+ "uploaded_t": 1777741915,
+ "uploader": "macrofactor"
+ },
+ "113": {
+ "sizes": {
+ "100": {
+ "h": 64,
+ "w": 100
+ },
+ "400": {
+ "h": 256,
+ "w": 400
+ },
+ "full": {
+ "h": 753,
+ "w": 1176
+ }
+ },
+ "uploaded_t": 1777741927,
+ "uploader": "macrofactor"
+ },
+ "12": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 3264,
+ "w": 2448
+ }
+ },
+ "uploaded_t": "1476212413",
+ "uploader": "openfoodfacts-contributors"
+ },
+ "13": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 2666,
+ "w": 2000
+ }
+ },
+ "uploaded_t": "1478404832",
+ "uploader": "openfoodfacts-contributors"
+ },
+ "14": {
+ "sizes": {
+ "100": {
+ "h": 56,
+ "w": 100
+ },
+ "400": {
+ "h": 225,
+ "w": 400
+ },
+ "full": {
+ "h": 1125,
+ "w": 2000
+ }
+ },
+ "uploaded_t": "1482493943",
+ "uploader": "standardanalysis"
+ },
+ "15": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 56
+ },
+ "400": {
+ "h": 400,
+ "w": 225
+ },
+ "full": {
+ "h": 3555,
+ "w": 2000
+ }
+ },
+ "uploaded_t": "1482494102",
+ "uploader": "standardanalysis"
+ },
+ "16": {
+ "sizes": {
+ "100": {
+ "h": 56,
+ "w": 100
+ },
+ "400": {
+ "h": 225,
+ "w": 400
+ },
+ "full": {
+ "h": 1125,
+ "w": 2000
+ }
+ },
+ "uploaded_t": "1482494498",
+ "uploader": "standardanalysis"
+ },
+ "17": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 2666,
+ "w": 2000
+ }
+ },
+ "uploaded_t": "1488632440",
+ "uploader": "keragui"
+ },
+ "18": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 3264,
+ "w": 2448
+ }
+ },
+ "uploaded_t": "1509534099",
+ "uploader": "openfoodfacts-contributors"
+ },
+ "19": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 3264,
+ "w": 2448
+ }
+ },
+ "uploaded_t": "1509536567",
+ "uploader": "openfoodfacts-contributors"
+ },
+ "2": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 299
+ },
+ "full": {
+ "h": 2592,
+ "w": 1936
+ }
+ },
+ "uploaded_t": 1361474549,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "20": {
+ "sizes": {
+ "100": {
+ "h": 75,
+ "w": 100
+ },
+ "400": {
+ "h": 300,
+ "w": 400
+ },
+ "full": {
+ "h": 1944,
+ "w": 2592
+ }
+ },
+ "uploaded_t": "1510987995",
+ "uploader": "openfoodfacts-contributors"
+ },
+ "21": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 1360,
+ "w": 1021
+ }
+ },
+ "uploaded_t": "1513531047",
+ "uploader": "kiliweb"
+ },
+ "22": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 4030,
+ "w": 3024
+ }
+ },
+ "uploaded_t": "1513531050",
+ "uploader": "kiliweb"
+ },
+ "24": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 57
+ },
+ "400": {
+ "h": 400,
+ "w": 226
+ },
+ "full": {
+ "h": 1200,
+ "w": 679
+ }
+ },
+ "uploaded_t": "1523097979",
+ "uploader": "kiliweb"
+ },
+ "25": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 53
+ },
+ "400": {
+ "h": 400,
+ "w": 212
+ },
+ "full": {
+ "h": 1200,
+ "w": 635
+ }
+ },
+ "uploaded_t": "1524923116",
+ "uploader": "kiliweb"
+ },
+ "26": {
+ "sizes": {
+ "100": {
+ "h": 40,
+ "w": 100
+ },
+ "400": {
+ "h": 159,
+ "w": 400
+ },
+ "full": {
+ "h": 875,
+ "w": 2207
+ }
+ },
+ "uploaded_t": "1526557239",
+ "uploader": "kiliweb"
+ },
+ "27": {
+ "sizes": {
+ "100": {
+ "h": 75,
+ "w": 100
+ },
+ "400": {
+ "h": 300,
+ "w": 400
+ },
+ "full": {
+ "h": 1500,
+ "w": 2000
+ }
+ },
+ "uploaded_t": "1526646856",
+ "uploader": "openfoodfacts-contributors"
+ },
+ "28": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 60
+ },
+ "400": {
+ "h": 400,
+ "w": 241
+ },
+ "full": {
+ "h": 1200,
+ "w": 722
+ }
+ },
+ "uploaded_t": "1527358351",
+ "uploader": "kiliweb"
+ },
+ "29": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 3328,
+ "w": 2496
+ }
+ },
+ "uploaded_t": 1536939292,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "30": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 3328,
+ "w": 2496
+ }
+ },
+ "uploaded_t": 1536939318,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "31": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 55
+ },
+ "400": {
+ "h": 400,
+ "w": 220
+ },
+ "full": {
+ "h": 1200,
+ "w": 660
+ }
+ },
+ "uploaded_t": "1526289297",
+ "uploader": "kiliweb"
+ },
+ "32": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 53
+ },
+ "400": {
+ "h": 400,
+ "w": 211
+ },
+ "full": {
+ "h": 1200,
+ "w": 633
+ }
+ },
+ "uploaded_t": "1526289310",
+ "uploader": "kiliweb"
+ },
+ "33": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 1360,
+ "w": 1021
+ }
+ },
+ "uploaded_t": "1495134202",
+ "uploader": "kiliweb"
+ },
+ "34": {
+ "sizes": {
+ "100": {
+ "h": 79,
+ "w": 100
+ },
+ "400": {
+ "h": 316,
+ "w": 400
+ },
+ "full": {
+ "h": 1874,
+ "w": 2372
+ }
+ },
+ "uploaded_t": "1495134203",
+ "uploader": "kiliweb"
+ },
+ "36": {
+ "sizes": {
+ "100": {
+ "h": 57,
+ "w": 100
+ },
+ "400": {
+ "h": 229,
+ "w": 400
+ },
+ "full": {
+ "h": 1021,
+ "w": 1787
+ }
+ },
+ "uploaded_t": 1551220078,
+ "uploader": "ccrdz"
+ },
+ "37": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 56
+ },
+ "400": {
+ "h": 400,
+ "w": 225
+ },
+ "full": {
+ "h": 1000,
+ "w": 563
+ }
+ },
+ "uploaded_t": 1554150442,
+ "uploader": "foodrepo"
+ },
+ "38": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 59
+ },
+ "400": {
+ "h": 325,
+ "w": 193
+ },
+ "full": {
+ "h": 325,
+ "w": 193
+ }
+ },
+ "uploaded_t": 1554150443,
+ "uploader": "foodrepo"
+ },
+ "39": {
+ "sizes": {
+ "100": {
+ "h": 57,
+ "w": 100
+ },
+ "400": {
+ "h": 173,
+ "w": 303
+ },
+ "full": {
+ "h": 173,
+ "w": 303
+ }
+ },
+ "uploaded_t": 1554150443,
+ "uploader": "foodrepo"
+ },
+ "40": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 56
+ },
+ "400": {
+ "h": 400,
+ "w": 225
+ },
+ "full": {
+ "h": 1000,
+ "w": 563
+ }
+ },
+ "uploaded_t": 1554150443,
+ "uploader": "foodrepo"
+ },
+ "42": {
+ "sizes": {
+ "100": {
+ "h": 56,
+ "w": 100
+ },
+ "400": {
+ "h": 225,
+ "w": 400
+ },
+ "full": {
+ "h": 1728,
+ "w": 3072
+ }
+ },
+ "uploaded_t": 1558470858,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "43": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 4096,
+ "w": 3072
+ }
+ },
+ "uploaded_t": 1558471482,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "44": {
+ "sizes": {
+ "100": {
+ "h": 75,
+ "w": 100
+ },
+ "400": {
+ "h": 300,
+ "w": 400
+ },
+ "full": {
+ "h": 3072,
+ "w": 4096
+ }
+ },
+ "uploaded_t": 1559843369,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "45": {
+ "sizes": {
+ "100": {
+ "h": 53,
+ "w": 100
+ },
+ "400": {
+ "h": 212,
+ "w": 400
+ },
+ "full": {
+ "h": 1272,
+ "w": 2399
+ }
+ },
+ "uploaded_t": 1561842274,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "46": {
+ "sizes": {
+ "100": {
+ "h": 53,
+ "w": 100
+ },
+ "400": {
+ "h": 212,
+ "w": 400
+ },
+ "full": {
+ "h": 1321,
+ "w": 2487
+ }
+ },
+ "uploaded_t": 1561842384,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "47": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 44
+ },
+ "400": {
+ "h": 400,
+ "w": 175
+ },
+ "full": {
+ "h": 3440,
+ "w": 1509
+ }
+ },
+ "uploaded_t": 1562611385,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "48": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 50
+ },
+ "400": {
+ "h": 400,
+ "w": 199
+ },
+ "full": {
+ "h": 4530,
+ "w": 2254
+ }
+ },
+ "uploaded_t": 1575997945,
+ "uploader": "jumati"
+ },
+ "49": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 82
+ },
+ "400": {
+ "h": 400,
+ "w": 326
+ },
+ "full": {
+ "h": 3177,
+ "w": 2592
+ }
+ },
+ "uploaded_t": 1575998052,
+ "uploader": "jumati"
+ },
+ "50": {
+ "sizes": {
+ "100": {
+ "h": 64,
+ "w": 100
+ },
+ "400": {
+ "h": 255,
+ "w": 400
+ },
+ "full": {
+ "h": 1927,
+ "w": 3024
+ }
+ },
+ "uploaded_t": 1583112244,
+ "uploader": "ariesmars"
+ },
+ "51": {
+ "sizes": {
+ "100": {
+ "h": 61,
+ "w": 100
+ },
+ "400": {
+ "h": 243,
+ "w": 400
+ },
+ "full": {
+ "h": 1819,
+ "w": 2990
+ }
+ },
+ "uploaded_t": 1583112377,
+ "uploader": "ariesmars"
+ },
+ "52": {
+ "sizes": {
+ "100": {
+ "h": 48,
+ "w": 100
+ },
+ "400": {
+ "h": 193,
+ "w": 400
+ },
+ "full": {
+ "h": 1416,
+ "w": 2931
+ }
+ },
+ "uploaded_t": 1583112633,
+ "uploader": "ariesmars"
+ },
+ "53": {
+ "sizes": {
+ "100": {
+ "h": 24,
+ "w": 100
+ },
+ "400": {
+ "h": 95,
+ "w": 400
+ },
+ "full": {
+ "h": 712,
+ "w": 3000
+ }
+ },
+ "uploaded_t": 1617633957,
+ "uploader": "zipotlan"
+ },
+ "54": {
+ "sizes": {
+ "100": {
+ "h": 24,
+ "w": 100
+ },
+ "400": {
+ "h": 98,
+ "w": 400
+ },
+ "full": {
+ "h": 732,
+ "w": 3000
+ }
+ },
+ "uploaded_t": 1617633988,
+ "uploader": "zipotlan"
+ },
+ "55": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 4032,
+ "w": 3024
+ }
+ },
+ "uploaded_t": 1626892432,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "59": {
+ "sizes": {
+ "100": {
+ "h": 64,
+ "w": 100
+ },
+ "400": {
+ "h": 255,
+ "w": 400
+ },
+ "full": {
+ "h": 1669,
+ "w": 2613
+ }
+ },
+ "uploaded_t": 1648669287,
+ "uploader": "franzmari"
+ },
+ "60": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 93
+ },
+ "400": {
+ "h": 400,
+ "w": 374
+ },
+ "full": {
+ "h": 2410,
+ "w": 2253
+ }
+ },
+ "uploaded_t": 1648669336,
+ "uploader": "franzmari"
+ },
+ "61": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 44
+ },
+ "400": {
+ "h": 400,
+ "w": 178
+ },
+ "full": {
+ "h": 4570,
+ "w": 2033
+ }
+ },
+ "uploaded_t": 1648669403,
+ "uploader": "franzmari"
+ },
+ "63": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 47
+ },
+ "400": {
+ "h": 400,
+ "w": 189
+ },
+ "full": {
+ "h": 2930,
+ "w": 1385
+ }
+ },
+ "uploaded_t": 1662008284,
+ "uploader": "maciej-lawniczak"
+ },
+ "64": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 48
+ },
+ "400": {
+ "h": 400,
+ "w": 192
+ },
+ "full": {
+ "h": 3030,
+ "w": 1456
+ }
+ },
+ "uploaded_t": 1662008321,
+ "uploader": "maciej-lawniczak"
+ },
+ "65": {
+ "sizes": {
+ "100": {
+ "h": 54,
+ "w": 100
+ },
+ "400": {
+ "h": 217,
+ "w": 400
+ },
+ "full": {
+ "h": 861,
+ "w": 1586
+ }
+ },
+ "uploaded_t": 1662008384,
+ "uploader": "maciej-lawniczak"
+ },
+ "66": {
+ "sizes": {
+ "100": {
+ "h": 62,
+ "w": 100
+ },
+ "400": {
+ "h": 248,
+ "w": 400
+ },
+ "full": {
+ "h": 833,
+ "w": 1345
+ }
+ },
+ "uploaded_t": 1662008410,
+ "uploader": "maciej-lawniczak"
+ },
+ "67": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 47
+ },
+ "400": {
+ "h": 400,
+ "w": 189
+ },
+ "full": {
+ "h": 2958,
+ "w": 1399
+ }
+ },
+ "uploaded_t": 1664622753,
+ "uploader": "maciej-lawniczak"
+ },
+ "68": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 48
+ },
+ "400": {
+ "h": 400,
+ "w": 192
+ },
+ "full": {
+ "h": 2949,
+ "w": 1418
+ }
+ },
+ "uploaded_t": 1664622771,
+ "uploader": "maciej-lawniczak"
+ },
+ "69": {
+ "sizes": {
+ "100": {
+ "h": 55,
+ "w": 100
+ },
+ "400": {
+ "h": 222,
+ "w": 400
+ },
+ "full": {
+ "h": 927,
+ "w": 1674
+ }
+ },
+ "uploaded_t": 1664622792,
+ "uploader": "maciej-lawniczak"
+ },
+ "7": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 74
+ },
+ "400": {
+ "h": 400,
+ "w": 297
+ },
+ "full": {
+ "h": 4208,
+ "w": 3120
+ }
+ },
+ "uploaded_t": 1427532506,
+ "uploader": "kyzh"
+ },
+ "70": {
+ "sizes": {
+ "100": {
+ "h": 63,
+ "w": 100
+ },
+ "400": {
+ "h": 254,
+ "w": 400
+ },
+ "full": {
+ "h": 833,
+ "w": 1314
+ }
+ },
+ "uploaded_t": 1664622818,
+ "uploader": "maciej-lawniczak"
+ },
+ "71": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 49
+ },
+ "400": {
+ "h": 400,
+ "w": 195
+ },
+ "full": {
+ "h": 3471,
+ "w": 1694
+ }
+ },
+ "uploaded_t": 1679079945,
+ "uploader": "mvainola"
+ },
+ "72": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 51
+ },
+ "400": {
+ "h": 400,
+ "w": 205
+ },
+ "full": {
+ "h": 3554,
+ "w": 1820
+ }
+ },
+ "uploaded_t": 1679079978,
+ "uploader": "mvainola"
+ },
+ "73": {
+ "sizes": {
+ "100": {
+ "h": 50,
+ "w": 100
+ },
+ "400": {
+ "h": 201,
+ "w": 400
+ },
+ "full": {
+ "h": 1768,
+ "w": 3519
+ }
+ },
+ "uploaded_t": 1679080032,
+ "uploader": "mvainola"
+ },
+ "74": {
+ "sizes": {
+ "100": {
+ "h": 70,
+ "w": 100
+ },
+ "400": {
+ "h": 279,
+ "w": 400
+ },
+ "full": {
+ "h": 449,
+ "w": 644
+ }
+ },
+ "uploaded_t": 1681720438,
+ "uploader": "marmotte73"
+ },
+ "75": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 45
+ },
+ "400": {
+ "h": 400,
+ "w": 180
+ },
+ "full": {
+ "h": 4000,
+ "w": 1800
+ }
+ },
+ "uploaded_t": 1688673704,
+ "uploader": "smoothie-app"
+ },
+ "76": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "400": {
+ "h": 400,
+ "w": 185
+ },
+ "full": {
+ "h": 4032,
+ "w": 1860
+ }
+ },
+ "uploaded_t": 1688739620,
+ "uploader": "smoothie-app"
+ },
+ "77": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "400": {
+ "h": 400,
+ "w": 186
+ },
+ "full": {
+ "h": 3676,
+ "w": 1707
+ }
+ },
+ "uploaded_t": 1693734943,
+ "uploader": "jo23"
+ },
+ "78": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 56
+ },
+ "400": {
+ "h": 400,
+ "w": 225
+ },
+ "full": {
+ "h": 1280,
+ "w": 720
+ }
+ },
+ "uploaded_t": 1701556368,
+ "uploader": "insectproductadd"
+ },
+ "8": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 2666,
+ "w": 2000
+ }
+ },
+ "uploaded_t": "1454325440",
+ "uploader": "openfoodfacts-contributors"
+ },
+ "80": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 48
+ },
+ "400": {
+ "h": 400,
+ "w": 193
+ },
+ "full": {
+ "h": 3445,
+ "w": 1665
+ }
+ },
+ "uploaded_t": 1705825780,
+ "uploader": "predatorix"
+ },
+ "81": {
+ "sizes": {
+ "100": {
+ "h": 46,
+ "w": 100
+ },
+ "400": {
+ "h": 183,
+ "w": 400
+ },
+ "full": {
+ "h": 624,
+ "w": 1366
+ }
+ },
+ "uploaded_t": 1705825799,
+ "uploader": "predatorix"
+ },
+ "82": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 89
+ },
+ "400": {
+ "h": 400,
+ "w": 354
+ },
+ "full": {
+ "h": 1362,
+ "w": 1207
+ }
+ },
+ "uploaded_t": 1705825824,
+ "uploader": "predatorix"
+ },
+ "83": {
+ "sizes": {
+ "100": {
+ "h": 87,
+ "w": 100
+ },
+ "400": {
+ "h": 349,
+ "w": 400
+ },
+ "full": {
+ "h": 532,
+ "w": 609
+ }
+ },
+ "uploaded_t": 1705825841,
+ "uploader": "predatorix"
+ },
+ "84": {
+ "sizes": {
+ "100": {
+ "h": 39,
+ "w": 100
+ },
+ "400": {
+ "h": 157,
+ "w": 400
+ },
+ "full": {
+ "h": 841,
+ "w": 2139
+ }
+ },
+ "uploaded_t": 1709963477,
+ "uploader": "skuma"
+ },
+ "85": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 45
+ },
+ "400": {
+ "h": 400,
+ "w": 180
+ },
+ "full": {
+ "h": 3264,
+ "w": 1469
+ }
+ },
+ "uploaded_t": 1709964815,
+ "uploader": "skuma"
+ },
+ "86": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 1698,
+ "w": 1275
+ }
+ },
+ "uploaded_t": 1721385689,
+ "uploader": "macrofactor"
+ },
+ "87": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 1698,
+ "w": 1275
+ }
+ },
+ "uploaded_t": 1721385701,
+ "uploader": "macrofactor"
+ },
+ "88": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 54
+ },
+ "400": {
+ "h": 400,
+ "w": 214
+ },
+ "full": {
+ "h": 4000,
+ "w": 2144
+ }
+ },
+ "uploaded_t": "1728562867",
+ "uploader": "foodless"
+ },
+ "89": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 3264,
+ "w": 2448
+ }
+ },
+ "uploaded_t": 1731824313,
+ "uploader": "fms08"
+ },
+ "9": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 2666,
+ "w": 2000
+ }
+ },
+ "uploaded_t": "1454325449",
+ "uploader": "openfoodfacts-contributors"
+ },
+ "90": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 75
+ },
+ "400": {
+ "h": 400,
+ "w": 300
+ },
+ "full": {
+ "h": 3264,
+ "w": 2448
+ }
+ },
+ "uploaded_t": 1731824347,
+ "uploader": "fms08"
+ },
+ "91": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 50
+ },
+ "400": {
+ "h": 400,
+ "w": 201
+ },
+ "full": {
+ "h": 752,
+ "w": 378
+ }
+ },
+ "uploaded_t": 1733486007,
+ "uploader": "openfoodfacts-contributors"
+ },
+ "92": {
+ "sizes": {
+ "100": {
+ "h": 53,
+ "w": 100
+ },
+ "400": {
+ "h": 213,
+ "w": 400
+ },
+ "full": {
+ "h": 1549,
+ "w": 2911
+ }
+ },
+ "uploaded_t": 1734557465,
+ "uploader": "oliwua"
+ },
+ "93": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 45
+ },
+ "400": {
+ "h": 400,
+ "w": 179
+ },
+ "full": {
+ "h": 3702,
+ "w": 1654
+ }
+ },
+ "uploaded_t": 1746370933,
+ "uploader": "jimmix"
+ },
+ "94": {
+ "sizes": {
+ "100": {
+ "h": 46,
+ "w": 100
+ },
+ "400": {
+ "h": 183,
+ "w": 400
+ },
+ "full": {
+ "h": 1184,
+ "w": 2590
+ }
+ },
+ "uploaded_t": 1746370959,
+ "uploader": "jimmix"
+ },
+ "95": {
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 90
+ },
+ "400": {
+ "h": 400,
+ "w": 359
+ },
+ "full": {
+ "h": 1910,
+ "w": 1712
+ }
+ },
+ "uploaded_t": 1746370980,
+ "uploader": "jimmix"
+ },
+ "96": {
+ "sizes": {
+ "100": {
+ "h": 42,
+ "w": 100
+ },
+ "400": {
+ "h": 170,
+ "w": 400
+ },
+ "full": {
+ "h": 983,
+ "w": 2316
+ }
+ },
+ "uploaded_t": 1746371003,
+ "uploader": "jimmix"
+ },
+ "97": {
+ "sizes": {
+ "100": {
+ "h": 54,
+ "w": 100
+ },
+ "400": {
+ "h": 218,
+ "w": 400
+ },
+ "full": {
+ "h": 1647,
+ "w": 3024
+ }
+ },
+ "uploaded_t": 1752154542,
+ "uploader": "ompopo"
+ },
+ "98": {
+ "sizes": {
+ "100": {
+ "h": 53,
+ "w": 100
+ },
+ "400": {
+ "h": 212,
+ "w": 400
+ },
+ "full": {
+ "h": 1427,
+ "w": 2692
+ }
+ },
+ "uploaded_t": 1752154560,
+ "uploader": "ompopo"
+ },
+ "99": {
+ "sizes": {
+ "100": {
+ "h": 80,
+ "w": 100
+ },
+ "400": {
+ "h": 321,
+ "w": 400
+ },
+ "full": {
+ "h": 597,
+ "w": 743
+ }
+ },
+ "uploaded_t": 1752154576,
+ "uploader": "ompopo"
+ },
+ "front_de": {
+ "imgid": 109,
+ "rev": 517,
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "200": {
+ "h": 200,
+ "w": 92
+ },
+ "400": {
+ "h": 400,
+ "w": 184
+ },
+ "full": {
+ "h": 3655,
+ "w": 1681
+ }
+ }
+ },
+ "front_en": {
+ "imgid": 112,
+ "rev": 544,
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 51
+ },
+ "200": {
+ "h": 200,
+ "w": 101
+ },
+ "400": {
+ "h": 400,
+ "w": 203
+ },
+ "full": {
+ "h": 1389,
+ "w": 704
+ }
+ }
+ },
+ "front_es": {
+ "imgid": "91",
+ "rev": "401",
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 47
+ },
+ "200": {
+ "h": 200,
+ "w": 93
+ },
+ "400": {
+ "h": 400,
+ "w": 187
+ },
+ "full": {
+ "h": 720,
+ "w": 336
+ }
+ }
+ },
+ "front_fi": {
+ "coordinates_image_size": "full",
+ "imgid": "91",
+ "rev": "445",
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 47
+ },
+ "200": {
+ "h": 200,
+ "w": 93
+ },
+ "400": {
+ "h": 400,
+ "w": 187
+ },
+ "full": {
+ "h": 720,
+ "w": 336
+ }
+ },
+ "x1": -1,
+ "x2": 378,
+ "y1": -1,
+ "y2": 752
+ },
+ "front_it": {
+ "imgid": "93",
+ "rev": "417",
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 45
+ },
+ "200": {
+ "h": 200,
+ "w": 89
+ },
+ "400": {
+ "h": 400,
+ "w": 179
+ },
+ "full": {
+ "h": 3702,
+ "w": 1654
+ }
+ }
+ },
+ "front_nb": {
+ "coordinates_image_size": "full",
+ "imgid": "91",
+ "rev": "437",
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 47
+ },
+ "200": {
+ "h": 200,
+ "w": 93
+ },
+ "400": {
+ "h": 400,
+ "w": 187
+ },
+ "full": {
+ "h": 720,
+ "w": 336
+ }
+ },
+ "x1": -1,
+ "x2": 378,
+ "y1": -1,
+ "y2": 752
+ },
+ "ingredients_de": {
+ "imgid": "81",
+ "rev": "343",
+ "sizes": {
+ "100": {
+ "h": 46,
+ "w": 100
+ },
+ "200": {
+ "h": 91,
+ "w": 200
+ },
+ "400": {
+ "h": 183,
+ "w": 400
+ },
+ "full": {
+ "h": 624,
+ "w": 1366
+ }
+ }
+ },
+ "ingredients_en": {
+ "coordinates_image_size": "full",
+ "imgid": 68,
+ "normalize": "true",
+ "rev": 529,
+ "sizes": {
+ "100": {
+ "h": 35,
+ "w": 100
+ },
+ "200": {
+ "h": 71,
+ "w": 200
+ },
+ "400": {
+ "h": 142,
+ "w": 400
+ },
+ "full": {
+ "h": 197,
+ "w": 556
+ }
+ },
+ "x1": 89,
+ "x2": 645,
+ "y1": 412,
+ "y2": 609
+ },
+ "ingredients_es": {
+ "imgid": "54",
+ "rev": "229",
+ "sizes": {
+ "100": {
+ "h": 24,
+ "w": 100
+ },
+ "200": {
+ "h": 49,
+ "w": 200
+ },
+ "400": {
+ "h": 98,
+ "w": 400
+ },
+ "full": {
+ "h": 732,
+ "w": 3000
+ }
+ }
+ },
+ "ingredients_fi": {
+ "coordinates_image_size": "400",
+ "imgid": "48",
+ "rev": "169",
+ "sizes": {
+ "100": {
+ "h": 51,
+ "w": 100
+ },
+ "200": {
+ "h": 102,
+ "w": 200
+ },
+ "400": {
+ "h": 203,
+ "w": 400
+ },
+ "full": {
+ "h": 527,
+ "w": 1038
+ }
+ },
+ "x1": 4,
+ "x2": 95,
+ "y1": 106,
+ "y2": 153
+ },
+ "ingredients_fr": {
+ "imgid": 110,
+ "rev": 523,
+ "sizes": {
+ "100": {
+ "h": 54,
+ "w": 100
+ },
+ "200": {
+ "h": 107,
+ "w": 200
+ },
+ "400": {
+ "h": 215,
+ "w": 400
+ },
+ "full": {
+ "h": 1589,
+ "w": 2958
+ }
+ }
+ },
+ "ingredients_it": {
+ "imgid": "94",
+ "rev": "419",
+ "sizes": {
+ "100": {
+ "h": 46,
+ "w": 100
+ },
+ "200": {
+ "h": 91,
+ "w": 200
+ },
+ "400": {
+ "h": 183,
+ "w": 400
+ },
+ "full": {
+ "h": 1184,
+ "w": 2590
+ }
+ }
+ },
+ "ingredients_ja": {
+ "coordinates_image_size": "full",
+ "imgid": 108,
+ "rev": 500,
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 78
+ },
+ "200": {
+ "h": 200,
+ "w": 155
+ },
+ "400": {
+ "h": 400,
+ "w": 310
+ },
+ "full": {
+ "h": 1794,
+ "w": 1391
+ }
+ },
+ "x1": -1,
+ "x2": 1391,
+ "y1": -1,
+ "y2": 1794
+ },
+ "ingredients_nb": {
+ "imgid": "98",
+ "rev": "443",
+ "sizes": {
+ "100": {
+ "h": 53,
+ "w": 100
+ },
+ "200": {
+ "h": 106,
+ "w": 200
+ },
+ "400": {
+ "h": 212,
+ "w": 400
+ },
+ "full": {
+ "h": 1427,
+ "w": 2692
+ }
+ }
+ },
+ "ingredients_pl": {
+ "imgid": "92",
+ "rev": "400",
+ "sizes": {
+ "100": {
+ "h": 53,
+ "w": 100
+ },
+ "200": {
+ "h": 106,
+ "w": 200
+ },
+ "400": {
+ "h": 213,
+ "w": 400
+ },
+ "full": {
+ "h": 1549,
+ "w": 2911
+ }
+ }
+ },
+ "ingredients_sv": {
+ "coordinates_image_size": "400",
+ "imgid": "51",
+ "rev": "197",
+ "sizes": {
+ "100": {
+ "h": 53,
+ "w": 100
+ },
+ "200": {
+ "h": 106,
+ "w": 200
+ },
+ "400": {
+ "h": 212,
+ "w": 400
+ },
+ "full": {
+ "h": 775,
+ "w": 1464
+ }
+ },
+ "x1": 1454,
+ "x2": 2918,
+ "y1": 39,
+ "y2": 814
+ },
+ "nutrition_de": {
+ "imgid": "82",
+ "rev": "345",
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 89
+ },
+ "200": {
+ "h": 200,
+ "w": 177
+ },
+ "400": {
+ "h": 400,
+ "w": 354
+ },
+ "full": {
+ "h": 1362,
+ "w": 1207
+ }
+ }
+ },
+ "nutrition_en": {
+ "imgid": 113,
+ "rev": 546,
+ "sizes": {
+ "100": {
+ "h": 64,
+ "w": 100
+ },
+ "200": {
+ "h": 128,
+ "w": 200
+ },
+ "400": {
+ "h": 256,
+ "w": 400
+ },
+ "full": {
+ "h": 753,
+ "w": 1176
+ }
+ }
+ },
+ "nutrition_es": {
+ "imgid": "52",
+ "rev": "180",
+ "sizes": {
+ "100": {
+ "h": 48,
+ "w": 100
+ },
+ "200": {
+ "h": 97,
+ "w": 200
+ },
+ "400": {
+ "h": 193,
+ "w": 400
+ },
+ "full": {
+ "h": 1416,
+ "w": 2931
+ }
+ }
+ },
+ "nutrition_fi": {
+ "coordinates_image_size": "full",
+ "imgid": "97",
+ "rev": "446",
+ "sizes": {
+ "100": {
+ "h": 54,
+ "w": 100
+ },
+ "200": {
+ "h": 109,
+ "w": 200
+ },
+ "400": {
+ "h": 218,
+ "w": 400
+ },
+ "full": {
+ "h": 1647,
+ "w": 3024
+ }
+ },
+ "x1": -1,
+ "x2": 3024,
+ "y1": -1,
+ "y2": 1647
+ },
+ "nutrition_fr": {
+ "imgid": "101",
+ "rev": "462",
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 46
+ },
+ "200": {
+ "h": 200,
+ "w": 93
+ },
+ "400": {
+ "h": 400,
+ "w": 185
+ },
+ "full": {
+ "h": 1280,
+ "w": 592
+ }
+ }
+ },
+ "nutrition_it": {
+ "imgid": "95",
+ "rev": "421",
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 90
+ },
+ "200": {
+ "h": 200,
+ "w": 179
+ },
+ "400": {
+ "h": 400,
+ "w": 359
+ },
+ "full": {
+ "h": 1910,
+ "w": 1712
+ }
+ }
+ },
+ "nutrition_ja": {
+ "imgid": 108,
+ "rev": 499,
+ "sizes": {
+ "100": {
+ "h": 100,
+ "w": 78
+ },
+ "200": {
+ "h": 200,
+ "w": 155
+ },
+ "400": {
+ "h": 400,
+ "w": 310
+ },
+ "full": {
+ "h": 1794,
+ "w": 1391
+ }
+ }
+ },
+ "nutrition_nb": {
+ "imgid": "97",
+ "rev": "441",
+ "sizes": {
+ "100": {
+ "h": 54,
+ "w": 100
+ },
+ "200": {
+ "h": 109,
+ "w": 200
+ },
+ "400": {
+ "h": 218,
+ "w": 400
+ },
+ "full": {
+ "h": 1647,
+ "w": 3024
+ }
+ }
+ },
+ "nutrition_sv": {
+ "imgid": "52",
+ "rev": "201",
+ "sizes": {
+ "100": {
+ "h": 48,
+ "w": 100
+ },
+ "200": {
+ "h": 97,
+ "w": 200
+ },
+ "400": {
+ "h": 193,
+ "w": 400
+ },
+ "full": {
+ "h": 1416,
+ "w": 2931
+ }
+ }
+ },
+ "packaging_de": {
+ "imgid": "83",
+ "rev": "347",
+ "sizes": {
+ "100": {
+ "h": 87,
+ "w": 100
+ },
+ "200": {
+ "h": 175,
+ "w": 200
+ },
+ "400": {
+ "h": 349,
+ "w": 400
+ },
+ "full": {
+ "h": 532,
+ "w": 609
+ }
+ }
+ },
+ "packaging_en": {
+ "coordinates_image_size": "full",
+ "imgid": "83",
+ "normalize": "true",
+ "rev": 531,
+ "sizes": {
+ "100": {
+ "h": 88,
+ "w": 100
+ },
+ "200": {
+ "h": 177,
+ "w": 200
+ },
+ "400": {
+ "h": 313,
+ "w": 354
+ },
+ "full": {
+ "h": 313,
+ "w": 354
+ }
+ },
+ "white_magic": "true",
+ "x1": 121,
+ "x2": 475,
+ "y1": 97,
+ "y2": 410
+ },
+ "packaging_fi": {
+ "coordinates_image_size": "full",
+ "imgid": "99",
+ "rev": "447",
+ "sizes": {
+ "100": {
+ "h": 80,
+ "w": 100
+ },
+ "200": {
+ "h": 161,
+ "w": 200
+ },
+ "400": {
+ "h": 321,
+ "w": 400
+ },
+ "full": {
+ "h": 597,
+ "w": 743
+ }
+ },
+ "x1": -1,
+ "x2": 743,
+ "y1": -1,
+ "y2": 597
+ },
+ "packaging_fr": {
+ "coordinates_image_size": "full",
+ "imgid": "74",
+ "rev": "379",
+ "sizes": {
+ "100": {
+ "h": 41,
+ "w": 100
+ },
+ "200": {
+ "h": 83,
+ "w": 200
+ },
+ "400": {
+ "h": 143,
+ "w": 346
+ },
+ "full": {
+ "h": 143,
+ "w": 346
+ }
+ },
+ "x1": 74,
+ "x2": 420,
+ "y1": 85,
+ "y2": 228
+ },
+ "packaging_it": {
+ "imgid": "96",
+ "rev": "423",
+ "sizes": {
+ "100": {
+ "h": 42,
+ "w": 100
+ },
+ "200": {
+ "h": 85,
+ "w": 200
+ },
+ "400": {
+ "h": 170,
+ "w": 400
+ },
+ "full": {
+ "h": 983,
+ "w": 2316
+ }
+ }
+ }
+ },
+ "informers": [],
+ "informers_tags": [
+ "openfoodfacts-contributors",
+ "javichu",
+ "tacite",
+ "standardanalysis",
+ "kiliweb",
+ "solveig-yuka",
+ "yuka.U2F3TFNaUXFyOHNLc01JUDNULzYzOXhiK2JINUJYKytMTklOSWc9PQ",
+ "yukafix",
+ "fgouget",
+ "foodrepo",
+ "marmotte73",
+ "tylili23",
+ "vaiton",
+ "zixianglim",
+ "jumati",
+ "ariesmars",
+ "dahlqvist",
+ "nur",
+ "thaialagata",
+ "inf",
+ "tolgato",
+ "franzmari",
+ "quentinbrd",
+ "taiko",
+ "angelbcn",
+ "kjr",
+ "predatorix",
+ "macrofactor",
+ "chevalstar",
+ "alia",
+ "fms08",
+ "moon-rabbit",
+ "oliwua",
+ "doodledoo",
+ "jimmix",
+ "ompopo",
+ "boterman76",
+ "municorn-calorie-counter-app",
+ "andrey-arhangel",
+ "thejerem76",
+ "graistergarden",
+ "foodless",
+ "odinh"
+ ],
+ "ingredients": [
+ {
+ "ciqual_proxy_food_code": "16030",
+ "id": "en:cocoa-paste",
+ "is_in_taxonomy": 1,
+ "percent_estimate": 62.5,
+ "percent_max": 100,
+ "percent_min": 25,
+ "text": "Cocoa mass",
+ "vegan": "yes",
+ "vegetarian": "yes"
+ },
+ {
+ "ciqual_food_code": "16030",
+ "id": "en:cocoa-butter",
+ "is_in_taxonomy": 1,
+ "percent_estimate": 18.75,
+ "percent_max": 50,
+ "percent_min": 0,
+ "text": "cocoa butter",
+ "vegan": "yes",
+ "vegetarian": "yes"
+ },
+ {
+ "ciqual_food_code": "18100",
+ "id": "en:fat-reduced-cocoa-powder",
+ "is_in_taxonomy": 1,
+ "percent_estimate": 9.375,
+ "percent_max": 33.3333333333333,
+ "percent_min": 0,
+ "text": "low fat cocoa powder",
+ "vegan": "yes",
+ "vegetarian": "yes"
+ },
+ {
+ "ciqual_proxy_food_code": "31016",
+ "ecobalyse_code": "8f075c25-9ebf-430c-b41d-51d165c6e0d8",
+ "id": "en:sugar",
+ "is_in_taxonomy": 1,
+ "percent_estimate": 9.375,
+ "percent_max": 4,
+ "percent_min": 0,
+ "text": "sugar",
+ "vegan": "maybe",
+ "vegetarian": "yes"
+ }
+ ],
+ "ingredients_analysis": {
+ "en:maybe-vegan": [
+ "en:sugar"
+ ]
+ },
+ "ingredients_analysis_tags": [
+ "en:palm-oil-free",
+ "en:maybe-vegan",
+ "en:vegetarian"
+ ],
+ "ingredients_debug": [
+ "Pâte de cacao",
+ ",",
+ null,
+ null,
+ null,
+ " beurre de cacao",
+ ",",
+ null,
+ null,
+ null,
+ " cacao maige",
+ ",",
+ null,
+ null,
+ null,
+ " sucre",
+ ",",
+ null,
+ null,
+ null,
+ " vanille",
+ ". ",
+ null,
+ null,
+ null,
+ "Cacao",
+ ":",
+ ":",
+ null,
+ null,
+ " 90% minimum."
+ ],
+ "ingredients_from_or_that_may_be_from_palm_oil_n": 0,
+ "ingredients_from_palm_oil_n": 0,
+ "ingredients_from_palm_oil_tags": [],
+ "ingredients_hierarchy": [
+ "en:cocoa-paste",
+ "en:plant",
+ "en:cocoa",
+ "en:cocoa-butter",
+ "en:fat-reduced-cocoa-powder",
+ "en:cocoa-powder",
+ "en:sugar",
+ "en:added-sugar",
+ "en:disaccharide"
+ ],
+ "ingredients_ids_debug": [
+ "pate-de-cacao",
+ "beurre-de-cacao",
+ "cacao-maige",
+ "sucre",
+ "vanille",
+ "cacao",
+ "90-minimum"
+ ],
+ "ingredients_lc": "en",
+ "ingredients_n": 4,
+ "ingredients_n_tags": [
+ "4",
+ "1-10"
+ ],
+ "ingredients_non_nutritive_sweeteners_n": 0,
+ "ingredients_original_tags": [
+ "en:cocoa-paste",
+ "en:cocoa-butter",
+ "en:fat-reduced-cocoa-powder",
+ "en:sugar"
+ ],
+ "ingredients_percent_analysis": 1,
+ "ingredients_sweeteners_n": 0,
+ "ingredients_tags": [
+ "en:cocoa-paste",
+ "en:plant",
+ "en:cocoa",
+ "en:cocoa-butter",
+ "en:fat-reduced-cocoa-powder",
+ "en:cocoa-powder",
+ "en:sugar",
+ "en:added-sugar",
+ "en:disaccharide"
+ ],
+ "ingredients_text": "Cocoa mass, cocoa butter, low fat cocoa powder, sugar. May contain hazelnuts,",
+ "ingredients_text_de": "Kakaomasse, Kakaobutter, fettarmes Kakaopulver, Zucker",
+ "ingredients_text_debug": "Pâte de cacao, beurre de cacao, cacao maige, sucre, vanille. Cacao: 90% minimum.",
+ "ingredients_text_en": "Cocoa mass, cocoa butter, low fat cocoa powder, sugar. May contain hazelnuts,",
+ "ingredients_text_es": "Pasta de cacao, manteca de cacao, cacao magro en polvo, azúcar, vainilla.",
+ "ingredients_text_fi": "kaakaomassa, kaakaovoi, vähärasvainen kaakaojauhe, sokeri, vanilja. Saattaa sisältää hasselpähkinää, muita pähkinöitä, maitoa, soijaa. Tummassa suklaassa kaakaota vähintään 90%.",
+ "ingredients_text_fr": "Pâte de cacao, beurre de cacao, cacao maigre, sucre, vanille.",
+ "ingredients_text_it": "Pasta di cacao, burro di cacao, cacao magro in polvere, zucchero. Può contenere nocciole, mandorle, altra frutta a guscio, latte, soia.",
+ "ingredients_text_ja": "",
+ "ingredients_text_nb": "",
+ "ingredients_text_nl": "Cacaomassa, cacaoboter, magere cacaopoeder, suiker.",
+ "ingredients_text_pl": "",
+ "ingredients_text_sv": "kakaomassa, kakaosmör, fettreducerat kakaopulver, socker, vanilj.",
+ "ingredients_text_with_allergens": "Cocoa mass, cocoa butter, low fat cocoa powder, sugar. May contain hazelnuts,",
+ "ingredients_text_with_allergens_de": "Kakaomasse, Kakaobutter, fettarmes Kakaopulver, Zucker",
+ "ingredients_text_with_allergens_en": "Cocoa mass, cocoa butter, low fat cocoa powder, sugar. May contain hazelnuts,",
+ "ingredients_text_with_allergens_es": "Pasta de cacao, manteca de cacao, cacao magro en polvo, azúcar, vainilla.",
+ "ingredients_text_with_allergens_fi": "kaakaomassa, kaakaovoi, vähärasvainen kaakaojauhe, sokeri, vanilja. Saattaa sisältää hasselpähkinää, muita pähkinöitä, maitoa, soijaa. Tummassa suklaassa kaakaota vähintään 90%.",
+ "ingredients_text_with_allergens_fr": "Pâte de cacao, beurre de cacao, cacao maigre, sucre, vanille.",
+ "ingredients_text_with_allergens_it": "Pasta di cacao, burro di cacao, cacao magro in polvere, zucchero. Può contenere nocciole, mandorle, altra frutta a guscio, latte, soia.",
+ "ingredients_text_with_allergens_ja": "",
+ "ingredients_text_with_allergens_nb": "",
+ "ingredients_text_with_allergens_nl": "Cacaomassa, cacaoboter, magere cacaopoeder, suiker.",
+ "ingredients_text_with_allergens_pl": "",
+ "ingredients_text_with_allergens_sv": "kakaomassa, kakaosmör, fettreducerat kakaopulver, socker, vanilj.",
+ "ingredients_that_may_be_from_palm_oil_n": 0,
+ "ingredients_that_may_be_from_palm_oil_tags": [],
+ "ingredients_with_specified_percent_n": 0,
+ "ingredients_with_specified_percent_sum": 0,
+ "ingredients_with_unspecified_percent_n": 4,
+ "ingredients_with_unspecified_percent_sum": 100.0,
+ "ingredients_without_ciqual_codes": [],
+ "ingredients_without_ciqual_codes_n": 0,
+ "ingredients_without_ecobalyse_ids": [
+ "en:cocoa-butter",
+ "en:cocoa-paste",
+ "en:fat-reduced-cocoa-powder"
+ ],
+ "ingredients_without_ecobalyse_ids_n": 3,
+ "interface_version_created": "20120622",
+ "interface_version_modified": "20150316.jqm2",
+ "known_ingredients_n": 4,
+ "labels": "Green Dot, Triman",
+ "labels_hierarchy": [
+ "en:green-dot",
+ "fr:triman"
+ ],
+ "labels_lc": "en",
+ "labels_tags": [
+ "en:green-dot",
+ "fr:triman"
+ ],
+ "lang": "en",
+ "languages": {
+ "en:bokmal": 3,
+ "en:dutch": 1,
+ "en:english": 7,
+ "en:finnish": 7,
+ "en:french": 7,
+ "en:german": 7,
+ "en:italian": 8,
+ "en:japanese": 2,
+ "en:polish": 1,
+ "en:spanish": 6,
+ "en:swedish": 5
+ },
+ "languages_codes": {
+ "de": 7,
+ "en": 7,
+ "es": 6,
+ "fi": 7,
+ "fr": 7,
+ "it": 8,
+ "ja": 2,
+ "nb": 3,
+ "nl": 1,
+ "pl": 1,
+ "sv": 5
+ },
+ "languages_hierarchy": [
+ "en:bokmal",
+ "en:dutch",
+ "en:english",
+ "en:finnish",
+ "en:french",
+ "en:german",
+ "en:italian",
+ "en:japanese",
+ "en:polish",
+ "en:spanish",
+ "en:swedish"
+ ],
+ "languages_tags": [
+ "en:bokmal",
+ "en:dutch",
+ "en:english",
+ "en:finnish",
+ "en:french",
+ "en:german",
+ "en:italian",
+ "en:japanese",
+ "en:polish",
+ "en:spanish",
+ "en:swedish",
+ "en:11",
+ "en:multilingual"
+ ],
+ "last_edit_dates_tags": [
+ "2026-05-02",
+ "2026-05",
+ "2026"
+ ],
+ "last_editor": "macrofactor",
+ "last_image_dates_tags": [
+ "2026-05-02",
+ "2026-05",
+ "2026"
+ ],
+ "last_image_t": 1777741927,
+ "last_modified_by": "macrofactor",
+ "last_modified_t": 1777741933,
+ "last_updated_t": 1777741933,
+ "lc": "en",
+ "link": "http://www.lindt.es/swf/spa/productos/excellence/altos-porcentajes/excellence-90/www.lindt.com",
+ "main_countries_tags": [],
+ "manufacturing_places": "Aachen",
+ "manufacturing_places_hierarchy": [
+ "Aachen"
+ ],
+ "manufacturing_places_lc": "en",
+ "manufacturing_places_tags": [
+ "Aachen"
+ ],
+ "max_imgid": 113,
+ "minerals_prev_tags": [],
+ "minerals_tags": [],
+ "misc_tags": [
+ "en:environmental-score-changed",
+ "en:environmental-score-computed",
+ "en:environmental-score-missing-data-labels",
+ "en:environmental-score-missing-data-origins",
+ "en:environmental-score-missing-data-warning",
+ "en:nutrients-estimated-from-ingredients",
+ "en:nutriscore-2021-d-2023-d",
+ "en:nutriscore-2021-same-as-2023",
+ "en:nutriscore-computed",
+ "en:nutrition-all-nutriscore-values-known",
+ "en:nutrition-data-per-100g",
+ "en:nutrition-data-per-serving",
+ "en:nutrition-fruits-vegetables-legumes-estimate-from-ingredients",
+ "en:nutrition-fruits-vegetables-nuts-estimate-from-ingredients",
+ "en:packagings-complete",
+ "en:packagings-not-empty",
+ "en:packagings-number-of-components-2",
+ "en:packagings-with-all-weights",
+ "en:packagings-with-all-weights-complete",
+ "en:packagings-with-weights",
+ "en:main-countries-bg-unexpectedly-low-scans",
+ "en:main-countries-bg-unexpectedly-low-scans-10-20-percent-of-expected",
+ "en:main-countries-bg-unexpectedly-low-scans-and-no-data-in-country-language",
+ "en:main-countries-bg-product-name-not-in-country-language",
+ "en:main-countries-bg-ingredients-not-in-country-language",
+ "en:main-countries-bg-no-data-in-country-language",
+ "en:main-countries-ca-unexpectedly-low-scans",
+ "en:main-countries-ca-unexpectedly-low-scans-0-10-percent-of-expected",
+ "en:main-countries-cz-product-name-not-in-country-language",
+ "en:main-countries-cz-ingredients-not-in-country-language",
+ "en:main-countries-cz-no-data-in-country-language",
+ "en:main-countries-mc-unexpectedly-low-scans",
+ "en:main-countries-mc-unexpectedly-low-scans-0-10-percent-of-expected",
+ "en:main-countries-nl-product-name-not-in-country-language",
+ "en:main-countries-nl-only-1-field-in-country-language",
+ "en:main-countries-no-product-name-not-in-country-language",
+ "en:main-countries-no-ingredients-not-in-country-language",
+ "en:main-countries-no-no-data-in-country-language",
+ "en:main-countries-pl-product-name-not-in-country-language",
+ "en:main-countries-pl-ingredients-not-in-country-language",
+ "en:main-countries-pl-no-data-in-country-language",
+ "en:main-countries-pt-product-name-not-in-country-language",
+ "en:main-countries-pt-ingredients-not-in-country-language",
+ "en:main-countries-pt-no-data-in-country-language",
+ "en:main-countries-ro-product-name-not-in-country-language",
+ "en:main-countries-ro-ingredients-not-in-country-language",
+ "en:main-countries-ro-no-data-in-country-language",
+ "en:main-countries-sg-unexpectedly-low-scans",
+ "en:main-countries-sg-unexpectedly-low-scans-0-10-percent-of-expected",
+ "en:main-countries-ch-unexpectedly-low-scans",
+ "en:main-countries-ch-unexpectedly-low-scans-20-30-percent-of-expected",
+ "en:main-countries-tn-product-name-not-in-country-language",
+ "en:main-countries-tn-ingredients-not-in-country-language",
+ "en:main-countries-tn-no-data-in-country-language",
+ "en:main-countries-uk-unexpectedly-low-scans",
+ "en:main-countries-uk-unexpectedly-low-scans-0-10-percent-of-expected"
+ ],
+ "nova_group": 3,
+ "nova_group_debug": "",
+ "nova_groups": "3",
+ "nova_groups_markers": {
+ "3": [
+ [
+ "categories",
+ "en:chocolates"
+ ],
+ [
+ "ingredients",
+ "en:sugar"
+ ],
+ [
+ "categories",
+ "en:sweet-snacks"
+ ]
+ ]
+ },
+ "nova_groups_tags": [
+ "en:3-processed-foods"
+ ],
+ "nucleotides_prev_tags": [],
+ "nucleotides_tags": [],
+ "nutrient_levels": {
+ "fat": "high",
+ "salt": "low",
+ "saturated-fat": "high",
+ "sugars": "low"
+ },
+ "nutrient_levels_tags": [
+ "en:fat-in-high-quantity",
+ "en:saturated-fat-in-high-quantity",
+ "en:sugars-in-low-quantity",
+ "en:salt-in-low-quantity"
+ ],
+ "nutriments": {
+ "added-sugars": 0.4,
+ "added-sugars_100g": 0.4,
+ "added-sugars_serving": 0.04,
+ "added-sugars_unit": "g",
+ "added-sugars_value": 0.4,
+ "caffeine": 0.0051,
+ "caffeine_100g": 0.0051,
+ "caffeine_serving": 0.00051,
+ "caffeine_unit": "g",
+ "caffeine_value": 0.0051,
+ "calcium": 0.004,
+ "calcium_100g": 0.004,
+ "calcium_serving": 0.0004,
+ "calcium_unit": "g",
+ "calcium_value": 0.004,
+ "carbohydrates": 14,
+ "carbohydrates_100g": 14,
+ "carbohydrates_serving": 1.4,
+ "carbohydrates_unit": "g",
+ "carbohydrates_value": 14,
+ "choline": 0,
+ "choline_100g": 0,
+ "choline_serving": 0,
+ "choline_unit": "g",
+ "choline_value": 0,
+ "cocoa": 90,
+ "cocoa_100g": 90,
+ "cocoa_serving": 90,
+ "cocoa_unit": "%",
+ "cocoa_value": 90,
+ "copper": 0.00011,
+ "copper_100g": 0.00011,
+ "copper_serving": 1.1e-05,
+ "copper_unit": "g",
+ "copper_value": 0.00011,
+ "energy": 2443,
+ "energy-kcal": 592,
+ "energy-kcal_100g": 592,
+ "energy-kcal_serving": 59.2,
+ "energy-kcal_unit": "kcal",
+ "energy-kcal_value": 592,
+ "energy-kj": 2443,
+ "energy-kj_100g": 2443,
+ "energy-kj_modifier": "~",
+ "energy-kj_serving": 244,
+ "energy-kj_unit": "kJ",
+ "energy-kj_value": 2443,
+ "energy_100g": 2443,
+ "energy_modifier": "~",
+ "energy_serving": 244,
+ "energy_unit": "kJ",
+ "energy_value": 2443,
+ "fat": 55,
+ "fat_100g": 55,
+ "fat_serving": 5.5,
+ "fat_unit": "g",
+ "fat_value": 55,
+ "fiber": 0,
+ "fiber_100g": 0,
+ "fiber_serving": 0,
+ "fiber_unit": "g",
+ "fiber_value": 0,
+ "fruits-vegetables-legumes-estimate-from-ingredients_100g": 0,
+ "fruits-vegetables-nuts-estimate-from-ingredients_100g": 0,
+ "iron": 0,
+ "iron_100g": 0,
+ "iron_serving": 0,
+ "iron_unit": "g",
+ "iron_value": 0,
+ "magnesium": 0,
+ "magnesium_100g": 0,
+ "magnesium_serving": 0,
+ "magnesium_unit": "g",
+ "magnesium_value": 0,
+ "manganese": 0.00012,
+ "manganese_100g": 0.00012,
+ "manganese_serving": 1.2e-05,
+ "manganese_unit": "g",
+ "manganese_value": 0.00012,
+ "monounsaturated-fat": 1.2,
+ "monounsaturated-fat_100g": 1.2,
+ "monounsaturated-fat_serving": 0.12,
+ "monounsaturated-fat_unit": "g",
+ "monounsaturated-fat_value": 1.2,
+ "nova-group": 3,
+ "nova-group_100g": 3,
+ "nova-group_serving": 3,
+ "nova-group_unit": "",
+ "nova-group_value": 3,
+ "omega-6-fat": 0.1,
+ "omega-6-fat_100g": 0.1,
+ "omega-6-fat_serving": 0.01,
+ "omega-6-fat_unit": "g",
+ "omega-6-fat_value": 0.1,
+ "polyunsaturated-fat": 0.1,
+ "polyunsaturated-fat_100g": 0.1,
+ "polyunsaturated-fat_serving": 0.01,
+ "polyunsaturated-fat_unit": "g",
+ "polyunsaturated-fat_value": 0.1,
+ "potassium": 0.077,
+ "potassium_100g": 0.077,
+ "potassium_serving": 0.0077,
+ "potassium_unit": "g",
+ "potassium_value": 0.077,
+ "proteins": 10,
+ "proteins_100g": 10,
+ "proteins_serving": 1,
+ "proteins_unit": "g",
+ "proteins_value": 10,
+ "salt": 0.03,
+ "salt_100g": 0.03,
+ "salt_serving": 0.003,
+ "salt_unit": "g",
+ "salt_value": 0.03,
+ "saturated-fat": 30,
+ "saturated-fat_100g": 30,
+ "saturated-fat_serving": 3,
+ "saturated-fat_unit": "g",
+ "saturated-fat_value": 30,
+ "selenium": 0,
+ "selenium_100g": 0,
+ "selenium_serving": 0,
+ "selenium_unit": "g",
+ "selenium_value": 0.0,
+ "sodium": 0.012,
+ "sodium_100g": 0.012,
+ "sodium_serving": 0.0012,
+ "sodium_unit": "g",
+ "sodium_value": 0.012,
+ "starch": 0,
+ "starch_100g": 0,
+ "starch_serving": 0,
+ "starch_unit": "g",
+ "starch_value": 0,
+ "sugars": 4,
+ "sugars_100g": 4,
+ "sugars_serving": 0.4,
+ "sugars_unit": "g",
+ "sugars_value": 4,
+ "vitamin-b1": 0,
+ "vitamin-b1_100g": 0,
+ "vitamin-b1_serving": 0,
+ "vitamin-b1_unit": "g",
+ "vitamin-b1_value": 0.0,
+ "vitamin-b2": 1e-05,
+ "vitamin-b2_100g": 1e-05,
+ "vitamin-b2_serving": 1e-06,
+ "vitamin-b2_unit": "g",
+ "vitamin-b2_value": 1e-05,
+ "vitamin-b6": 0,
+ "vitamin-b6_100g": 0,
+ "vitamin-b6_serving": 0,
+ "vitamin-b6_unit": "g",
+ "vitamin-b6_value": 0.0,
+ "vitamin-c": 0,
+ "vitamin-c_100g": 0,
+ "vitamin-c_serving": 0,
+ "vitamin-c_unit": "g",
+ "vitamin-c_value": 0.0,
+ "vitamin-d": 0,
+ "vitamin-d_100g": 0,
+ "vitamin-d_serving": 0,
+ "vitamin-d_unit": "g",
+ "vitamin-d_value": 0.0,
+ "vitamin-e": 0,
+ "vitamin-e_100g": 0,
+ "vitamin-e_serving": 0,
+ "vitamin-e_unit": "g",
+ "vitamin-e_value": 0.0,
+ "vitamin-k": 0,
+ "vitamin-k_100g": 0,
+ "vitamin-k_serving": 0,
+ "vitamin-k_unit": "g",
+ "vitamin-k_value": 0.0,
+ "zinc": 0.0002,
+ "zinc_100g": 0.0002,
+ "zinc_serving": 2e-05,
+ "zinc_unit": "g",
+ "zinc_value": 0.0002
+ },
+ "nutriments_estimated": {
+ "alcohol_100g": 0,
+ "beta-carotene_100g": 2.34375e-07,
+ "cholesterol_100g": 0,
+ "fructose_100g": 0.009375,
+ "galactose_100g": 0,
+ "glucose_100g": 0.009375,
+ "iodine_100g": 9.65625e-07,
+ "lactose_100g": 0.009375,
+ "maltose_100g": 0.009375,
+ "pantothenic-acid_100g": 7.6875e-05,
+ "phosphorus_100g": 0.0646875,
+ "phylloquinone_100g": 3.65625e-07,
+ "polyols_100g": 0.0234375,
+ "sucrose_100g": 9.440625,
+ "vitamin-a_100g": 0,
+ "vitamin-b12_100g": 0,
+ "vitamin-b9_100g": 1.003125e-05,
+ "vitamin-pp_100g": 0.0001078125,
+ "water_100g": 0.3440625
+ },
+ "nutriscore": {
+ "2021": {
+ "category_available": 1,
+ "data": {
+ "energy": 2443,
+ "energy_points": 7,
+ "energy_value": 2443,
+ "fiber": 0,
+ "fiber_points": 0,
+ "fiber_value": 0,
+ "fruits_vegetables_nuts_colza_walnut_olive_oils": 0,
+ "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0,
+ "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 0,
+ "is_beverage": 0,
+ "is_cheese": 0,
+ "is_fat": 0,
+ "is_water": 0,
+ "negative_points": 17,
+ "positive_points": 0,
+ "proteins": 10,
+ "proteins_points": 5,
+ "proteins_value": 10,
+ "saturated_fat": 30,
+ "saturated_fat_points": 10,
+ "saturated_fat_value": 30,
+ "sodium": 12,
+ "sodium_points": 0,
+ "sodium_value": 12,
+ "sugars": 4,
+ "sugars_points": 0,
+ "sugars_value": 4
+ },
+ "estimated": 0,
+ "grade": "d",
+ "nutrients_available": 1,
+ "nutriscore_applicable": 1,
+ "nutriscore_computed": 1,
+ "preparation": "as_sold",
+ "score": 17
+ },
+ "2023": {
+ "category_available": 1,
+ "data": {
+ "components": {
+ "negative": [
+ {
+ "id": "energy",
+ "points": 7,
+ "points_max": 10,
+ "unit": "kJ",
+ "value": 2443
+ },
+ {
+ "id": "sugars",
+ "points": 1,
+ "points_max": 15,
+ "unit": "g",
+ "value": 4
+ },
+ {
+ "id": "saturated_fat",
+ "points": 10,
+ "points_max": 10,
+ "unit": "g",
+ "value": 30
+ },
+ {
+ "id": "salt",
+ "points": 0,
+ "points_max": 20,
+ "unit": "g",
+ "value": 0.03
+ }
+ ],
+ "positive": [
+ {
+ "id": "fiber",
+ "points": 0,
+ "points_max": 5,
+ "unit": "g",
+ "value": 0
+ },
+ {
+ "id": "fruits_vegetables_legumes",
+ "points": 0,
+ "points_max": 5,
+ "unit": "%",
+ "value": 0
+ }
+ ]
+ },
+ "count_proteins": 0,
+ "count_proteins_reason": "negative_points_greater_than_or_equal_to_11",
+ "is_beverage": 0,
+ "is_cheese": 0,
+ "is_fat_oil_nuts_seeds": 0,
+ "is_red_meat_product": 0,
+ "is_water": 0,
+ "negative_points": 18,
+ "negative_points_max": 55,
+ "positive_nutrients": [
+ "fiber",
+ "fruits_vegetables_legumes"
+ ],
+ "positive_points": 0,
+ "positive_points_max": 10
+ },
+ "estimated": 0,
+ "grade": "d",
+ "nutrients_available": 1,
+ "nutriscore_applicable": 1,
+ "nutriscore_computed": 1,
+ "preparation": "as_sold",
+ "score": 18
+ }
+ },
+ "nutriscore_2021_tags": [
+ "d"
+ ],
+ "nutriscore_2023_tags": [
+ "d"
+ ],
+ "nutriscore_data": {
+ "components": {
+ "negative": [
+ {
+ "id": "energy",
+ "points": 7,
+ "points_max": 10,
+ "unit": "kJ",
+ "value": 2443
+ },
+ {
+ "id": "sugars",
+ "points": 1,
+ "points_max": 15,
+ "unit": "g",
+ "value": 4
+ },
+ {
+ "id": "saturated_fat",
+ "points": 10,
+ "points_max": 10,
+ "unit": "g",
+ "value": 30
+ },
+ {
+ "id": "salt",
+ "points": 0,
+ "points_max": 20,
+ "unit": "g",
+ "value": 0.03
+ }
+ ],
+ "positive": [
+ {
+ "id": "fiber",
+ "points": 0,
+ "points_max": 5,
+ "unit": "g",
+ "value": 0
+ },
+ {
+ "id": "fruits_vegetables_legumes",
+ "points": 0,
+ "points_max": 5,
+ "unit": "%",
+ "value": 0
+ }
+ ]
+ },
+ "count_proteins": 0,
+ "count_proteins_reason": "negative_points_greater_than_or_equal_to_11",
+ "grade": "d",
+ "is_beverage": 0,
+ "is_cheese": 0,
+ "is_fat_oil_nuts_seeds": 0,
+ "is_red_meat_product": 0,
+ "is_water": 0,
+ "negative_points": 18,
+ "negative_points_max": 55,
+ "positive_nutrients": [
+ "fiber",
+ "fruits_vegetables_legumes"
+ ],
+ "positive_points": 0,
+ "positive_points_max": 10,
+ "score": 18
+ },
+ "nutriscore_grade": "d",
+ "nutriscore_score": 18,
+ "nutriscore_score_opposite": -18,
+ "nutriscore_tags": [
+ "d"
+ ],
+ "nutriscore_version": "2023",
+ "nutrition_data": "on",
+ "nutrition_data_per": "100g",
+ "nutrition_data_prepared_per": "100g",
+ "nutrition_grade_fr": "d",
+ "nutrition_grades": "d",
+ "nutrition_grades_tags": [
+ "d"
+ ],
+ "nutrition_score_beverage": 0,
+ "nutrition_score_debug": "",
+ "nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients": 1,
+ "nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients_value": 0,
+ "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients": 1,
+ "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value": 0,
+ "obsolete": "",
+ "obsolete_since_date": "",
+ "origin": "",
+ "origin_de": "",
+ "origin_en": "",
+ "origin_es": "",
+ "origin_fi": "",
+ "origin_fr": "Fabriqué par: Aachen Allemagne",
+ "origin_it": "",
+ "origin_ja": "",
+ "origin_nb": "",
+ "origin_nl": "",
+ "origin_pl": "",
+ "origin_sv": "",
+ "origins": "",
+ "origins_hierarchy": [],
+ "origins_lc": "en",
+ "origins_tags": [],
+ "other_nutritional_substances_prev_tags": [],
+ "other_nutritional_substances_tags": [],
+ "packaging": "en:Aluminium wrap,en:Box cardboard,en:Caja de cartón,en:Card-box,en:Foil-wrapper,es:Recipiente,pt:Papel de aluminio,Étui carton,Feuille aluminium",
+ "packaging_hierarchy": [
+ "en:Aluminium wrap",
+ "en:Box cardboard",
+ "en:Caja de cartón",
+ "en:Card-box",
+ "en:Foil-wrapper",
+ "es:Recipiente",
+ "fr:Feuille aluminium",
+ "fr:Étui carton",
+ "pt:Papel de aluminio"
+ ],
+ "packaging_lc": "fr",
+ "packaging_materials_tags": [
+ "en:aluminium",
+ "en:cardboard"
+ ],
+ "packaging_old": "Cardboard, Container, Packaging, Paperboard, Aluminium wrap, Caja de cartón, Box cardboard, Card-box, Foil-wrapper, pt:Papel de aluminio",
+ "packaging_old_before_taxonomization": "Papel de aluminio,Caja de cartón,Carton,Karton,emballage,box cardboard,Aluminium wrap, en:card-box, en:foil-wrapper",
+ "packaging_recycling_tags": [
+ "en:recycle-in-sorting-bin"
+ ],
+ "packaging_shapes_tags": [
+ "en:sheet",
+ "en:sleeve"
+ ],
+ "packaging_tags": [
+ "en:aluminium-wrap",
+ "en:box-cardboard",
+ "en:caja-de-carton",
+ "en:card-box",
+ "en:foil-wrapper",
+ "es:recipiente",
+ "fr:feuille-aluminium",
+ "fr:etui-carton",
+ "pt:papel-de-aluminio"
+ ],
+ "packaging_text": "",
+ "packaging_text_de": "",
+ "packaging_text_en": "",
+ "packaging_text_es": "",
+ "packaging_text_fi": "",
+ "packaging_text_fr": "",
+ "packaging_text_it": "Incarto esterno in carta da riciclare, Incarto interno in alluminio da riciclare.",
+ "packaging_text_ja": "",
+ "packaging_text_nb": "",
+ "packaging_text_nl": "",
+ "packaging_text_pl": "",
+ "packaging_text_sv": "",
+ "packagings": [
+ {
+ "food_contact": 1,
+ "material": {
+ "id": "en:aluminium"
+ },
+ "number_of_units": 1,
+ "quantity_per_unit": "100 g",
+ "quantity_per_unit_unit": "g",
+ "quantity_per_unit_value": 100,
+ "recycling": {
+ "id": "en:recycle-in-sorting-bin"
+ },
+ "shape": {
+ "id": "en:sheet"
+ },
+ "weight_measured": 1.2
+ },
+ {
+ "material": {
+ "id": "en:cardboard"
+ },
+ "number_of_units": 1,
+ "quantity_per_unit": "100 g",
+ "quantity_per_unit_unit": "g",
+ "quantity_per_unit_value": 100,
+ "recycling": {
+ "id": "en:recycle-in-sorting-bin"
+ },
+ "shape": {
+ "id": "en:sleeve"
+ },
+ "weight_measured": 10.2
+ }
+ ],
+ "packagings_complete": 1,
+ "packagings_materials": {
+ "all": {
+ "weight": 11.4,
+ "weight_100g": 11.4,
+ "weight_percent": 100
+ },
+ "en:metal": {
+ "weight": 1.2,
+ "weight_100g": 1.2,
+ "weight_percent": 10.5263157894737
+ },
+ "en:paper-or-cardboard": {
+ "weight": 10.2,
+ "weight_100g": 10.2,
+ "weight_percent": 89.4736842105263
+ }
+ },
+ "packagings_materials_main": "en:paper-or-cardboard",
+ "packagings_n": 2,
+ "photographers": [],
+ "photographers_tags": [
+ "openfoodfacts-contributors",
+ "javichu",
+ "kyzh",
+ "bcatelin",
+ "standardanalysis",
+ "keragui",
+ "kiliweb",
+ "ccrdz",
+ "foodrepo",
+ "tylili23",
+ "jumati",
+ "ariesmars",
+ "zipotlan",
+ "thaialagata",
+ "franzmari",
+ "foodvisor",
+ "maciej-lawniczak",
+ "mvainola",
+ "marmotte73",
+ "smoothie-app",
+ "jo23",
+ "insectproductadd",
+ "predatorix",
+ "skuma",
+ "macrofactor",
+ "foodless",
+ "fms08",
+ "oliwua",
+ "jimmix",
+ "ompopo",
+ "municorn-calorie-counter-app",
+ "graistergarden",
+ "igweni"
+ ],
+ "pnns_groups_1": "Sugary snacks",
+ "pnns_groups_1_tags": [
+ "sugary-snacks",
+ "known"
+ ],
+ "pnns_groups_2": "Chocolate products",
+ "pnns_groups_2_tags": [
+ "chocolate-products",
+ "known"
+ ],
+ "popularity_key": 24999951205,
+ "popularity_tags": [
+ "top-500-scans-2019",
+ "top-1000-scans-2019",
+ "top-5000-scans-2019",
+ "top-10000-scans-2019",
+ "top-50000-scans-2019",
+ "top-100000-scans-2019",
+ "at-least-5-scans-2019",
+ "at-least-10-scans-2019",
+ "top-75-percent-scans-2019",
+ "top-80-percent-scans-2019",
+ "top-85-percent-scans-2019",
+ "top-90-percent-scans-2019",
+ "top-500-fr-scans-2019",
+ "top-1000-fr-scans-2019",
+ "top-5000-fr-scans-2019",
+ "top-10000-fr-scans-2019",
+ "top-50000-fr-scans-2019",
+ "top-100000-fr-scans-2019",
+ "top-country-fr-scans-2019",
+ "at-least-5-fr-scans-2019",
+ "at-least-10-fr-scans-2019",
+ "top-500-es-scans-2019",
+ "top-1000-es-scans-2019",
+ "top-5000-es-scans-2019",
+ "top-10000-es-scans-2019",
+ "top-50000-es-scans-2019",
+ "top-100000-es-scans-2019",
+ "at-least-5-es-scans-2019",
+ "at-least-10-es-scans-2019",
+ "top-500-ch-scans-2019",
+ "top-1000-ch-scans-2019",
+ "top-5000-ch-scans-2019",
+ "top-10000-ch-scans-2019",
+ "top-50000-ch-scans-2019",
+ "top-100000-ch-scans-2019",
+ "at-least-5-ch-scans-2019",
+ "at-least-10-ch-scans-2019",
+ "top-100-ma-scans-2019",
+ "top-500-ma-scans-2019",
+ "top-1000-ma-scans-2019",
+ "top-5000-ma-scans-2019",
+ "top-10000-ma-scans-2019",
+ "top-50000-ma-scans-2019",
+ "top-100000-ma-scans-2019",
+ "at-least-5-ma-scans-2019",
+ "at-least-10-ma-scans-2019",
+ "top-5000-de-scans-2019",
+ "top-10000-de-scans-2019",
+ "top-50000-de-scans-2019",
+ "top-100000-de-scans-2019",
+ "at-least-5-de-scans-2019",
+ "at-least-10-de-scans-2019",
+ "top-500-it-scans-2019",
+ "top-1000-it-scans-2019",
+ "top-5000-it-scans-2019",
+ "top-10000-it-scans-2019",
+ "top-50000-it-scans-2019",
+ "top-100000-it-scans-2019",
+ "at-least-5-it-scans-2019",
+ "at-least-10-it-scans-2019",
+ "top-5000-be-scans-2019",
+ "top-10000-be-scans-2019",
+ "top-50000-be-scans-2019",
+ "top-100000-be-scans-2019",
+ "at-least-5-be-scans-2019",
+ "top-100-gb-scans-2019",
+ "top-500-gb-scans-2019",
+ "top-1000-gb-scans-2019",
+ "top-5000-gb-scans-2019",
+ "top-10000-gb-scans-2019",
+ "top-50000-gb-scans-2019",
+ "top-100000-gb-scans-2019",
+ "at-least-5-gb-scans-2019",
+ "top-500-re-scans-2019",
+ "top-1000-re-scans-2019",
+ "top-5000-re-scans-2019",
+ "top-10000-re-scans-2019",
+ "top-50000-re-scans-2019",
+ "top-100000-re-scans-2019",
+ "at-least-5-re-scans-2019",
+ "top-500-mq-scans-2019",
+ "top-1000-mq-scans-2019",
+ "top-5000-mq-scans-2019",
+ "top-10000-mq-scans-2019",
+ "top-50000-mq-scans-2019",
+ "top-100000-mq-scans-2019",
+ "top-50-lb-scans-2019",
+ "top-100-lb-scans-2019",
+ "top-500-lb-scans-2019",
+ "top-1000-lb-scans-2019",
+ "top-5000-lb-scans-2019",
+ "top-10000-lb-scans-2019",
+ "top-50000-lb-scans-2019",
+ "top-100000-lb-scans-2019",
+ "top-10-iq-scans-2019",
+ "top-50-iq-scans-2019",
+ "top-100-iq-scans-2019",
+ "top-500-iq-scans-2019",
+ "top-1000-iq-scans-2019",
+ "top-5000-iq-scans-2019",
+ "top-10000-iq-scans-2019",
+ "top-50000-iq-scans-2019",
+ "top-100000-iq-scans-2019",
+ "top-500-nl-scans-2019",
+ "top-1000-nl-scans-2019",
+ "top-5000-nl-scans-2019",
+ "top-10000-nl-scans-2019",
+ "top-50000-nl-scans-2019",
+ "top-100000-nl-scans-2019",
+ "top-50-ae-scans-2019",
+ "top-100-ae-scans-2019",
+ "top-500-ae-scans-2019",
+ "top-1000-ae-scans-2019",
+ "top-5000-ae-scans-2019",
+ "top-10000-ae-scans-2019",
+ "top-50000-ae-scans-2019",
+ "top-100000-ae-scans-2019",
+ "top-5000-pt-scans-2019",
+ "top-10000-pt-scans-2019",
+ "top-50000-pt-scans-2019",
+ "top-100000-pt-scans-2019",
+ "top-100-jp-scans-2019",
+ "top-500-jp-scans-2019",
+ "top-1000-jp-scans-2019",
+ "top-5000-jp-scans-2019",
+ "top-10000-jp-scans-2019",
+ "top-50000-jp-scans-2019",
+ "top-100000-jp-scans-2019",
+ "top-100-sa-scans-2019",
+ "top-500-sa-scans-2019",
+ "top-1000-sa-scans-2019",
+ "top-5000-sa-scans-2019",
+ "top-10000-sa-scans-2019",
+ "top-50000-sa-scans-2019",
+ "top-100000-sa-scans-2019",
+ "top-500-pe-scans-2019",
+ "top-1000-pe-scans-2019",
+ "top-5000-pe-scans-2019",
+ "top-10000-pe-scans-2019",
+ "top-50000-pe-scans-2019",
+ "top-100000-pe-scans-2019",
+ "top-1000-us-scans-2019",
+ "top-5000-us-scans-2019",
+ "top-10000-us-scans-2019",
+ "top-50000-us-scans-2019",
+ "top-100000-us-scans-2019",
+ "top-5000-th-scans-2019",
+ "top-10000-th-scans-2019",
+ "top-50000-th-scans-2019",
+ "top-100000-th-scans-2019",
+ "top-500-hk-scans-2019",
+ "top-1000-hk-scans-2019",
+ "top-5000-hk-scans-2019",
+ "top-10000-hk-scans-2019",
+ "top-50000-hk-scans-2019",
+ "top-100000-hk-scans-2019",
+ "top-500-mu-scans-2019",
+ "top-1000-mu-scans-2019",
+ "top-5000-mu-scans-2019",
+ "top-10000-mu-scans-2019",
+ "top-50000-mu-scans-2019",
+ "top-100000-mu-scans-2019",
+ "top-500-sg-scans-2019",
+ "top-1000-sg-scans-2019",
+ "top-5000-sg-scans-2019",
+ "top-10000-sg-scans-2019",
+ "top-50000-sg-scans-2019",
+ "top-100000-sg-scans-2019",
+ "top-5000-gf-scans-2019",
+ "top-10000-gf-scans-2019",
+ "top-50000-gf-scans-2019",
+ "top-100000-gf-scans-2019",
+ "top-5000-at-scans-2019",
+ "top-10000-at-scans-2019",
+ "top-50000-at-scans-2019",
+ "top-100000-at-scans-2019",
+ "top-500-tn-scans-2019",
+ "top-1000-tn-scans-2019",
+ "top-5000-tn-scans-2019",
+ "top-10000-tn-scans-2019",
+ "top-50000-tn-scans-2019",
+ "top-100000-tn-scans-2019",
+ "top-1000-ie-scans-2019",
+ "top-5000-ie-scans-2019",
+ "top-10000-ie-scans-2019",
+ "top-50000-ie-scans-2019",
+ "top-100000-ie-scans-2019",
+ "top-500-fi-scans-2019",
+ "top-1000-fi-scans-2019",
+ "top-5000-fi-scans-2019",
+ "top-10000-fi-scans-2019",
+ "top-50000-fi-scans-2019",
+ "top-100000-fi-scans-2019",
+ "top-500-cz-scans-2019",
+ "top-1000-cz-scans-2019",
+ "top-5000-cz-scans-2019",
+ "top-10000-cz-scans-2019",
+ "top-50000-cz-scans-2019",
+ "top-100000-cz-scans-2019",
+ "top-10000-lu-scans-2019",
+ "top-50000-lu-scans-2019",
+ "top-100000-lu-scans-2019",
+ "top-5000-ad-scans-2019",
+ "top-10000-ad-scans-2019",
+ "top-50000-ad-scans-2019",
+ "top-100000-ad-scans-2019",
+ "top-500-eg-scans-2019",
+ "top-1000-eg-scans-2019",
+ "top-5000-eg-scans-2019",
+ "top-10000-eg-scans-2019",
+ "top-50000-eg-scans-2019",
+ "top-100000-eg-scans-2019",
+ "top-5000-gp-scans-2019",
+ "top-10000-gp-scans-2019",
+ "top-50000-gp-scans-2019",
+ "top-100000-gp-scans-2019",
+ "top-1000-dz-scans-2019",
+ "top-5000-dz-scans-2019",
+ "top-10000-dz-scans-2019",
+ "top-50000-dz-scans-2019",
+ "top-100000-dz-scans-2019",
+ "top-500-tg-scans-2019",
+ "top-1000-tg-scans-2019",
+ "top-5000-tg-scans-2019",
+ "top-10000-tg-scans-2019",
+ "top-50000-tg-scans-2019",
+ "top-100000-tg-scans-2019",
+ "top-100-scans-2020",
+ "top-500-scans-2020",
+ "top-1000-scans-2020",
+ "top-5000-scans-2020",
+ "top-10000-scans-2020",
+ "top-50000-scans-2020",
+ "top-100000-scans-2020",
+ "at-least-5-scans-2020",
+ "at-least-10-scans-2020",
+ "top-75-percent-scans-2020",
+ "top-80-percent-scans-2020",
+ "top-85-percent-scans-2020",
+ "top-90-percent-scans-2020",
+ "top-500-fr-scans-2020",
+ "top-1000-fr-scans-2020",
+ "top-5000-fr-scans-2020",
+ "top-10000-fr-scans-2020",
+ "top-50000-fr-scans-2020",
+ "top-100000-fr-scans-2020",
+ "top-country-fr-scans-2020",
+ "at-least-5-fr-scans-2020",
+ "at-least-10-fr-scans-2020",
+ "top-500-es-scans-2020",
+ "top-1000-es-scans-2020",
+ "top-5000-es-scans-2020",
+ "top-10000-es-scans-2020",
+ "top-50000-es-scans-2020",
+ "top-100000-es-scans-2020",
+ "at-least-5-es-scans-2020",
+ "at-least-10-es-scans-2020",
+ "top-500-de-scans-2020",
+ "top-1000-de-scans-2020",
+ "top-5000-de-scans-2020",
+ "top-10000-de-scans-2020",
+ "top-50000-de-scans-2020",
+ "top-100000-de-scans-2020",
+ "at-least-5-de-scans-2020",
+ "at-least-10-de-scans-2020",
+ "top-500-ch-scans-2020",
+ "top-1000-ch-scans-2020",
+ "top-5000-ch-scans-2020",
+ "top-10000-ch-scans-2020",
+ "top-50000-ch-scans-2020",
+ "top-100000-ch-scans-2020",
+ "at-least-5-ch-scans-2020",
+ "at-least-10-ch-scans-2020",
+ "top-100-it-scans-2020",
+ "top-500-it-scans-2020",
+ "top-1000-it-scans-2020",
+ "top-5000-it-scans-2020",
+ "top-10000-it-scans-2020",
+ "top-50000-it-scans-2020",
+ "top-100000-it-scans-2020",
+ "at-least-5-it-scans-2020",
+ "at-least-10-it-scans-2020",
+ "top-100-ma-scans-2020",
+ "top-500-ma-scans-2020",
+ "top-1000-ma-scans-2020",
+ "top-5000-ma-scans-2020",
+ "top-10000-ma-scans-2020",
+ "top-50000-ma-scans-2020",
+ "top-100000-ma-scans-2020",
+ "at-least-5-ma-scans-2020",
+ "at-least-10-ma-scans-2020",
+ "top-50-gb-scans-2020",
+ "top-100-gb-scans-2020",
+ "top-500-gb-scans-2020",
+ "top-1000-gb-scans-2020",
+ "top-5000-gb-scans-2020",
+ "top-10000-gb-scans-2020",
+ "top-50000-gb-scans-2020",
+ "top-100000-gb-scans-2020",
+ "at-least-5-gb-scans-2020",
+ "at-least-10-gb-scans-2020",
+ "top-100-dz-scans-2020",
+ "top-500-dz-scans-2020",
+ "top-1000-dz-scans-2020",
+ "top-5000-dz-scans-2020",
+ "top-10000-dz-scans-2020",
+ "top-50000-dz-scans-2020",
+ "top-100000-dz-scans-2020",
+ "at-least-5-dz-scans-2020",
+ "top-5000-be-scans-2020",
+ "top-10000-be-scans-2020",
+ "top-50000-be-scans-2020",
+ "top-100000-be-scans-2020",
+ "at-least-5-be-scans-2020",
+ "top-50-pf-scans-2020",
+ "top-100-pf-scans-2020",
+ "top-500-pf-scans-2020",
+ "top-1000-pf-scans-2020",
+ "top-5000-pf-scans-2020",
+ "top-10000-pf-scans-2020",
+ "top-50000-pf-scans-2020",
+ "top-100000-pf-scans-2020",
+ "at-least-5-pf-scans-2020",
+ "top-100-nl-scans-2020",
+ "top-500-nl-scans-2020",
+ "top-1000-nl-scans-2020",
+ "top-5000-nl-scans-2020",
+ "top-10000-nl-scans-2020",
+ "top-50000-nl-scans-2020",
+ "top-100000-nl-scans-2020",
+ "at-least-5-nl-scans-2020",
+ "top-100-nc-scans-2020",
+ "top-500-nc-scans-2020",
+ "top-1000-nc-scans-2020",
+ "top-5000-nc-scans-2020",
+ "top-10000-nc-scans-2020",
+ "top-50000-nc-scans-2020",
+ "top-100000-nc-scans-2020",
+ "top-500-gp-scans-2020",
+ "top-1000-gp-scans-2020",
+ "top-5000-gp-scans-2020",
+ "top-10000-gp-scans-2020",
+ "top-50000-gp-scans-2020",
+ "top-100000-gp-scans-2020",
+ "top-1000-re-scans-2020",
+ "top-5000-re-scans-2020",
+ "top-10000-re-scans-2020",
+ "top-50000-re-scans-2020",
+ "top-100000-re-scans-2020",
+ "top-10-cz-scans-2020",
+ "top-50-cz-scans-2020",
+ "top-100-cz-scans-2020",
+ "top-500-cz-scans-2020",
+ "top-1000-cz-scans-2020",
+ "top-5000-cz-scans-2020",
+ "top-10000-cz-scans-2020",
+ "top-50000-cz-scans-2020",
+ "top-100000-cz-scans-2020",
+ "top-1000-mx-scans-2020",
+ "top-5000-mx-scans-2020",
+ "top-10000-mx-scans-2020",
+ "top-50000-mx-scans-2020",
+ "top-100000-mx-scans-2020",
+ "top-500-lu-scans-2020",
+ "top-1000-lu-scans-2020",
+ "top-5000-lu-scans-2020",
+ "top-10000-lu-scans-2020",
+ "top-50000-lu-scans-2020",
+ "top-100000-lu-scans-2020",
+ "top-100-ie-scans-2020",
+ "top-500-ie-scans-2020",
+ "top-1000-ie-scans-2020",
+ "top-5000-ie-scans-2020",
+ "top-10000-ie-scans-2020",
+ "top-50000-ie-scans-2020",
+ "top-100000-ie-scans-2020",
+ "top-500-tn-scans-2020",
+ "top-1000-tn-scans-2020",
+ "top-5000-tn-scans-2020",
+ "top-10000-tn-scans-2020",
+ "top-50000-tn-scans-2020",
+ "top-100000-tn-scans-2020",
+ "top-100-mu-scans-2020",
+ "top-500-mu-scans-2020",
+ "top-1000-mu-scans-2020",
+ "top-5000-mu-scans-2020",
+ "top-10000-mu-scans-2020",
+ "top-50000-mu-scans-2020",
+ "top-100000-mu-scans-2020",
+ "top-5000-pt-scans-2020",
+ "top-10000-pt-scans-2020",
+ "top-50000-pt-scans-2020",
+ "top-100000-pt-scans-2020",
+ "top-500-ca-scans-2020",
+ "top-1000-ca-scans-2020",
+ "top-5000-ca-scans-2020",
+ "top-10000-ca-scans-2020",
+ "top-50000-ca-scans-2020",
+ "top-100000-ca-scans-2020",
+ "top-50-ly-scans-2020",
+ "top-100-ly-scans-2020",
+ "top-500-ly-scans-2020",
+ "top-1000-ly-scans-2020",
+ "top-5000-ly-scans-2020",
+ "top-10000-ly-scans-2020",
+ "top-50000-ly-scans-2020",
+ "top-100000-ly-scans-2020",
+ "top-50-nz-scans-2020",
+ "top-100-nz-scans-2020",
+ "top-500-nz-scans-2020",
+ "top-1000-nz-scans-2020",
+ "top-5000-nz-scans-2020",
+ "top-10000-nz-scans-2020",
+ "top-50000-nz-scans-2020",
+ "top-100000-nz-scans-2020",
+ "top-500-hu-scans-2020",
+ "top-1000-hu-scans-2020",
+ "top-5000-hu-scans-2020",
+ "top-10000-hu-scans-2020",
+ "top-50000-hu-scans-2020",
+ "top-100000-hu-scans-2020",
+ "top-5000-at-scans-2020",
+ "top-10000-at-scans-2020",
+ "top-50000-at-scans-2020",
+ "top-100000-at-scans-2020",
+ "top-5000-us-scans-2020",
+ "top-10000-us-scans-2020",
+ "top-50000-us-scans-2020",
+ "top-100000-us-scans-2020",
+ "top-5000-mq-scans-2020",
+ "top-10000-mq-scans-2020",
+ "top-50000-mq-scans-2020",
+ "top-100000-mq-scans-2020",
+ "top-500-iq-scans-2020",
+ "top-1000-iq-scans-2020",
+ "top-5000-iq-scans-2020",
+ "top-10000-iq-scans-2020",
+ "top-50000-iq-scans-2020",
+ "top-100000-iq-scans-2020",
+ "top-5000-ar-scans-2020",
+ "top-10000-ar-scans-2020",
+ "top-50000-ar-scans-2020",
+ "top-100000-ar-scans-2020",
+ "top-50-qa-scans-2020",
+ "top-100-qa-scans-2020",
+ "top-500-qa-scans-2020",
+ "top-1000-qa-scans-2020",
+ "top-5000-qa-scans-2020",
+ "top-10000-qa-scans-2020",
+ "top-50000-qa-scans-2020",
+ "top-100000-qa-scans-2020",
+ "top-5000-ae-scans-2020",
+ "top-10000-ae-scans-2020",
+ "top-50000-ae-scans-2020",
+ "top-100000-ae-scans-2020",
+ "top-5000-rs-scans-2020",
+ "top-10000-rs-scans-2020",
+ "top-50000-rs-scans-2020",
+ "top-100000-rs-scans-2020",
+ "top-1000-ci-scans-2020",
+ "top-5000-ci-scans-2020",
+ "top-10000-ci-scans-2020",
+ "top-50000-ci-scans-2020",
+ "top-100000-ci-scans-2020",
+ "top-5000-se-scans-2020",
+ "top-10000-se-scans-2020",
+ "top-50000-se-scans-2020",
+ "top-100000-se-scans-2020",
+ "top-10-ps-scans-2020",
+ "top-50-ps-scans-2020",
+ "top-100-ps-scans-2020",
+ "top-500-ps-scans-2020",
+ "top-1000-ps-scans-2020",
+ "top-5000-ps-scans-2020",
+ "top-10000-ps-scans-2020",
+ "top-50000-ps-scans-2020",
+ "top-100000-ps-scans-2020",
+ "top-1000-in-scans-2020",
+ "top-5000-in-scans-2020",
+ "top-10000-in-scans-2020",
+ "top-50000-in-scans-2020",
+ "top-100000-in-scans-2020",
+ "top-5000-sn-scans-2020",
+ "top-10000-sn-scans-2020",
+ "top-50000-sn-scans-2020",
+ "top-100000-sn-scans-2020",
+ "top-500-sk-scans-2020",
+ "top-1000-sk-scans-2020",
+ "top-5000-sk-scans-2020",
+ "top-10000-sk-scans-2020",
+ "top-50000-sk-scans-2020",
+ "top-100000-sk-scans-2020",
+ "top-100-jo-scans-2020",
+ "top-500-jo-scans-2020",
+ "top-1000-jo-scans-2020",
+ "top-5000-jo-scans-2020",
+ "top-10000-jo-scans-2020",
+ "top-50000-jo-scans-2020",
+ "top-100000-jo-scans-2020",
+ "top-500-je-scans-2020",
+ "top-1000-je-scans-2020",
+ "top-5000-je-scans-2020",
+ "top-10000-je-scans-2020",
+ "top-50000-je-scans-2020",
+ "top-100000-je-scans-2020",
+ "top-50-scans-2021",
+ "top-100-scans-2021",
+ "top-500-scans-2021",
+ "top-1000-scans-2021",
+ "top-5000-scans-2021",
+ "top-10000-scans-2021",
+ "top-50000-scans-2021",
+ "top-100000-scans-2021",
+ "at-least-5-scans-2021",
+ "at-least-10-scans-2021",
+ "top-75-percent-scans-2021",
+ "top-80-percent-scans-2021",
+ "top-85-percent-scans-2021",
+ "top-90-percent-scans-2021",
+ "top-500-fr-scans-2021",
+ "top-1000-fr-scans-2021",
+ "top-5000-fr-scans-2021",
+ "top-10000-fr-scans-2021",
+ "top-50000-fr-scans-2021",
+ "top-100000-fr-scans-2021",
+ "top-country-fr-scans-2021",
+ "at-least-5-fr-scans-2021",
+ "at-least-10-fr-scans-2021",
+ "top-500-es-scans-2021",
+ "top-1000-es-scans-2021",
+ "top-5000-es-scans-2021",
+ "top-10000-es-scans-2021",
+ "top-50000-es-scans-2021",
+ "top-100000-es-scans-2021",
+ "at-least-5-es-scans-2021",
+ "at-least-10-es-scans-2021",
+ "top-1000-de-scans-2021",
+ "top-5000-de-scans-2021",
+ "top-10000-de-scans-2021",
+ "top-50000-de-scans-2021",
+ "top-100000-de-scans-2021",
+ "at-least-5-de-scans-2021",
+ "at-least-10-de-scans-2021",
+ "top-50-gb-scans-2021",
+ "top-100-gb-scans-2021",
+ "top-500-gb-scans-2021",
+ "top-1000-gb-scans-2021",
+ "top-5000-gb-scans-2021",
+ "top-10000-gb-scans-2021",
+ "top-50000-gb-scans-2021",
+ "top-100000-gb-scans-2021",
+ "at-least-5-gb-scans-2021",
+ "at-least-10-gb-scans-2021",
+ "top-50-dz-scans-2021",
+ "top-100-dz-scans-2021",
+ "top-500-dz-scans-2021",
+ "top-1000-dz-scans-2021",
+ "top-5000-dz-scans-2021",
+ "top-10000-dz-scans-2021",
+ "top-50000-dz-scans-2021",
+ "top-100000-dz-scans-2021",
+ "at-least-5-dz-scans-2021",
+ "at-least-10-dz-scans-2021",
+ "top-500-it-scans-2021",
+ "top-1000-it-scans-2021",
+ "top-5000-it-scans-2021",
+ "top-10000-it-scans-2021",
+ "top-50000-it-scans-2021",
+ "top-100000-it-scans-2021",
+ "at-least-5-it-scans-2021",
+ "at-least-10-it-scans-2021",
+ "top-1000-ch-scans-2021",
+ "top-5000-ch-scans-2021",
+ "top-10000-ch-scans-2021",
+ "top-50000-ch-scans-2021",
+ "top-100000-ch-scans-2021",
+ "at-least-5-ch-scans-2021",
+ "at-least-10-ch-scans-2021",
+ "top-500-ro-scans-2021",
+ "top-1000-ro-scans-2021",
+ "top-5000-ro-scans-2021",
+ "top-10000-ro-scans-2021",
+ "top-50000-ro-scans-2021",
+ "top-100000-ro-scans-2021",
+ "at-least-5-ro-scans-2021",
+ "top-500-ma-scans-2021",
+ "top-1000-ma-scans-2021",
+ "top-5000-ma-scans-2021",
+ "top-10000-ma-scans-2021",
+ "top-50000-ma-scans-2021",
+ "top-100000-ma-scans-2021",
+ "at-least-5-ma-scans-2021",
+ "top-500-mx-scans-2021",
+ "top-1000-mx-scans-2021",
+ "top-5000-mx-scans-2021",
+ "top-10000-mx-scans-2021",
+ "top-50000-mx-scans-2021",
+ "top-100000-mx-scans-2021",
+ "at-least-5-mx-scans-2021",
+ "top-500-re-scans-2021",
+ "top-1000-re-scans-2021",
+ "top-5000-re-scans-2021",
+ "top-10000-re-scans-2021",
+ "top-50000-re-scans-2021",
+ "top-100000-re-scans-2021",
+ "at-least-5-re-scans-2021",
+ "top-500-pt-scans-2021",
+ "top-1000-pt-scans-2021",
+ "top-5000-pt-scans-2021",
+ "top-10000-pt-scans-2021",
+ "top-50000-pt-scans-2021",
+ "top-100000-pt-scans-2021",
+ "at-least-5-pt-scans-2021",
+ "top-5000-be-scans-2021",
+ "top-10000-be-scans-2021",
+ "top-50000-be-scans-2021",
+ "top-100000-be-scans-2021",
+ "at-least-5-be-scans-2021",
+ "top-500-ca-scans-2021",
+ "top-1000-ca-scans-2021",
+ "top-5000-ca-scans-2021",
+ "top-10000-ca-scans-2021",
+ "top-50000-ca-scans-2021",
+ "top-100000-ca-scans-2021",
+ "at-least-5-ca-scans-2021",
+ "top-500-us-scans-2021",
+ "top-1000-us-scans-2021",
+ "top-5000-us-scans-2021",
+ "top-10000-us-scans-2021",
+ "top-50000-us-scans-2021",
+ "top-100000-us-scans-2021",
+ "top-500-at-scans-2021",
+ "top-1000-at-scans-2021",
+ "top-5000-at-scans-2021",
+ "top-10000-at-scans-2021",
+ "top-50000-at-scans-2021",
+ "top-100000-at-scans-2021",
+ "top-100-bg-scans-2021",
+ "top-500-bg-scans-2021",
+ "top-1000-bg-scans-2021",
+ "top-5000-bg-scans-2021",
+ "top-10000-bg-scans-2021",
+ "top-50000-bg-scans-2021",
+ "top-100000-bg-scans-2021",
+ "top-100-mu-scans-2021",
+ "top-500-mu-scans-2021",
+ "top-1000-mu-scans-2021",
+ "top-5000-mu-scans-2021",
+ "top-10000-mu-scans-2021",
+ "top-50000-mu-scans-2021",
+ "top-100000-mu-scans-2021",
+ "top-500-ci-scans-2021",
+ "top-1000-ci-scans-2021",
+ "top-5000-ci-scans-2021",
+ "top-10000-ci-scans-2021",
+ "top-50000-ci-scans-2021",
+ "top-100000-ci-scans-2021",
+ "top-500-gp-scans-2021",
+ "top-1000-gp-scans-2021",
+ "top-5000-gp-scans-2021",
+ "top-10000-gp-scans-2021",
+ "top-50000-gp-scans-2021",
+ "top-100000-gp-scans-2021",
+ "top-500-se-scans-2021",
+ "top-1000-se-scans-2021",
+ "top-5000-se-scans-2021",
+ "top-10000-se-scans-2021",
+ "top-50000-se-scans-2021",
+ "top-100000-se-scans-2021",
+ "top-500-tn-scans-2021",
+ "top-1000-tn-scans-2021",
+ "top-5000-tn-scans-2021",
+ "top-10000-tn-scans-2021",
+ "top-50000-tn-scans-2021",
+ "top-100000-tn-scans-2021",
+ "top-5000-pl-scans-2021",
+ "top-10000-pl-scans-2021",
+ "top-50000-pl-scans-2021",
+ "top-100000-pl-scans-2021",
+ "top-500-sa-scans-2021",
+ "top-1000-sa-scans-2021",
+ "top-5000-sa-scans-2021",
+ "top-10000-sa-scans-2021",
+ "top-50000-sa-scans-2021",
+ "top-100000-sa-scans-2021",
+ "top-500-mq-scans-2021",
+ "top-1000-mq-scans-2021",
+ "top-5000-mq-scans-2021",
+ "top-10000-mq-scans-2021",
+ "top-50000-mq-scans-2021",
+ "top-100000-mq-scans-2021",
+ "top-500-cz-scans-2021",
+ "top-1000-cz-scans-2021",
+ "top-5000-cz-scans-2021",
+ "top-10000-cz-scans-2021",
+ "top-50000-cz-scans-2021",
+ "top-100000-cz-scans-2021",
+ "top-500-uy-scans-2021",
+ "top-1000-uy-scans-2021",
+ "top-5000-uy-scans-2021",
+ "top-10000-uy-scans-2021",
+ "top-50000-uy-scans-2021",
+ "top-100000-uy-scans-2021",
+ "top-500-ae-scans-2021",
+ "top-1000-ae-scans-2021",
+ "top-5000-ae-scans-2021",
+ "top-10000-ae-scans-2021",
+ "top-50000-ae-scans-2021",
+ "top-100000-ae-scans-2021",
+ "top-500-my-scans-2021",
+ "top-1000-my-scans-2021",
+ "top-5000-my-scans-2021",
+ "top-10000-my-scans-2021",
+ "top-50000-my-scans-2021",
+ "top-100000-my-scans-2021",
+ "top-1000-fi-scans-2021",
+ "top-5000-fi-scans-2021",
+ "top-10000-fi-scans-2021",
+ "top-50000-fi-scans-2021",
+ "top-100000-fi-scans-2021",
+ "top-500-hk-scans-2021",
+ "top-1000-hk-scans-2021",
+ "top-5000-hk-scans-2021",
+ "top-10000-hk-scans-2021",
+ "top-50000-hk-scans-2021",
+ "top-100000-hk-scans-2021",
+ "top-500-mt-scans-2021",
+ "top-1000-mt-scans-2021",
+ "top-5000-mt-scans-2021",
+ "top-10000-mt-scans-2021",
+ "top-50000-mt-scans-2021",
+ "top-100000-mt-scans-2021",
+ "top-100-ir-scans-2021",
+ "top-500-ir-scans-2021",
+ "top-1000-ir-scans-2021",
+ "top-5000-ir-scans-2021",
+ "top-10000-ir-scans-2021",
+ "top-50000-ir-scans-2021",
+ "top-100000-ir-scans-2021",
+ "top-500-ad-scans-2021",
+ "top-1000-ad-scans-2021",
+ "top-5000-ad-scans-2021",
+ "top-10000-ad-scans-2021",
+ "top-50000-ad-scans-2021",
+ "top-100000-ad-scans-2021",
+ "top-500-kw-scans-2021",
+ "top-1000-kw-scans-2021",
+ "top-5000-kw-scans-2021",
+ "top-10000-kw-scans-2021",
+ "top-50000-kw-scans-2021",
+ "top-100000-kw-scans-2021",
+ "top-5000-il-scans-2021",
+ "top-10000-il-scans-2021",
+ "top-50000-il-scans-2021",
+ "top-100000-il-scans-2021",
+ "top-500-in-scans-2021",
+ "top-1000-in-scans-2021",
+ "top-5000-in-scans-2021",
+ "top-10000-in-scans-2021",
+ "top-50000-in-scans-2021",
+ "top-100000-in-scans-2021",
+ "top-5000-au-scans-2021",
+ "top-10000-au-scans-2021",
+ "top-50000-au-scans-2021",
+ "top-100000-au-scans-2021",
+ "top-500-br-scans-2021",
+ "top-1000-br-scans-2021",
+ "top-5000-br-scans-2021",
+ "top-10000-br-scans-2021",
+ "top-50000-br-scans-2021",
+ "top-100000-br-scans-2021",
+ "top-5000-lu-scans-2021",
+ "top-10000-lu-scans-2021",
+ "top-50000-lu-scans-2021",
+ "top-100000-lu-scans-2021",
+ "top-500-si-scans-2021",
+ "top-1000-si-scans-2021",
+ "top-5000-si-scans-2021",
+ "top-10000-si-scans-2021",
+ "top-50000-si-scans-2021",
+ "top-100000-si-scans-2021",
+ "top-5000-gr-scans-2021",
+ "top-10000-gr-scans-2021",
+ "top-50000-gr-scans-2021",
+ "top-100000-gr-scans-2021",
+ "top-5000-nl-scans-2021",
+ "top-10000-nl-scans-2021",
+ "top-50000-nl-scans-2021",
+ "top-100000-nl-scans-2021",
+ "top-5000-th-scans-2021",
+ "top-10000-th-scans-2021",
+ "top-50000-th-scans-2021",
+ "top-100000-th-scans-2021",
+ "top-5000-ie-scans-2021",
+ "top-10000-ie-scans-2021",
+ "top-50000-ie-scans-2021",
+ "top-100000-ie-scans-2021",
+ "top-500-is-scans-2021",
+ "top-1000-is-scans-2021",
+ "top-5000-is-scans-2021",
+ "top-10000-is-scans-2021",
+ "top-50000-is-scans-2021",
+ "top-100000-is-scans-2021",
+ "top-50-scans-2022",
+ "top-100-scans-2022",
+ "top-500-scans-2022",
+ "top-1000-scans-2022",
+ "top-5000-scans-2022",
+ "top-10000-scans-2022",
+ "top-50000-scans-2022",
+ "top-100000-scans-2022",
+ "at-least-5-scans-2022",
+ "at-least-10-scans-2022",
+ "top-75-percent-scans-2022",
+ "top-80-percent-scans-2022",
+ "top-85-percent-scans-2022",
+ "top-90-percent-scans-2022",
+ "top-500-fr-scans-2022",
+ "top-1000-fr-scans-2022",
+ "top-5000-fr-scans-2022",
+ "top-10000-fr-scans-2022",
+ "top-50000-fr-scans-2022",
+ "top-100000-fr-scans-2022",
+ "top-country-fr-scans-2022",
+ "at-least-5-fr-scans-2022",
+ "at-least-10-fr-scans-2022",
+ "top-500-es-scans-2022",
+ "top-1000-es-scans-2022",
+ "top-5000-es-scans-2022",
+ "top-10000-es-scans-2022",
+ "top-50000-es-scans-2022",
+ "top-100000-es-scans-2022",
+ "at-least-5-es-scans-2022",
+ "at-least-10-es-scans-2022",
+ "top-1000-de-scans-2022",
+ "top-5000-de-scans-2022",
+ "top-10000-de-scans-2022",
+ "top-50000-de-scans-2022",
+ "top-100000-de-scans-2022",
+ "at-least-5-de-scans-2022",
+ "at-least-10-de-scans-2022",
+ "top-50-gb-scans-2022",
+ "top-100-gb-scans-2022",
+ "top-500-gb-scans-2022",
+ "top-1000-gb-scans-2022",
+ "top-5000-gb-scans-2022",
+ "top-10000-gb-scans-2022",
+ "top-50000-gb-scans-2022",
+ "top-100000-gb-scans-2022",
+ "at-least-5-gb-scans-2022",
+ "at-least-10-gb-scans-2022",
+ "top-500-it-scans-2022",
+ "top-1000-it-scans-2022",
+ "top-5000-it-scans-2022",
+ "top-10000-it-scans-2022",
+ "top-50000-it-scans-2022",
+ "top-100000-it-scans-2022",
+ "at-least-5-it-scans-2022",
+ "at-least-10-it-scans-2022",
+ "top-500-ma-scans-2022",
+ "top-1000-ma-scans-2022",
+ "top-5000-ma-scans-2022",
+ "top-10000-ma-scans-2022",
+ "top-50000-ma-scans-2022",
+ "top-100000-ma-scans-2022",
+ "at-least-5-ma-scans-2022",
+ "at-least-10-ma-scans-2022",
+ "top-500-dz-scans-2022",
+ "top-1000-dz-scans-2022",
+ "top-5000-dz-scans-2022",
+ "top-10000-dz-scans-2022",
+ "top-50000-dz-scans-2022",
+ "top-100000-dz-scans-2022",
+ "at-least-5-dz-scans-2022",
+ "top-50-ru-scans-2022",
+ "top-100-ru-scans-2022",
+ "top-500-ru-scans-2022",
+ "top-1000-ru-scans-2022",
+ "top-5000-ru-scans-2022",
+ "top-10000-ru-scans-2022",
+ "top-50000-ru-scans-2022",
+ "top-100000-ru-scans-2022",
+ "top-5000-be-scans-2022",
+ "top-10000-be-scans-2022",
+ "top-50000-be-scans-2022",
+ "top-100000-be-scans-2022",
+ "top-500-nl-scans-2022",
+ "top-1000-nl-scans-2022",
+ "top-5000-nl-scans-2022",
+ "top-10000-nl-scans-2022",
+ "top-50000-nl-scans-2022",
+ "top-100000-nl-scans-2022",
+ "top-50-lu-scans-2022",
+ "top-100-lu-scans-2022",
+ "top-500-lu-scans-2022",
+ "top-1000-lu-scans-2022",
+ "top-5000-lu-scans-2022",
+ "top-10000-lu-scans-2022",
+ "top-50000-lu-scans-2022",
+ "top-100000-lu-scans-2022",
+ "top-500-at-scans-2022",
+ "top-1000-at-scans-2022",
+ "top-5000-at-scans-2022",
+ "top-10000-at-scans-2022",
+ "top-50000-at-scans-2022",
+ "top-100000-at-scans-2022",
+ "top-5000-ro-scans-2022",
+ "top-10000-ro-scans-2022",
+ "top-50000-ro-scans-2022",
+ "top-100000-ro-scans-2022",
+ "top-5000-ch-scans-2022",
+ "top-10000-ch-scans-2022",
+ "top-50000-ch-scans-2022",
+ "top-100000-ch-scans-2022",
+ "top-5000-us-scans-2022",
+ "top-10000-us-scans-2022",
+ "top-50000-us-scans-2022",
+ "top-100000-us-scans-2022",
+ "top-500-sk-scans-2022",
+ "top-1000-sk-scans-2022",
+ "top-5000-sk-scans-2022",
+ "top-10000-sk-scans-2022",
+ "top-50000-sk-scans-2022",
+ "top-100000-sk-scans-2022",
+ "top-5000-pt-scans-2022",
+ "top-10000-pt-scans-2022",
+ "top-50000-pt-scans-2022",
+ "top-100000-pt-scans-2022",
+ "top-500-tn-scans-2022",
+ "top-1000-tn-scans-2022",
+ "top-5000-tn-scans-2022",
+ "top-10000-tn-scans-2022",
+ "top-50000-tn-scans-2022",
+ "top-100000-tn-scans-2022",
+ "top-500-se-scans-2022",
+ "top-1000-se-scans-2022",
+ "top-5000-se-scans-2022",
+ "top-10000-se-scans-2022",
+ "top-50000-se-scans-2022",
+ "top-100000-se-scans-2022",
+ "top-5000-re-scans-2022",
+ "top-10000-re-scans-2022",
+ "top-50000-re-scans-2022",
+ "top-100000-re-scans-2022",
+ "top-1000-ae-scans-2022",
+ "top-5000-ae-scans-2022",
+ "top-10000-ae-scans-2022",
+ "top-50000-ae-scans-2022",
+ "top-100000-ae-scans-2022",
+ "top-500-si-scans-2022",
+ "top-1000-si-scans-2022",
+ "top-5000-si-scans-2022",
+ "top-10000-si-scans-2022",
+ "top-50000-si-scans-2022",
+ "top-100000-si-scans-2022",
+ "top-1000-th-scans-2022",
+ "top-5000-th-scans-2022",
+ "top-10000-th-scans-2022",
+ "top-50000-th-scans-2022",
+ "top-100000-th-scans-2022",
+ "top-500-ng-scans-2022",
+ "top-1000-ng-scans-2022",
+ "top-5000-ng-scans-2022",
+ "top-10000-ng-scans-2022",
+ "top-50000-ng-scans-2022",
+ "top-100000-ng-scans-2022",
+ "top-5000-in-scans-2022",
+ "top-10000-in-scans-2022",
+ "top-50000-in-scans-2022",
+ "top-100000-in-scans-2022",
+ "top-1000-ie-scans-2022",
+ "top-5000-ie-scans-2022",
+ "top-10000-ie-scans-2022",
+ "top-50000-ie-scans-2022",
+ "top-100000-ie-scans-2022",
+ "top-1000-za-scans-2022",
+ "top-5000-za-scans-2022",
+ "top-10000-za-scans-2022",
+ "top-50000-za-scans-2022",
+ "top-100000-za-scans-2022",
+ "top-5000-ar-scans-2022",
+ "top-10000-ar-scans-2022",
+ "top-50000-ar-scans-2022",
+ "top-100000-ar-scans-2022",
+ "top-5000-sn-scans-2022",
+ "top-10000-sn-scans-2022",
+ "top-50000-sn-scans-2022",
+ "top-100000-sn-scans-2022",
+ "top-500-qa-scans-2022",
+ "top-1000-qa-scans-2022",
+ "top-5000-qa-scans-2022",
+ "top-10000-qa-scans-2022",
+ "top-50000-qa-scans-2022",
+ "top-100000-qa-scans-2022",
+ "top-500-hk-scans-2022",
+ "top-1000-hk-scans-2022",
+ "top-5000-hk-scans-2022",
+ "top-10000-hk-scans-2022",
+ "top-50000-hk-scans-2022",
+ "top-100000-hk-scans-2022",
+ "top-5000-pl-scans-2022",
+ "top-10000-pl-scans-2022",
+ "top-50000-pl-scans-2022",
+ "top-100000-pl-scans-2022",
+ "top-5000-cz-scans-2022",
+ "top-10000-cz-scans-2022",
+ "top-50000-cz-scans-2022",
+ "top-100000-cz-scans-2022",
+ "top-1000-ua-scans-2022",
+ "top-5000-ua-scans-2022",
+ "top-10000-ua-scans-2022",
+ "top-50000-ua-scans-2022",
+ "top-100000-ua-scans-2022",
+ "top-500-al-scans-2022",
+ "top-1000-al-scans-2022",
+ "top-5000-al-scans-2022",
+ "top-10000-al-scans-2022",
+ "top-50000-al-scans-2022",
+ "top-100000-al-scans-2022",
+ "top-10000-hu-scans-2022",
+ "top-50000-hu-scans-2022",
+ "top-100000-hu-scans-2022",
+ "top-5000-ci-scans-2022",
+ "top-10000-ci-scans-2022",
+ "top-50000-ci-scans-2022",
+ "top-100000-ci-scans-2022",
+ "top-5000-no-scans-2022",
+ "top-10000-no-scans-2022",
+ "top-50000-no-scans-2022",
+ "top-100000-no-scans-2022",
+ "top-500-kw-scans-2022",
+ "top-1000-kw-scans-2022",
+ "top-5000-kw-scans-2022",
+ "top-10000-kw-scans-2022",
+ "top-50000-kw-scans-2022",
+ "top-100000-kw-scans-2022",
+ "top-50-scans-2023",
+ "top-100-scans-2023",
+ "top-500-scans-2023",
+ "top-1000-scans-2023",
+ "top-5000-scans-2023",
+ "top-10000-scans-2023",
+ "top-50000-scans-2023",
+ "top-100000-scans-2023",
+ "at-least-5-scans-2023",
+ "at-least-10-scans-2023",
+ "top-75-percent-scans-2023",
+ "top-80-percent-scans-2023",
+ "top-85-percent-scans-2023",
+ "top-90-percent-scans-2023",
+ "top-100-fr-scans-2023",
+ "top-500-fr-scans-2023",
+ "top-1000-fr-scans-2023",
+ "top-5000-fr-scans-2023",
+ "top-10000-fr-scans-2023",
+ "top-50000-fr-scans-2023",
+ "top-100000-fr-scans-2023",
+ "top-country-fr-scans-2023",
+ "at-least-5-fr-scans-2023",
+ "at-least-10-fr-scans-2023",
+ "top-100-gb-scans-2023",
+ "top-500-gb-scans-2023",
+ "top-1000-gb-scans-2023",
+ "top-5000-gb-scans-2023",
+ "top-10000-gb-scans-2023",
+ "top-50000-gb-scans-2023",
+ "top-100000-gb-scans-2023",
+ "at-least-5-gb-scans-2023",
+ "at-least-10-gb-scans-2023",
+ "top-1000-es-scans-2023",
+ "top-5000-es-scans-2023",
+ "top-10000-es-scans-2023",
+ "top-50000-es-scans-2023",
+ "top-100000-es-scans-2023",
+ "at-least-5-es-scans-2023",
+ "at-least-10-es-scans-2023",
+ "top-100-it-scans-2023",
+ "top-500-it-scans-2023",
+ "top-1000-it-scans-2023",
+ "top-5000-it-scans-2023",
+ "top-10000-it-scans-2023",
+ "top-50000-it-scans-2023",
+ "top-100000-it-scans-2023",
+ "at-least-5-it-scans-2023",
+ "at-least-10-it-scans-2023",
+ "top-500-de-scans-2023",
+ "top-1000-de-scans-2023",
+ "top-5000-de-scans-2023",
+ "top-10000-de-scans-2023",
+ "top-50000-de-scans-2023",
+ "top-100000-de-scans-2023",
+ "at-least-5-de-scans-2023",
+ "at-least-10-de-scans-2023",
+ "top-500-bg-scans-2023",
+ "top-1000-bg-scans-2023",
+ "top-5000-bg-scans-2023",
+ "top-10000-bg-scans-2023",
+ "top-50000-bg-scans-2023",
+ "top-100000-bg-scans-2023",
+ "at-least-5-bg-scans-2023",
+ "at-least-10-bg-scans-2023",
+ "top-1000-ma-scans-2023",
+ "top-5000-ma-scans-2023",
+ "top-10000-ma-scans-2023",
+ "top-50000-ma-scans-2023",
+ "top-100000-ma-scans-2023",
+ "at-least-5-ma-scans-2023",
+ "at-least-10-ma-scans-2023",
+ "top-5000-ro-scans-2023",
+ "top-10000-ro-scans-2023",
+ "top-50000-ro-scans-2023",
+ "top-100000-ro-scans-2023",
+ "at-least-5-ro-scans-2023",
+ "at-least-10-ro-scans-2023",
+ "top-5000-be-scans-2023",
+ "top-10000-be-scans-2023",
+ "top-50000-be-scans-2023",
+ "top-100000-be-scans-2023",
+ "top-50-dk-scans-2023",
+ "top-100-dk-scans-2023",
+ "top-500-dk-scans-2023",
+ "top-1000-dk-scans-2023",
+ "top-5000-dk-scans-2023",
+ "top-10000-dk-scans-2023",
+ "top-50000-dk-scans-2023",
+ "top-100000-dk-scans-2023",
+ "top-5000-ch-scans-2023",
+ "top-10000-ch-scans-2023",
+ "top-50000-ch-scans-2023",
+ "top-100000-ch-scans-2023",
+ "top-500-hr-scans-2023",
+ "top-1000-hr-scans-2023",
+ "top-5000-hr-scans-2023",
+ "top-10000-hr-scans-2023",
+ "top-50000-hr-scans-2023",
+ "top-100000-hr-scans-2023",
+ "top-1000-ie-scans-2023",
+ "top-5000-ie-scans-2023",
+ "top-10000-ie-scans-2023",
+ "top-50000-ie-scans-2023",
+ "top-100000-ie-scans-2023",
+ "top-500-se-scans-2023",
+ "top-1000-se-scans-2023",
+ "top-5000-se-scans-2023",
+ "top-10000-se-scans-2023",
+ "top-50000-se-scans-2023",
+ "top-100000-se-scans-2023",
+ "top-5000-pt-scans-2023",
+ "top-10000-pt-scans-2023",
+ "top-50000-pt-scans-2023",
+ "top-100000-pt-scans-2023",
+ "top-50-jp-scans-2023",
+ "top-100-jp-scans-2023",
+ "top-500-jp-scans-2023",
+ "top-1000-jp-scans-2023",
+ "top-5000-jp-scans-2023",
+ "top-10000-jp-scans-2023",
+ "top-50000-jp-scans-2023",
+ "top-100000-jp-scans-2023",
+ "top-500-fi-scans-2023",
+ "top-1000-fi-scans-2023",
+ "top-5000-fi-scans-2023",
+ "top-10000-fi-scans-2023",
+ "top-50000-fi-scans-2023",
+ "top-100000-fi-scans-2023",
+ "top-5000-pl-scans-2023",
+ "top-10000-pl-scans-2023",
+ "top-50000-pl-scans-2023",
+ "top-100000-pl-scans-2023",
+ "top-1000-ua-scans-2023",
+ "top-5000-ua-scans-2023",
+ "top-10000-ua-scans-2023",
+ "top-50000-ua-scans-2023",
+ "top-100000-ua-scans-2023",
+ "top-5000-nl-scans-2023",
+ "top-10000-nl-scans-2023",
+ "top-50000-nl-scans-2023",
+ "top-100000-nl-scans-2023",
+ "top-500-mq-scans-2023",
+ "top-1000-mq-scans-2023",
+ "top-5000-mq-scans-2023",
+ "top-10000-mq-scans-2023",
+ "top-50000-mq-scans-2023",
+ "top-100000-mq-scans-2023",
+ "top-100-il-scans-2023",
+ "top-500-il-scans-2023",
+ "top-1000-il-scans-2023",
+ "top-5000-il-scans-2023",
+ "top-10000-il-scans-2023",
+ "top-50000-il-scans-2023",
+ "top-100000-il-scans-2023",
+ "top-500-re-scans-2023",
+ "top-1000-re-scans-2023",
+ "top-5000-re-scans-2023",
+ "top-10000-re-scans-2023",
+ "top-50000-re-scans-2023",
+ "top-100000-re-scans-2023",
+ "top-1000-tn-scans-2023",
+ "top-5000-tn-scans-2023",
+ "top-10000-tn-scans-2023",
+ "top-50000-tn-scans-2023",
+ "top-100000-tn-scans-2023",
+ "top-100-sg-scans-2023",
+ "top-500-sg-scans-2023",
+ "top-1000-sg-scans-2023",
+ "top-5000-sg-scans-2023",
+ "top-10000-sg-scans-2023",
+ "top-50000-sg-scans-2023",
+ "top-100000-sg-scans-2023",
+ "top-5000-dz-scans-2023",
+ "top-10000-dz-scans-2023",
+ "top-50000-dz-scans-2023",
+ "top-100000-dz-scans-2023",
+ "top-1000-hk-scans-2023",
+ "top-5000-hk-scans-2023",
+ "top-10000-hk-scans-2023",
+ "top-50000-hk-scans-2023",
+ "top-100000-hk-scans-2023",
+ "top-50-mc-scans-2023",
+ "top-100-mc-scans-2023",
+ "top-500-mc-scans-2023",
+ "top-1000-mc-scans-2023",
+ "top-5000-mc-scans-2023",
+ "top-10000-mc-scans-2023",
+ "top-50000-mc-scans-2023",
+ "top-100000-mc-scans-2023",
+ "top-5000-sk-scans-2023",
+ "top-10000-sk-scans-2023",
+ "top-50000-sk-scans-2023",
+ "top-100000-sk-scans-2023",
+ "top-5000-cy-scans-2023",
+ "top-10000-cy-scans-2023",
+ "top-50000-cy-scans-2023",
+ "top-100000-cy-scans-2023",
+ "top-5000-at-scans-2023",
+ "top-10000-at-scans-2023",
+ "top-50000-at-scans-2023",
+ "top-100000-at-scans-2023",
+ "top-500-ae-scans-2023",
+ "top-1000-ae-scans-2023",
+ "top-5000-ae-scans-2023",
+ "top-10000-ae-scans-2023",
+ "top-50000-ae-scans-2023",
+ "top-100000-ae-scans-2023",
+ "top-1000-gp-scans-2023",
+ "top-5000-gp-scans-2023",
+ "top-10000-gp-scans-2023",
+ "top-50000-gp-scans-2023",
+ "top-100000-gp-scans-2023",
+ "top-5000-gr-scans-2023",
+ "top-10000-gr-scans-2023",
+ "top-50000-gr-scans-2023",
+ "top-100000-gr-scans-2023",
+ "top-1000-th-scans-2023",
+ "top-5000-th-scans-2023",
+ "top-10000-th-scans-2023",
+ "top-50000-th-scans-2023",
+ "top-100000-th-scans-2023",
+ "top-500-za-scans-2023",
+ "top-1000-za-scans-2023",
+ "top-5000-za-scans-2023",
+ "top-10000-za-scans-2023",
+ "top-50000-za-scans-2023",
+ "top-100000-za-scans-2023",
+ "top-500-cg-scans-2023",
+ "top-1000-cg-scans-2023",
+ "top-5000-cg-scans-2023",
+ "top-10000-cg-scans-2023",
+ "top-50000-cg-scans-2023",
+ "top-100000-cg-scans-2023",
+ "top-10000-ru-scans-2023",
+ "top-50000-ru-scans-2023",
+ "top-100000-ru-scans-2023",
+ "top-1000-in-scans-2023",
+ "top-5000-in-scans-2023",
+ "top-10000-in-scans-2023",
+ "top-50000-in-scans-2023",
+ "top-100000-in-scans-2023",
+ "top-10000-cz-scans-2023",
+ "top-50000-cz-scans-2023",
+ "top-100000-cz-scans-2023",
+ "top-50000-us-scans-2023",
+ "top-100000-us-scans-2023",
+ "top-50-scans-2024",
+ "top-100-scans-2024",
+ "top-500-scans-2024",
+ "top-1000-scans-2024",
+ "top-5000-scans-2024",
+ "top-10000-scans-2024",
+ "top-50000-scans-2024",
+ "top-100000-scans-2024",
+ "at-least-5-scans-2024",
+ "at-least-10-scans-2024",
+ "top-75-percent-scans-2024",
+ "top-80-percent-scans-2024",
+ "top-85-percent-scans-2024",
+ "top-90-percent-scans-2024",
+ "top-50-gb-scans-2024",
+ "top-100-gb-scans-2024",
+ "top-500-gb-scans-2024",
+ "top-1000-gb-scans-2024",
+ "top-5000-gb-scans-2024",
+ "top-10000-gb-scans-2024",
+ "top-50000-gb-scans-2024",
+ "top-100000-gb-scans-2024",
+ "top-country-gb-scans-2024",
+ "at-least-5-gb-scans-2024",
+ "at-least-10-gb-scans-2024",
+ "top-50-fr-scans-2024",
+ "top-100-fr-scans-2024",
+ "top-500-fr-scans-2024",
+ "top-1000-fr-scans-2024",
+ "top-5000-fr-scans-2024",
+ "top-10000-fr-scans-2024",
+ "top-50000-fr-scans-2024",
+ "top-100000-fr-scans-2024",
+ "at-least-5-fr-scans-2024",
+ "at-least-10-fr-scans-2024",
+ "top-1000-ma-scans-2024",
+ "top-5000-ma-scans-2024",
+ "top-10000-ma-scans-2024",
+ "top-50000-ma-scans-2024",
+ "top-100000-ma-scans-2024",
+ "at-least-5-ma-scans-2024",
+ "at-least-10-ma-scans-2024",
+ "top-100-it-scans-2024",
+ "top-500-it-scans-2024",
+ "top-1000-it-scans-2024",
+ "top-5000-it-scans-2024",
+ "top-10000-it-scans-2024",
+ "top-50000-it-scans-2024",
+ "top-100000-it-scans-2024",
+ "at-least-5-it-scans-2024",
+ "at-least-10-it-scans-2024",
+ "top-500-es-scans-2024",
+ "top-1000-es-scans-2024",
+ "top-5000-es-scans-2024",
+ "top-10000-es-scans-2024",
+ "top-50000-es-scans-2024",
+ "top-100000-es-scans-2024",
+ "at-least-5-es-scans-2024",
+ "at-least-10-es-scans-2024",
+ "top-500-de-scans-2024",
+ "top-1000-de-scans-2024",
+ "top-5000-de-scans-2024",
+ "top-10000-de-scans-2024",
+ "top-50000-de-scans-2024",
+ "top-100000-de-scans-2024",
+ "at-least-5-de-scans-2024",
+ "at-least-10-de-scans-2024",
+ "top-500-ro-scans-2024",
+ "top-1000-ro-scans-2024",
+ "top-5000-ro-scans-2024",
+ "top-10000-ro-scans-2024",
+ "top-50000-ro-scans-2024",
+ "top-100000-ro-scans-2024",
+ "at-least-5-ro-scans-2024",
+ "at-least-10-ro-scans-2024",
+ "top-50-ie-scans-2024",
+ "top-100-ie-scans-2024",
+ "top-500-ie-scans-2024",
+ "top-1000-ie-scans-2024",
+ "top-5000-ie-scans-2024",
+ "top-10000-ie-scans-2024",
+ "top-50000-ie-scans-2024",
+ "top-100000-ie-scans-2024",
+ "at-least-5-ie-scans-2024",
+ "at-least-10-ie-scans-2024",
+ "top-100-nl-scans-2024",
+ "top-500-nl-scans-2024",
+ "top-1000-nl-scans-2024",
+ "top-5000-nl-scans-2024",
+ "top-10000-nl-scans-2024",
+ "top-50000-nl-scans-2024",
+ "top-100000-nl-scans-2024",
+ "at-least-5-nl-scans-2024",
+ "at-least-10-nl-scans-2024",
+ "top-50-cz-scans-2024",
+ "top-100-cz-scans-2024",
+ "top-500-cz-scans-2024",
+ "top-1000-cz-scans-2024",
+ "top-5000-cz-scans-2024",
+ "top-10000-cz-scans-2024",
+ "top-50000-cz-scans-2024",
+ "top-100000-cz-scans-2024",
+ "at-least-5-cz-scans-2024",
+ "top-100-at-scans-2024",
+ "top-500-at-scans-2024",
+ "top-1000-at-scans-2024",
+ "top-5000-at-scans-2024",
+ "top-10000-at-scans-2024",
+ "top-50000-at-scans-2024",
+ "top-100000-at-scans-2024",
+ "at-least-5-at-scans-2024",
+ "top-500-tn-scans-2024",
+ "top-1000-tn-scans-2024",
+ "top-5000-tn-scans-2024",
+ "top-10000-tn-scans-2024",
+ "top-50000-tn-scans-2024",
+ "top-100000-tn-scans-2024",
+ "at-least-5-tn-scans-2024",
+ "top-5000-be-scans-2024",
+ "top-10000-be-scans-2024",
+ "top-50000-be-scans-2024",
+ "top-100000-be-scans-2024",
+ "at-least-5-be-scans-2024",
+ "top-5000-bg-scans-2024",
+ "top-10000-bg-scans-2024",
+ "top-50000-bg-scans-2024",
+ "top-100000-bg-scans-2024",
+ "at-least-5-bg-scans-2024",
+ "top-100-re-scans-2024",
+ "top-500-re-scans-2024",
+ "top-1000-re-scans-2024",
+ "top-5000-re-scans-2024",
+ "top-10000-re-scans-2024",
+ "top-50000-re-scans-2024",
+ "top-100000-re-scans-2024",
+ "at-least-5-re-scans-2024",
+ "top-1000-dz-scans-2024",
+ "top-5000-dz-scans-2024",
+ "top-10000-dz-scans-2024",
+ "top-50000-dz-scans-2024",
+ "top-100000-dz-scans-2024",
+ "top-5000-pl-scans-2024",
+ "top-10000-pl-scans-2024",
+ "top-50000-pl-scans-2024",
+ "top-100000-pl-scans-2024",
+ "top-500-sk-scans-2024",
+ "top-1000-sk-scans-2024",
+ "top-5000-sk-scans-2024",
+ "top-10000-sk-scans-2024",
+ "top-50000-sk-scans-2024",
+ "top-100000-sk-scans-2024",
+ "top-100-lb-scans-2024",
+ "top-500-lb-scans-2024",
+ "top-1000-lb-scans-2024",
+ "top-5000-lb-scans-2024",
+ "top-10000-lb-scans-2024",
+ "top-50000-lb-scans-2024",
+ "top-100000-lb-scans-2024",
+ "top-100-cy-scans-2024",
+ "top-500-cy-scans-2024",
+ "top-1000-cy-scans-2024",
+ "top-5000-cy-scans-2024",
+ "top-10000-cy-scans-2024",
+ "top-50000-cy-scans-2024",
+ "top-100000-cy-scans-2024",
+ "top-500-dk-scans-2024",
+ "top-1000-dk-scans-2024",
+ "top-5000-dk-scans-2024",
+ "top-10000-dk-scans-2024",
+ "top-50000-dk-scans-2024",
+ "top-100000-dk-scans-2024",
+ "top-500-no-scans-2024",
+ "top-1000-no-scans-2024",
+ "top-5000-no-scans-2024",
+ "top-10000-no-scans-2024",
+ "top-50000-no-scans-2024",
+ "top-100000-no-scans-2024",
+ "top-50-sg-scans-2024",
+ "top-100-sg-scans-2024",
+ "top-500-sg-scans-2024",
+ "top-1000-sg-scans-2024",
+ "top-5000-sg-scans-2024",
+ "top-10000-sg-scans-2024",
+ "top-50000-sg-scans-2024",
+ "top-100000-sg-scans-2024",
+ "top-5000-pt-scans-2024",
+ "top-10000-pt-scans-2024",
+ "top-50000-pt-scans-2024",
+ "top-100000-pt-scans-2024",
+ "top-1000-se-scans-2024",
+ "top-5000-se-scans-2024",
+ "top-10000-se-scans-2024",
+ "top-50000-se-scans-2024",
+ "top-100000-se-scans-2024",
+ "top-500-il-scans-2024",
+ "top-1000-il-scans-2024",
+ "top-5000-il-scans-2024",
+ "top-10000-il-scans-2024",
+ "top-50000-il-scans-2024",
+ "top-100000-il-scans-2024",
+ "top-500-sa-scans-2024",
+ "top-1000-sa-scans-2024",
+ "top-5000-sa-scans-2024",
+ "top-10000-sa-scans-2024",
+ "top-50000-sa-scans-2024",
+ "top-100000-sa-scans-2024",
+ "top-5000-fi-scans-2024",
+ "top-10000-fi-scans-2024",
+ "top-50000-fi-scans-2024",
+ "top-100000-fi-scans-2024",
+ "top-50-hk-scans-2024",
+ "top-100-hk-scans-2024",
+ "top-500-hk-scans-2024",
+ "top-1000-hk-scans-2024",
+ "top-5000-hk-scans-2024",
+ "top-10000-hk-scans-2024",
+ "top-50000-hk-scans-2024",
+ "top-100000-hk-scans-2024",
+ "top-500-lu-scans-2024",
+ "top-1000-lu-scans-2024",
+ "top-5000-lu-scans-2024",
+ "top-10000-lu-scans-2024",
+ "top-50000-lu-scans-2024",
+ "top-100000-lu-scans-2024",
+ "top-500-th-scans-2024",
+ "top-1000-th-scans-2024",
+ "top-5000-th-scans-2024",
+ "top-10000-th-scans-2024",
+ "top-50000-th-scans-2024",
+ "top-100000-th-scans-2024",
+ "top-100-mu-scans-2024",
+ "top-500-mu-scans-2024",
+ "top-1000-mu-scans-2024",
+ "top-5000-mu-scans-2024",
+ "top-10000-mu-scans-2024",
+ "top-50000-mu-scans-2024",
+ "top-100000-mu-scans-2024",
+ "top-5000-ua-scans-2024",
+ "top-10000-ua-scans-2024",
+ "top-50000-ua-scans-2024",
+ "top-100000-ua-scans-2024",
+ "top-10000-ch-scans-2024",
+ "top-50000-ch-scans-2024",
+ "top-100000-ch-scans-2024",
+ "top-500-md-scans-2024",
+ "top-1000-md-scans-2024",
+ "top-5000-md-scans-2024",
+ "top-10000-md-scans-2024",
+ "top-50000-md-scans-2024",
+ "top-100000-md-scans-2024",
+ "top-50000-us-scans-2024",
+ "top-100000-us-scans-2024",
+ "top-500-mz-scans-2024",
+ "top-1000-mz-scans-2024",
+ "top-5000-mz-scans-2024",
+ "top-10000-mz-scans-2024",
+ "top-50000-mz-scans-2024",
+ "top-100000-mz-scans-2024",
+ "top-5000-si-scans-2024",
+ "top-10000-si-scans-2024",
+ "top-50000-si-scans-2024",
+ "top-100000-si-scans-2024",
+ "top-5000-gr-scans-2024",
+ "top-10000-gr-scans-2024",
+ "top-50000-gr-scans-2024",
+ "top-100000-gr-scans-2024",
+ "top-1000-id-scans-2024",
+ "top-5000-id-scans-2024",
+ "top-10000-id-scans-2024",
+ "top-50000-id-scans-2024",
+ "top-100000-id-scans-2024",
+ "top-5000-hu-scans-2024",
+ "top-10000-hu-scans-2024",
+ "top-50000-hu-scans-2024",
+ "top-100000-hu-scans-2024",
+ "top-500-mt-scans-2024",
+ "top-1000-mt-scans-2024",
+ "top-5000-mt-scans-2024",
+ "top-10000-mt-scans-2024",
+ "top-50000-mt-scans-2024",
+ "top-100000-mt-scans-2024",
+ "top-500-mc-scans-2024",
+ "top-1000-mc-scans-2024",
+ "top-5000-mc-scans-2024",
+ "top-10000-mc-scans-2024",
+ "top-50000-mc-scans-2024",
+ "top-100000-mc-scans-2024",
+ "top-100-np-scans-2024",
+ "top-500-np-scans-2024",
+ "top-1000-np-scans-2024",
+ "top-5000-np-scans-2024",
+ "top-10000-np-scans-2024",
+ "top-50000-np-scans-2024",
+ "top-100000-np-scans-2024",
+ "top-100-cg-scans-2024",
+ "top-500-cg-scans-2024",
+ "top-1000-cg-scans-2024",
+ "top-5000-cg-scans-2024",
+ "top-10000-cg-scans-2024",
+ "top-50000-cg-scans-2024",
+ "top-100000-cg-scans-2024",
+ "top-100-gf-scans-2024",
+ "top-500-gf-scans-2024",
+ "top-1000-gf-scans-2024",
+ "top-5000-gf-scans-2024",
+ "top-10000-gf-scans-2024",
+ "top-50000-gf-scans-2024",
+ "top-100000-gf-scans-2024",
+ "top-500-bd-scans-2024",
+ "top-1000-bd-scans-2024",
+ "top-5000-bd-scans-2024",
+ "top-10000-bd-scans-2024",
+ "top-50000-bd-scans-2024",
+ "top-100000-bd-scans-2024",
+ "top-5000-gp-scans-2024",
+ "top-10000-gp-scans-2024",
+ "top-50000-gp-scans-2024",
+ "top-100000-gp-scans-2024",
+ "top-5000-ae-scans-2024",
+ "top-10000-ae-scans-2024",
+ "top-50000-ae-scans-2024",
+ "top-100000-ae-scans-2024",
+ "top-500-ly-scans-2024",
+ "top-1000-ly-scans-2024",
+ "top-5000-ly-scans-2024",
+ "top-10000-ly-scans-2024",
+ "top-50000-ly-scans-2024",
+ "top-100000-ly-scans-2024",
+ "top-5000-mq-scans-2024",
+ "top-10000-mq-scans-2024",
+ "top-50000-mq-scans-2024",
+ "top-100000-mq-scans-2024",
+ "top-500-br-scans-2024",
+ "top-1000-br-scans-2024",
+ "top-5000-br-scans-2024",
+ "top-10000-br-scans-2024",
+ "top-50000-br-scans-2024",
+ "top-100000-br-scans-2024",
+ "top-500-uy-scans-2024",
+ "top-1000-uy-scans-2024",
+ "top-5000-uy-scans-2024",
+ "top-10000-uy-scans-2024",
+ "top-50000-uy-scans-2024",
+ "top-100000-uy-scans-2024",
+ "top-50-scans-2025",
+ "top-100-scans-2025",
+ "top-500-scans-2025",
+ "top-1000-scans-2025",
+ "top-5000-scans-2025",
+ "top-10000-scans-2025",
+ "top-50000-scans-2025",
+ "top-100000-scans-2025",
+ "at-least-5-scans-2025",
+ "at-least-10-scans-2025",
+ "top-75-percent-scans-2025",
+ "top-80-percent-scans-2025",
+ "top-85-percent-scans-2025",
+ "top-90-percent-scans-2025",
+ "top-50-fr-scans-2025",
+ "top-100-fr-scans-2025",
+ "top-500-fr-scans-2025",
+ "top-1000-fr-scans-2025",
+ "top-5000-fr-scans-2025",
+ "top-10000-fr-scans-2025",
+ "top-50000-fr-scans-2025",
+ "top-100000-fr-scans-2025",
+ "top-country-fr-scans-2025",
+ "at-least-5-fr-scans-2025",
+ "at-least-10-fr-scans-2025",
+ "top-50-gb-scans-2025",
+ "top-100-gb-scans-2025",
+ "top-500-gb-scans-2025",
+ "top-1000-gb-scans-2025",
+ "top-5000-gb-scans-2025",
+ "top-10000-gb-scans-2025",
+ "top-50000-gb-scans-2025",
+ "top-100000-gb-scans-2025",
+ "at-least-5-gb-scans-2025",
+ "at-least-10-gb-scans-2025",
+ "top-1000-ma-scans-2025",
+ "top-5000-ma-scans-2025",
+ "top-10000-ma-scans-2025",
+ "top-50000-ma-scans-2025",
+ "top-100000-ma-scans-2025",
+ "at-least-5-ma-scans-2025",
+ "at-least-10-ma-scans-2025",
+ "top-500-it-scans-2025",
+ "top-1000-it-scans-2025",
+ "top-5000-it-scans-2025",
+ "top-10000-it-scans-2025",
+ "top-50000-it-scans-2025",
+ "top-100000-it-scans-2025",
+ "at-least-5-it-scans-2025",
+ "at-least-10-it-scans-2025",
+ "top-1000-es-scans-2025",
+ "top-5000-es-scans-2025",
+ "top-10000-es-scans-2025",
+ "top-50000-es-scans-2025",
+ "top-100000-es-scans-2025",
+ "at-least-5-es-scans-2025",
+ "at-least-10-es-scans-2025",
+ "top-500-de-scans-2025",
+ "top-1000-de-scans-2025",
+ "top-5000-de-scans-2025",
+ "top-10000-de-scans-2025",
+ "top-50000-de-scans-2025",
+ "top-100000-de-scans-2025",
+ "at-least-5-de-scans-2025",
+ "at-least-10-de-scans-2025",
+ "top-100-nl-scans-2025",
+ "top-500-nl-scans-2025",
+ "top-1000-nl-scans-2025",
+ "top-5000-nl-scans-2025",
+ "top-10000-nl-scans-2025",
+ "top-50000-nl-scans-2025",
+ "top-100000-nl-scans-2025",
+ "at-least-5-nl-scans-2025",
+ "at-least-10-nl-scans-2025",
+ "top-500-ro-scans-2025",
+ "top-1000-ro-scans-2025",
+ "top-5000-ro-scans-2025",
+ "top-10000-ro-scans-2025",
+ "top-50000-ro-scans-2025",
+ "top-100000-ro-scans-2025",
+ "at-least-5-ro-scans-2025",
+ "at-least-10-ro-scans-2025",
+ "top-50-ie-scans-2025",
+ "top-100-ie-scans-2025",
+ "top-500-ie-scans-2025",
+ "top-1000-ie-scans-2025",
+ "top-5000-ie-scans-2025",
+ "top-10000-ie-scans-2025",
+ "top-50000-ie-scans-2025",
+ "top-100000-ie-scans-2025",
+ "at-least-5-ie-scans-2025",
+ "at-least-10-ie-scans-2025",
+ "top-1000-be-scans-2025",
+ "top-5000-be-scans-2025",
+ "top-10000-be-scans-2025",
+ "top-50000-be-scans-2025",
+ "top-100000-be-scans-2025",
+ "at-least-5-be-scans-2025",
+ "at-least-10-be-scans-2025",
+ "top-5000-pt-scans-2025",
+ "top-10000-pt-scans-2025",
+ "top-50000-pt-scans-2025",
+ "top-100000-pt-scans-2025",
+ "at-least-5-pt-scans-2025",
+ "top-100-re-scans-2025",
+ "top-500-re-scans-2025",
+ "top-1000-re-scans-2025",
+ "top-5000-re-scans-2025",
+ "top-10000-re-scans-2025",
+ "top-50000-re-scans-2025",
+ "top-100000-re-scans-2025",
+ "at-least-5-re-scans-2025",
+ "top-500-at-scans-2025",
+ "top-1000-at-scans-2025",
+ "top-5000-at-scans-2025",
+ "top-10000-at-scans-2025",
+ "top-50000-at-scans-2025",
+ "top-100000-at-scans-2025",
+ "at-least-5-at-scans-2025",
+ "top-500-se-scans-2025",
+ "top-1000-se-scans-2025",
+ "top-5000-se-scans-2025",
+ "top-10000-se-scans-2025",
+ "top-50000-se-scans-2025",
+ "top-100000-se-scans-2025",
+ "at-least-5-se-scans-2025",
+ "top-5000-pl-scans-2025",
+ "top-10000-pl-scans-2025",
+ "top-50000-pl-scans-2025",
+ "top-100000-pl-scans-2025",
+ "at-least-5-pl-scans-2025",
+ "top-500-sk-scans-2025",
+ "top-1000-sk-scans-2025",
+ "top-5000-sk-scans-2025",
+ "top-10000-sk-scans-2025",
+ "top-50000-sk-scans-2025",
+ "top-100000-sk-scans-2025",
+ "top-500-no-scans-2025",
+ "top-1000-no-scans-2025",
+ "top-5000-no-scans-2025",
+ "top-10000-no-scans-2025",
+ "top-50000-no-scans-2025",
+ "top-100000-no-scans-2025",
+ "top-100-md-scans-2025",
+ "top-500-md-scans-2025",
+ "top-1000-md-scans-2025",
+ "top-5000-md-scans-2025",
+ "top-10000-md-scans-2025",
+ "top-50000-md-scans-2025",
+ "top-100000-md-scans-2025",
+ "top-50-ae-scans-2025",
+ "top-100-ae-scans-2025",
+ "top-500-ae-scans-2025",
+ "top-1000-ae-scans-2025",
+ "top-5000-ae-scans-2025",
+ "top-10000-ae-scans-2025",
+ "top-50000-ae-scans-2025",
+ "top-100000-ae-scans-2025",
+ "top-5000-dz-scans-2025",
+ "top-10000-dz-scans-2025",
+ "top-50000-dz-scans-2025",
+ "top-100000-dz-scans-2025",
+ "top-5000-ch-scans-2025",
+ "top-10000-ch-scans-2025",
+ "top-50000-ch-scans-2025",
+ "top-100000-ch-scans-2025",
+ "top-500-fi-scans-2025",
+ "top-1000-fi-scans-2025",
+ "top-5000-fi-scans-2025",
+ "top-10000-fi-scans-2025",
+ "top-50000-fi-scans-2025",
+ "top-100000-fi-scans-2025",
+ "top-10-hk-scans-2025",
+ "top-50-hk-scans-2025",
+ "top-100-hk-scans-2025",
+ "top-500-hk-scans-2025",
+ "top-1000-hk-scans-2025",
+ "top-5000-hk-scans-2025",
+ "top-10000-hk-scans-2025",
+ "top-50000-hk-scans-2025",
+ "top-100000-hk-scans-2025",
+ "top-500-sa-scans-2025",
+ "top-1000-sa-scans-2025",
+ "top-5000-sa-scans-2025",
+ "top-10000-sa-scans-2025",
+ "top-50000-sa-scans-2025",
+ "top-100000-sa-scans-2025",
+ "top-500-dk-scans-2025",
+ "top-1000-dk-scans-2025",
+ "top-5000-dk-scans-2025",
+ "top-10000-dk-scans-2025",
+ "top-50000-dk-scans-2025",
+ "top-100000-dk-scans-2025",
+ "top-50000-us-scans-2025",
+ "top-100000-us-scans-2025",
+ "top-5000-cz-scans-2025",
+ "top-10000-cz-scans-2025",
+ "top-50000-cz-scans-2025",
+ "top-100000-cz-scans-2025",
+ "top-500-za-scans-2025",
+ "top-1000-za-scans-2025",
+ "top-5000-za-scans-2025",
+ "top-10000-za-scans-2025",
+ "top-50000-za-scans-2025",
+ "top-100000-za-scans-2025",
+ "top-100-mu-scans-2025",
+ "top-500-mu-scans-2025",
+ "top-1000-mu-scans-2025",
+ "top-5000-mu-scans-2025",
+ "top-10000-mu-scans-2025",
+ "top-50000-mu-scans-2025",
+ "top-100000-mu-scans-2025",
+ "top-500-ad-scans-2025",
+ "top-1000-ad-scans-2025",
+ "top-5000-ad-scans-2025",
+ "top-10000-ad-scans-2025",
+ "top-50000-ad-scans-2025",
+ "top-100000-ad-scans-2025",
+ "top-5000-bg-scans-2025",
+ "top-10000-bg-scans-2025",
+ "top-50000-bg-scans-2025",
+ "top-100000-bg-scans-2025",
+ "top-1000-hu-scans-2025",
+ "top-5000-hu-scans-2025",
+ "top-10000-hu-scans-2025",
+ "top-50000-hu-scans-2025",
+ "top-100000-hu-scans-2025",
+ "top-5000-tn-scans-2025",
+ "top-10000-tn-scans-2025",
+ "top-50000-tn-scans-2025",
+ "top-100000-tn-scans-2025",
+ "top-1000-lu-scans-2025",
+ "top-5000-lu-scans-2025",
+ "top-10000-lu-scans-2025",
+ "top-50000-lu-scans-2025",
+ "top-100000-lu-scans-2025",
+ "top-5000-ua-scans-2025",
+ "top-10000-ua-scans-2025",
+ "top-50000-ua-scans-2025",
+ "top-100000-ua-scans-2025",
+ "top-500-cm-scans-2025",
+ "top-1000-cm-scans-2025",
+ "top-5000-cm-scans-2025",
+ "top-10000-cm-scans-2025",
+ "top-50000-cm-scans-2025",
+ "top-100000-cm-scans-2025",
+ "top-500-je-scans-2025",
+ "top-1000-je-scans-2025",
+ "top-5000-je-scans-2025",
+ "top-10000-je-scans-2025",
+ "top-50000-je-scans-2025",
+ "top-100000-je-scans-2025",
+ "top-500-bj-scans-2025",
+ "top-1000-bj-scans-2025",
+ "top-5000-bj-scans-2025",
+ "top-10000-bj-scans-2025",
+ "top-50000-bj-scans-2025",
+ "top-100000-bj-scans-2025",
+ "top-500-mr-scans-2025",
+ "top-1000-mr-scans-2025",
+ "top-5000-mr-scans-2025",
+ "top-10000-mr-scans-2025",
+ "top-50000-mr-scans-2025",
+ "top-100000-mr-scans-2025",
+ "top-500-ci-scans-2025",
+ "top-1000-ci-scans-2025",
+ "top-5000-ci-scans-2025",
+ "top-10000-ci-scans-2025",
+ "top-50000-ci-scans-2025",
+ "top-100000-ci-scans-2025",
+ "top-100-yt-scans-2025",
+ "top-500-yt-scans-2025",
+ "top-1000-yt-scans-2025",
+ "top-5000-yt-scans-2025",
+ "top-10000-yt-scans-2025",
+ "top-50000-yt-scans-2025",
+ "top-100000-yt-scans-2025",
+ "top-1000-gp-scans-2025",
+ "top-5000-gp-scans-2025",
+ "top-10000-gp-scans-2025",
+ "top-50000-gp-scans-2025",
+ "top-100000-gp-scans-2025",
+ "top-5000-si-scans-2025",
+ "top-10000-si-scans-2025",
+ "top-50000-si-scans-2025",
+ "top-100000-si-scans-2025",
+ "top-500-pa-scans-2025",
+ "top-1000-pa-scans-2025",
+ "top-5000-pa-scans-2025",
+ "top-10000-pa-scans-2025",
+ "top-50000-pa-scans-2025",
+ "top-100000-pa-scans-2025",
+ "top-1000-il-scans-2025",
+ "top-5000-il-scans-2025",
+ "top-10000-il-scans-2025",
+ "top-50000-il-scans-2025",
+ "top-100000-il-scans-2025",
+ "top-5000-ee-scans-2025",
+ "top-10000-ee-scans-2025",
+ "top-50000-ee-scans-2025",
+ "top-100000-ee-scans-2025",
+ "top-1000-om-scans-2025",
+ "top-5000-om-scans-2025",
+ "top-10000-om-scans-2025",
+ "top-50000-om-scans-2025",
+ "top-100000-om-scans-2025",
+ "top-5000-al-scans-2025",
+ "top-10000-al-scans-2025",
+ "top-50000-al-scans-2025",
+ "top-100000-al-scans-2025",
+ "top-1000-pf-scans-2025",
+ "top-5000-pf-scans-2025",
+ "top-10000-pf-scans-2025",
+ "top-50000-pf-scans-2025",
+ "top-100000-pf-scans-2025"
+ ],
+ "product": {},
+ "product_name": "Edelbitter-Schokolade",
+ "product_name_de": "Edelbitterschokolade Mild 90%",
+ "product_name_en": "Edelbitter-Schokolade",
+ "product_name_es": "Excellence chocolate 90% cacao",
+ "product_name_fi": "Excellence: 90% cocoa Dark Supreme",
+ "product_name_fr": "Excellence Noir Prodigieux 90% Cacao",
+ "product_name_it": "Fondente Prodigioso 90% Cacao",
+ "product_name_ja": "",
+ "product_name_nb": "",
+ "product_name_nl": "",
+ "product_name_pl": "",
+ "product_name_sv": "90% Cocoa",
+ "product_quantity": 100,
+ "product_quantity_unit": "g",
+ "product_type": "food",
+ "purchase_places": "Burlington, Deutschland, España, France, Italia, Madrid, Montargis, Oakville, République tchèque, Singapore, Toronto, Würzburg",
+ "purchase_places_hierarchy": [
+ "Burlington",
+ "Deutschland",
+ "España",
+ "France",
+ "Italia",
+ "Madrid",
+ "Montargis",
+ "Oakville",
+ "République tchèque",
+ "Singapore",
+ "Toronto",
+ "Würzburg"
+ ],
+ "purchase_places_lc": "en",
+ "purchase_places_tags": [
+ "Burlington",
+ "Deutschland",
+ "España",
+ "France",
+ "Italia",
+ "Madrid",
+ "Montargis",
+ "Oakville",
+ "République tchèque",
+ "Singapore",
+ "Toronto",
+ "Würzburg"
+ ],
+ "quantity": "100 g",
+ "removed_countries_tags": [],
+ "rev": 546,
+ "scans_n": 1264,
+ "schema_version": 999,
+ "scores": {},
+ "selected_images": {
+ "front": {
+ "display": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_de.517.400.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_en.544.400.jpg",
+ "es": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_es.401.400.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_fi.445.400.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_it.417.400.jpg",
+ "nb": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_nb.437.400.jpg"
+ },
+ "small": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_de.517.200.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_en.544.200.jpg",
+ "es": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_es.401.200.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_fi.445.200.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_it.417.200.jpg",
+ "nb": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_nb.437.200.jpg"
+ },
+ "thumb": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_de.517.100.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_en.544.100.jpg",
+ "es": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_es.401.100.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_fi.445.100.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_it.417.100.jpg",
+ "nb": "https://images.openfoodfacts.net/images/products/304/692/002/9759/front_nb.437.100.jpg"
+ }
+ },
+ "ingredients": {
+ "display": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_de.343.400.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_en.529.400.jpg",
+ "es": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_es.229.400.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_fi.169.400.jpg",
+ "fr": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_fr.523.400.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_it.419.400.jpg",
+ "ja": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_ja.500.400.jpg",
+ "nb": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_nb.443.400.jpg",
+ "pl": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_pl.400.400.jpg",
+ "sv": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_sv.197.400.jpg"
+ },
+ "small": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_de.343.200.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_en.529.200.jpg",
+ "es": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_es.229.200.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_fi.169.200.jpg",
+ "fr": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_fr.523.200.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_it.419.200.jpg",
+ "ja": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_ja.500.200.jpg",
+ "nb": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_nb.443.200.jpg",
+ "pl": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_pl.400.200.jpg",
+ "sv": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_sv.197.200.jpg"
+ },
+ "thumb": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_de.343.100.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_en.529.100.jpg",
+ "es": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_es.229.100.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_fi.169.100.jpg",
+ "fr": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_fr.523.100.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_it.419.100.jpg",
+ "ja": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_ja.500.100.jpg",
+ "nb": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_nb.443.100.jpg",
+ "pl": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_pl.400.100.jpg",
+ "sv": "https://images.openfoodfacts.net/images/products/304/692/002/9759/ingredients_sv.197.100.jpg"
+ }
+ },
+ "nutrition": {
+ "display": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_de.345.400.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_en.546.400.jpg",
+ "es": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_es.180.400.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_fi.446.400.jpg",
+ "fr": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_fr.462.400.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_it.421.400.jpg",
+ "ja": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_ja.499.400.jpg",
+ "nb": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_nb.441.400.jpg",
+ "sv": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_sv.201.400.jpg"
+ },
+ "small": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_de.345.200.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_en.546.200.jpg",
+ "es": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_es.180.200.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_fi.446.200.jpg",
+ "fr": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_fr.462.200.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_it.421.200.jpg",
+ "ja": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_ja.499.200.jpg",
+ "nb": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_nb.441.200.jpg",
+ "sv": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_sv.201.200.jpg"
+ },
+ "thumb": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_de.345.100.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_en.546.100.jpg",
+ "es": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_es.180.100.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_fi.446.100.jpg",
+ "fr": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_fr.462.100.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_it.421.100.jpg",
+ "ja": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_ja.499.100.jpg",
+ "nb": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_nb.441.100.jpg",
+ "sv": "https://images.openfoodfacts.net/images/products/304/692/002/9759/nutrition_sv.201.100.jpg"
+ }
+ },
+ "packaging": {
+ "display": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_de.347.400.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_en.531.400.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_fi.447.400.jpg",
+ "fr": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_fr.379.400.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_it.423.400.jpg"
+ },
+ "small": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_de.347.200.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_en.531.200.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_fi.447.200.jpg",
+ "fr": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_fr.379.200.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_it.423.200.jpg"
+ },
+ "thumb": {
+ "de": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_de.347.100.jpg",
+ "en": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_en.531.100.jpg",
+ "fi": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_fi.447.100.jpg",
+ "fr": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_fr.379.100.jpg",
+ "it": "https://images.openfoodfacts.net/images/products/304/692/002/9759/packaging_it.423.100.jpg"
+ }
+ }
+ },
+ "serving_quantity": 10,
+ "serving_quantity_unit": "g",
+ "serving_size": "1 square (10 g)",
+ "sortkey": 1608126304,
+ "sources": [
+ {
+ "fields": [
+ "countries",
+ "ingredients_text_it"
+ ],
+ "id": "openfood-ch",
+ "images": [],
+ "import_t": 1548767357,
+ "manufacturer": "0",
+ "name": "FoodRepo",
+ "source_licence": "Creative Commons Attribution 4.0 International License",
+ "source_licence_url": "https://creativecommons.org/licenses/by/4.0/",
+ "url": "https://www.foodrepo.org/ch/products/985"
+ }
+ ],
+ "states": "To be completed, Nutrition facts completed, Ingredients completed, Expiration date completed, Packaging code to be completed, Characteristics to be completed, Origins to be completed, Categories completed, Brands completed, Packaging completed, Quantity completed, Product name completed, Photos validated, Packaging photo selected, Nutrition photo selected, Ingredients photo selected, Front photo selected, Photos uploaded",
+ "states_hierarchy": [
+ "en:to-be-completed",
+ "en:nutrition-facts-completed",
+ "en:ingredients-completed",
+ "en:expiration-date-completed",
+ "en:packaging-code-to-be-completed",
+ "en:characteristics-to-be-completed",
+ "en:origins-to-be-completed",
+ "en:categories-completed",
+ "en:brands-completed",
+ "en:packaging-completed",
+ "en:quantity-completed",
+ "en:product-name-completed",
+ "en:photos-validated",
+ "en:packaging-photo-selected",
+ "en:nutrition-photo-selected",
+ "en:ingredients-photo-selected",
+ "en:front-photo-selected",
+ "en:photos-uploaded"
+ ],
+ "states_tags": [
+ "en:to-be-completed",
+ "en:nutrition-facts-completed",
+ "en:ingredients-completed",
+ "en:expiration-date-completed",
+ "en:packaging-code-to-be-completed",
+ "en:characteristics-to-be-completed",
+ "en:origins-to-be-completed",
+ "en:categories-completed",
+ "en:brands-completed",
+ "en:packaging-completed",
+ "en:quantity-completed",
+ "en:product-name-completed",
+ "en:photos-validated",
+ "en:packaging-photo-selected",
+ "en:nutrition-photo-selected",
+ "en:ingredients-photo-selected",
+ "en:front-photo-selected",
+ "en:photos-uploaded"
+ ],
+ "stores": "COOP, Carrefour, Consum, El Corte Inglés, Esselunga, Géant, Lindt, Magasins U, Marché U, Meny, Walmart, carrefour.fr, kupsch",
+ "stores_hierarchy": [
+ "COOP",
+ "Carrefour",
+ "Consum",
+ "El Corte Inglés",
+ "Esselunga",
+ "Géant",
+ "Lindt",
+ "Magasins U",
+ "Marché U",
+ "Meny",
+ "Walmart",
+ "carrefour.fr",
+ "kupsch"
+ ],
+ "stores_lc": "en",
+ "stores_tags": [
+ "COOP",
+ "Carrefour",
+ "Consum",
+ "El Corte Inglés",
+ "Esselunga",
+ "Géant",
+ "Lindt",
+ "Magasins U",
+ "Marché U",
+ "Meny",
+ "Walmart",
+ "carrefour.fr",
+ "kupsch"
+ ],
+ "teams": "stakano,chocolatine,swipe-studio,pain-au-chocolat,bodysupport",
+ "teams_tags": [
+ "stakano",
+ "chocolatine",
+ "swipe-studio",
+ "pain-au-chocolat",
+ "bodysupport"
+ ],
+ "traces": "nuts",
+ "traces_from_ingredients": "hazelnuts",
+ "traces_from_user": "(en) ",
+ "traces_hierarchy": [
+ "en:nuts"
+ ],
+ "traces_lc": "en",
+ "traces_tags": [
+ "en:nuts"
+ ],
+ "unique_scans_n": 1193,
+ "unknown_ingredients_n": 0,
+ "unknown_nutrients_tags": [],
+ "update_key": "key_1748337248",
+ "vitamins_prev_tags": [],
+ "vitamins_tags": [],
+ "weighers_tags": [
+ "marmotte73"
+ ],
+ "weighters_tags": [
+ "marmotte73"
+ ]
+ },
+ "result": {
+ "id": "product_found",
+ "lc_name": "Product found",
+ "name": "Product found"
+ },
+ "status": "success",
+ "warnings": []
+ }
+ }
+}
diff --git a/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_barcode_not_found.json b/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_barcode_not_found.json
new file mode 100644
index 000000000..c526240ba
--- /dev/null
+++ b/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_barcode_not_found.json
@@ -0,0 +1,45 @@
+{
+ "request": {
+ "urlPathPattern": "/openfoodfacts/api/v3/product/?!3046920029759(?=/|$))$.json",
+ "method": "GET"
+ },
+ "response": {
+ "status": 404,
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "delayDistribution": {
+ "type": "lognormal",
+ "median": 5000,
+ "sigma": 0.4
+ },
+ "jsonBody": {
+ "code": "304692002975000",
+ "errors": [
+ {
+ "field": {
+ "id": "code",
+ "value": "304692002975000"
+ },
+ "impact": {
+ "id": "failure",
+ "lc_name": "Failure",
+ "name": "Failure"
+ },
+ "message": {
+ "id": "product_not_found",
+ "lc_name": "",
+ "name": ""
+ }
+ }
+ ],
+ "result": {
+ "id": "product_not_found",
+ "lc_name": "Product not found",
+ "name": "Product not found"
+ },
+ "status": "failure",
+ "warnings": []
+ }
+ }
+}
diff --git a/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_search.json b/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_search.json
new file mode 100644
index 000000000..db6759746
--- /dev/null
+++ b/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_search.json
@@ -0,0 +1,49 @@
+{
+ "request": {
+ "urlPathPattern": "/openfoodfacts/search",
+ "method": "GET",
+ "queryParameters": {
+ "q": {
+ "matches": "beshbarmak"
+ },
+ "page_size": {
+ "matches": ".*"
+ }
+ }
+ },
+ "response": {
+ "transformers": ["response-template"],
+ "status": 200,
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "delayDistribution": {
+ "type": "lognormal",
+ "median": 5000,
+ "sigma": 0.4
+ },
+ "jsonBody": {
+ "count": 1,
+ "page": 1,
+ "page_count": 1,
+ "page_size": "{{request.query.page_size}}",
+ "hits": [
+ {
+ "code": "8901764042706",
+ "product_name": "Thums Up",
+ "generic_name": "Indian cola soft drink",
+ "brands": "cola",
+ "categories": "Beverages, Colas",
+ "countries": "India",
+ "quantity": "600ml",
+ "nutrition_grades": "e",
+ "nova_groups": "4",
+ "url": "https://world.openfoodfacts.net/product/8901764042706/thums-up",
+ "image_url": "https://images.openfoodfacts.org/images/products/890/176/404/2706/front_en.400.jpg",
+ "image_front_url": "https://images.openfoodfacts.org/images/products/890/176/404/2706/front_en.400.jpg"
+ }
+ ],
+ "skip": 0
+ }
+ }
+}
diff --git a/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_search_not_found.json b/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_search_not_found.json
new file mode 100644
index 000000000..08ea053f2
--- /dev/null
+++ b/software/plugins/external-item-search/dev/services/mappings/openfoodfacts/openfoodfacts_search_not_found.json
@@ -0,0 +1,34 @@
+{
+ "request": {
+ "urlPathPattern": "/openfoodfacts/search",
+ "method": "GET",
+ "queryParameters": {
+ "q": {
+ "matches": "^(?!beshbarmak$).+"
+ },
+ "page_size": {
+ "matches": ".*"
+ }
+ }
+ },
+ "response": {
+ "transformers": ["response-template"],
+ "status": 200,
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "delayDistribution": {
+ "type": "lognormal",
+ "median": 5000,
+ "sigma": 0.4
+ },
+ "jsonBody": {
+ "count": 0,
+ "page": 1,
+ "page_count": 0,
+ "page_size": "{{request.query.page_size}}",
+ "hits": [],
+ "skip": 0
+ }
+ }
+}
diff --git a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/interfaces/ItemLookupRestInterface.java b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/interfaces/ItemLookupRestInterface.java
index 034a110ad..6af94330d 100644
--- a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/interfaces/ItemLookupRestInterface.java
+++ b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/interfaces/ItemLookupRestInterface.java
@@ -12,9 +12,6 @@
import jakarta.ws.rs.core.MediaType;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.microprofile.openapi.annotations.Operation;
-import org.eclipse.microprofile.openapi.annotations.enums.SchemaType;
-import org.eclipse.microprofile.openapi.annotations.media.Content;
-import org.eclipse.microprofile.openapi.annotations.media.Schema;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;
import org.eclipse.microprofile.openapi.annotations.tags.Tag;
import org.eclipse.microprofile.openapi.annotations.tags.Tags;
diff --git a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/ExtItemLookupService.java b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/ExtItemLookupService.java
index 5962c6105..de67cf42b 100644
--- a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/ExtItemLookupService.java
+++ b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/ExtItemLookupService.java
@@ -12,14 +12,20 @@
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.ItemSearchService;
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.barcodeLookup.BarcodeLookupService;
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.dataKick.DatakickService;
+import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.openfoodfacts.OpenFoodFactsService;
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.rebrickable.RebrickableService;
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.upcItemDb.UpcItemDbService;
import tech.ebp.oqm.plugin.extItemSearch.model.ExtItemLookupProviderInfo;
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.utils.LookupMethod;
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.utils.LookupService;
-import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.utils.LookupSource;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
@ApplicationScoped
@Slf4j
@@ -43,12 +49,14 @@ public ExtItemLookupService(
DatakickService datakickService,
RebrickableService rebrickableService,
BarcodeLookupService barcodeLookupService,
- UpcItemDbService upcItemDbService
+ UpcItemDbService upcItemDbService,
+ OpenFoodFactsService openFoodFactsService
) {
this.searchServices.add(datakickService);
this.searchServices.add(rebrickableService);
this.searchServices.add(barcodeLookupService);
this.searchServices.add(upcItemDbService);
+ this.searchServices.add(openFoodFactsService);
}
public Set getSearchServices() {
diff --git a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/dataKick/DataKickLookupClient.java b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/dataKick/DataKickLookupClient.java
index d6469e705..2918fba28 100644
--- a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/dataKick/DataKickLookupClient.java
+++ b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/dataKick/DataKickLookupClient.java
@@ -1,19 +1,14 @@
package tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.dataKick;
-import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import io.opentelemetry.instrumentation.annotations.WithSpan;
import io.quarkus.cache.CacheResult;
-import io.smallrye.mutiny.Multi;
import io.smallrye.mutiny.Uni;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
-import java.util.concurrent.CompletionStage;
-
@Path("/api/items/")
@RegisterRestClient(configKey = "datakick")
public interface DataKickLookupClient {
diff --git a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsLookupClient.java b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsLookupClient.java
new file mode 100644
index 000000000..23124217e
--- /dev/null
+++ b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsLookupClient.java
@@ -0,0 +1,21 @@
+package tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.openfoodfacts;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import io.opentelemetry.instrumentation.annotations.WithSpan;
+import io.quarkus.cache.CacheResult;
+import io.smallrye.mutiny.Uni;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
+import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
+
+@RegisterRestClient(configKey = "openfoodfacts")
+@RegisterClientHeaders(OpenFoodFactsUserAgentHeadersFactory.class)
+public interface OpenFoodFactsLookupClient {
+ @WithSpan
+ @GET
+ @Path("/api/v3/product/{barcode}")
+ @CacheResult(cacheName = "openfoodfacts-product")
+ Uni getProduct(@PathParam("barcode") String barcode);
+}
diff --git a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsSearchClient.java b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsSearchClient.java
new file mode 100644
index 000000000..b80d5b3bd
--- /dev/null
+++ b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsSearchClient.java
@@ -0,0 +1,24 @@
+package tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.openfoodfacts;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import io.opentelemetry.instrumentation.annotations.WithSpan;
+import io.quarkus.cache.CacheResult;
+import io.smallrye.mutiny.Uni;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.QueryParam;
+import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
+import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
+
+@RegisterRestClient(configKey = "openfoodfacts-search")
+@RegisterClientHeaders(OpenFoodFactsUserAgentHeadersFactory.class)
+public interface OpenFoodFactsSearchClient {
+ @WithSpan
+ @GET
+ @Path("/search")
+ @CacheResult(cacheName = "openfoodfacts-search")
+ Uni search(
+ @QueryParam("page_size") int pageSize,
+ @QueryParam("q") String query
+ );
+}
diff --git a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsService.java b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsService.java
new file mode 100644
index 000000000..a69542f3e
--- /dev/null
+++ b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsService.java
@@ -0,0 +1,287 @@
+package tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.openfoodfacts;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import io.smallrye.mutiny.Multi;
+import jakarta.enterprise.context.ApplicationScoped;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+import org.jboss.resteasy.reactive.ClientWebApplicationException;
+import tech.ebp.oqm.plugin.extItemSearch.model.ExtItemLookupProviderInfo;
+import tech.ebp.oqm.plugin.extItemSearch.model.lookupResult.ExtItemLookupResult;
+import tech.ebp.oqm.plugin.extItemSearch.model.lookupResult.LookupResult;
+import tech.ebp.oqm.plugin.extItemSearch.model.lookupResult.LookupResultNoResults;
+import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.ItemSearchService;
+import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.utils.LookupMethod;
+import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.utils.LookupService;
+import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.utils.LookupSource;
+import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.utils.ResultMappingUtils;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+@ApplicationScoped
+@Slf4j
+public class OpenFoodFactsService extends ItemSearchService {
+
+ private final OpenFoodFactsLookupClient openFoodFactsLookupClient;
+ private final OpenFoodFactsSearchClient openFoodFactsSearchClient;
+ private final int responseSize;
+
+ public OpenFoodFactsService(
+ @RestClient OpenFoodFactsLookupClient openFoodFactsLookupClient,
+ @RestClient OpenFoodFactsSearchClient openFoodFactsSearchClient,
+ @ConfigProperty(name = "productLookup.providers.openfoodfacts.enabled", defaultValue = "true") boolean enabled,
+ @ConfigProperty(name = "productLookup.providers.openfoodfacts.responseSize", defaultValue = "10") int responseSize) {
+ super(
+ enabled,
+ LookupService.OPENFOODFACTS,
+ ExtItemLookupProviderInfo.
+ builder()
+ .displayName("Open Food Facts")
+ .description("Open database of food products")
+ .cost("free")
+ .acceptsContributions(true)
+ .homepage(URI.create("https://openfoodfacts.github.io")));
+ this.openFoodFactsLookupClient = openFoodFactsLookupClient;
+ this.openFoodFactsSearchClient = openFoodFactsSearchClient;
+ this.responseSize = responseSize;
+ }
+
+ @Override
+ protected Optional handleClientError(LookupSource source, LookupMethod method, ClientWebApplicationException e) {
+ if (e.getResponse().getStatus() == 404) {
+ return Optional.of(
+ this.setupResponseBuilder(LookupResultNoResults.builder(), source, method)
+ .detail("No items found.")
+ .build()
+ );
+ }
+ return Optional.empty();
+ }
+
+ @Override
+ protected Multi performSearch(LookupSource source, LookupMethod lookupMethod, String term) {
+ if(source != LookupSource.OPENFOODFACTS) {
+ return Multi.createFrom().empty();
+ }
+ return switch (source) {
+ case OPENFOODFACTS ->
+ switch (lookupMethod) {
+ case BARCODE -> this.openFoodFactsLookupClient.getProduct(term)
+ .map(result -> this.partJsonToResult(source, lookupMethod, result))
+ .onFailure().recoverWithItem(e -> this.handleError(source, lookupMethod, e))
+ .toMulti();
+ case TEXT -> this.openFoodFactsSearchClient.search(responseSize, term)
+ .map(result -> this.searchJsonToResults(source, lookupMethod, result))
+ .onFailure().recoverWithItem(e -> this.handleErrorRetCollection(source, lookupMethod, e))
+ .onItem().transformToMulti(collection -> Multi.createFrom().iterable(collection));
+ default -> throw new IllegalArgumentException("Invalid lookup method: " + lookupMethod);
+ };
+ default -> throw new IllegalArgumentException("Invalid lookup source: " + source);
+ };
+ }
+
+ private LookupResult partJsonToResult(LookupSource source, LookupMethod method, ObjectNode results) {
+ log.debug("Data from OpenFoodFacts: {}", results.toPrettyString());
+ ExtItemLookupResult.Builder, ?> resultBuilder = this.setupResponseBuilder(ExtItemLookupResult.builder(), source, method);
+
+ if (results.get("product") != null && results.get("product").isObject()) {
+ results = (ObjectNode) results.get("product");
+ }
+
+ List images = new ArrayList<>();
+ Map links = new HashMap<>();
+ Map identifiers = new HashMap<>();
+ Map attributes = new HashMap<>();
+ String description = "";
+ String name = "";
+
+ for (Map.Entry currentMap : results.properties()) {
+ String currentKey = currentMap.getKey();
+ JsonNode currentVal = currentMap.getValue();
+
+ if (ResultMappingUtils.isFieldEmpty(currentVal)) {
+ continue;
+ }
+
+ switch (currentKey) {
+ case "product_name" -> {
+ name = currentVal.asText();
+ resultBuilder.name(name);
+ resultBuilder.unifiedName(name);
+ }
+ case "generic_name", "ingredients_text" -> {
+ if (description.isBlank()) {
+ description = currentVal.asText();
+ } else {
+ attributes.put(currentKey, currentVal.asText());
+ }
+ }
+ case "code", "_id" -> identifiers.put(currentKey, currentVal.asText());
+ case "url", "link" -> links.put("openfoodfacts", currentVal.asText());
+ case "image_url",
+ "image_small_url",
+ "image_thumb_url",
+ "image_front_url",
+ "image_front_small_url",
+ "image_front_thumb_url",
+ "image_ingredients_url",
+ "image_ingredients_small_url",
+ "image_ingredients_thumb_url",
+ "image_nutrition_url",
+ "image_nutrition_small_url",
+ "image_nutrition_thumb_url",
+ "image_packaging_url",
+ "image_packaging_small_url",
+ "image_packaging_thumb_url" -> images.add(currentVal.asText());
+ case "images", "selected_images" -> collectImageUrls(currentVal, images);
+ case "brands",
+ "categories",
+ "countries",
+ "origins",
+ "stores",
+ "quantity",
+ "product_quantity",
+ "product_type",
+ "packaging_text",
+ "nova_group",
+ "nutrition_grade_fr",
+ "nutrition_grades" -> attributes.put(currentKey, currentVal.asText());
+ default -> putAttribute(attributes, currentKey, currentVal);
+ }
+
+ }
+
+ if (description.isBlank()) {
+ description = firstNonBlank(
+ name,
+ identifiers.get("code"),
+ identifiers.get("_id")
+ );
+ }
+
+ if (name.isBlank()) {
+ name = firstNonBlank(
+ description,
+ identifiers.get("code"),
+ identifiers.get("_id")
+ );
+ }
+
+ if (name.isBlank()) {
+ name = "OpenFoodFacts item";
+ }
+
+ if (description.isBlank()) {
+ description = name;
+ }
+
+ resultBuilder
+ .name(name)
+ .unifiedName(firstNonBlank(name, description, identifiers.get("code"), identifiers.get("_id")))
+ .description(description)
+ .identifiers(identifiers)
+ .links(links)
+ .images(images)
+ .attributes(attributes);
+
+ return resultBuilder.build();
+ }
+
+ private Collection searchJsonToResults(LookupSource source, LookupMethod method, ObjectNode results) {
+ log.debug("Search data from OpenFoodFacts: {}", results.toPrettyString());
+
+ JsonNode productsNode = firstArrayNode(results, "hits", "products");
+ if (ResultMappingUtils.isFieldEmpty(productsNode)) {
+ return List.of(
+ this.setupResponseBuilder(LookupResultNoResults.builder(), source, method)
+ .detail("No items found.")
+ .build()
+ );
+ }
+
+ List output = new ArrayList<>();
+ for (JsonNode product : productsNode) {
+ if (product != null && product.isObject()) {
+ output.add(this.partJsonToResult(source, method, (ObjectNode) product));
+ }
+ }
+
+ if (output.isEmpty()) {
+ return List.of(
+ this.setupResponseBuilder(LookupResultNoResults.builder(), source, method)
+ .detail("No items found.")
+ .build()
+ );
+ }
+
+ return output;
+ }
+
+ private static JsonNode firstArrayNode(ObjectNode results, String... fields) {
+ for (String field : fields) {
+ JsonNode node = results.get(field);
+ if (node != null && node.isArray()) {
+ return node;
+ }
+ }
+ return null;
+ }
+
+ private static void putAttribute(Map attributes, String key, JsonNode value) {
+ if (value == null || value.isNull()) {
+ return;
+ }
+
+ if (value.isTextual() || value.isNumber() || value.isBoolean()) {
+ attributes.put(key, value.asText());
+ return;
+ }
+
+ attributes.put(key, value.toString());
+ }
+
+ private static void collectImageUrls(JsonNode node, List images) {
+ if (node == null || node.isNull()) {
+ return;
+ }
+
+ if (node.isTextual()) {
+ String url = node.asText();
+ if (!url.isBlank() && url.startsWith("http")) {
+ images.add(url);
+ }
+ return;
+ }
+
+ if (node.isArray()) {
+ for (JsonNode curNode : node) {
+ collectImageUrls(curNode, images);
+ }
+ return;
+ }
+
+ if (node.isObject()) {
+ for (Iterator iter = node.elements(); iter.hasNext(); ) {
+ collectImageUrls(iter.next(), images);
+ }
+ }
+ }
+
+ private static String firstNonBlank(String... values) {
+ for (String value : values) {
+ if (value != null && !value.isBlank()) {
+ return value;
+ }
+ }
+ return "";
+ }
+}
diff --git a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsUserAgentHeadersFactory.java b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsUserAgentHeadersFactory.java
new file mode 100644
index 000000000..4243bdd15
--- /dev/null
+++ b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/openfoodfacts/OpenFoodFactsUserAgentHeadersFactory.java
@@ -0,0 +1,34 @@
+package tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.openfoodfacts;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.eclipse.microprofile.rest.client.ext.ClientHeadersFactory;
+import jakarta.ws.rs.core.MultivaluedHashMap;
+import jakarta.ws.rs.core.MultivaluedMap;
+
+@ApplicationScoped
+public class OpenFoodFactsUserAgentHeadersFactory implements ClientHeadersFactory {
+
+ private final String userAgent;
+
+ public OpenFoodFactsUserAgentHeadersFactory(
+ @ConfigProperty(name = "service.gitLink")
+ String appName,
+ @ConfigProperty(name = "service.version")
+ String appVersion,
+ @ConfigProperty(name = "service.email", defaultValue = "openquartermaster.com")
+ String contactEmail
+ ) {
+ this.userAgent = appName + "/" + appVersion + " (" + contactEmail + ")";
+ }
+
+ @Override
+ public MultivaluedMap update(
+ MultivaluedMap incomingHeaders,
+ MultivaluedMap clientOutgoingHeaders
+ ) {
+ MultivaluedMap headers = new MultivaluedHashMap<>(clientOutgoingHeaders);
+ headers.add("User-Agent", this.userAgent);
+ return headers;
+ }
+}
diff --git a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/rebrickable/RebrickableService.java b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/rebrickable/RebrickableService.java
index 654a43273..3113a56ce 100644
--- a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/rebrickable/RebrickableService.java
+++ b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/providers/rebrickable/RebrickableService.java
@@ -85,7 +85,7 @@ public boolean isEnabled() {
public LookupResult partJsonToResult(LookupSource source, LookupMethod method, ObjectNode results) {
log.info("Search result: {}", results);
ExtItemLookupResult.Builder, ?> resultBuilder = this.setupResponseBuilder(ExtItemLookupResult.builder(), source, method);
-
+
List images = new ArrayList<>();
Map links = new HashMap<>();
Map identifiers = new HashMap<>();
diff --git a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/utils/LookupService.java b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/utils/LookupService.java
index b21a05a93..7da801703 100644
--- a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/utils/LookupService.java
+++ b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/utils/LookupService.java
@@ -3,6 +3,7 @@
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.ItemSearchService;
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.barcodeLookup.BarcodeLookupService;
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.dataKick.DatakickService;
+import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.openfoodfacts.OpenFoodFactsService;
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.rebrickable.RebrickableService;
import tech.ebp.oqm.plugin.extItemSearch.service.extItemSearchService.providers.upcItemDb.UpcItemDbService;
@@ -30,12 +31,17 @@ public enum LookupService {
List.of(LookupSource.UPC_ITEM_DB),
List.of(LookupMethod.BARCODE)
),
- ;
-
+ OPENFOODFACTS(
+ OpenFoodFactsService.class,
+ List.of(LookupSource.OPENFOODFACTS),
+ List.of(LookupMethod.BARCODE, LookupMethod.TEXT)
+ )
+ ;
+
public final Class extends ItemSearchService> searchClass;
public final Collection supportedSources;
public final Collection supportedMethods;
-
+
LookupService(
Class extends ItemSearchService> searchClass,
Collection supportedSources,
diff --git a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/utils/LookupSource.java b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/utils/LookupSource.java
index d7c3a81a4..7f9f6db6c 100644
--- a/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/utils/LookupSource.java
+++ b/software/plugins/external-item-search/src/main/java/tech/ebp/oqm/plugin/extItemSearch/service/extItemSearchService/utils/LookupSource.java
@@ -5,6 +5,5 @@ public enum LookupSource {
DATAKICK,
REBRICKABLE,
UPC_ITEM_DB,
- ;
-
+ OPENFOODFACTS
}
diff --git a/software/plugins/external-item-search/src/main/resources/application.yml b/software/plugins/external-item-search/src/main/resources/application.yml
index 1fc9a926d..02c0e86fb 100644
--- a/software/plugins/external-item-search/src/main/resources/application.yml
+++ b/software/plugins/external-item-search/src/main/resources/application.yml
@@ -16,6 +16,8 @@ productLookup:
upcitemdb:
enabled: true
apiKey: " "
+ openfoodfacts:
+ enabled: true
quarkus:
container-image:
@@ -41,6 +43,12 @@ quarkus:
rebrickable:
url: https://rebrickable.com
scope: jakarta.inject.Singleton
+ openfoodfacts:
+ url: https://world.openfoodfacts.net
+ scope: jakarta.inject.Singleton
+ openfoodfacts-search:
+ url: https://search.openfoodfacts.net
+ scope: jakarta.inject.Singleton
smallrye-openapi:
info-title: External Item Search API
info-version: ${quarkus.application.version}
@@ -98,3 +106,7 @@ quarkus:
scope: jakarta.inject.Singleton
rebrickable:
url: http://localhost:${quarkus.wiremock.devservices.port}/rebrickable/
+ openfoodfacts:
+ url: http://localhost:${quarkus.wiremock.devservices.port}/openfoodfacts/
+ openfoodfacts-search:
+ url: http://localhost:${quarkus.wiremock.devservices.port}/openfoodfacts/
diff --git a/software/plugins/external-item-search/src/test/resources/application.yaml b/software/plugins/external-item-search/src/test/resources/application.yaml
index 5b1ed6e6a..df0219b7b 100644
--- a/software/plugins/external-item-search/src/test/resources/application.yaml
+++ b/software/plugins/external-item-search/src/test/resources/application.yaml
@@ -11,6 +11,10 @@ productLookup:
barcodelookup-com:
url: http://localhost:${quarkus.wiremock.devservices.port}/barcodelookup/
apiKey: devKey
+ openfoodfacts:
+ url: http://localhost:${quarkus.wiremock.devservices.port}/openfoodfacts/
+ openfoodfacts-search:
+ url: http://localhost:${quarkus.wiremock.devservices.port}/openfoodfacts/
quarkus:
http: