{"version":3,"file":"filterMappings.DPV5SH30.mjs","names":[],"sources":["https:/framerusercontent.com/modules/A55TPw8oJtDToWtsjcDZ/rm89gWVDrPnML7Vtbv1c/filterMappings.js"],"sourcesContent":["export const getFilterValue=(property,options)=>{if(property.startsWith(\"variant_\")){return{type:\"variant\",value:{[property]:options.value}};}switch(property){case\"product_type\":case\"product_tag\":case\"collection\":return{type:property,value:options.value};case\"price\":return{type:\"price\",// value: options.price_ranges.map((range: string) => {\n//     const [min, max] = range.split('-').map(Number);\n//     return { min, max };\n// }),\nvalue:options.values.map(value=>{if(value.priceType===\"Under\"){return{min:null,max:value.max}// Handle \"Under\" case\n;}else if(value.priceType===\"Over\"){return{min:value.min,max:null}// Handle \"Over\" case\n;}else{const[min,max]=value.split(\"-\").map(Number);return{min,max}// Handle regular range\n;}})};case\"discount_amount\":return{type:\"discount_amount\",value:options.discount_amount_min?{min:options.discount_amount_min,max:options.discount_amount_max}:options.discount_amount};case\"discount_percent\":return{type:\"discount_percent\",value:options.discount_percent_min?{min:options.discount_percent_min,max:options.discount_percent_max}:options.discount_percent};case\"on_sale\":case\"in_stock\":case\"bundle\":case\"subscription\":return{type:property,value:options.value===\"true\"};default:return{type:property,value:\"\"};}};/**\n * Convert legacy filter names to new format and vice versa\n */export const convertFilterName=(name,toLegacy=false)=>{//console.log('convertFilterName input:', name, 'toLegacy:', toLegacy);\nconst mappings={// New format to legacy format\nproduct_type:\"product-type\",product_tag:\"product-tag\",on_sale:\"on-sale\",in_stock:\"in-stock\",bundle:\"bundles\",subscription:\"subscriptions\"};if(toLegacy){const result=mappings[name]||name;//console.log('convertFilterName output (toLegacy):', result);\nreturn result;}else{// Legacy format to new format\nconst reverseMappings={};Object.entries(mappings).forEach(([key,value])=>{reverseMappings[value]=key;});const result=reverseMappings[name]||name;//console.log('convertFilterName output (fromLegacy):', result);\nreturn result;}};/**\n * Parses URL parameters and converts them into filter state\n *\n * URL format conventions:\n * 1. Between different filter types: Always use AND logic with separate parameters\n *    (e.g., ?product_type=shirts&collection=summer)\n *\n * 2. Within the same filter type:\n *    - For collection, product_type, product_tag: Use comma-separated values for OR logic\n *      (e.g., ?product_type=shirts,pants,jackets means products that are shirts OR pants OR jackets)\n *    - For variant filters:\n *      a) Comma-separated values indicate OR logic\n *         (e.g., ?variant_color=blue,red,green means blue OR red OR green)\n *      b) Repeated parameters indicate AND logic\n *         (e.g., ?variant_color=blue&variant_size=large means blue AND large)\n */export const parseUrlFilters=urlParams=>{// Disabled excessive logging that was causing performance issues\n// console.log(\"Parsing URL filters from:\", urlParams.toString());\nconst filters={collection:{active:false,values:[]},product_type:{active:false,values:[]},product_tag:{active:false,values:[]},variant:{active:false,values:[]},variant_Color:{active:false,value:null},price:{active:false,values:[]},discount_amount:{active:false,values:[]},discount_percent:{active:false,values:[]},on_sale:{active:false,value:true},in_stock:{active:false,value:true},bundle:{active:false,value:true},subscription:{active:false,value:true}};[\"collection\",\"product_type\",\"product_tag\",\"product-type\",\"product-tag\"].forEach(filterType=>{const value=urlParams.get(filterType);if(value){const normalizedType=convertFilterName(filterType);//console.log(`Found filter ${filterType}, normalized to ${normalizedType}:`, value);\n// Split by comma for OR logic between values\nconst values=value.split(\",\").filter(Boolean);filters[normalizedType].values=values;filters[normalizedType].active=values.length>0;}});// Process variant filters (variant_color, variant_size, etc.)\n// Support both comma-separated values (OR logic) and multiple params with same name (AND logic between different options)\nArray.from(urlParams.keys()).forEach(key=>{if(key.startsWith(\"variant_\")){const variantName=key.replace(\"variant_\",\"\");const value=urlParams.get(key);if(value){// Decode the value first to handle any URL encoding\nconst decodedValue=decodeURIComponent(value);// Special handling for color filter\nif(variantName.toLowerCase()===\"color\"){filters.variant_Color.active=true;filters.variant_Color.value=decodedValue.trim();}// Log the variant filter values being processed\n// console.log(`Parsing variant filter ${key}:`, {\n//     rawValue: value,\n//     decodedValue,\n//     isMultiValue: decodedValue.includes(',')\n// });\n// Split by comma for OR logic between values of the same option\nconst values=decodedValue.split(\",\").filter(Boolean);// Each value is an OR option for this variant type\nvalues.forEach(val=>{filters.variant.values.push({name:variantName,value:val.trim()});});// console.log(`Found variant filter ${key}:`, {\n//     values,\n//     orLogic: \"Values within same variant type use OR logic\"\n// });\n}}});filters.variant.active=filters.variant.values.length>0;// Process price filters\nconst priceRanges=urlParams.get(\"price\");const priceMax=urlParams.get(\"price_max\");const priceMin=urlParams.get(\"price_min\");filters.price={active:false,values:[]};if(priceRanges){// Handle regular price ranges\nconst ranges=priceRanges.split(\",\").map(range=>{const[min,max]=range.split(\"-\").map(Number);return{min,max,priceType:\"Range\"};});filters.price.values.push(...ranges);filters.price.active=true;}if(priceMax){// Handle \"Under\" price ranges\nconst maxValues=priceMax.split(\",\").map(Number);const underRanges=maxValues.map(max=>({min:null,max,priceType:\"Under\"}));filters.price.values.push(...underRanges);filters.price.active=true;}// Handle \"Over\" price ranges\nif(priceMin){const minValues=priceMin.split(\",\").map(Number);minValues.forEach(min=>{filters.price.values.push({min,max:null,priceType:\"Over\"});});filters.price.active=true;}// Process discount filters\nconst discountAmount=urlParams.get(\"discount_amount\");if(discountAmount){const ranges=discountAmount.split(\",\").map(range=>{const[min,max]=range.split(\"-\").map(Number);return{min,max};});filters.discount_amount={active:true,values:ranges};}const discountAmountMin=urlParams.get(\"discount_amount_min\");if(discountAmountMin){const minValues=discountAmountMin.split(\",\").map(Number);if(!filters.discount_amount){filters.discount_amount={active:true,values:[]};}// Add each min value as a range with null max\nminValues.forEach(min=>{filters.discount_amount.values.push({min,max:null});});filters.discount_amount.active=true;}const discountPercent=urlParams.get(\"discount_percent\");if(discountPercent){const ranges=discountPercent.split(\",\").map(range=>{const[min,max]=range.split(\"-\").map(Number);return{min,max};});filters.discount_percent={active:true,values:ranges};}const discountPercentMin=urlParams.get(\"discount_percent_min\");if(discountPercentMin){const minValues=discountPercentMin.split(\",\").map(Number);if(!filters.discount_percent){filters.discount_percent={active:true,values:[]};}// Add each min value as a range with null max\nminValues.forEach(min=>{filters.discount_percent.values.push({min,max:null});});filters.discount_percent.active=true;}[\"on_sale\",\"in_stock\",\"bundle\",\"subscription\"].forEach(filterType=>{const value=urlParams.get(filterType);if(value===\"true\"){filters[filterType]={active:true,value:true};}});return filters;};/**\n * Updates URL parameters based on current filter state\n *\n * URL format conventions:\n * 1. Between different filter types: Always use AND logic with separate parameters\n *\n * 2. Within the same filter type:\n *    - For collection, product_type, product_tag: Use comma-separated values for OR logic\n *    - For variant filters:\n *      a) Group variants by name and use comma-separated values for OR logic within same variant type\n *      b) Different variant types use AND logic with separate parameters\n */export const updateUrlWithFilters=(filters,url)=>{//console.log(\"Updating URL with filters:\", filters);\n// Clear existing filter params\nArray.from(url.searchParams.keys()).filter(key=>key.startsWith(\"variant_\")||[\"product_type\",\"product_tag\",\"collection\",\"price\",\"price_min\",\"price_max\",\"discount_amount\",\"discount_amount_min\",\"discount_percent\",\"discount_percent_min\",\"on_sale\",\"in_stock\",\"bundle\",\"subscription\",// Also include legacy filter names\n    \"product-type\",\"product-tag\",\"on-sale\",\"in-stock\",\"bundles\",\"subscriptions\"].includes(key)).forEach(key=>url.searchParams.delete(key));[\"collection\",\"product_type\",\"product_tag\"].forEach(filterType=>{if(filters[filterType]?.active&&filters[filterType]?.values?.length>0){url.searchParams.set(filterType,filters[filterType].values.join(\",\"));//console.log(`Set URL param ${filterType}=`, filters[filterType].values.join(','));\n}});// Add variant filters\n// Group variant values by name, and each group uses comma-separated values for OR logic\nif(filters.variant?.active&&filters.variant?.values?.length>0){// Group variant values by name\nconst variantGroups={};filters.variant.values.forEach(variant=>{// Use lowercase name for case-insensitive grouping\nconst normalizeName=`variant_${variant.name}`;if(!variantGroups[normalizeName]){variantGroups[normalizeName]=[];}// Avoid adding duplicate values\nif(!variantGroups[normalizeName].some(v=>v.toLowerCase()===variant.value.toLowerCase())){variantGroups[normalizeName].push(variant.value);}});// Add each variant group to URL with comma-separated values (OR logic)\nObject.entries(variantGroups).forEach(([key,values])=>{// Don't encode the values here as URLSearchParams will handle that\nurl.searchParams.set(key,values.join(\",\"));//console.log(`Set URL param ${key}=`, values.join(','), '(OR logic between values)');\n});}// Add price filters\nif(filters.price?.active&&filters.price.values?.length>0){// const regularRanges = [];\n// const underMaxValues = [];\n// const overMinValues = [];\nconst regularRanges=[];const underMaxValues=[];const overMinValues=[];filters.price.values.forEach(range=>{if(range.priceType===\"Under\"){underMaxValues.push(range.max);}else if(range.priceType===\"Over\"){overMinValues.push(range.min);}else{regularRanges.push(`${range.min}-${range.max}`);}});if(regularRanges.length>0){url.searchParams.set(\"price\",regularRanges.join(\",\"));}if(underMaxValues.length>0){url.searchParams.set(\"price_max\",underMaxValues.join(\",\"));}if(overMinValues.length>0){url.searchParams.set(\"price_min\",overMinValues.join(\",\"));}}// Add discount filters\nif(filters.discount_amount?.active&&filters.discount_amount.values?.length>0){const discountRanges=[];const discountMinValues=[];filters.discount_amount.values.forEach(range=>{if(range.max===null){// This is an \"Over\" type discount\ndiscountMinValues.push(range.min);}else{// This is a regular range\ndiscountRanges.push(`${range.min}-${range.max}`);}});if(discountRanges.length>0){url.searchParams.set(\"discount_amount\",discountRanges.join(\",\"));}if(discountMinValues.length>0){url.searchParams.set(\"discount_amount_min\",discountMinValues.join(\",\"));}}if(filters.discount_percent?.active&&filters.discount_percent.values?.length>0){const discountPercentRanges=[];const discountPercentMinValues=[];filters.discount_percent.values.forEach(range=>{if(range.max===null){// This is an \"Over\" type discount\ndiscountPercentMinValues.push(range.min);}else{// This is a regular range\ndiscountPercentRanges.push(`${range.min}-${range.max}`);}});if(discountPercentRanges.length>0){url.searchParams.set(\"discount_percent\",discountPercentRanges.join(\",\"));}if(discountPercentMinValues.length>0){url.searchParams.set(\"discount_percent_min\",discountPercentMinValues.join(\",\"));}}[\"on_sale\",\"in_stock\",\"bundle\",\"subscription\"].forEach(filterType=>{if(filters[filterType]?.active){url.searchParams.set(filterType,\"true\");}});};\nexport const __FramerMetadata__ = {\"exports\":{\"FilterValue\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getFilterValue\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parseUrlFilters\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"updateUrlWithFilters\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"convertFilterName\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./filterMappings.map"],"mappings":"wEASgB,GAAmB,EAAK,EAAS,KAAQ,CACzD,IAAM,EAAS,CACf,aAAa,eAAe,YAAY,cAAc,QAAQ,UAAU,SAAS,WAAW,OAAO,UAAU,aAAa,gBAAgB,CAAC,GAAG,EAC9I,OADqK,EAAS,IAAO,EAClK,CACnB,IAAM,EAAgB,EAAE,CACxB,OADyB,OAAO,QAAQ,EAAS,CAAC,SAAS,CAAC,EAAI,KAAS,CAAC,EAAgB,GAAO,GAAM,CAAc,EAAgB,IAAO,IAgB5H,EAAgB,GAAW,CAE3C,IAAM,EAAQ,CAAC,WAAW,CAAC,OAAO,GAAM,OAAO,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,GAAM,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO,GAAM,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAM,OAAO,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO,GAAM,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,GAAM,OAAO,EAAE,CAAC,CAAC,gBAAgB,CAAC,OAAO,GAAM,OAAO,EAAE,CAAC,CAAC,iBAAiB,CAAC,OAAO,GAAM,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAM,MAAM,GAAK,CAAC,SAAS,CAAC,OAAO,GAAM,MAAM,GAAK,CAAC,OAAO,CAAC,OAAO,GAAM,MAAM,GAAK,CAAC,aAAa,CAAC,OAAO,GAAM,MAAM,GAAK,CAAC,CAAC,CAAC,aAAa,eAAe,cAAc,eAAe,cAAc,CAAC,QAAQ,GAAY,CAAC,IAAM,EAAM,EAAU,IAAI,EAAW,CAAC,GAAG,EAAM,CAAC,IAAM,EAAe,EAAkB,EAAW,CAEjoB,EAAO,EAAM,MAAM,IAAI,CAAC,OAAO,QAAQ,CAAC,EAAQ,GAAgB,OAAO,EAAO,EAAQ,GAAgB,OAAO,EAAO,OAAO,IAAK,CAEtI,MAAM,KAAK,EAAU,MAAM,CAAC,CAAC,QAAQ,GAAK,CAAC,GAAG,EAAI,WAAW,WAAW,CAAC,CAAC,IAAM,EAAY,EAAI,QAAQ,WAAW,GAAG,CAAO,EAAM,EAAU,IAAI,EAAI,CAAC,GAAG,EAAM,CAC/J,IAAM,EAAa,mBAAmB,EAAM,CACzC,EAAY,aAAa,GAAG,UAAS,EAAQ,cAAc,OAAO,GAAK,EAAQ,cAAc,MAAM,EAAa,MAAM,EAO5G,EAAa,MAAM,IAAI,CAAC,OAAO,QAAQ,CAC7C,QAAQ,GAAK,CAAC,EAAQ,QAAQ,OAAO,KAAK,CAAC,KAAK,EAAY,MAAM,EAAI,MAAM,CAAC,CAAC,EAAG,IAIpF,CAAC,EAAQ,QAAQ,OAAO,EAAQ,QAAQ,OAAO,OAAO,EAC1D,IAAM,EAAY,EAAU,IAAI,QAAQ,CAAO,EAAS,EAAU,IAAI,YAAY,CAAO,EAAS,EAAU,IAAI,YAAY,CAAwC,GAAvC,EAAQ,MAAM,CAAC,OAAO,GAAM,OAAO,EAAE,CAAC,CAAI,EAAY,CACnL,IAAM,EAAO,EAAY,MAAM,IAAI,CAAC,IAAI,GAAO,CAAC,GAAK,CAAC,EAAI,GAAK,EAAM,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAI,MAAI,UAAU,QAAQ,EAAG,CAAC,EAAQ,MAAM,OAAO,KAAK,GAAG,EAAO,CAAC,EAAQ,MAAM,OAAO,GAAM,GAAG,EAAS,CAC7J,IAAM,EAAtC,EAAS,MAAM,IAAI,CAAC,IAAI,OAAO,CAA6B,IAAI,IAAM,CAAC,IAAI,KAAK,MAAI,UAAU,QAAQ,EAAE,CAAC,EAAQ,MAAM,OAAO,KAAK,GAAG,EAAY,CAAC,EAAQ,MAAM,OAAO,GACrL,IAA0B,EAAS,MAAM,IAAI,CAAC,IAAI,OAAO,CAAW,QAAQ,GAAK,CAAC,EAAQ,MAAM,OAAO,KAAK,CAAC,MAAI,IAAI,KAAK,UAAU,OAAO,CAAC,EAAG,CAAC,EAAQ,MAAM,OAAO,IACxK,IAAM,EAAe,EAAU,IAAI,kBAAkB,CAAI,IAAkI,EAAQ,gBAAgB,CAAC,OAAO,GAAK,OAA1I,EAAe,MAAM,IAAI,CAAC,IAAI,GAAO,CAAC,GAAK,CAAC,EAAI,GAAK,EAAM,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAI,MAAI,EAAG,CAAoD,EAAE,IAAM,EAAkB,EAAU,IAAI,sBAAsB,CAAC,GAAG,EAAkB,CAAC,IAAM,EAAU,EAAkB,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,AAA6B,EAAQ,kBAAgB,CAAC,OAAO,GAAK,OAAO,EAAE,CAAC,CACxc,EAAU,QAAQ,GAAK,CAAC,EAAQ,gBAAgB,OAAO,KAAK,CAAC,MAAI,IAAI,KAAK,CAAC,EAAG,CAAC,EAAQ,gBAAgB,OAAO,GAAM,IAAM,EAAgB,EAAU,IAAI,mBAAmB,CAAI,IAAoI,EAAQ,iBAAiB,CAAC,OAAO,GAAK,OAA5I,EAAgB,MAAM,IAAI,CAAC,IAAI,GAAO,CAAC,GAAK,CAAC,EAAI,GAAK,EAAM,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAI,MAAI,EAAG,CAAqD,EAAE,IAAM,EAAmB,EAAU,IAAI,uBAAuB,CAAC,GAAG,EAAmB,CAAC,IAAM,EAAU,EAAmB,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,AAA8B,EAAQ,mBAAiB,CAAC,OAAO,GAAK,OAAO,EAAE,CAAC,CACvkB,EAAU,QAAQ,GAAK,CAAC,EAAQ,iBAAiB,OAAO,KAAK,CAAC,MAAI,IAAI,KAAK,CAAC,EAAG,CAAC,EAAQ,iBAAiB,OAAO,GAAoL,MAA9K,CAAC,UAAU,WAAW,SAAS,eAAe,CAAC,QAAQ,GAAY,CAAa,EAAU,IAAI,EAAW,GAAY,SAAQ,EAAQ,GAAY,CAAC,OAAO,GAAK,MAAM,GAAK,GAAI,CAAQ,GAW3R,GAAsB,EAAQ,IAAM,CAMpD,GAJA,MAAM,KAAK,EAAI,aAAa,MAAM,CAAC,CAAC,OAAO,GAAK,EAAI,WAAW,WAAW,EAAE,CAAC,eAAe,cAAc,aAAa,QAAQ,YAAY,YAAY,kBAAkB,sBAAsB,mBAAmB,uBAAuB,UAAU,WAAW,SAAS,eACnQ,eAAe,cAAc,UAAU,WAAW,UAAU,gBAAgB,CAAC,SAAS,EAAI,CAAC,CAAC,QAAQ,GAAK,EAAI,aAAa,OAAO,EAAI,CAAC,CAAC,CAAC,aAAa,eAAe,cAAc,CAAC,QAAQ,GAAY,CAAI,EAAQ,IAAa,QAAQ,EAAQ,IAAa,QAAQ,OAAO,GAAG,EAAI,aAAa,IAAI,EAAW,EAAQ,GAAY,OAAO,KAAK,IAAI,CAAC,EACrV,CAEA,EAAQ,SAAS,QAAQ,EAAQ,SAAS,QAAQ,OAAO,EAAE,CAC9D,IAAM,EAAc,EAAE,CAAC,EAAQ,QAAQ,OAAO,QAAQ,GAAS,CAC/D,IAAM,EAAc,WAAW,EAAQ,OAAW,EAAc,KAAgB,EAAc,GAAe,EAAE,EAC3G,EAAc,GAAe,KAAK,GAAG,EAAE,aAAa,GAAG,EAAQ,MAAM,aAAa,CAAC,EAAE,EAAc,GAAe,KAAK,EAAQ,MAAM,EAAI,CAC7I,OAAO,QAAQ,EAAc,CAAC,SAAS,CAAC,EAAI,KAAU,CACtD,EAAI,aAAa,IAAI,EAAI,EAAO,KAAK,IAAI,CAAC,EACxC,CACF,GAAG,EAAQ,OAAO,QAAQ,EAAQ,MAAM,QAAQ,OAAO,EAAE,CAGzD,IAAM,EAAc,EAAE,CAAO,EAAe,EAAE,CAAO,EAAc,EAAE,CAAC,EAAQ,MAAM,OAAO,QAAQ,GAAO,CAAI,EAAM,YAAY,QAAS,EAAe,KAAK,EAAM,IAAI,CAAU,EAAM,YAAY,OAAQ,EAAc,KAAK,EAAM,IAAI,CAAO,EAAc,KAAK,GAAG,EAAM,IAAI,GAAG,EAAM,MAAM,EAAI,CAAI,EAAc,OAAO,GAAG,EAAI,aAAa,IAAI,QAAQ,EAAc,KAAK,IAAI,CAAC,CAAK,EAAe,OAAO,GAAG,EAAI,aAAa,IAAI,YAAY,EAAe,KAAK,IAAI,CAAC,CAAK,EAAc,OAAO,GAAG,EAAI,aAAa,IAAI,YAAY,EAAc,KAAK,IAAI,CAAC,CACjiB,GAAG,EAAQ,iBAAiB,QAAQ,EAAQ,gBAAgB,QAAQ,OAAO,EAAE,CAAC,IAAM,EAAe,EAAE,CAAO,EAAkB,EAAE,CAAC,EAAQ,gBAAgB,OAAO,QAAQ,GAAO,CAAI,EAAM,MAAM,KAC/L,EAAkB,KAAK,EAAM,IAAI,CACjC,EAAe,KAAK,GAAG,EAAM,IAAI,GAAG,EAAM,MAAM,EAAI,CAAI,EAAe,OAAO,GAAG,EAAI,aAAa,IAAI,kBAAkB,EAAe,KAAK,IAAI,CAAC,CAAK,EAAkB,OAAO,GAAG,EAAI,aAAa,IAAI,sBAAsB,EAAkB,KAAK,IAAI,CAAC,CAAG,GAAG,EAAQ,kBAAkB,QAAQ,EAAQ,iBAAiB,QAAQ,OAAO,EAAE,CAAC,IAAM,EAAsB,EAAE,CAAO,EAAyB,EAAE,CAAC,EAAQ,iBAAiB,OAAO,QAAQ,GAAO,CAAI,EAAM,MAAM,KAC5c,EAAyB,KAAK,EAAM,IAAI,CACxC,EAAsB,KAAK,GAAG,EAAM,IAAI,GAAG,EAAM,MAAM,EAAI,CAAI,EAAsB,OAAO,GAAG,EAAI,aAAa,IAAI,mBAAmB,EAAsB,KAAK,IAAI,CAAC,CAAK,EAAyB,OAAO,GAAG,EAAI,aAAa,IAAI,uBAAuB,EAAyB,KAAK,IAAI,CAAC,CAAG,CAAC,UAAU,WAAW,SAAS,eAAe,CAAC,QAAQ,GAAY,CAAI,EAAQ,IAAa,QAAQ,EAAI,aAAa,IAAI,EAAW,OAAO,EAAI"}