#
tokens: 32447/50000 41/45 files (page 1/5)
lines: off (toggle) GitHub
raw markdown copy
This is page 1 of 5. Use http://codebase.md/Xyborg/ChatGPT-Product-Info?page={x} to view the full context.

# Directory Structure

```
├── .gitignore
├── assets
│   ├── chatgpt-product-info-reviews.png
│   └── chatgpt-product-info.png
├── chatgpt-product-info.js
├── chrome-extension
│   ├── assets
│   │   ├── flags
│   │   │   ├── all.svg
│   │   │   ├── ar.svg
│   │   │   ├── at.svg
│   │   │   ├── be.svg
│   │   │   ├── br.svg
│   │   │   ├── ch.svg
│   │   │   ├── de.svg
│   │   │   ├── es.svg
│   │   │   ├── fr.svg
│   │   │   ├── gb.svg
│   │   │   ├── it.svg
│   │   │   ├── mx.svg
│   │   │   ├── nl.svg
│   │   │   ├── pt.svg
│   │   │   ├── se.svg
│   │   │   └── us.svg
│   │   └── icons-ui
│   │       ├── analysis.svg
│   │       ├── check.svg
│   │       ├── database.svg
│   │       ├── down-arrow.svg
│   │       ├── edit.svg
│   │       ├── error.svg
│   │       ├── github.svg
│   │       ├── history.svg
│   │       ├── linkedin.svg
│   │       ├── negative.svg
│   │       ├── neutral.svg
│   │       ├── positive.svg
│   │       ├── project.svg
│   │       ├── search.svg
│   │       ├── settings.svg
│   │       ├── tag.svg
│   │       ├── up-arrow.svg
│   │       ├── warning.svg
│   │       └── x.svg
│   ├── content-script.js
│   ├── icons
│   │   ├── icon128.png
│   │   ├── icon16.png
│   │   ├── icon19.png
│   │   ├── icon32.png
│   │   ├── icon48.png
│   │   └── logobubble.svg
│   ├── manifest.json
│   ├── popup.html
│   ├── popup.js
│   ├── README.md
│   └── styles.css
├── LICENSE
└── README.md
```

# Files

--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------

```
# macOS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Editor directories and files
.vscode/
.idea/
*.swp
*.swo

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Coverage directory used by tools like istanbul
coverage/

# nyc test coverage
.nyc_output

# Dependency directories
node_modules/

# Optional npm cache directory
.npm

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env

# Temporary folders
tmp/
temp/

# Chrome extension
*.crx
*.pem
*.zip
IMPLEMENTATION_PLAN.md
store-assets/
modal-prototype.html
```

--------------------------------------------------------------------------------
/chrome-extension/README.md:
--------------------------------------------------------------------------------

```markdown
# ChatGPT Product Info Search - Chrome Extension

A Chrome extension that adds product search functionality directly to ChatGPT, allowing you to search for product reviews, comparisons, and detailed information without leaving the page.

## Features

### Core Search Features
- **Single Product Search**: Search for individual products and get detailed reviews
- **Multi-Product Comparison**: Compare multiple products side-by-side in a table format
- **Multi-Market Support**: Supports multiple countries and languages, so you can receive the same answers as users in your target market.
- **Sentiment Analysis**: Visual sentiment breakdown of reviews (positive/neutral/negative)
- **Citation Links**: Direct links to source websites for more information
- **Review Themes**: Categorized review themes for easy browsing
- **Projects & Tags**: Organize every search with project assignments and tag labels for richer filtering
- **Backup & Restore**: Export your search history, projects, and tags to a JSON file for backup or transfer between devices


### Chrome Extension Features
- **First-Time Tutorial**: Interactive walkthrough on first use to help you get started quickly
- **Search History**: Automatically save searches (up to 50) and reopen them instantly
- **Filter-Aware Reports**: Review/citation source reports that respect your active filters
- **Floating Product Bubble**: Always-visible light-yellow button with the extension logo in the bottom-right corner
- **Popup Interface**: Quick access and status checking from the Chrome toolbar
- **Responsive UI**: Clean, modern interface that works seamlessly with ChatGPT
- **Auto-Save**: All successful searches automatically saved to local history
- **Unified Project & Tag Filters**: Combine projects and tags, and have those selections stay in sync across History, Analysis, and Reports
- **History Filtering**: Text search plus synced project/tag filters to drill into past work

## Installation

### From Source (Developer Mode)

1. **Download/Clone** this repository
2. **Open Chrome** and navigate to `chrome://extensions/`
3. **Enable Developer Mode** (toggle in top-right corner)
4. **Click "Load unpacked"** and select the `chrome-extension` folder
5. **Navigate to ChatGPT** (https://chatgpt.com) and log in
6. **Click the extension icon** in your toolbar or look for the floating Product Info bubble on ChatGPT

### From Chrome Web Store

*Coming soon - extension will be submitted to the Chrome Web Store*

## How to Use

### Getting Started
1. **Make sure you're logged in** to ChatGPT (https://chatgpt.com)
2. **Access the search interface** using either:
   - Click the extension icon in your Chrome toolbar → "Open Product Search"
   - Click the floating Product Info bubble in the bottom-right corner of any ChatGPT page
3. **First-time users**: An interactive tutorial will automatically appear to guide you through the key features
4. **Start searching** for products using natural language queries

### Tutorial
- **First launch**: The tutorial automatically appears when you first open the extension
- **Re-watch anytime**: Click the **?** (help) icon in the left sidebar next to the Settings icon
- **Quick overview**: Learn about the Search tab, History, Analysis, and how to organize with Projects & Tags

### Search Examples
Try searching for:
- "iPhone 17 Pro camera quality"
- "Nike Air Max running shoes" 
- "MacBook Air M3 performance"
- "Tesla Model 3 reviews"
- "best wireless headphones 2024"

### Single Product Search
- Enter any product name or specific query
- Get detailed reviews, sentiment analysis, and citation links
- View product overview and review summaries

### Multi-Product Search
- Toggle "Multi-product search" mode
- Enter multiple product names (one per line)
- Compare products in a convenient table format
- Click "View" to see detailed information for any product

### Search History
- All successful searches are automatically saved to your history
- Click the "📋 History" tab to view your search history
- **Reopen** any previous search to view the results again
- **Filter** your history using the search box plus shared project/tag filters
- **Delete** individual searches or clear all history
- History is stored locally in your browser (up to 50 most recent searches)
- **Organize** each search with project assignments and tag labels directly from the sidebar or post-search workflow

### Basic Reports
- Click the "📊 Reports" tab to view simple analytics from your search history
- **Review Sources Report**: See which websites have provided reviews in your searches
- **Citation Sources Report**: View the sources that have been cited across your searches
- Reports are generated from your local search history, processed locally, and reflect the same project/tag filters you have applied

## Why This Works as a Chrome Extension

Unlike the original bookmarklet, this Chrome extension has several advantages:

### **No CORS Issues**
- Extensions can make cross-origin requests to ChatGPT's API without restrictions
- No browser security blocks or CORS errors

### **Better Security & Reliability**
- No need to paste code into the console repeatedly
- Proper extension sandboxing and permissions
- Always available on ChatGPT pages
- Auto-updates through Chrome's extension system
- No need to re-inject code manually

### **Enhanced User Experience**
- Floating Product Info bubble (with branded icon) for instant access in the lower-right corner
- Proper toolbar icon and popup interface with status checking
- Persistent search history with powerful filtering and management
- Filter-aware reports on search sources
- Unified project/tag filters that seamlessly sync between History and Analysis views
- Better error handling, status indicators, and seamless integration with ChatGPT's interface

## Technical Details

### Permissions Required
- `activeTab`: To interact with the current ChatGPT tab
- `storage`: To save search history and user preferences locally
- `https://chatgpt.com/*`: To access ChatGPT's API and inject content

### Architecture
- **Content Script**: Injects the search interface and floating button into ChatGPT pages
- **Popup**: Provides status checking and quick access controls from the extension toolbar
- **Local Storage**: Manages search history and user data locally (no external servers)
- **Manifest V3**: Uses the latest Chrome extension standards for security and performance

### API Access
The extension uses ChatGPT's internal product search API:
- Automatically fetches authentication tokens from your existing session
- Makes requests to `https://chatgpt.com/backend-api/search/product_info`
- Parses streaming responses for real-time results
- Handles authentication errors gracefully with user feedback

## Privacy & Security

- **No data collection**: The extension doesn't collect or store any personal data externally
- **Local processing**: All searches and history are processed and stored locally in your browser
- **Secure authentication**: Uses your existing ChatGPT session tokens (no passwords stored)
- **No external servers**: Communicates only with ChatGPT's official API
- **Local storage only**: Search history and preferences stored in browser's local storage
- **No tracking**: No analytics, telemetry, or user behavior tracking
- **Open source**: Full code available for security review and transparency

## Development

### File Structure
```
chrome-extension/
├── manifest.json          # Extension configuration
├── content-script.js      # Main functionality injected into ChatGPT
├── popup.html            # Extension popup interface
├── popup.js              # Popup logic and controls
├── styles.css            # Extension styles
├── assets/               # Static assets and resources
└── icons/                # Extension icons (16x16 to 128x128)
```

### Building from Source
1. Clone the repository
2. The extension is ready to load - no build process required
3. Load in Chrome developer mode for testing

## Troubleshooting

### Extension Not Working
- Make sure you're on https://chatgpt.com (not chat.openai.com)
- Refresh the ChatGPT page after installing the extension
- Check that you're logged in to ChatGPT

### Search Errors
- Verify you're logged in to ChatGPT
- Try refreshing the page if you get authentication errors
- Check Chrome's console for detailed error messages

### Popup Shows "Not Ready"
- Navigate to ChatGPT first
- Refresh the ChatGPT page
- Make sure the extension is enabled in chrome://extensions/

## Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.

## License

This project is licensed under the MIT License - see the LICENSE file for details.

## Credits

Created by [Martin Aberastegue (@Xyborg)](https://www.martinaberastegue.com/)

Based on the original ChatGPT Product Info bookmarklet, converted to a Chrome extension for better reliability and user experience.

```

--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------

```markdown
# ChatGPT Product Info Search 🔍

A powerful **Chrome extension** and browser script that **unlocks ChatGPT's internal product search API** to **fetch detailed product information, reviews, and comparisons** directly within ChatGPT's interface.

![ChatGPT Product Info Search Interface](assets/chatgpt-product-info.png)

## Table of Contents

- [Overview](#overview)
- [Installation](#installation)
  - [Chrome Extension (Recommended)](#chrome-extension-recommended)
  - [Browser Script](#browser-script)
- [Demo](#demo)
- [Features](#features)
- [How to Use](#how-to-use)
- [Search Examples](#search-examples)
- [What You'll Get](#what-youll-get)
- [Technical Details](#technical-details)
- [Browser Compatibility](#browser-compatibility)
- [Requirements](#requirements)
- [Troubleshooting](#troubleshooting)
- [Privacy & Security](#privacy--security)
- [Want to Improve Your AI Visibility?](#want-to-improve-your-ai-visibility)
- [Additional Resources](#additional-resources)
- [Contributing](#contributing)
- [Author](#author)
- [License](#license)

## Overview

This project provides two ways to access ChatGPT's internal product search API: a Chrome extension (recommended) and a browser script. Both create a modal interface within ChatGPT that allows you to search for product information, reviews, and detailed comparisons. They automatically handle authentication and present results in an organized, easy-to-read format.

## Installation

### Chrome Extension (Recommended)

The Chrome extension provides the best experience with enhanced features and reliability.

#### From Source (Developer Mode)
1. **Download/Clone** this repository
2. **Open Chrome** and navigate to `chrome://extensions/`
3. **Enable Developer Mode** (toggle in top-right corner)
4. **Click "Load unpacked"** and select the `chrome-extension` folder
5. **Navigate to ChatGPT** (https://chatgpt.com) and log in
6. **Click the extension icon** in your toolbar or look for the floating 🛍️ button on ChatGPT

#### From Chrome Web Store
*Coming soon - extension will be submitted to the Chrome Web Store*

#### Chrome Extension Features
- ✅ **No CORS Issues**: Extensions can make cross-origin requests without restrictions
- ✅ **Floating Button**: Always visible 🛍️ button on ChatGPT pages
- ✅ **Popup Interface**: Clean status indicator and quick access controls
- ✅ **Search History**: Persistent search history with filtering and management
- ✅ **Auto-Updates**: Automatic updates through Chrome's extension system
- ✅ **Better Security**: No need to paste code into console repeatedly
- ✅ **Enhanced UX**: Proper error handling and status indicators

### Browser Script

For users who prefer not to install extensions or use other browsers.

## Demo

### Single Product Search

https://github.com/user-attachments/assets/b5472c48-1cd9-496b-b120-3fd548582f9f

### Multi-Product Search

https://github.com/user-attachments/assets/9e661765-098e-48c6-ac1b-dc3f4c3e725e

## Features

### Core Features
- 🔍 **Single Product Search**: Search for individual products and get detailed reviews
- 📊 **Multi-Product Comparison**: Compare multiple products side-by-side in a table format
- 📋 **Search History**: Automatically save all your searches and easily reopen them later (Chrome extension)
- 🎯 **Sentiment Analysis**: Visual sentiment breakdown of reviews (positive/neutral/negative)
- 🔗 **Citation Links**: Direct links to source websites for more information
- 🏷️ **Review Themes**: Categorized review themes for easy browsing
- 📱 **Responsive UI**: Clean, modern interface that works seamlessly with ChatGPT

### Advanced Features
- **Auto Authentication**: Automatically fetches your ChatGPT session token
- **Real-time Results**: Live streaming of search results as they come in
- **Comprehensive Results**: Get product details, reviews, ratings, and merchant offers
- **Review Analysis**: AI-generated summaries with sentiment breakdown

## How to Use

### Chrome Extension (Recommended)

1. **Make sure you're logged in** to ChatGPT (https://chatgpt.com)
2. **Click the extension icon** in your Chrome toolbar to check status
3. **Click "Open Product Search"** or use the floating 🛍️ button on ChatGPT
4. **Search for products** using natural language queries
5. **Use tabs** to switch between Search, History, and Reports

#### Single Product Search
- Enter any product name or specific query
- Get detailed reviews, sentiment analysis, and citation links
- View product overview and review summaries

#### Multi-Product Search
- Toggle "Multi-product search" mode
- Enter multiple product names (one per line)
- Compare products in a convenient table format
- Click "View" to see detailed information for any product

#### Search History
- All successful searches are automatically saved to your history
- Click the "📋 History" tab to view your search history
- **Reopen** any previous search to view the results again
- **Filter** your history using the search box
- **Delete** individual searches or clear all history
- History is stored locally in your browser (up to 50 most recent searches)

### Browser Script

#### Method 1: Browser Console

1. **Open ChatGPT** in your browser and make sure you're logged in
2. **Open Developer Tools**:
   - **Chrome/Edge**: Press `F12` or `Ctrl+Shift+I` (Windows) / `Cmd+Option+I` (Mac)
   - **Firefox**: Press `F12` or `Ctrl+Shift+I` (Windows) / `Cmd+Option+I` (Mac)
   - **Safari**: Press `Cmd+Option+I` (Mac) - you may need to enable Developer Tools first
3. **Go to Console tab** in the Developer Tools
4. **Copy the entire content of the script** from `chatgpt-product-info.js`
5. **Paste and press Enter** - the modal will appear immediately
6. **Start searching** for products!

#### Method 2: Bookmarklet

Due to CORS restrictions, you'll need to create a proper bookmarklet using a bookmarklet generator:

1. **Copy the entire script** from `chatgpt-product-info.js`
2. **Go to a bookmarklet generator**:
   - [Bookmarkleter](https://chriszarate.github.io/bookmarkleter) (Recommended)
   - [Bookmarklet Maker](https://caiorss.github.io/bookmarklet-maker)
3. **Paste the script** into the generator
4. **Generate the bookmarklet** - it will create a `javascript:` URL
5. **Create a new bookmark** in your browser with:
   - **Name**: "ChatGPT Product Search" 
   - **URL**: The generated `javascript:` code
6. **Visit ChatGPT** and click the bookmark to launch the search tool

**Note**: The bookmarklet will be quite long due to the script size, but it will work properly without CORS issues.

## Search Examples

Try these search queries to see the power of the tool:

- `"iPhone 17 Pro camera quality"`
- `"Nike Air Max running shoes"`
- `"MacBook Air M3 performance"`
- `"Tesla Model 3 reviews"`
- `"Pets Deli Hundefutter"`

## What You'll Get

### Product Information
- **Product Details**: Title, price, description, ratings when available.

### Review Analysis
- **Review Summary**: AI-generated overview of all reviews
- **Sentiment Breakdown**: Visual representation of positive/negative/neutral reviews
- **Review Themes**: Common topics mentioned across reviews
- **Source Citations**: Direct links to original review sources

![ChatGPT Product Info Search Reviews Interface](assets/chatgpt-product-info-reviews.png)

### Additional Data
- **Product Overview**: AI rationale explaining the product category
- **Citation Links**: All source websites with favicons and snippets

## Technical Details

### How It Works

The script leverages ChatGPT's internal `/backend-api/search/product_info` endpoint, which is the same API that powers ChatGPT's built-in product search functionality. It:

1. **Authenticates** using your existing ChatGPT session
2. **Sends search queries** to ChatGPT's product API
3. **Parses streaming responses** in real-time
4. **Extracts structured data** including products, reviews, and citations
5. **Renders results** in a beautiful, organized interface

### API Endpoint
```
POST https://chatgpt.com/backend-api/search/product_info
```

### Authentication
The script automatically fetches your session token from `/api/auth/session` - no manual token input required!

### Data Structure
The API returns structured data including:
- Product entities with pricing and merchant information
- Review summaries with sentiment analysis
- Citation links to source websites
- Rationale and summary text

## Browser Compatibility

- ✅ **Chrome** (Recommended)
- ✅ **Firefox**
- ✅ **Safari**
- ✅ **Opera**

## Requirements

- Active ChatGPT account (free or paid)
- Modern web browser with JavaScript enabled
- Must be used on chatgpt.com domain

## Troubleshooting

### Chrome Extension Issues

#### Extension Not Working
- Make sure you're on https://chatgpt.com (not chat.openai.com)
- Refresh the ChatGPT page after installing the extension
- Check that you're logged in to ChatGPT
- Verify the extension is enabled in chrome://extensions/

#### Popup Shows "Not Ready"
- Navigate to ChatGPT first
- Refresh the ChatGPT page
- Make sure the extension is enabled in chrome://extensions/

#### Floating Button Not Visible
- Check if you're on the correct ChatGPT domain
- Refresh the page
- Look for the 🛍️ button in the bottom-right area of the page

### General Issues

#### "Failed to get authentication token"
- Make sure you're logged in to ChatGPT
- Refresh the ChatGPT page and try again
- Check that you're on the correct chatgpt.com domain

#### "No results found"
- Try different search terms
- Use more specific product names
- Include brand or product names in your search

#### Modal doesn't appear (Browser Script)
- Make sure JavaScript is enabled
- Check browser console for errors
- Try refreshing the page and running the script again

## Privacy & Security

### Chrome Extension
- **No data collection**: The extension doesn't collect or store any personal data
- **Local processing**: All searches are processed locally in your browser
- **Secure authentication**: Uses your existing ChatGPT session tokens
- **No external servers**: Communicates only with ChatGPT's official API
- **Local storage only**: Search history is stored locally in your browser

### Browser Script
- **No data collection**: The script runs entirely in your browser
- **Uses your session**: Leverages your existing ChatGPT authentication
- **No external servers**: All requests go directly to ChatGPT's API
- **No chat history impact**: This won't create new chats, so you won't see it in your history

### Both Methods
- **Open source**: Full code is available for inspection
- **Secure by design**: No third-party data sharing or analytics

## Want to Improve Your AI Visibility?

If you're a business owner or marketer, you might be wondering: **"How do I get MY products to show up in ChatGPT search results?"**

[**Try Finseo**](https://www.finseo.ai/?ref=gptproductsearch) - The next-gen AI SEO platform that helps you:
- **Track your brand visibility** across ChatGPT, Claude, Perplexity, and other AI platforms
- **Monitor what AI says** about your business and products
- **Get actionable recommendations** to improve your presence in AI search results
- **Stay ahead of competitors** in the AI search landscape

*Perfect complement to this product search tool - see what others are finding, then optimize your own products to be discovered!*

## Additional Resources

Learn more about ChatGPT's product discovery capabilities:

- **[Help ChatGPT discover your products](https://openai.com/chatgpt/search-product-discovery)** - Official guide for businesses on how to make their products discoverable in ChatGPT Search
- **[Improved Shopping Results from ChatGPT Search, and How Product Results are Selected](https://help.openai.com/en/articles/11128490-improved-shopping-results-from-chatgpt-search)** - Detailed explanation of how ChatGPT selects and ranks product results

## Contributing

Feel free to submit issues, feature requests, or pull requests on GitHub!

## Author

Created by [Martin Aberastegue (@Xyborg)](https://www.martinaberastegue.com/)

*Originally developed as a browser script, now enhanced with a full-featured Chrome extension for better reliability and user experience.*

## License

MIT License - feel free to modify and use as needed!

---

**Note**: This tool uses ChatGPT's internal API and is intended for educational and personal use. Please respect ChatGPT's terms of service.

**Recommendation**: Use the Chrome extension for the best experience with persistent history, enhanced UI, and automatic updates.
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/at.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-at" viewBox="0 0 640 480">
  <path fill="#fff" d="M0 160h640v160H0z"/>
  <path fill="#c8102e" d="M0 0h640v160H0zm0 320h640v160H0z"/>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/se.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-se" viewBox="0 0 640 480">
  <path fill="#005293" d="M0 0h640v480H0z"/>
  <path fill="#fecb00" d="M176 0v192H0v96h176v192h96V288h368v-96H272V0z"/>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/de.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-de" viewBox="0 0 640 480">
  <path fill="#fc0" d="M0 320h640v160H0z"/>
  <path fill="#000001" d="M0 0h640v160H0z"/>
  <path fill="red" d="M0 160h640v160H0z"/>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/nl.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-nl" viewBox="0 0 640 480">
  <path fill="#ae1c28" d="M0 0h640v160H0z"/>
  <path fill="#fff" d="M0 160h640v160H0z"/>
  <path fill="#21468b" d="M0 320h640v160H0z"/>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/fr.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-fr" viewBox="0 0 640 480">
  <path fill="#fff" d="M0 0h640v480H0z"/>
  <path fill="#000091" d="M0 0h213.3v480H0z"/>
  <path fill="#e1000f" d="M426.7 0H640v480H426.7z"/>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/search.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/it.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-it" viewBox="0 0 640 480">
  <g fill-rule="evenodd" stroke-width="1pt">
    <path fill="#fff" d="M0 0h640v480H0z"/>
    <path fill="#009246" d="M0 0h213.3v480H0z"/>
    <path fill="#ce2b37" d="M426.7 0H640v480H426.7z"/>
  </g>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/ch.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ch" viewBox="0 0 640 480">
  <g fill-rule="evenodd" stroke-width="1pt">
    <path fill="red" d="M0 0h640v480H0z"/>
    <g fill="#fff">
      <path d="M170 195h300v90H170z"/>
      <path d="M275 90h90v300h-90z"/>
    </g>
  </g>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/be.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-be" viewBox="0 0 640 480">
  <g fill-rule="evenodd" stroke-width="1pt">
    <path fill="#000001" d="M0 0h213.3v480H0z"/>
    <path fill="#ffd90c" d="M213.3 0h213.4v480H213.3z"/>
    <path fill="#f31830" d="M426.7 0H640v480H426.7z"/>
  </g>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/project.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M216,72H131.31L104,44.69A15.86,15.86,0,0,0,92.69,40H40A16,16,0,0,0,24,56V200.62A15.4,15.4,0,0,0,39.38,216H216.89A15.13,15.13,0,0,0,232,200.89V88A16,16,0,0,0,216,72ZM40,56H92.69l16,16H40ZM216,200H40V88H216Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/tag.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/neutral.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm48-56a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,160ZM80,108a12,12,0,1,1,12,12A12,12,0,0,1,80,108Zm96,0a12,12,0,1,1-12-12A12,12,0,0,1,176,108Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/up-arrow.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M229.66,114.34l-96-96a8,8,0,0,0-11.32,0l-96,96A8,8,0,0,0,32,128H72v56a8,8,0,0,0,8,8h96a8,8,0,0,0,8-8V128h40a8,8,0,0,0,5.66-13.66ZM176,112a8,8,0,0,0-8,8v56H88V120a8,8,0,0,0-8-8H51.31L128,35.31,204.69,112Zm8,104a8,8,0,0,1-8,8H80a8,8,0,0,1,0-16h96A8,8,0,0,1,184,216Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/x.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M214.75,211.71l-62.6-98.38,61.77-67.95a8,8,0,0,0-11.84-10.76L143.24,99.34,102.75,35.71A8,8,0,0,0,96,32H48a8,8,0,0,0-6.75,12.3l62.6,98.37-61.77,68a8,8,0,1,0,11.84,10.76l58.84-64.72,40.49,63.63A8,8,0,0,0,160,224h48a8,8,0,0,0,6.75-12.29ZM164.39,208,62.57,48h29L193.43,208Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/check.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M243.28,68.24l-24-23.56a16,16,0,0,0-22.59,0L104,136.23l-36.69-35.6a16,16,0,0,0-22.58.05l-24,24a16,16,0,0,0,0,22.61l71.62,72a16,16,0,0,0,22.63,0L243.33,90.91A16,16,0,0,0,243.28,68.24ZM103.62,208,32,136l24-24a.6.6,0,0,1,.08.08l42.35,41.09a8,8,0,0,0,11.19,0L208.06,56,232,79.6Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/down-arrow.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M231.39,132.94A8,8,0,0,0,224,128H184V72a8,8,0,0,0-8-8H80a8,8,0,0,0-8,8v56H32a8,8,0,0,0-5.66,13.66l96,96a8,8,0,0,0,11.32,0l96-96A8,8,0,0,0,231.39,132.94ZM128,220.69,51.31,144H80a8,8,0,0,0,8-8V80h80v56a8,8,0,0,0,8,8h28.69ZM72,40a8,8,0,0,1,8-8h96a8,8,0,0,1,0,16H80A8,8,0,0,1,72,40Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/error.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M165.66,101.66,139.31,128l26.35,26.34a8,8,0,0,1-11.32,11.32L128,139.31l-26.34,26.35a8,8,0,0,1-11.32-11.32L116.69,128,90.34,101.66a8,8,0,0,1,11.32-11.32L128,116.69l26.34-26.35a8,8,0,0,1,11.32,11.32ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/history.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M136,80v43.47l36.12,21.67a8,8,0,0,1-8.24,13.72l-40-24A8,8,0,0,1,120,128V80a8,8,0,0,1,16,0Zm-8-48A95.44,95.44,0,0,0,60.08,60.15C52.81,67.51,46.35,74.59,40,82V64a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16H49c7.15-8.42,14.27-16.35,22.39-24.57a80,80,0,1,1,1.66,114.75,8,8,0,1,0-11,11.64A96,96,0,1,0,128,32Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/edit.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM51.31,160,136,75.31,152.69,92,68,176.68ZM48,179.31,76.69,208H48Zm48,25.38L79.31,188,164,103.31,180.69,120Zm96-96L147.31,64l24-24L216,84.68Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/linkedin.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M216,24H40A16,16,0,0,0,24,40V216a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V40A16,16,0,0,0,216,24Zm0,192H40V40H216V216ZM96,112v64a8,8,0,0,1-16,0V112a8,8,0,0,1,16,0Zm88,28v36a8,8,0,0,1-16,0V140a20,20,0,0,0-40,0v36a8,8,0,0,1-16,0V112a8,8,0,0,1,15.79-1.78A36,36,0,0,1,184,140ZM100,84A12,12,0,1,1,88,72,12,12,0,0,1,100,84Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/positive.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216ZM80,108a12,12,0,1,1,12,12A12,12,0,0,1,80,108Zm96,0a12,12,0,1,1-12-12A12,12,0,0,1,176,108Zm-1.07,48c-10.29,17.79-27.4,28-46.93,28s-36.63-10.2-46.92-28a8,8,0,1,1,13.84-8c7.47,12.91,19.21,20,33.08,20s25.61-7.1,33.07-20a8,8,0,0,1,13.86,8Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/analysis.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1-8-8V48a8,8,0,0,1,16,0V200H224A8,8,0,0,1,232,208ZM132,160a12,12,0,1,0-12-12A12,12,0,0,0,132,160Zm-24-56A12,12,0,1,0,96,92,12,12,0,0,0,108,104ZM76,176a12,12,0,1,0-12-12A12,12,0,0,0,76,176Zm96-48a12,12,0,1,0-12-12A12,12,0,0,0,172,128Zm24-40a12,12,0,1,0-12-12A12,12,0,0,0,196,88Zm-20,76a12,12,0,1,0,12-12A12,12,0,0,0,176,164Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/gb.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-gb" viewBox="0 0 640 480">
  <path fill="#012169" d="M0 0h640v480H0z"/>
  <path fill="#FFF" d="m75 0 244 181L562 0h78v62L400 241l240 178v61h-80L320 301 81 480H0v-60l239-178L0 64V0z"/>
  <path fill="#C8102E" d="m424 281 216 159v40L369 281zm-184 20 6 35L54 480H0zM640 0v3L391 191l2-44L590 0zM0 0l239 176h-60L0 42z"/>
  <path fill="#FFF" d="M241 0v480h160V0zM0 160v160h640V160z"/>
  <path fill="#C8102E" d="M0 193v96h640v-96zM273 0v480h96V0z"/>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/warning.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/negative.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M92,152a12,12,0,1,1,12-12A12,12,0,0,1,92,152Zm72-24a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm68,0A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128ZM171.56,81.34,128,110.39l-43.56-29a8,8,0,1,0-8.88,13.32l48,32a8,8,0,0,0,8.88,0l48-32a8,8,0,0,0-8.88-13.32Zm-15.13,96C148,171.73,139.94,168,128,168s-20,3.73-28.43,9.34a8,8,0,0,0,8.86,13.32C114.93,186.34,120,184,128,184s13.07,2.34,19.57,6.66a8,8,0,1,0,8.86-13.32Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/icons/logobubble.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M232,48V88a8,8,0,0,1-16,0V56H184a8,8,0,0,1,0-16h40A8,8,0,0,1,232,48ZM72,200H40V168a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16Zm152-40a8,8,0,0,0-8,8v32H184a8,8,0,0,0,0,16h40a8,8,0,0,0,8-8V168A8,8,0,0,0,224,160ZM32,96a8,8,0,0,0,8-8V56H72a8,8,0,0,0,0-16H32a8,8,0,0,0-8,8V88A8,8,0,0,0,32,96ZM80,80a8,8,0,0,0-8,8v80a8,8,0,0,0,16,0V88A8,8,0,0,0,80,80Zm104,88V88a8,8,0,0,0-16,0v80a8,8,0,0,0,16,0ZM144,80a8,8,0,0,0-8,8v80a8,8,0,0,0,16,0V88A8,8,0,0,0,144,80Zm-32,0a8,8,0,0,0-8,8v80a8,8,0,0,0,16,0V88A8,8,0,0,0,112,80Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/us.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-us" viewBox="0 0 640 480">
  <path fill="#bd3d44" d="M0 0h640v480H0"/>
  <path stroke="#fff" stroke-width="37" d="M0 55.3h640M0 129h640M0 203h640M0 277h640M0 351h640M0 425h640"/>
  <path fill="#192f5d" d="M0 0h364.8v258.5H0"/>
  <marker id="us-a" markerHeight="30" markerWidth="30">
    <path fill="#fff" d="m14 0 9 27L0 10h28L5 27z"/>
  </marker>
  <path fill="none" marker-mid="url(#us-a)" d="m0 0 16 11h61 61 61 61 60L47 37h61 61 60 61L16 63h61 61 61 61 60L47 89h61 61 60 61L16 115h61 61 61 61 60L47 141h61 61 60 61L16 166h61 61 61 61 60L47 192h61 61 60 61L16 218h61 61 61 61 60z"/>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/database.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M128,24C74.17,24,32,48.6,32,80v96c0,31.4,42.17,56,96,56s96-24.6,96-56V80C224,48.6,181.83,24,128,24Zm80,104c0,9.62-7.88,19.43-21.61,26.92C170.93,163.35,150.19,168,128,168s-42.93-4.65-58.39-13.08C55.88,147.43,48,137.62,48,128V111.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64ZM69.61,53.08C85.07,44.65,105.81,40,128,40s42.93,4.65,58.39,13.08C200.12,60.57,208,70.38,208,80s-7.88,19.43-21.61,26.92C170.93,115.35,150.19,120,128,120s-42.93-4.65-58.39-13.08C55.88,99.43,48,89.62,48,80S55.88,60.57,69.61,53.08ZM186.39,202.92C170.93,211.35,150.19,216,128,216s-42.93-4.65-58.39-13.08C55.88,195.43,48,185.62,48,176V159.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64V176C208,185.62,200.12,195.43,186.39,202.92Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/github.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/styles.css:
--------------------------------------------------------------------------------

```css
/* ChatGPT Product Info Research Extension Styles */

#openProductSearchModalBtn {
    position: fixed;
    right: 30px;
    bottom: 100px;
    transform: none;
    background-color: #fef3c7;
    color: #b45309;
    border: none;
    border-radius: 50%;
    width: 60px;
    height: 60px;
    font-size: 0;
    box-shadow: 0 3px 10px rgba(0,0,0,0.2);
    cursor: pointer;
    z-index: 9990;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.3s ease;
}

#openProductSearchModalBtn img {
    width: 32px;
    height: 32px;
    pointer-events: none;
}

#openProductSearchModalBtn.icon-fallback {
    font-size: 24px;
}

#openProductSearchModalBtn:hover {
    background-color: #fde68a;
    box-shadow: 0 5px 15px rgba(0,0,0,0.3);
}

/* Spinning animation for loading states */
@keyframes cpr-spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

.cpr-loading-spinner {
    display: inline-block;
    width: 32px;
    height: 32px;
    border: 3px solid #f3f3f3;
    border-top: 3px solid #667eea;
    border-radius: 50%;
    animation: cpr-spin 1s linear infinite;
    margin-bottom: 10px;
}

```

--------------------------------------------------------------------------------
/chrome-extension/manifest.json:
--------------------------------------------------------------------------------

```json
{
  "manifest_version": 3,
  "name": "ChatGPT E-commerce Product Research",
  "version": "1.3.8",
  "description": "Research e-commerce product reviews, comparisons, and detailed information directly within ChatGPT",
  "permissions": [
    "activeTab"
  ],
  "host_permissions": [
    "https://chatgpt.com/*",
    "https://*.chatgpt.com/*"
  ],
  "content_scripts": [
    {
      "matches": ["https://chatgpt.com/*", "https://*.chatgpt.com/*"],
      "js": ["content-script.js"],
      "css": ["styles.css"],
      "run_at": "document_end"
    }
  ],
  "action": {
    "default_popup": "popup.html",
    "default_title": "ChatGPT E-commerce Product Research",
    "default_icon": {
      "16": "icons/icon16.png",
      "19": "icons/icon19.png",
      "32": "icons/icon32.png",
      "48": "icons/icon48.png",
      "128": "icons/icon128.png"
    }
  },
  "icons": {
    "16": "icons/icon16.png",
    "19": "icons/icon19.png",
    "32": "icons/icon32.png",
    "48": "icons/icon48.png",
    "128": "icons/icon128.png"
  },
  "content_security_policy": {
    "extension_pages": "script-src 'self'; object-src 'self';"
  },
  "web_accessible_resources": [
    {
      "resources": ["icons/*", "assets/flags/*", "assets/icons-ui/*"],
      "matches": ["https://chatgpt.com/*", "https://*.chatgpt.com/*"]
    }
  ]
}

```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/all.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="600" viewBox="0 0 264.583 158.75"><path d="M-138.415-1245.822h2645.833v1587.5H-138.415z" style="opacity:1;fill:#00c;fill-opacity:1;stroke:#fff;stroke-width:0;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" transform="matrix(.1 0 0 .1 13.841 124.582)"/><g transform="matrix(.1 0 0 .1 13.841 124.582)"><circle cx="1184.502" cy="-452.072" r="502.708" style="opacity:1;fill:none;fill-opacity:1;stroke:#fff;stroke-width:52.91666412;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><path d="M855.062-112.445a658.88 658.88 0 0 1 658.88 0M1513.942-791.7a658.88 658.88 0 0 1-658.88 0" style="opacity:1;fill:none;fill-opacity:1;stroke:#fff;stroke-width:52.91666412;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/><path d="M1183.361 49.779a628.39 628.39 0 0 1-250.213-501.851 628.39 628.39 0 0 1 250.213-501.85" style="opacity:1;fill:none;fill-opacity:1;stroke:#fff;stroke-width:52.91666412;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><path d="M1184.502-954.78V50.636M681.794-452.072H1687.21" style="opacity:1;fill:none;stroke:#fff;stroke-width:52.91664886;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><path d="M-1185.643 953.923a628.39 628.39 0 0 1-250.213-501.851A628.39 628.39 0 0 1-1185.643-49.78" style="opacity:1;fill:none;fill-opacity:1;stroke:#fff;stroke-width:52.91666412;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" transform="scale(-1)"/></g></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/settings.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/ar.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-ar" viewBox="0 0 640 480">
  <path fill="#74acdf" d="M0 0h640v480H0z"/>
  <path fill="#fff" d="M0 160h640v160H0z"/>
  <g id="ar-c" transform="translate(-64)scale(.96)">
    <path id="ar-a" fill="#f6b40e" stroke="#85340a" stroke-width="1.1" d="m396.8 251.3 28.5 62s.5 1.2 1.3.9c.8-.4.3-1.6.3-1.6l-23.7-64m-.7 24.2c-.4 9.4 5.4 14.6 4.7 23s3.8 13.2 5 16.5c1 3.3-1.2 5.2-.3 5.7 1 .5 3-2.1 2.4-6.8s-4.2-6-3.4-16.3-4.2-12.7-3-22"/>
    <use xlink:href="#ar-a" width="100%" height="100%" transform="rotate(22.5 400 250)"/>
    <use xlink:href="#ar-a" width="100%" height="100%" transform="rotate(45 400 250)"/>
    <use xlink:href="#ar-a" width="100%" height="100%" transform="rotate(67.5 400 250)"/>
    <path id="ar-b" fill="#85340a" d="M404.3 274.4c.5 9 5.6 13 4.6 21.3 2.2-6.5-3.1-11.6-2.8-21.2m-7.7-23.8 19.5 42.6-16.3-43.9"/>
    <use xlink:href="#ar-b" width="100%" height="100%" transform="rotate(22.5 400 250)"/>
    <use xlink:href="#ar-b" width="100%" height="100%" transform="rotate(45 400 250)"/>
    <use xlink:href="#ar-b" width="100%" height="100%" transform="rotate(67.5 400 250)"/>
  </g>
  <use xlink:href="#ar-c" width="100%" height="100%" transform="rotate(90 320 240)"/>
  <use xlink:href="#ar-c" width="100%" height="100%" transform="rotate(180 320 240)"/>
  <use xlink:href="#ar-c" width="100%" height="100%" transform="rotate(-90 320 240)"/>
  <circle cx="320" cy="240" r="26.7" fill="#f6b40e" stroke="#85340a" stroke-width="1.4"/>
  <path id="ar-h" fill="#843511" stroke-width="1" d="M329 234.3c-1.7 0-3.5.8-4.5 2.4 2 1.9 6.6 2 9.7-.2a7 7 0 0 0-5.1-2.2zm0 .4c1.8 0 3.5.8 3.7 1.6-2 2.3-5.3 2-7.4.4q1.6-2 3.8-2z"/>
  <use xlink:href="#ar-d" width="100%" height="100%" transform="matrix(-1 0 0 1 640.2 0)"/>
  <use xlink:href="#ar-e" width="100%" height="100%" transform="matrix(-1 0 0 1 640.2 0)"/>
  <use xlink:href="#ar-f" width="100%" height="100%" transform="translate(18.1)"/>
  <use xlink:href="#ar-g" width="100%" height="100%" transform="matrix(-1 0 0 1 640.2 0)"/>
  <path fill="#85340a" d="M316 243.7a1.8 1.8 0 1 0 1.8 2.9 4 4 0 0 0 2.2.6h.2q1 0 2.3-.6.5.7 1.5.7a1.8 1.8 0 0 0 .3-3.6q.8.3.8 1.2a1.2 1.2 0 0 1-2.4 0 3 3 0 0 1-2.6 1.7 3 3 0 0 1-2.5-1.7q-.1 1.1-1.3 1.2-1-.1-1.2-1.2c-.2-1.1.3-1 .8-1.2zm2 5.4c-2.1 0-3 2-4.8 3.1 1-.4 1.8-1.2 3.3-2s2.6.2 3.5.2 2-1 3.5-.2l3.3 2c-1.9-1.2-2.7-3-4.8-3q-.7 0-2 .6z"/>
  <path fill="#85340a" d="M317.2 251.6q-1.1 0-3.4.6c3.7-.8 4.5.5 6.2.5 1.6 0 2.5-1.3 6.1-.5-4-1.2-4.9-.4-6.1-.4-.8 0-1.4-.3-2.8-.2"/>
  <path fill="#85340a" d="M314 252.2h-.8c4.3.5 2.3 3 6.8 3s2.5-2.5 6.8-3c-4.5-.4-3.1 2.3-6.8 2.3-3.5 0-2.4-2.3-6-2.3"/>
  <path fill="#85340a" d="M323.7 258.9a3.7 3.7 0 0 0-7.4 0 3.8 3.8 0 0 1 7.4 0"/>
  <path id="ar-e" fill="#85340a" stroke-width="1" d="M303.4 234.3c4.7-4.1 10.7-4.8 14-1.7a8 8 0 0 1 1.5 3.4q.6 3.6-2.1 7.5l.8.4q2.4-4.7 1.6-9.4l-.6-2.3c-4.5-3.7-10.7-4-15.2 2z"/>
  <path id="ar-d" fill="#85340a" stroke-width="1" d="M310.8 233c2.7 0 3.3.6 4.5 1.7 1.2 1 1.9.8 2 1 .3.2 0 .8-.3.6q-.7-.2-2.5-1.6c-1.8-1.4-2.5-1-3.7-1-3.7 0-5.7 3-6.1 2.8-.5-.2 2-3.5 6.1-3.5"/>
  <use xlink:href="#ar-h" width="100%" height="100%" transform="translate(-18.4)"/>
  <circle id="ar-f" cx="310.9" cy="236.3" r="1.8" fill="#85340a" stroke-width="1"/>
  <path id="ar-g" fill="#85340a" stroke-width="1" d="M305.9 237.5c3.5 2.7 7 2.5 9 1.3 2-1.3 2-1.7 1.6-1.7s-.8.4-2.4 1.3c-1.7.8-4.1.8-8.2-.9"/>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/popup.js:
--------------------------------------------------------------------------------

```javascript
// ChatGPT Product Info Research Extension - Popup Script

document.addEventListener('DOMContentLoaded', async () => {
    const statusEl = document.getElementById('status');
    const statusTextEl = document.getElementById('status-text');
    const openSearchBtn = document.getElementById('open-search');
    const goToChatGPTBtn = document.getElementById('go-to-chatgpt');

    const statusIcons = {
        success: { modifier: 'status-icon--success', label: 'Success status' },
        warning: { modifier: 'status-icon--warning', label: 'Warning status' },
        error: { modifier: 'status-icon--error', label: 'Error status' },
    };

    function setStatus(type, message) {
        const icon = statusIcons[type];
        if (!icon) {
            statusTextEl.textContent = message;
            return;
        }

        statusTextEl.innerHTML = `<span class="status-icon ${icon.modifier}" role="img" aria-label="${icon.label}"></span> <span>${message}</span>`;
    }

    // Check if we're on a ChatGPT tab
    async function checkChatGPTStatus() {
        try {
            const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });
            
            if (!activeTab.url.includes('chatgpt.com')) {
                statusEl.className = 'status status-bad';
                setStatus('error', 'Please navigate to ChatGPT first');
                openSearchBtn.disabled = true;
                return false;
            }

            // Check if content script is ready by sending a message
            try {
                await chrome.tabs.sendMessage(activeTab.id, { action: 'ping' });
                statusEl.className = 'status status-good';
                setStatus('success', 'Ready to search products');
                openSearchBtn.disabled = false;
                return true;
            } catch (error) {
                statusEl.className = 'status status-warning';
                setStatus('warning', 'Please refresh the ChatGPT page');
                openSearchBtn.disabled = true;
                return false;
            }
        } catch (error) {
            statusEl.className = 'status status-bad';
            setStatus('error', 'Unable to check status');
            openSearchBtn.disabled = true;
            return false;
        }
    }

    // Open the product search modal
    openSearchBtn.addEventListener('click', async () => {
        try {
            const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });
            await chrome.tabs.sendMessage(activeTab.id, { action: 'openSearch' });
            window.close(); // Close the popup
        } catch (error) {
            console.error('Failed to open search:', error);
            statusEl.className = 'status status-bad';
            setStatus('error', 'Failed to open search. Please refresh the page.');
        }
    });

    // Navigate to ChatGPT
    goToChatGPTBtn.addEventListener('click', async () => {
        try {
            const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });
            
            if (activeTab.url.includes('chatgpt.com')) {
                // Already on ChatGPT, just refresh
                await chrome.tabs.reload(activeTab.id);
            } else {
                // Navigate to ChatGPT
                await chrome.tabs.update(activeTab.id, { url: 'https://chatgpt.com' });
            }
            
            window.close();
        } catch (error) {
            console.error('Failed to navigate to ChatGPT:', error);
        }
    });

    // Initial status check
    await checkChatGPTStatus();

    // Recheck status every 2 seconds
    setInterval(checkChatGPTStatus, 2000);
});

```

--------------------------------------------------------------------------------
/chrome-extension/popup.html:
--------------------------------------------------------------------------------

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ChatGPT E-commerce Product Research</title>
    <style>
        body {
            width: 340px;
            padding: 0;
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
            background: linear-gradient(140deg, #f5f8ff 0%, #ffffff 60%);
            margin: 0;
        }
        
        .container {
            padding: 20px;
        }
        
        .header {
            text-align: center;
            margin-bottom: 20px;
        }
        
        .header h1 {
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 8px;
            font-size: 18px;
            font-weight: 600;
            color: #27325f;
            margin: 0 0 8px 0;
        }

        .header-icon {
            width: 20px;
            height: 20px;
        }
        
        .header p {
            font-size: 13px;
            color: #5e6f9b;
            margin: 0;
            line-height: 1.4;
        }
        
        .status {
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(2px);
            border-radius: 12px;
            padding: 14px;
            margin-bottom: 16px;
            border: 1px solid rgba(74, 105, 183, 0.22);
            box-shadow: 0 2px 8px rgba(32, 42, 92, 0.08);
        }

        #status-text {
            display: flex;
            align-items: center;
            gap: 8px;
            font-size: 13px;
        }

        .status-icon {
            width: 18px;
            height: 18px;
            display: inline-flex;
            background-color: currentColor;
            -webkit-mask-size: contain;
            -webkit-mask-repeat: no-repeat;
            -webkit-mask-position: center;
            mask-size: contain;
            mask-repeat: no-repeat;
            mask-position: center;
            flex-shrink: 0;
        }

        .status-good {
            background: rgba(40, 167, 69, 0.1);
            border-color: rgba(40, 167, 69, 0.3);
            color: #1e7e34;
        }

        .status-warning {
            background: rgba(255, 193, 7, 0.1);
            border-color: rgba(255, 193, 7, 0.3);
            color: #856404;
        }

        .status-bad {
            background: rgba(220, 53, 69, 0.1);
            border-color: rgba(220, 53, 69, 0.3);
            color: #721c24;
        }

        .status-icon--success {
            -webkit-mask-image: url('assets/icons-ui/check.svg');
            mask-image: url('assets/icons-ui/check.svg');
        }

        .status-icon--warning {
            -webkit-mask-image: url('assets/icons-ui/warning.svg');
            mask-image: url('assets/icons-ui/warning.svg');
        }

        .status-icon--error {
            -webkit-mask-image: url('assets/icons-ui/error.svg');
            mask-image: url('assets/icons-ui/error.svg');
        }
        
        .action-button {
            width: 100%;
            background: #5b8def;
            color: white;
            border: none;
            padding: 12px 16px;
            border-radius: 12px;
            font-size: 14px;
            font-weight: 500;
            cursor: pointer;
            transition: all 0.2s ease;
            margin-bottom: 12px;
            box-shadow: 0 4px 12px rgba(91, 141, 239, 0.25);
        }
        
        .action-button:hover {
            background: #4a7de8;
            transform: translateY(-1px);
            box-shadow: 0 6px 16px rgba(91, 141, 239, 0.35);
        }
        
        .action-button:disabled {
            background: #9ca3af;
            cursor: not-allowed;
            transform: none;
            box-shadow: none;
            opacity: 0.6;
        }
        
        .secondary-button {
            background: rgba(91, 141, 239, 0.12);
            color: #2f4db5;
            box-shadow: 0 2px 8px rgba(91, 141, 239, 0.12);
        }
        
        .secondary-button:hover {
            background: rgba(91, 141, 239, 0.18);
            color: #27325f;
        }
        
        .instructions {
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(2px);
            border-radius: 12px;
            padding: 16px;
            border: 1px solid rgba(74, 105, 183, 0.22);
            font-size: 13px;
            line-height: 1.5;
            color: #35426b;
            box-shadow: 0 2px 8px rgba(32, 42, 92, 0.08);
        }
        
        .instructions h3 {
            margin: 0 0 12px 0;
            font-size: 14px;
            font-weight: 600;
            color: #27325f;
        }
        
        .instructions ul {
            margin: 8px 0;
            padding-left: 20px;
        }
        
        .instructions li {
            margin-bottom: 6px;
            color: #4b5976;
        }
        
        .footer {
            text-align: center;
            margin-top: 16px;
            padding-top: 16px;
            border-top: 1px solid rgba(74, 105, 183, 0.18);
            font-size: 12px;
            color: #5e6f9b;
        }
        
        .footer a {
            color: #5b8def;
            text-decoration: none;
            transition: color 0.2s ease;
        }
        
        .footer a:hover {
            color: #4a7de8;
            text-decoration: underline;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>
                <img src="assets/icons-ui/search.svg" alt="Search icon" class="header-icon">
                E-commerce Product Research
            </h1>
            <p>Search for product reviews and information directly in ChatGPT</p>
        </div>

        <div id="status" class="status">
            <div id="status-text">Checking ChatGPT status...</div>
        </div>

        <button id="open-search" class="action-button" disabled>
            Open E-commerce Product Research
        </button>

        <button id="go-to-chatgpt" class="action-button secondary-button">
            Go to ChatGPT
        </button>

        <div class="instructions">
            <h3>How to use:</h3>
            <ul>
                <li>Make sure you're logged in to ChatGPT</li>
                <li>Click "Open E-commerce Product Research" to show the search interface</li>
                <li>Search for any product to get reviews and information</li>
                <li>Use multi-product search to compare multiple items</li>
            </ul>
        </div>

        <div class="footer">
            Created by <a href="https://www.martinaberastegue.com/?utm_source=chrome&utm_medium=extension&utm_campaign=ChatGPT_Ecom_Product_Research&utm_content=popup" target="_blank" rel="noopener noreferrer">Martin Aberastegue</a>
        </div>
    </div>

    <script src="popup.js"></script>
</body>
</html>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/br.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-br" viewBox="0 0 640 480">
  <g stroke-width="1pt">
    <path fill="#229e45" fill-rule="evenodd" d="M0 0h640v480H0z"/>
    <path fill="#f8e509" fill-rule="evenodd" d="m321.4 436 301.5-195.7L319.6 44 17.1 240.7z"/>
    <path fill="#2b49a3" fill-rule="evenodd" d="M452.8 240c0 70.3-57.1 127.3-127.6 127.3A127.4 127.4 0 1 1 452.8 240"/>
    <path fill="#ffffef" fill-rule="evenodd" d="m283.3 316.3-4-2.3-4 2 .9-4.5-3.2-3.4 4.5-.5 2.2-4 1.9 4.2 4.4.8-3.3 3m86 26.3-3.9-2.3-4 2 .8-4.5-3.1-3.3 4.5-.5 2.1-4.1 2 4.2 4.4.8-3.4 3.1m-36.2-30-3.4-2-3.5 1.8.8-3.9-2.8-2.9 4-.4 1.8-3.6 1.6 3.7 3.9.7-3 2.7m87-8.5-3.4-2-3.5 1.8.8-3.9-2.7-2.8 3.9-.4 1.8-3.5 1.6 3.6 3.8.7-2.9 2.6m-87.3-22-4-2.2-4 2 .8-4.6-3.1-3.3 4.5-.5 2.1-4.1 2 4.2 4.4.8-3.4 3.2m-104.6-35-4-2.2-4 2 1-4.6-3.3-3.3 4.6-.5 2-4.1 2 4.2 4.4.8-3.3 3.1m13.3 57.2-4-2.3-4 2 .9-4.5-3.2-3.3 4.5-.6 2.1-4 2 4.2 4.4.8-3.3 3.1m132-67.3-3.6-2-3.6 1.8.8-4-2.8-3 4-.5 1.9-3.6 1.7 3.8 4 .7-3 2.7m-6.7 38.3-2.7-1.6-2.9 1.4.6-3.2-2.2-2.3 3.2-.4 1.5-2.8 1.3 3 3 .5-2.2 2.2m-142.2 50.4-2.7-1.5-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2M419 299.8l-2.2-1.1-2.2 1 .5-2.3-1.7-1.6 2.4-.3 1.2-2 1 2 2.5.5-1.9 1.5"/>
    <path fill="#ffffef" fill-rule="evenodd" d="m219.3 287.6-2.7-1.5-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2"/>
    <path fill="#ffffef" fill-rule="evenodd" d="m219.3 287.6-2.7-1.5-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2m42.3 3-2.6-1.4-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .5-2.3 2.1m-4.8 17-2.6-1.5-2.7 1.4.6-3-2.1-2.3 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2m87.4-22.2-2.6-1.6-2.8 1.4.6-3-2-2.3 3-.3 1.4-2.7 1.2 2.8 3 .5-2.2 2.1m-25.1 3-2.7-1.5-2.7 1.4.6-3-2-2.3 3-.3 1.4-2.8 1.2 2.9 3 .5-2.2 2.1m-68.8-5.8-1.7-1-1.7.8.4-1.9-1.3-1.4 1.9-.2.8-1.7.8 1.8 1.9.3-1.4 1.3m167.8 45.4-2.6-1.5-2.7 1.4.6-3-2.1-2.3 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2m-20.8 6-2.2-1.4-2.3 1.2.5-2.6-1.7-1.8 2.5-.3 1.2-2.3 1 2.4 2.5.4-1.9 1.8m10.4 2.3-2-1.2-2.1 1 .4-2.3-1.6-1.7 2.3-.3 1.1-2 1 2 2.3.5-1.7 1.6m29.1-22.8-2-1-2 1 .5-2.3-1.6-1.7 2.3-.3 1-2 1 2.1 2.1.4-1.6 1.6m-38.8 41.8-2.5-1.4-2.7 1.2.6-2.8-2-2 3-.3 1.3-2.5 1.2 2.6 3 .5-2.3 1.9m.6 14.2-2.4-1.4-2.4 1.3.6-2.8-1.9-2 2.7-.4 1.2-2.5 1.1 2.6 2.7.5-2 2m-19-23.1-1.9-1.2-2 1 .4-2.2-1.5-1.7 2.2-.2 1-2 1 2 2.2.4-1.6 1.6m-17.8 2.3-2-1.2-2 1 .5-2.2-1.6-1.7 2.3-.2 1-2 1 2 2.1.4-1.6 1.6m-30.4-24.6-2-1.1-2 1 .5-2.3-1.6-1.6 2.2-.3 1-2 1 2 2.2.5-1.6 1.5m3.7 57-1.6-.9-1.8.9.4-2-1.3-1.4 1.9-.2.9-1.7.8 1.8 1.9.3-1.4 1.3m-46.2-86.6-4-2.3-4 2 .9-4.5-3.2-3.3 4.5-.6 2.2-4 1.9 4.2 4.4.8-3.3 3.1"/>
    <path fill="#fff" fill-rule="evenodd" d="M444.4 285.8a125 125 0 0 0 5.8-19.8c-67.8-59.5-143.3-90-238.7-83.7a125 125 0 0 0-8.5 20.9c113-10.8 196 39.2 241.4 82.6"/>
    <path fill="#309e3a" d="m414 252.4 2.3 1.3a3 3 0 0 0-.3 2.2 3 3 0 0 0 1.4 1.7q1 .8 2 .7.9 0 1.3-.7l.2-.9-.5-1-1.5-1.8a8 8 0 0 1-1.8-3 4 4 0 0 1 2-4.4 4 4 0 0 1 2.3-.2 7 7 0 0 1 2.6 1.2q2.1 1.5 2.6 3.2a4 4 0 0 1-.6 3.3l-2.4-1.5q.5-1 .2-1.7-.2-.8-1.2-1.4a3 3 0 0 0-1.8-.7 1 1 0 0 0-.9.5q-.3.4-.1 1 .2.8 1.6 2.2t2 2.5a4 4 0 0 1-.3 4.2 4 4 0 0 1-1.9 1.5 4 4 0 0 1-2.4.3q-1.3-.3-2.8-1.3-2.2-1.5-2.7-3.3a5 5 0 0 1 .6-4zm-11.6-7.6 2.5 1.3a3 3 0 0 0-.2 2.2 3 3 0 0 0 1.4 1.6q1.1.8 2 .6.9 0 1.3-.8l.2-.8q0-.5-.5-1l-1.6-1.8q-1.7-1.6-2-2.8a4 4 0 0 1 .4-3.1 4 4 0 0 1 1.6-1.4 4 4 0 0 1 2.2-.3 7 7 0 0 1 2.6 1q2.3 1.5 2.7 3.1a4 4 0 0 1-.4 3.4l-2.5-1.4q.5-1 .2-1.7-.4-1-1.3-1.4a3 3 0 0 0-1.9-.6 1 1 0 0 0-.8.5q-.3.4-.1 1 .3.8 1.7 2.2 1.5 1.5 2 2.4a4 4 0 0 1 0 4.2 4 4 0 0 1-1.8 1.6 4 4 0 0 1-2.4.3 8 8 0 0 1-2.9-1.1 6 6 0 0 1-2.8-3.2 5 5 0 0 1 .4-4m-14.2-3.8 7.3-12 8.8 5.5-1.2 2-6.4-4-1.6 2.7 6 3.7-1.3 2-6-3.7-2 3.3 6.7 4-1.2 2zm-20.7-17 1.1-2 5.4 2.7-2.5 5q-1.2.3-3 .2a9 9 0 0 1-3.3-1 8 8 0 0 1-3-2.6 6 6 0 0 1-1-3.5 9 9 0 0 1 1-3.7 8 8 0 0 1 2.6-3 6 6 0 0 1 3.6-1.1q1.4 0 3.2 1 2.4 1.1 3.1 2.8a5 5 0 0 1 .3 3.5l-2.7-.8a3 3 0 0 0-.2-2q-.4-.9-1.6-1.4a4 4 0 0 0-3.1-.3q-1.5.5-2.6 2.6t-.7 3.8a4 4 0 0 0 2 2.4q.8.5 1.7.5h1.8l.8-1.6zm-90.2-22.3 2-14 4.2.7 1.1 9.8 3.9-9 4.2.6-2 13.8-2.7-.4 1.7-10.9-4.4 10.5-2.7-.4-1.1-11.3-1.6 11zm-14.1-1.7 1.3-14 10.3 1-.2 2.4-7.5-.7-.3 3 7 .7-.3 2.4-7-.7-.3 3.8 7.8.7-.2 2.4z"/>
    <g stroke-opacity=".5">
      <path fill="#309e3a" d="M216.5 191.3q0-2.2.7-3.6a7 7 0 0 1 1.4-1.9 5 5 0 0 1 1.8-1.2q1.5-.5 3-.5 3.1.1 5 2a7 7 0 0 1 1.6 5.5q0 3.3-2 5.3a7 7 0 0 1-5 1.7 7 7 0 0 1-4.8-2 7 7 0 0 1-1.7-5.3"/>
      <path fill="#f7ffff" d="M219.4 191.3q0 2.3 1 3.6t2.8 1.3a4 4 0 0 0 2.8-1.1q1-1.2 1.1-3.7.1-2.4-1-3.6a4 4 0 0 0-2.7-1.3 4 4 0 0 0-2.8 1.2q-1.1 1.2-1.2 3.6"/>
    </g>
    <g stroke-opacity=".5">
      <path fill="#309e3a" d="m233 198.5.2-14h6q2.2 0 3.2.5 1 .3 1.6 1.3c.6 1 .6 1.4.6 2.3a4 4 0 0 1-1 2.6 5 5 0 0 1-2.7 1.2l1.5 1.2q.6.6 1.5 2.3l1.7 2.8h-3.4l-2-3.2-1.4-2-.9-.6-1.4-.2h-.6v5.8z"/>
      <path fill="#fff" d="M236 190.5h2q2.1 0 2.6-.2.5-.1.8-.5.4-.6.3-1 0-.9-.4-1.2-.3-.4-1-.6h-2l-2.3-.1z"/>
    </g>
    <g stroke-opacity=".5">
      <path fill="#309e3a" d="m249 185.2 5.2.3q1.7 0 2.6.3a5 5 0 0 1 2 1.4 6 6 0 0 1 1.2 2.4q.4 1.4.3 3.3a9 9 0 0 1-.5 3q-.6 1.5-1.7 2.4a5 5 0 0 1-2 1q-1 .3-2.5.2l-5.3-.3z"/>
      <path fill="#fff" d="m251.7 187.7-.5 9.3h3.8q.8 0 1.2-.5.5-.4.8-1.3t.4-2.6l-.1-2.5a3 3 0 0 0-.8-1.4l-1.2-.7-2.3-.3z"/>
    </g>
    <g stroke-opacity=".5">
      <path fill="#309e3a" d="m317.6 210.2 3.3-13.6 4.4 1 3.2 1q1.1.6 1.6 1.9t.2 2.8q-.3 1.2-1 2a4 4 0 0 1-3 1.4q-1 0-3-.5l-1.7-.5-1.2 5.2z"/>
      <path fill="#fff" d="m323 199.6-.8 3.8 1.5.4q1.6.4 2.2.3a2 2 0 0 0 1.6-1.5q0-.7-.2-1.3a2 2 0 0 0-1-.9l-1.9-.5-1.3-.3z"/>
    </g>
    <g stroke-opacity=".5">
      <path fill="#309e3a" d="m330.6 214.1 4.7-13.2 5.5 2q2.2.8 3 1.4.8.7 1 1.8c.2 1.1.2 1.5 0 2.3q-.6 1.5-1.8 2.2-1.2.6-3 .3.6.7 1 1.6l.8 2.7.6 3.1-3.1-1.1-1-3.6-.7-2.4-.6-.8q-.3-.4-1.3-.7l-.5-.2-2 5.6z"/>
      <path fill="#fff" d="m336 207.4 1.9.7q2 .7 2.5.7t.9-.3q.5-.3.6-.9.3-.6 0-1.2l-.8-.9-2-.7-2-.7-1.2 3.3z"/>
    </g>
    <g stroke-opacity=".5">
      <path fill="#309e3a" d="M347 213.6a9 9 0 0 1 1.7-3.2l1.8-1.5 2-.7q1.5-.1 3.1.4a7 7 0 0 1 4.2 3.3q1.2 2.4.2 5.7a7 7 0 0 1-3.4 4.5q-2.3 1.3-5.2.4a7 7 0 0 1-4.2-3.3 7 7 0 0 1-.2-5.6"/>
      <path fill="#fff" d="M349.8 214.4q-.7 2.3 0 3.8c.7 1.5 1.2 1.6 2.3 2q1.5.5 3-.4 1.4-.8 2.1-3.2.8-2.2 0-3.7a4 4 0 0 0-2.2-2 4 4 0 0 0-3 .3q-1.5.8-2.2 3.2"/>
    </g>
    <g stroke-opacity=".5">
      <path fill="#309e3a" d="m374.3 233.1 6.4-12.4 5.3 2.7a10 10 0 0 1 2.7 1.9q.8.7.8 1.9c0 1.2 0 1.5-.4 2.2a4 4 0 0 1-2 2q-1.5.4-3.1-.2.6 1 .8 1.7.3.9.4 2.8l.2 3.2-3-1.5-.4-3.7-.3-2.5-.5-1-1.2-.7-.5-.3-2.7 5.2z"/>
      <path fill="#fff" d="m380.5 227.2 1.9 1q1.8 1 2.3 1t1-.2q.4-.2.7-.8t.2-1.2l-.7-1-1.8-1-2-1z"/>
    </g>
    <g stroke-opacity=".5">
      <path fill="#309e3a" d="M426.1 258.7a9 9 0 0 1 2.5-2.6 7 7 0 0 1 2.2-.9 6 6 0 0 1 2.2 0q1.5.3 2.8 1.2a7 7 0 0 1 3 4.4q.4 2.6-1.4 5.5a7 7 0 0 1-4.5 3.3 7 7 0 0 1-5.2-1.1 7 7 0 0 1-3-4.4q-.4-2.7 1.4-5.4"/>
      <path fill="#fff" d="M428.6 260.3q-1.4 2-1.1 3.6a4 4 0 0 0 1.6 2.5q1.5 1 3 .6t2.9-2.4q1.4-2.1 1.1-3.6t-1.6-2.6c-1.4-1.1-2-.8-3-.5q-1.5.3-3 2.4z"/>
    </g>
    <path fill="#309e3a" d="m301.8 204.5 2.3-9.8 7.2 1.7-.3 1.6-5.3-1.2-.5 2.2 4.9 1.1-.4 1.7-4.9-1.2-.6 2.7 5.5 1.3-.4 1.6z"/>
  </g>
</svg>

```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/pt.svg:
--------------------------------------------------------------------------------

```
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-pt" viewBox="0 0 640 480">
  <path fill="red" d="M256 0h384v480H256z"/>
  <path fill="#060" d="M0 0h256v480H0z"/>
  <g fill="#ff0" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width=".6">
    <path d="M339.5 306.2c-32.3-1-180-93.2-181-108l8.1-13.5c14.7 21.3 165.7 111 180.6 107.8z"/>
    <path d="M164.9 182.8c-2.9 7.8 38.6 33.4 88.4 63.8s92.9 49 96 46.4l1.5-2.8q-.9 1.6-4.3.6c-13.5-3.9-48.6-20-92.1-46.4-43.6-26.4-81.4-50.7-87.3-61a6 6 0 0 1-.6-3.1h-.2l-1.2 2.2zm175.3 123.8q-.7 1.3-3.5.8c-12-1.3-48.6-19.1-91.9-45-50.4-30.2-92-57.6-87.4-64.8l1.2-2.2.2.1c-4 12.2 82.1 61.4 87.2 64.6 49.8 30.8 91.8 48.9 95.5 44.2z"/>
    <path d="M256.2 207.2c32.2-.3 72-4.4 95-13.6l-5-8c-13.5 7.5-53.5 12.5-90.3 13.2-43.4-.4-74.1-4.5-89.5-14.8l-4.6 8.6c28.2 12 57.2 14.5 94.4 14.6"/>
    <path d="M352.5 193.8c-.8 1.3-15.8 6.4-37.8 10.2a381 381 0 0 1-58.6 4.3 416 416 0 0 1-56.2-3.6c-23.1-3.6-35-8.6-39.5-10.4l1.1-2.2c12.7 5 24.7 8 38.7 10.2A412 412 0 0 0 256 206a392 392 0 0 0 58.3-4.3c22.5-3.7 34.8-8.4 36.6-10.5zm-4.4-8.1c-2.4 2-14.6 6.3-36 9.7a388 388 0 0 1-55.8 4c-22 0-40.1-1.6-53.8-3.6-21.8-2.8-33.4-8-37.6-9.4l1.3-2.2c3.3 1.7 14.4 6.2 36.5 9.3a385 385 0 0 0 53.6 3.4 384 384 0 0 0 55.4-4c21.5-3 33.1-8.4 34.9-9.8zM150.3 246c19.8 10.7 63.9 16 105.6 16.4 38 .1 87.4-5.8 105.9-15.6l-.5-10.7c-5.8 9-58.8 17.7-105.8 17.4s-90.7-7.6-105.3-17v9.5"/>
    <path d="M362.8 244.5v2.5c-2.8 3.4-20.2 8.4-42 12a434 434 0 0 1-65.4 4.4 400 400 0 0 1-62-4.3 155 155 0 0 1-44.4-12v-2.9c9.7 6.4 35.9 11.2 44.7 12.6 15.8 2.4 36.1 4.2 61.7 4.2 26.9 0 48.4-1.9 65-4.4 15.7-2.3 38-8.2 42.4-12.1m0-9v2.5c-2.8 3.3-20.2 8.3-42 11.9a434 434 0 0 1-65.4 4.5 414 414 0 0 1-62-4.3 155 155 0 0 1-44.4-12v-3c9.7 6.5 36 11.2 44.7 12.6a408 408 0 0 0 61.7 4.3c26.9 0 48.5-2 65-4.5 15.7-2.2 38-8.1 42.4-12m-107 68.8c-45.6-.2-84.7-12.4-93-14.4l6 9.4a250 250 0 0 0 87.4 14.3c34.7-1 65-3.7 86.3-14.1l6.2-9.8c-14.5 6.9-64 14.6-93 14.6"/>
    <path d="m344.9 297.3-2.8 4c-10 3.6-26 7.4-32.6 8.4a296 296 0 0 1-53.7 5c-40.4-.6-73.5-8.5-89-15.3l-1.3-2.1.2-.4 2.1.9a287 287 0 0 0 88.2 14.5c18.8 0 37.5-2.1 52.6-4.8 23.2-4.7 32.6-8.2 35.5-9.8l.7-.4zm5.3-8.8-2 3.5c-5.4 2-20 6.2-41.3 9.2-14 1.9-22.7 3.8-50.6 4.3a347 347 0 0 1-94.2-14L161 289a390 390 0 0 0 95.4 14c25.5-.5 36.4-2.4 50.3-4.3 24.8-3.8 37.3-8 41-9.1v-.2l2.6-1z"/>
    <path d="M350.8 237.6c.1 30-15.3 57-27.6 68.8a99 99 0 0 1-67.8 28.2c-30.3.5-58.8-19.2-66.5-27.9a101 101 0 0 1-27.5-67.4c1.8-32.8 14.7-55.6 33.3-71.3a100 100 0 0 1 64.2-22.7 98 98 0 0 1 71 35.6c12.5 15.2 18 31.7 20.9 56.7M255.6 135a106 106 0 0 1 106 105.2 105.6 105.6 0 1 1-211.4 0c-.1-58 47.3-105.2 105.4-105.2"/>
    <path d="M255.9 134.5c58.2 0 105.6 47.4 105.6 105.6S314.1 345.7 256 345.7s-105.6-47.4-105.6-105.6S197.8 134.5 256 134.5zM152.6 240c0 56.8 46.7 103.3 103.3 103.3S359.2 296.8 359.2 240s-46.7-103.3-103.3-103.3S152.6 183.2 152.6 240"/>
    <path d="M256 143.3a97 97 0 0 1 96.7 96.7 97 97 0 0 1-96.7 96.8c-53 0-96.7-43.6-96.7-96.8a97 97 0 0 1 96.7-96.7M161.6 240c0 52 42.6 94.4 94.4 94.4s94.4-42.5 94.4-94.4-42.6-94.4-94.4-94.4a95 95 0 0 0-94.4 94.4"/>
    <path d="M260.3 134h-9.1v212.3h9z"/>
    <path d="M259.3 132.8h2.3v214.7h-2.2V132.8zm-9 0h2.4v214.7h-2.3z"/>
    <path d="M361.6 244.2v-7.8l-6.4-6-36.3-9.6-52.2-5.3-63 3.2-44.8 10.6-9 6.7v7.9l22.9-10.3 54.4-8.5h52.3l38.4 4.2 26.6 6.4z"/>
    <path d="M256 223.8c24.9 0 49 2.3 68.3 6 19.8 4 33.7 9 38.5 14.5v2.8c-5.8-7-24.5-12-39-15-19-3.6-43-6-67.9-6-26.1 0-50.5 2.6-69.3 6.2-15 3-35.1 9-37.6 14.8v-2.9c1.3-4 16.3-10 37.3-14.3 18.9-3.7 43.3-6.1 69.6-6.1zm0-9.1a383 383 0 0 1 68.3 6c19.8 4 33.7 9 38.5 14.6v2.7c-5.8-6.9-24.5-12-39-14.9-19-3.7-43-6-67.9-6a376 376 0 0 0-69.2 6.2c-14.5 2.7-35.4 8.9-37.7 14.7v-2.8c1.4-4 16.6-10.3 37.3-14.3 19-3.7 43.3-6.2 69.7-6.2m-.6-46.2c39.3-.2 73.6 5.5 89.3 13.5l5.7 10c-13.6-7.4-50.6-15-94.9-14-36.1.3-74.7 4-94 14.4l6.8-11.4c15.9-8.3 53.3-12.5 87.1-12.5"/>
    <path d="M256 176.7a354 354 0 0 1 61.3 4.3c16 3 31.3 7.4 33.5 9.8l1.7 3c-5.3-3.4-18.6-7.3-35.6-10.5s-38.7-4.3-61-4.2c-25.3-.1-45 1.2-61.8 4.2a109 109 0 0 0-33.3 10.3l1.7-3.1c6-3 15.3-6.7 31.1-9.6 17.5-3.2 37.4-4.1 62.4-4.2m0-9c21.4-.2 42.6 1 59.1 4a96 96 0 0 1 30.6 10l2.5 4c-4.2-4.7-20-9.2-34.1-11.6-16.4-2.9-36.7-4-58.1-4.2a361 361 0 0 0-59.5 4.4 97 97 0 0 0-29.6 9.1l2.2-3.3c5.8-3 15.2-5.8 27-8.1a357 357 0 0 1 59.9-4.4zM308.4 284a276 276 0 0 0-52.5-4c-65.5.8-86.6 13.5-89.2 17.3l-5-8c16.8-12 52.4-18.8 94.6-18.2q32.9.5 56.6 5l-4.5 8"/>
    <path d="M255.6 278.9c18.2.3 36 1 53.3 4.2l-1.2 2.2c-16-3-33.2-4-52-4-24.3-.2-48.7 2.1-70 8.2-6.7 1.9-17.8 6.2-19 9.8l-1.2-2c.4-2.2 7-6.6 19.6-10 24.4-7 47.2-8.3 70.5-8.4m.8-9.2a327 327 0 0 1 57.3 5l-1.3 2.3a299 299 0 0 0-56-4.9c-24.2 0-49.9 1.8-73.3 8.6-7.5 2.2-20.6 7-21 10.7l-1.2-2.2c.2-3.4 11.5-7.9 21.7-10.8 23.5-6.9 49.3-8.6 73.8-8.7"/>
    <path d="m349.4 290.5-7.8 12.3-22.7-20.1-58.6-39.5-66.2-36.3-34.3-11.7 7.3-13.6 2.5-1.3 21.3 5.3 70.4 36.3 40.6 25.6L336 272l13.9 16z"/>
    <path d="M158.6 195.5c6-4 50.2 15.6 96.6 43.6 46.1 28 90.3 59.6 86.3 65.5l-1.3 2.1-.6.5c.1-.1.8-1 0-3.1-2-6.5-33.4-31.5-85.3-62.9-50.7-30.1-92.9-48.3-97-43.1zM351 290.4c3.8-7.6-37.2-38.5-88.1-68.6-52-29.5-89.6-46.9-96.5-41.7L165 183l.4-.5c1.2-1 3.3-1 4.2-1 11.8.2 45.5 15.7 92.8 42.8 20.8 12 87.6 55 87.3 67 0 1 .1 1.2-.3 1.8l1.7-2.6z"/>
  </g>
  <g transform="translate(0 26.7)scale(1.06667)">
    <path fill="#fff" stroke="#000" stroke-width=".7" d="M180.6 211a59 59 0 0 0 17.5 41.7 59 59 0 0 0 41.8 17.6 59 59 0 0 0 42-17.4 59 59 0 0 0 17.4-41.8v-79.2l-118.7-.2z"/>
    <path fill="red" stroke="#000" stroke-width=".5" d="M183 211.1a56 56 0 0 0 16.8 40 57 57 0 0 0 40.2 16.8 57 57 0 0 0 40.2-16.6 56 56 0 0 0 16.7-40v-77H183v76.8m91-53.7v48.9l-.1 5.1a33 33 0 0 1-10 24 34 34 0 0 1-24 10c-9.4 0-17.7-4-23.9-10.2a34 34 0 0 1-10-24v-54z"/>
    <g id="pt-e">
      <g id="pt-d" fill="#ff0" stroke="#000" stroke-width=".5">
        <path stroke="none" d="M190.2 154.4c.1-5.5 4-6.8 4-6.8.1 0 4.3 1.4 4.3 6.9z"/>
        <path d="m186.8 147.7-.7 6.3h4.2c0-5.2 4-6 4-6 .1 0 4 1.1 4.1 6h4.2l-.8-6.4zm-1 6.4h17q.5 0 .6.7 0 .8-.6.8h-17q-.5 0-.6-.8 0-.7.7-.7z"/>
        <path d="M192 154c0-3.3 2.3-4.2 2.3-4.2s2.3 1 2.3 4.2H192m-5.8-9h16.3q.5.1.6.8 0 .5-.6.6h-16.3q-.5 0-.6-.7 0-.5.6-.6zm.4 1.5H202q.5 0 .6.7t-.6.7h-15.5q-.6 0-.6-.7t.6-.7zm5-10.6h1.2v.8h.9v-.8h1.3v.9h.9v-1h1.2v2q0 .6-.5.6h-4.4q-.5 0-.6-.5zm4.6 2.7.3 6.4h-4.3l.3-6.5h3.7"/>
        <path id="pt-a" d="M191 141.6v3.4h-4v-3.4z"/>
        <use xlink:href="#pt-a" width="100%" height="100%" x="10.6"/>
        <path id="pt-b" d="M186.3 139h1.2v1h.9v-1h1.2v1h.9v-1h1.2v2q0 .6-.5.6h-4.3l-.6-.6z"/>
        <use xlink:href="#pt-b" width="100%" height="100%" x="10.6"/>
        <path fill="#000001" stroke="none" d="M193.9 140.6c0-.6.9-.6.9 0v1.6h-.9z"/>
        <path id="pt-c" fill="#000001" stroke="none" d="M188.6 142.8c0-.6.8-.6.8 0v1.2h-.8z"/>
        <use xlink:href="#pt-c" width="100%" height="100%" x="10.6"/>
      </g>
      <use xlink:href="#pt-d" width="100%" height="100%" y="46.3"/>
      <use xlink:href="#pt-d" width="100%" height="100%" transform="rotate(-45.2 312.8 180)"/>
    </g>
    <use xlink:href="#pt-d" width="100%" height="100%" x="45.7"/>
    <use xlink:href="#pt-e" width="100%" height="100%" transform="matrix(-1 0 0 1 479.8 0)"/>
    <g id="pt-f" fill="#fff">
      <path fill="#039" d="M232.6 202.4a8 8 0 0 0 2.2 5.7 7 7 0 0 0 5.3 2.4q3.2-.2 5.3-2.4a8 8 0 0 0 2.2-5.7v-10.8h-15z"/>
      <circle cx="236.1" cy="195.7" r="1.5"/>
      <circle cx="244.4" cy="195.7" r="1.5"/>
      <circle cx="240.2" cy="199.7" r="1.5"/>
      <circle cx="236.1" cy="203.9" r="1.5"/>
      <circle cx="244.4" cy="203.9" r="1.5"/>
    </g>
    <use xlink:href="#pt-f" width="100%" height="100%" y="-26"/>
    <use xlink:href="#pt-f" width="100%" height="100%" x="-20.8"/>
    <use xlink:href="#pt-f" width="100%" height="100%" x="20.8"/>
    <use xlink:href="#pt-f" width="100%" height="100%" y="25.8"/>
  </g>
</svg>

```
Page 1/5FirstPrevNextLast