diff --git a/.github/ISSUE_TEMPLATE/add-your-dashboard-to-the-showcase----.md b/.github/ISSUE_TEMPLATE/add-your-dashboard-to-the-showcase----.md
new file mode 100644
index 00000000..d6cf344c
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/add-your-dashboard-to-the-showcase----.md
@@ -0,0 +1,20 @@
+---
+name: "Add your Dashboard to the Showcase \U0001F5BC๏ธ"
+about: Share a screenshot of your dashboard to the Readme showcase!
+title: "[SHOWCASE_REQUEST]"
+labels: ''
+assignees: ''
+
+---
+
+Please read the instructions here first:
+https://github.com/Lissy93/dashy/blob/master/docs/showcase.md#submitting-your-dashboard
+
+### Complete the Following
+- **Title of Dashboard**: 
+- **Link to Screenshot**:
+- **Would you like your name/ username included**: Yes/ No
+- **Link to your Website/ Profile/ Twitter** (optional)
+- **Description** (optional)
+
+Either attach your screenshot here, or include a link to the CDN / image hosting service.
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 3e80d1ec..6041f6e0 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,27 +1,20 @@
-**Thank you for contributing to Dashy! So that your PR can be handled effectively, please populate the following fields (delete sections that are not applicable)**
+*Thank you for contributing to Dashy! So that your PR can be handled effectively, please populate the following fields (delete sections that are not applicable)*
 
-### Category
-> Please indicate the type of change your PR introduces
+**Category**: 
+> One of: Bugfix / Feature / Code style update / Refactoring Only / Build related changes /  Documentation / Other (please specify)
 
-Bugfix / Feature / Code style update / Refactoring Only / Build related changes /  Documentation / Other (please specify)
-
-
-### Overview
+**Overview**
 > Briefly outline your new changes...
 
+**Issue Number** _(if applicable)_ #00
 
-### Issue Number _(if applicable)_
-#00
-
-### New Vars _(if applicable)_
+**New Vars** _(if applicable)_
 > If you've added any new build scripts, environmental variables, config file options, dependency or devDependency, please outline here
 
-
-### Screenshot _(if applicable)_
+**Screenshot** _(if applicable)_
 > If you've introduced any significant UI changes, please include a screenshot
 
-
-### Code Quality Checklist _(Please complete)_
+**Code Quality Checklist** _(Please complete)_
 - [ ] All changes are backwards compatible
 - [ ] All lint checks and tests are passing
 - [ ] There are no (new) build warnings or errors
diff --git a/README.md b/README.md
index ba1c96eb..b2d97bbc 100644
--- a/README.md
+++ b/README.md
@@ -9,40 +9,47 @@
 [![Awesome Self-Hosted](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/awesome-selfhosted/awesome-selfhosted#personal-dashboards)
 ![Docker Pulls](https://img.shields.io/docker/pulls/lissy93/dashy?logo=docker&style=flat-square)
 ![Stars](https://flat.badgen.net/github/stars/lissy93/dashy?icon=github)
-![Current Version](https://img.shields.io/github/package-json/v/lissy93/dashy?style=flat-square&logo=azurepipelines&color=00af87)
 ![GitHub Status](https://flat.badgen.net/github/status/lissy93/dashy?icon=github)
-![App Size](https://img.shields.io/github/languages/code-size/lissy93/dashy?style=flat-square)
-![Code Quality](https://app.codacy.com/project/badge/Grade/3be23a4a3a8a4689bd47745b201ecb74)
+![License MIT](https://img.shields.io/badge/License-MIT-09be48?style=flat-square&logo=opensourceinitiative)
+![Current Version](https://img.shields.io/github/package-json/v/lissy93/dashy?style=flat-square&logo=azurepipelines&color=00af87)
 
 ## Features ๐ŸŒˆ
 
 - Instant search by name, domain and tags - just start typing
 - Full keyboard shortcuts for navigation, searching and launching
 - Multiple color themes, with easy method for adding more
-- Customizable layout options, and item sizes
-- Quickly preview a website, by holding down the Alt key while clicking, to open it in a resizable pop-up modal
+- Easy to customize every part of your dashboard, layout, icon sizes and colors etc
 - Many options for icons, including full Font-Awesome support and the ability to auto-fetch icon from URLs favicon
 - Option to show service status for each of your apps / links, for basic availability and uptime monitoring
-- Additional info for each item visible on hover (including opening method icon and description as a tooltip)
-- Option for full-screen background image, custom nav-bar links, and custom footer text
+- Multiple ways of opening apps, either in your browser, a pop-up modal or workspace view
+- Option for full-screen background image, custom nav-bar links, html footer, title, and more
 - Encrypted cloud backup and restore feature available
 - Optional authentication, requiring user to log in
 - Easy single-file YAML-based configuration
 - Small bundle size, fully responsive UI and PWA makes the app easy to use on any device
 - Plus lots more...
 
-**Live Demos**: [Demo 1](https://dashy-demo-1.as93.net) โ”† [Demo 2](https://dashy-demo-2.as93.net) โ”† [Demo 3](https://dashy-demo-3.as93.net)
+## Demo โšก
 
-**Spin up your own demo**: [![One-Click Deploy with PWD](https://img.shields.io/badge/Play--with--Docker-Deploy-2496ed?style=flat-square&logo=docker)](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml)
+> For more examples of Dashy in action, see: [**The Showcase**](./docs/showcase.md)
 
-**Screenshots**
-![Screenshots](https://i.ibb.co/r5T3MwM/dashy-screenshots.png)
+#### Live Demos
+[Demo 1](https://dashy-demo-1.as93.net) โ”† [Demo 2](https://dashy-demo-2.as93.net) โ”† [Demo 3](https://dashy-demo-3.as93.net)
 
-**Recording**
+#### Spin up your own Demo
+- 1-Click Deploy: [![One-Click Deploy with PWD](https://img.shields.io/badge/Play--with--Docker-Deploy-2496ed?style=flat-square&logo=docker)](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml)
+- Or on your own machine: `docker run -p 8080:80 lissy93/dashy`
+
+#### Recording
 <p align="center">
   <img width="800" src="https://i.ibb.co/L8YbNNc/dashy-demo2.gif" alt="Demo">
 </p>
 
+#### User Showcase
+Are using Dashy? Want to share your dashboard here too - [Submit your Screenshots to the Showcase](./docs/showcase.md#submitting-your-dashboard)!
+
+![Screenshots](https://i.ibb.co/r5T3MwM/dashy-screenshots.png)
+
 **[โฌ†๏ธ Back to Top](#dashy)**
 
 ---
@@ -69,8 +76,8 @@ docker run -d \
   --restart=always \
   lissy93/dashy:latest
 ```
-Healthchecks are pre-configured to monitor the uptime and response times of Dashy, and the status of which can be seen in the container logs, e.g. `docker inspect --format "{{json .State.Health }}" [container-id]`.
 
+You can also build the Docker container from source, by cloning the repo, cd'ing into it and running `docker build .` and `docker compose up`.
 #### Deploying from Source ๐Ÿš€
 
 You will need both [git](https://git-scm.com/downloads) and the latest or LTS version of [Node.js](https://nodejs.org/) installed on your system
@@ -83,18 +90,15 @@ You will need both [git](https://git-scm.com/downloads) and the latest or LTS ve
 
 #### Deploy to the Cloud
 
-Dashy supports 1-Click deployments on several popular cloud platforms (with more on the way!). To get started, just click a link below:
+Dashy supports 1-Click deployments on several popular cloud platforms. To get started, just click a link below:
 - [Deploy to Netlify](https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy)
 - [Deploy to Heroku](https://heroku.com/deploy?template=https://github.com/Lissy93/dashy)
 - [Deploy with Vercel](https://vercel.com/new/project?template=https://github.com/lissy93/dashy)
 - [Deploy with PWD](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml)
 
-**[โฌ†๏ธ Back to Top](#dashy)**
-
 #### Basic Commands
 
-The following commands can be run on Dashy. If you are using Docker, than precede each command with `docker exec -it [container-id]`, where container id can be found by running `docker ps`, e.g. `docker exec -it 92490c12baff yarn build`.
-If you prefer [`NPM`](https://docs.npmjs.com), then just replace `yarn` with `npm run` in the following commands.
+The following commands can be run on Dashy.
 
 - `yarn build` - Builds the project for production, and outputs it into `./dist`
 - `yarn start` - Starts a web server, and serves up the production site from `./dist`
@@ -106,6 +110,13 @@ If you prefer [`NPM`](https://docs.npmjs.com), then just replace `yarn` with `np
 - `yarn test` - Runs tests, and outputs results
 - `yarn install` - Install all dependencies
 
+If you are using Docker, than precede each command with `docker exec -it [container-id]`, where container id can be found by running `docker ps`, e.g. `docker exec -it 92490c12baff yarn build`.
+If you prefer [`NPM`](https://docs.npmjs.com), then just replace `yarn` with `npm run` in the following commands.
+
+In Docker, [healthchecks](https://docs.docker.com/engine/reference/builder/#healthcheck) are pre-configured to monitor the uptime and response times of Dashy, and the status of which will show in your Docker monitoring app, or the `docker ps` command, or the container logs, using: `docker inspect --format "{{json .State.Health }}" [container-id]`.
+
+**[โฌ†๏ธ Back to Top](#dashy)**
+
 ---
 
 ## Configuring ๐Ÿ”ง
@@ -118,7 +129,7 @@ In the production environment, the app needs to be rebuilt in order for changes
 
 You can check that your config matches Dashy's [schema](https://github.com/Lissy93/dashy/blob/master/src/utils/ConfigSchema.json) before deploying, by running `yarn validate-config.`
 
-It is now possible to update Dashy's config directly through the UI, and have changes written to disk. You can disable this feature by setting: `appConfig.allowConfigEdit: false`. If you are using users within Dashy, then you need to be logged in to a user of `type: admin` in order to modify the configuration globally. You can also trigger a rebuild of the app through the UI (Settings --> Rebuild). The current theme, and other visual preferences are only stored locally, unless otherwise specified in the config file. The option to only apply config changes locally is still available, and can be used in conjunction with the cloud backup feature to sync data between instances. 
+It is now possible also possible to update Dashy's config directly through the UI, and have changes written to disk. You can disable this feature by setting: `appConfig.allowConfigEdit: false`. If you are using users within Dashy, then you need to be logged in to a user of `type: admin` in order to modify the configuration globally. You can also trigger a rebuild of the app through the UI (Settings --> Rebuild).
 
 You may find these [example config](https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10) helpful for getting you started
 
@@ -132,7 +143,7 @@ You may find these [example config](https://gist.github.com/Lissy93/000f712a5ce9
 
 <p align="center">
   <a href="https://i.ibb.co/BVSHV1v/dashy-themes-slideshow.gif">
-    <img alt="Example Themes" src="/docs/assets/theme-slideshow.gif" width="400">
+    <img alt="Example Themes" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/theme-slideshow.gif" width="400">
   </a>
 </p>
 
@@ -157,6 +168,7 @@ Both sections and items can have an icon associated with them, and defined under
 - **Favicon**: Set `icon: favicon` to fetch a services icon automatically from the URL of the corresponding application
 - **Font-Awesome**: To use any font-awesome icon, specify the category, followed by the icon name, e.g. `fas fa-rocket` or `fab fa-monero`. You can also use Pro icons if you have a license key, just set it under `appConfig.fontAwesomeKey`
 - **Generative**: Setting `icon: generative`, will generate a unique for a given service, based on it's URL or IP
+- **Emoji**: Use an emoji as a tile icon, by putting the emoji's code as the icon attribute. Emojis can be specified either as emojis (`๐Ÿš€`), unicode (`'U+1F680'`) or shortcode (`':rocket:'`).
 - **URL**: You can also pass in a URL to an icon asset, hosted either locally or using any CDN service. E.g. `icon: https://i.ibb.co/710B3Yc/space-invader-x256.png`.
 - **Local Image**: To use a local image, store it in `./public/item-icons/` (or create a volume in Docker: `-v /local/image/directory:/app/public/item-icons/`) , and reference it by name and extension - e.g. set `icon: image.png` to use `./public/item-icon/image.png`. You can also use sub-folders here if you have a lot of icons, to keep them organized.
 
@@ -200,10 +212,51 @@ At present, access control is handled on the frontend, and therefore in security
 
 > For full monitoring documentation, see: [**Status Indicators**](./docs/status-indicators.md)
 
-Dashy has an optional feature that can display a small icon ([like this](./docs/assets/status-check-demo.gif)) next to each of your running services, indicating it's current status. This is useful if you are using Dashy as your homelab's start page, as it gives you an overview of the health of each of your running services. Hovering over the indicator will show additional information, including average response time and an error message for services which are down.
+Dashy has an optional feature that can display a small icon next to each of your running services, indicating it's current status. This is useful if you are using Dashy as your homelab's start page, as it gives you an overview of the health of each of your running services. Hovering over the indicator will show additional information, including average response time and an error message for services which are down.
 
 By default, this feature is off, but you can enable it globally by setting `appConfig.statusCheck: true`, or enable/ disable it for an individual item, with `item[n].statusCheck`. You can also specify an time interval in seconds under `appConfig.statusCheckInterval`, which will determine how often to recheck services, if this value is `0`, then status is only checked on initial page load, this is default behavior.
 
+<p align="center">
+  <img alt="Status Checks demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/status-check-demo.gif" width="600">
+</p>
+
+**[โฌ†๏ธ Back to Top](#dashy)**
+
+---
+
+## Opening Methods ๐Ÿ–ฑ๏ธ
+
+One of the primary purposes of Dashy is to make launching commonly used apps and services as quick as possible. To aid in this, there are several different options on how items can be opened. You can configure your preference by setting the `target` property of any item, to one of the following values:
+- `sametab` - The app will be launched in the current tab
+- `newtab` - The app will be launched in a new tab
+- `modal` - Launch app in a resizable/ movable popup modal on the current page
+- `workspace` - Changes to Workspace view, and launches app
+
+Even if the target is not set (or is set to `sametab`), you can still launch any given app in an alternative method: Alt + Click will open the modal, and Ctrl + Click will open in a new tab. You can also right-click on any item to see all options (as seen in the screenshot below). This custom context menu can be disabled by setting `appConfig.disableContextMenu: true`.
+
+<p align="center">
+  <img width="500" src="https://i.ibb.co/vmZdSRt/dashy-context-menu-2.png" />
+</p>
+
+The modal and workspace views work by rendering the target application in an iframe. For this to work, the HTTP response header [`X-Frame-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) for a given application needs to be set to `ALLOW`. If you are getting a `Refused to Connect` error then this header is set to `DENY` (or `SAMEORIGIN` and it's on a different host).
+
+Here's a quick demo of the workspace view:
+<p align="center">
+  <img alt="Workspace view demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/workspace-demo.gif" width="600">
+</p>
+
+**[โฌ†๏ธ Back to Top](#dashy)**
+
+---
+
+## Config Editor โš™๏ธ
+
+From the Settings Menu in Dashy, you can download, backup, edit and rest your config. An interactive editor makes editing the config file easy, it will tell you if you've got any errors. After making your changes, you can either apply them locally, or export into your main config file. After saving to the config file to the disk, the app will need to be rebuilt. This will happen automatically, but may take a few minutes. You can also manually trigger a rebuild from the Settings Menu. A full list of available config options can be found [here](./docs/configuring.md). It's recommend to make a backup of your configuration, as you can then restore it into a new instance of Dashy, without having to set it up again. [json2yaml](https://www.json2yaml.com/) is very useful for converting between YAML to JSON and visa versa.
+
+<p align="center">
+  <img alt="Workspace view demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/config-editor-demo.gif" width="600">
+</p>
+
 **[โฌ†๏ธ Back to Top](#dashy)**
 
 ---
@@ -230,7 +283,7 @@ If you are new to Vue.js or web development and want to learn more, [here are so
 
 Pull requests are welcome, and would by much appreciated!
 
-Some ideas for PRs include: bug fixes, improve the docs, add new themes, implement a new widget, add or improve the display options, improve or refactor the code, or implement a new feature.
+Some ideas for PRs include: bug fixes, improve the docs, submit a screenshot of your dashboard to the showcase, add new themes, implement a new widget, add or improve the display options, improve or refactor the code, or implement a new feature.
 
 Before you submit your pull request, please ensure the following:
 - Must be backwards compatible
@@ -240,18 +293,12 @@ Before you submit your pull request, please ensure the following:
 - Your pull request will need to be up-to-date with master, and the PR template must be filled in
 
 ### Repo Status
-![Open Issues](https://flat.badgen.net/github/open-issues/lissy93/dashy?icon=github)
-![Closed Issues](https://flat.badgen.net/github/closed-issues/lissy93/dashy?icon=github)
+
 ![Open PRs](https://flat.badgen.net/github/open-prs/lissy93/dashy?icon=github)
 ![Total PRs](https://flat.badgen.net/github/prs/lissy93/dashy?icon=github)
 ![GitHub commit activity](https://img.shields.io/github/commit-activity/m/lissy93/dashy?style=flat-square)
 ![Last Commit](https://flat.badgen.net/github/last-commit/lissy93/dashy?icon=github)
 ![Contributors](https://flat.badgen.net/github/contributors/lissy93/dashy?icon=github)
-![GitHub Status](https://flat.badgen.net/github/status/lissy93/dashy?icon=github)
-![Stars](https://flat.badgen.net/github/stars/lissy93/dashy?icon=github)
-![Docker Pulls](https://img.shields.io/docker/pulls/lissy93/dashy?logo=docker&style=flat-square)
-![Total Lines](https://img.shields.io/tokei/lines/github/lissy93/dashy?style=flat-square)
-![Maintenance](https://img.shields.io/maintenance/yes/2021?style=flat-square)
 
 **[โฌ†๏ธ Back to Top](#dashy)**
 
@@ -268,6 +315,9 @@ If you've found a bug, or something that isn't working as you'd expect, please r
 - [Ask a Question ๐Ÿคทโ€โ™€๏ธ](https://github.com/Lissy93/dashy/issues/new?assignees=Lissy93&labels=%F0%9F%A4%B7%E2%80%8D%E2%99%82%EF%B8%8F+Question&template=question------.md&title=%5BQUESTION%5D)
 - [Share Feedback ๐ŸŒˆ](https://github.com/Lissy93/dashy/issues/new?assignees=&labels=%F0%9F%8C%88+Feedback&template=share-feedback---.md&title=%5BFEEDBACK%5D)
 
+[**Issue Status**](https://isitmaintained.com/project/lissy93/dashy) ![Resolution Time](http://isitmaintained.com/badge/resolution/lissy93/dashy.svg)  ![Open Issues](http://isitmaintained.com/badge/open/lissy93/dashy.svg) ![Closed Issues](https://badgen.net/github/closed-issues/lissy93/dashy)
+
+
 For more general questions about any of the technologies used, [StackOverflow](https://stackoverflow.com/questions/) may be more helpful first port of info
 
  If you need to get in touch securely with the author (me, Alicia Sykes), drop me a message at:
@@ -280,16 +330,18 @@ For more general questions about any of the technologies used, [StackOverflow](h
 
 ## Documentation ๐Ÿ“˜
 
-- [Getting Started](/docs/deployment.md)
+- [Deployment](/docs/deployment.md)
 - [Configuring](/docs/configuring.md)
 - [Developing](/docs/developing.md)
 - [Contributing](/docs/contributing.md)
 - [User Guide](/docs/user-guide.md)
 - [Troubleshooting](/docs/troubleshooting.md)
 - [Backup & Restore](/docs/backup-restore.md)
+- [Status Indicators](/docs/status-indicators.md)
 - [Theming](/docs/theming.md)
 - [Icons](/docs/icons.md)
 - [Authentication](/docs/authentication.md)
+- [Showcase](/docs/showcase.md)
 
 **[โฌ†๏ธ Back to Top](#dashy)**
 
@@ -332,7 +384,8 @@ The 1-Click deploy demo uses [Play-with-Docker Labs](https://play-with-docker.co
 
 ### Alternatives ๐Ÿ™Œ
 
-There are a few self-hosted web apps, that serve a similar purpose to Dashy. If you're looking for a dashboard, and Dashy doesn't meet your needs, I highly recommend you check these projects out! Including, but not limited to: [HomeDash2](https://lamarios.github.io/Homedash2), [Homer](https://github.com/bastienwirtz/homer) (`Apache License 2.0`), [Organizr](https://organizr.app/) (`GPL-3.0 License`) and  [Heimdall](https://github.com/linuxserver/Heimdall) (`MIT License`)
+There are a few self-hosted web apps, that serve a similar purpose to Dashy. If you're looking for a dashboard, and Dashy doesn't meet your needs, I highly recommend you check these projects out! 
+[HomeDash2](https://lamarios.github.io/Homedash2), [Homer](https://github.com/bastienwirtz/homer) (`Apache License 2.0`), [Organizr](https://organizr.app/) (`GPL-3.0 License`) and  [Heimdall](https://github.com/linuxserver/Heimdall) (`MIT License`)
 
 **[โฌ†๏ธ Back to Top](#dashy)**
 
@@ -362,8 +415,8 @@ OR OTHER DEALINGS IN THE SOFTWARE.
 **TDLR;** _You can do whatever you like with Dashy: use it in private or commercial settings,_
 _redistribute and modify it. But you must display this license and credit the author._
 _There is no warranty that this app will work as expected, and the author cannot be held_
-_liable for anything that goes wrong._ For more info, see
-[TLDR Legal's MIT Explanation of the MIT License](https://tldrlegal.com/license/mit-license)
+_liable for anything that goes wrong._
+For more info, see TLDR Legal's [Explanation of MIT](https://tldrlegal.com/license/mit-license)
 
 ![Octocat](https://github.githubassets.com/images/icons/emoji/octocat.png?v8)
 
diff --git a/docs/assets/config-editor-demo.gif b/docs/assets/config-editor-demo.gif
new file mode 100644
index 00000000..09fcd584
Binary files /dev/null and b/docs/assets/config-editor-demo.gif differ
diff --git a/docs/assets/workspace-demo.gif b/docs/assets/workspace-demo.gif
new file mode 100644
index 00000000..c6e186ae
Binary files /dev/null and b/docs/assets/workspace-demo.gif differ
diff --git a/docs/configuring.md b/docs/configuring.md
index 6018730f..47bc101a 100644
--- a/docs/configuring.md
+++ b/docs/configuring.md
@@ -1,4 +1,4 @@
-## Configuring
+# Configuring
 
 All app configuration is specified in [`/public/conf.yml`](https://github.com/Lissy93/dashy/blob/master/public/conf.yml) which is in [YAML Format](https://yaml.org/) format.
 
@@ -11,17 +11,17 @@ There's a couple of things to remember, before getting started:
 - You can check that your config file fits the schema, by running `yarn validate-config`
 - Any which are only saved locally through the UI need to be exported into this file, in order for them to persist across devices
 
-#### Config Saving Methods
+### Config Saving Methods
 When updating the config through the JSON editor in the UI, you have two save options: **Local** or **Write to Disk**. Changes saved locally will only be applied to the current user through the browser, and to apply to other instances, you either need to use the cloud sync feature, or manually update the conf.yml file. On the other-hand, if you choose to write changes to disk, then your main `conf.yml` file will be updated, and changes will be applied to all users, and visible across all devices. 
 
-#### Preventing Changes being Written to Disk
+### Preventing Changes being Written to Disk
 To disallow any changes from being written to disk, then set `appConfig.allowConfigEdit: false`. If you are using users, and have setup `auth` within Dashy, then only users with `type: admin` will be able to write config changes to disk.
 
 It is recommended to make a backup of your config file.
 
 All fields are optional, unless otherwise stated.
 
-#### Top-Level Fields
+### Top-Level Fields
 
 **Field** | **Type** | **Required**| **Description**
 --- | --- | --- | ---
@@ -31,7 +31,7 @@ All fields are optional, unless otherwise stated.
 
 **[โฌ†๏ธ Back to Top](#configuring)**
 
-#### `PageInfo`
+### `PageInfo`
 
 **Field** | **Type** | **Required**| **Description**
 --- | --- | --- | ---
@@ -42,7 +42,7 @@ All fields are optional, unless otherwise stated.
 
 **[โฌ†๏ธ Back to Top](#configuring)**
 
-#### `pageInfo.navLinks` _(optional)_
+### `pageInfo.navLinks` _(optional)_
 
 **Field** | **Type** | **Required**| **Description**
 --- | --- | --- | ---
@@ -51,7 +51,7 @@ All fields are optional, unless otherwise stated.
 
 **[โฌ†๏ธ Back to Top](#configuring)**
 
-#### `appConfig` _(optional)_
+### `appConfig` _(optional)_
 
 **Field** | **Type** | **Required**| **Description**
 --- | --- | --- | ---
@@ -61,6 +61,7 @@ All fields are optional, unless otherwise stated.
 **`enableFontAwesome`** | `boolean` | _Optional_ | Where `true` is enabled, if left blank font-awesome will be enabled only if required by 1 or more icons
 **`fontAwesomeKey`** | `string` | _Optional_ | If you have a font-awesome key, then you can use it here and make use of premium icons. It is a 10-digit alpha-numeric string from you're FA kit URL  (e.g. `13014ae648`)
 **`faviconApi`** | `string` | _Optional_ | Which service to use to resolve favicons. Set to `local` to do this locally, without using an API. Available options are: `local`, `faviconkit`, `google`, `clearbit`, `webmasterapi` and `allesedv`. Defaults to `faviconkit`. See [Icons](/docs/icons.md#favicons) for more info
+**`auth`** | `array` | _Optional_ | An array of objects containing usernames and hashed passwords. If this is not provided, then authentication will be off by default, and you will not need any credentials to access the app. Note authentication is done on the client side, and so if your instance of Dashy is exposed to the internet, it is recommend to configure your web server to handle this. See [`auth`](#appconfigauth-optional)
 **`layout`** | `string` | _Optional_ | App layout, either `horizontal`, `vertical`, `auto` or `sidebar`. Defaults to `auto`. This specifies the layout and direction of how sections are positioned on the home screen. This can also be modified from the UI.
 **`iconSize`** | `string` | _Optional_ | The size of link items / icons. Can be either `small`, `medium,` or `large`. Defaults to `medium`. This can also be set directly from the UI.
 **`theme`** | `string` | _Optional_ | The default theme for first load (you can change this later from the UI)
@@ -68,13 +69,13 @@ All fields are optional, unless otherwise stated.
 **`externalStyleSheet`** | `string`  or `string[]` | _Optional_ | Either a URL to an external stylesheet or an array or URLs, which can be applied as themes within the UI
 **`customCss`** | `string` | _Optional_ | Raw CSS that will be applied to the page. This can also be set from the UI. Please minify it first.
 **`showSplashScreen`** | `boolean` | _Optional_ | Should display a splash screen while the app is loading. Defaults to false, except on first load
-**`auth`** | `array` | _Optional_ | An array of objects containing usernames and hashed passwords. If this is not provided, then authentication will be off by default, and you will not need any credentials to access the app. Note authentication is done on the client side, and so if your instance of Dashy is exposed to the internet, it is recommend to configure your web server to handle this. See [`auth`](#appconfigauth-optional)
 **`allowConfigEdit`** | `boolean` | _Optional_ | Should prevent / allow the user to write configuration changes to the conf.yml from the UI. When set to `false`, the user can only apply changes locally using the config editor within the app, whereas if set to `true` then changes can be written to disk directly through the UI. Defaults to `true`. Note that if authentication is enabled, the user must be of type `admin` in order to apply changes globally.
 **`disableServiceWorker`** | `boolean` | _Optional_ | Service workers cache web applications to improve load times and offer basic offline functionality, and are enabled by default in Dashy. The service worker can sometimes cause older content to be cached, requiring the app to be hard-refreshed. If you do not want SW functionality, or are having issues with caching, set this property to `true` to disable all service workers.
+**`disableContextMenu`** | `boolean` | _Optional_ | If set to `true`, the custom right-click context menu will be disabled. Defaults to `false`.
 
 **[โฌ†๏ธ Back to Top](#configuring)**
 
-#### `appConfig.auth` _(optional)_
+### `appConfig.auth` _(optional)_
 
 **Field** | **Type** | **Required**| **Description**
 --- | --- | --- | ---
@@ -84,7 +85,7 @@ All fields are optional, unless otherwise stated.
 
 **[โฌ†๏ธ Back to Top](#configuring)**
 
-#### `section`
+### `section`
 
 **Field** | **Type** | **Required**| **Description**
 --- | --- | --- | ---
@@ -95,7 +96,7 @@ All fields are optional, unless otherwise stated.
 
 **[โฌ†๏ธ Back to Top](#configuring)**
 
-#### `section.item`
+### `section.item`
 
 **Field** | **Type** | **Required**| **Description**
 --- | --- | --- | ---
@@ -103,14 +104,16 @@ All fields are optional, unless otherwise stated.
 **`description`** | `string` | _Optional_ | Additional info about an item, which is shown in the tooltip on hover, or visible on large tiles
 **`url`** | `string` | Required | The URL / location of web address for when the item is clicked
 **`icon`** | `string` | _Optional_ | The icon for a given item. Can be a font-awesome icon, favicon, remote URL or local URL. See [`item.icon`](#sectionicon-and-sectionitemicon)
-**`target`** | `string` | _Optional_ | The opening method for when the item is clicked, either `newtab`, `sametab` or `iframe`. Where `newtab` will open the link in a new tab, `sametab` will open it in the current tab, and `iframe` will open a pop-up modal with the content displayed within that iframe. Note that for the iframe to load, you must have set the CORS headers to either allow `*` ot allow the domain that you are hosting Dashy on, for some websites and self-hosted services, this is already set.
+**`target`** | `string` | _Optional_ | The opening method for when the item is clicked, either `newtab`, `sametab`, `modal` or `workspace`. Where `newtab` will open the link in a new tab, `sametab` will open it in the current tab, and `modal` will open a pop-up modal with the content displayed within that iframe. Note that for the iframe to load, you must have set the CORS headers to either allow `*` ot allow the domain that you are hosting Dashy on, for some websites and self-hosted services, this is already set.
 **`statusCheck`** | `boolean` | _Optional_ | When set to `true`, Dashy will ping the URL associated with the current service, and display its status as a dot next to the item. The value here will override `appConfig.statusCheck` so you can turn off or on checks for a given service. Defaults to `appConfig.statusCheck`, falls back to `false`
+**`statusCheckUrl`** | `string` | _Optional_ | If you've enabled `statusCheck`, and want to use a different URL to what is defined under the item, then specify it here
+**`statusCheckHeaders`** | `object` | _Optional_ | If you're endpoint requires any specific headers for the status checking, then define them here 
 **`color`** | `string` | _Optional_ | An optional color for the text and font-awesome icon to be displayed in. Note that this will override the current theme and so may not display well
 **`backgroundColor`** | `string` | _Optional_ | An optional background fill color for the that given item. Again, this will override the current theme and so might not display well against the background
 
 **[โฌ†๏ธ Back to Top](#configuring)**
 
-#### `section.displayData` _(optional)_
+### `section.displayData` _(optional)_
 
 **Field** | **Type** | **Required**| **Description**
 --- | --- | --- | ---
@@ -126,7 +129,7 @@ All fields are optional, unless otherwise stated.
 
 **[โฌ†๏ธ Back to Top](#configuring)**
 
-#### `section.icon` and `section.item.icon`
+### `section.icon` and `section.item.icon`
 
 **Field** | **Type** | **Required**| **Description**
 --- | --- | --- | ---
@@ -134,7 +137,7 @@ All fields are optional, unless otherwise stated.
 
 **[โฌ†๏ธ Back to Top](#configuring)**
 
-#### Example
+### Example
 
 ```yaml
 ---
diff --git a/docs/icons.md b/docs/icons.md
index e7d7b0dc..8cac264f 100644
--- a/docs/icons.md
+++ b/docs/icons.md
@@ -3,14 +3,15 @@
 Both sections and items can have an icon, which is specified using the `icon` attribute. Using icons improves the aesthetics of your UI and makes the app more intuitive to use. There are several options when it comes to setting icons, and this article outlines each of them
 
 - [Font Awesome Icons](#font-awesome)
-- [Favicons](#favicons)
+- [Auto-Fetched Favicons](#favicons)
 - [Generative Icons](#generative-icons)
+- [Emoji Icons](#emoji-icons)
 - [Icons by URL](#icons-by-url)
 - [Local Icons](#local-icons)
 - [No Icon](#no-icon)
 
 <p align="center">
-  <img width="400" src="https://i.ibb.co/GTVmZnc/dashy-example-icons.png" />
+  <img width="500" src="https://i.ibb.co/GTVmZnc/dashy-example-icons.png" />
 </p>
 
 ### Font Awesome
@@ -18,10 +19,17 @@ You can use any [Font Awesome Icon](https://fontawesome.com/icons) simply by spe
 
 Font-Awesome has a wide variety of free icons, but you can also use their pro icons if you have a membership. To do so, you need to specify your license key under: `appConfig.fontAwesomeKey`. This is usually a 10-digit string, for example `13014ae648`.
 
+<p align="center">
+  <img width="580" src="https://i.ibb.co/pdrw8J4/fontawesome-icons2.png" />
+</p>
 
 ### Favicons
 Dashy can auto-fetch the favicon for a given service using it's URL. Just set `icon: favicon` to use this feature. If the services URL is a local IP, then Dashy will attempt to find the favicon from `http://[ip]/favicon.ico`. This has two issues, favicons are not always hosted at the same location for every service, and often the default favicon is a low resolution. Therefore to fix this, for remote services an API is used to return a high-quality icon for any online service.
 
+<p align="center">
+  <img width="580" src="https://i.ibb.co/k6wyhnB/favicon-icons.png" />
+</p>
+
 The default favicon API is [Favicon Kit](https://faviconkit.com/), a free and reliable service for returning images from any given URL. However several other API's are supported. To change the API used, under `appConfig`, set `faviconApi` to one of the following values:
 
 - `faviconkit` - [faviconkit.com](https://faviconkit.com/) (Recommend)
@@ -35,6 +43,29 @@ You can also force Dashy to always get favicons from the root of the domain, and
 ### Generative Icons
 Uses a unique and programmatically generated icon for a given service. This is particularly useful when you have a lot of similar services with a different IP or port, and no specific icon. These icons are generated with [ipsicon.io](https://ipsicon.io/). To use this option, just set an item's to: `icon: generative`.
 
+<p align="center">
+  <img width="400" src="https://i.ibb.co/qrNNNcm/generative-icons.png" />
+</p>
+
+### Emoji Icons
+You can use almost any emoji as an icon for items or sections. You can specify the emoji either by pasting it directly, using it's unicode ( e.g. `'U+1F680'`) or shortcode (e.g. `':rocket:'`). You can find these codes for any emoji using [Emojipedia](https://emojipedia.org/) (near the bottom of emoji each page), or for a quick reference to emoji shortcodes, check out [emojis.ninja](https://emojis.ninja/) by @nomanoff.
+
+<p align="center">
+  <img width="580" src="https://i.ibb.co/YLwgTf9/emoji-icons-1.png" />
+</p>
+
+The following example shows the unicode options available, all three will render the ๐Ÿš€ emoji.
+
+```yaml
+items:
+- title: Shortcode
+  icon: ':rocket:'
+- title: Unicode
+  icon: 'U+1F680'
+- title: Emoji
+  icon: ๐Ÿš€
+```
+
 ### Icons by URL
 You can also set an icon by passing in a valid URL pointing to the icons location. For example `icon: https://i.ibb.co/710B3Yc/space-invader-x256.png`, this can be in .png, .jpg or .svg format, and hosted anywhere- so long as it's accessible from where you are hosting Dashy. The icon will be automatically scaled to fit, however loading in a lot of large icons may have a negative impact on performance, especially if you visit Dashy from new devices often.
 
@@ -44,4 +75,4 @@ You may also want to store your icons locally, bundled within Dashy so that ther
 You can also use sub-folders within the `item-icons` directory to keep things organised. You would then specify an icon with it's folder name slash image name. For example: `networking/monit.png`
 
 ### No Icon
-If you don't wish for a given item or section to have an icon, just leave out the `icon` attribute.
\ No newline at end of file
+If you don't wish for a given item or section to have an icon, just leave out the `icon` attribute.
diff --git a/docs/showcase.md b/docs/showcase.md
new file mode 100644
index 00000000..5d93b66e
--- /dev/null
+++ b/docs/showcase.md
@@ -0,0 +1,72 @@
+# *Dashy Showcase* ๐ŸŒŸ
+
+| ๐Ÿ’— Do you use Dashy? Got a sweet dashboard? Submit it to the showcase! ๐Ÿ‘‰ [See How](#submitting-your-dashboard) |
+|-|
+
+### Home Lab 2.0
+
+![screenshot-homelab](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/1-home-lab-material.png)
+
+---
+
+### Networking Services
+> By [@Lissy93](https://github.com/lissy93)
+
+![screenshot-networking-services](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/2-networking-services-minimal-dark.png)
+
+---
+
+### NAS Home Dashboard
+> By [@cerealconyogurt](https://github.com/cerealconyogurt)
+
+![screenshot-networking-services](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/6-nas-home-dashboard.png)
+
+---
+
+### CFT Toolbox
+
+![screenshot-cft-toolbox](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/3-cft-toolbox.png)
+
+---
+
+### Bookmarks
+
+![screenshot-bookmarks](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/4-bookmarks-colourful.png)
+
+---
+
+### Project Management
+
+![screenshot-project-managment](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/5-project-managment.png)
+
+---
+
+## Submitting your Dashboard
+
+#### How to Submit
+- [Open an Issue](https://git.io/Jceik)
+- [Open a PR](https://github.com/Lissy93/dashy/compare)
+
+#### What to Include
+Please include the following information:
+- A single high-quality screenshot of your Dashboard
+- A short title (it doesn't have to be particularly imaginative)
+- An optional description, you could include details on anything interesting or unique about your dashboard, or say how you use it, and why it's awesome
+- Optionally leave your name or username, with a link to your GitHub, Twitter or Website
+
+#### Template
+
+If you're submitting a pull request, please use a format similar to this:
+
+```
+### [Dashboard Name] (required)
+
+> Submitted by [@username](https://github.com/user) (optional)
+
+![dashboard-screenshot](/docs/showcase/screenshot-name.jpg) (required)
+
+[An optional text description, or any interesting details] (optional)
+
+---
+
+```
\ No newline at end of file
diff --git a/docs/showcase/1-home-lab-material.png b/docs/showcase/1-home-lab-material.png
new file mode 100644
index 00000000..605a520c
Binary files /dev/null and b/docs/showcase/1-home-lab-material.png differ
diff --git a/docs/showcase/2-networking-services-minimal-dark.png b/docs/showcase/2-networking-services-minimal-dark.png
new file mode 100644
index 00000000..6986f60c
Binary files /dev/null and b/docs/showcase/2-networking-services-minimal-dark.png differ
diff --git a/docs/showcase/3-cft-toolbox.png b/docs/showcase/3-cft-toolbox.png
new file mode 100644
index 00000000..a728a8a9
Binary files /dev/null and b/docs/showcase/3-cft-toolbox.png differ
diff --git a/docs/showcase/4-bookmarks-colourful.png b/docs/showcase/4-bookmarks-colourful.png
new file mode 100644
index 00000000..a29563f4
Binary files /dev/null and b/docs/showcase/4-bookmarks-colourful.png differ
diff --git a/docs/showcase/5-project-managment.png b/docs/showcase/5-project-managment.png
new file mode 100644
index 00000000..e8567f5f
Binary files /dev/null and b/docs/showcase/5-project-managment.png differ
diff --git a/docs/showcase/6-nas-home-dashboard.png b/docs/showcase/6-nas-home-dashboard.png
new file mode 100644
index 00000000..01bb57ff
Binary files /dev/null and b/docs/showcase/6-nas-home-dashboard.png differ
diff --git a/docs/status-indicators.md b/docs/status-indicators.md
index 1e91af06..8f2a8469 100644
--- a/docs/status-indicators.md
+++ b/docs/status-indicators.md
@@ -48,10 +48,29 @@ appConfig:
   statusCheckInterval: 20
 ```
 
+## Using a Different Endpoint
+By default, the status checker will use the URL of each application being checked. In some situations, you may want to use a different endpoint for status checking. Similarly, some services provide a dedicated path for uptime monitoring. 
+
+You can set the `statusCheckUrl` property on any given item in order to do this. The status checker will then ping that endpoint, instead of the apps main `url` property.
+
+## Setting Custom Headers
+If your service is responding with an error, despite being up and running, it is most likely because custom headers for authentication, authorization or encoding are required. You can define these headers under the `statusCheckHeaders` property for any service. It should be defined as an object format, with the name of header as the key, and header content as the value.
+For example, `statusCheckHeaders: { 'X-Custom-Header': 'foobar' }`
+
+## Troubleshooting Failing Status Checks
+If the status is always returning an error, despite the service being online, then it is most likely an issue with access control, and should be fixed with the correct headers. Hover over the failing status to see the error code and response, in order to know where to start with addressing it.
+If your service requires requests to include any authorization in the headers, then use the  `statusCheckHeaders` property, as described above.
+If you are still having issues, it may be because your target application is blocking requests from Dashy's IP. This is a [CORS error](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS), and can be fixed by setting the headers on your target app, to include:
+```
+Access-Control-Allow-Origin: https://location-of-dashy/
+Vary: Origin
+```
+For further troubleshooting, use an application like [Postman](https://postman.com) to diagnose the issue.
+
 ## How it Works
 
 When Dashy is loaded, items with `statusCheck` enabled will make a request, to `https://[your-host-name]/ping?url=[address-or-servce]`, which in turn will ping that running service, and respond with a status code. Response time is calculated from the difference between start and end time of the request. 
 
-An indicator will display next to each item, and will be yellow while waiting for the response to return, green if request was successful, red if it failed, and grey if it was unable to make the request all together.
+When the response completes, an indicator will display next to each item. The color denotes the status: Yellow while waiting for the response to return, green if request was successful, red if it failed, and grey if it was unable to make the request all together.
 
-All requests are made straight from your server, there is no intermediary. So providing you are hosting Dashy yourself, and are checking the status of other self-hosted services, there shouldn't be any privacy concerns.
+All requests are made straight from your server, there is no intermediary. So providing you are hosting Dashy yourself, and are checking the status of other self-hosted services, there shouldn't be any privacy concerns. Requests are made asynchronously, so this won't have any impact on page load speeds. However recurring requests (using `statusCheckInterval`) may run more slowly if the interval between requests is very short.
diff --git a/docs/theming.md b/docs/theming.md
index 462dd71a..cb7233e0 100644
--- a/docs/theming.md
+++ b/docs/theming.md
@@ -129,8 +129,9 @@ You can target specific elements on the UI with these variables. All are optiona
 - `--status-check-tooltip-color` - Text color for the status check tooltips. Defaults to `--primary`
 - `--code-editor-color` - Text color used within raw code editors. Defaults to `--black`
 - `--code-editor-background` - Background color for raw code editors. Defaults to `--white`
-
-
+- `--context-menu-color` - Text color for right-click context menu over items. Defaults to `--primary`
+- `--context-menu-background` - Background color of right-click context menu. Defaults to `--background`
+- `--context-menu-secondary-color` - Border and outline color for context menu. Defaults to `--background-darker`
 
 #### Non-Color Variables
 - `--outline-color` - Used to outline focused or selected elements
diff --git a/package.json b/package.json
index a324a147..79d3d615 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "Dashy",
-  "version": "1.2.5",
+  "version": "1.3.6",
   "license": "MIT",
   "main": "server",
   "scripts": {
@@ -86,4 +86,4 @@
     "> 1%",
     "last 2 versions"
   ]
-}
+}
\ No newline at end of file
diff --git a/src/assets/interface-icons/open-workspace.svg b/src/assets/interface-icons/open-workspace.svg
new file mode 100644
index 00000000..b0a186ca
--- /dev/null
+++ b/src/assets/interface-icons/open-workspace.svg
@@ -0,0 +1,20 @@
+<svg
+  aria-hidden="true"
+  focusable="false"
+  data-prefix="far"
+  data-icon="browser"
+  class="svg-inline--fa fa-browser fa-w-16"
+  role="img"
+  xmlns="http://www.w3.org/2000/svg"
+  viewBox="0 0 512 512"
+>
+  <path
+    transform = "rotate(-90 250 250)"
+    fill="currentColor"
+    d="M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5
+    48-48V80c0-26.5-21.5-48-48-48zM48 92c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12
+    12v24c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V92zm416 334c0 3.3-2.7 6-6
+    6H54c-3.3 0-6-2.7-6-6V168h416v258zm0-310c0 6.6-5.4 12-12 12H172c-6.6
+    0-12-5.4-12-12V92c0-6.6 5.4-12 12-12h280c6.6 0 12 5.4 12 12v24z">
+  </path>
+  </svg>
\ No newline at end of file
diff --git a/src/components/LinkItems/Collapsable.vue b/src/components/LinkItems/Collapsable.vue
index 0e6dd567..d33db09b 100644
--- a/src/components/LinkItems/Collapsable.vue
+++ b/src/components/LinkItems/Collapsable.vue
@@ -42,11 +42,6 @@ export default {
   components: {
     Icon,
   },
-  data() {
-    return {
-      isOpen: !this.collapsed,
-    };
-  },
   methods: {
     /* Check that row & column span is valid, and not over the max */
     checkSpanNum(span, classPrefix) {
diff --git a/src/components/LinkItems/ContextMenu.vue b/src/components/LinkItems/ContextMenu.vue
new file mode 100644
index 00000000..3e8de908
--- /dev/null
+++ b/src/components/LinkItems/ContextMenu.vue
@@ -0,0 +1,116 @@
+<template>
+  <transition name="slide">
+    <div class="context-menu" v-if="show && menuEnabled"
+      :style="posX && posY ? `top:${posY}px;left:${posX}px;` : ''">
+      <ul>
+        <li @click="launch('sametab')">
+          <SameTabOpenIcon />
+          <span>Open in Current Tab</span>
+        </li>
+        <li @click="launch('newtab')">
+          <NewTabOpenIcon />
+          <span>Open in New Tab</span>
+        </li>
+        <li @click="launch('modal')">
+          <IframeOpenIcon />
+          <span>Open in Pop-Up Modal</span>
+        </li>
+        <li @click="launch('workspace')">
+          <WorkspaceOpenIcon />
+          <span>Open in Workspace View</span>
+        </li>
+      </ul>
+    </div>
+  </transition>
+</template>
+
+<script>
+// Import icons for each element
+import SameTabOpenIcon from '@/assets/interface-icons/open-current-tab.svg';
+import NewTabOpenIcon from '@/assets/interface-icons/open-new-tab.svg';
+import IframeOpenIcon from '@/assets/interface-icons/open-iframe.svg';
+import WorkspaceOpenIcon from '@/assets/interface-icons/open-workspace.svg';
+
+export default {
+  name: 'ContextMenu',
+  inject: ['config'],
+  components: {
+    SameTabOpenIcon,
+    NewTabOpenIcon,
+    IframeOpenIcon,
+    WorkspaceOpenIcon,
+  },
+  props: {
+    posX: Number, // The X coordinate for positioning
+    posY: Number, // The Y coordinate for positioning
+    show: Boolean, // Should show or hide the menu
+  },
+  data() {
+    return {
+      menuEnabled: !this.isMenuDisabled(), // Specifies if the context menu should be used
+    };
+  },
+  methods: {
+    /* Called on item click, emits an event up to Item */
+    /* in order to launch the current app to a given target */
+    launch(target) {
+      this.$emit('contextItemClick', target);
+    },
+    /* Checks if the user as disabled context menu in config */
+    isMenuDisabled() {
+      if (this.config && this.config.appConfig) {
+        return !!this.config.appConfig.disableContextMenu;
+      }
+      return false;
+    },
+  },
+};
+</script>
+
+<style lang="scss">
+
+div.context-menu {
+  position: absolute;
+  margin: 0;
+  padding: 0;
+  z-index: 8;
+  background: var(--context-menu-background);
+  color: var(--context-menu-color);
+  border: 1px solid var(--context-menu-secondary-color);
+  border-radius: var(--curve-factor);
+  box-shadow: var(--context-menu-shadow);
+  opacity: 0.98;
+
+  ul {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+    li {
+      cursor: pointer;
+      padding: 0.5rem 1rem;
+      display: flex;
+      flex-direction: row;
+      font-size: 1rem;
+      &:not(:last-child) {
+        border-bottom: 1px solid var(--context-menu-secondary-color);
+      }
+      &:hover {
+        background: var(--context-menu-secondary-color);
+      }
+      svg {
+        width: 1rem;
+         margin-right: 0.5rem;
+          path { fill: currentColor; }
+      }
+    }
+  }
+}
+
+// Define enter and leave transitions
+.slide-enter-active { animation: slide-in .1s; }
+.slide-leave-active { animation: slide-in .1s reverse; }
+@keyframes slide-in {
+  0% { transform: scaleY(0.5) scaleX(0.8) translateY(-50px); }
+  100% { transform: scaleY(1) translateY(0) translateY(0); }
+}
+</style>
diff --git a/src/components/LinkItems/Item.vue b/src/components/LinkItems/Item.vue
index e75e9c69..02fd719c 100644
--- a/src/components/LinkItems/Item.vue
+++ b/src/components/LinkItems/Item.vue
@@ -1,6 +1,9 @@
 <template ref="container">
+  <div class="item-wrapper">
     <a @click="itemOpened"
-      :href="target !== 'iframe' ? url : '#'"
+      @mouseup.right="openContextMenu"
+      @contextmenu.prevent
+      :href="target !== 'modal' ? url : '#'"
       :target="target === 'newtab' ? '_blank' : ''"
       :class="`item ${!icon? 'short': ''} size-${itemSize}`"
       v-tooltip="getTooltipOptions()"
@@ -19,6 +22,7 @@
       <!-- Small icon, showing opening method on hover -->
       <ItemOpenMethodIcon class="opening-method-icon" :isSmall="!icon" :openingMethod="target"
         :position="itemSize === 'medium'? 'bottom right' : 'top right'"/>
+      <!-- Status indicator dot (if enabled) showing weather srevice is availible -->
       <StatusIndicator
         class="status-indicator"
         v-if="enableStatusCheck"
@@ -26,13 +30,24 @@
         :statusText="statusResponse ? statusResponse.message : undefined"
       />
     </a>
+    <ContextMenu
+      :show="contextMenuOpen"
+      v-click-outside="closeContextMenu"
+      :posX="contextPos.posX"
+      :posY="contextPos.posY"
+      :id="`context-menu-${id}`"
+      @contextItemClick="contextItemClick"
+    />
+  </div>
 </template>
 
 <script>
 import axios from 'axios';
+import router from '@/router';
 import Icon from '@/components/LinkItems/ItemIcon.vue';
 import ItemOpenMethodIcon from '@/components/LinkItems/ItemOpenMethodIcon';
 import StatusIndicator from '@/components/LinkItems/StatusIndicator';
+import ContextMenu from '@/components/LinkItems/ContextMenu';
 
 export default {
   name: 'Item',
@@ -45,40 +60,63 @@ export default {
     color: String, // Optional text and icon color, specified in hex code
     backgroundColor: String, // Optional item background color
     url: String, // URL to the resource, optional but recommended
-    target: { // Where resource will open, either 'newtab', 'sametab' or 'iframe'
+    target: { // Where resource will open, either 'newtab', 'sametab' or 'modal'
       type: String,
       default: 'newtab',
-      validator: (value) => ['newtab', 'sametab', 'iframe'].indexOf(value) !== -1,
+      validator: (value) => ['newtab', 'sametab', 'modal', 'workspace'].indexOf(value) !== -1,
     },
     itemSize: String,
     enableStatusCheck: Boolean,
+    statusCheckHeaders: Object,
+    statusCheckUrl: String,
     statusCheckInterval: Number,
   },
   data() {
     return {
+      contextMenuOpen: false,
       getId: this.id,
       customStyles: {
         color: this.color,
         background: this.backgroundColor,
       },
       statusResponse: undefined,
+      contextPos: {
+        posX: undefined,
+        posY: undefined,
+      },
     };
   },
   components: {
     Icon,
     ItemOpenMethodIcon,
     StatusIndicator,
+    ContextMenu,
   },
   methods: {
-    /* Called when an item is clicked, manages the opening of iframe & resets the search field */
+    /* Called when an item is clicked, manages the opening of modal & resets the search field */
     itemOpened(e) {
-      if (e.altKey || this.target === 'iframe') {
+      if (e.altKey || this.target === 'modal') {
         e.preventDefault();
         this.$emit('triggerModal', this.url);
       } else {
         this.$emit('itemClicked');
       }
     },
+    /* Open custom context menu, and set position */
+    openContextMenu(e) {
+      this.contextMenuOpen = !this.contextMenuOpen;
+      if (e && window) {
+        // Calculate placement based on cursor and scroll position
+        this.contextPos = {
+          posX: e.clientX + window.pageXOffset,
+          posY: e.clientY + window.pageYOffset,
+        };
+      }
+    },
+    /* Closes the context menu, called when user clicks literally anywhere */
+    closeContextMenu() {
+      this.contextMenuOpen = false;
+    },
     /* Returns configuration object for the tooltip */
     getTooltipOptions() {
       return {
@@ -97,15 +135,18 @@ export default {
       switch (this.target) {
         case 'newtab': return '"\\f360"';
         case 'sametab': return '"\\f24d"';
-        case 'iframe': return '"\\f2d0"';
+        case 'modal': return '"\\f2d0"';
         default: return '"\\f054"';
       }
     },
+    /* Checks if a given service is currently online */
     checkWebsiteStatus() {
       this.statusResponse = undefined;
       const baseUrl = process.env.VUE_APP_DOMAIN || window.location.origin;
-      const endpoint = `${baseUrl}/ping?url=${this.url}`;
-      axios.get(endpoint)
+      const urlToCheck = this.statusCheckUrl || this.url;
+      const headers = this.statusCheckHeaders || {};
+      const endpoint = `${baseUrl}/ping?url=${urlToCheck}`;
+      axios.get(endpoint, { headers })
         .then((response) => {
           if (response.data) this.statusResponse = response.data;
         })
@@ -116,9 +157,31 @@ export default {
           };
         });
     },
+    /* Handle navigation options from the context menu */
+    contextItemClick(method) {
+      const { url } = this;
+      this.contextMenuOpen = false;
+      switch (method) {
+        case 'newtab':
+          window.open(url, '_blank');
+          break;
+        case 'sametab':
+          window.open(url, '_self');
+          break;
+        case 'modal':
+          this.$emit('triggerModal', url);
+          break;
+        case 'workspace':
+          router.push({ name: 'workspace', query: { url } });
+          break;
+        default: window.open(url, '_blank');
+      }
+    },
   },
   mounted() {
+    // If ststus checking is enabled, then check service status
     if (this.enableStatusCheck) this.checkWebsiteStatus();
+    // If continious status checking is enabled, then start ever-lasting loop
     if (this.statusCheckInterval > 0) {
       setInterval(this.checkWebsiteStatus, this.statusCheckInterval * 1000);
     }
@@ -128,6 +191,10 @@ export default {
 
 <style lang="scss">
 
+.item-wrapper {
+  flex-grow: 1;
+}
+
 .item {
   flex-grow: 1;
   color: var(--item-text-color);
@@ -147,6 +214,7 @@ export default {
   &:hover {
     box-shadow: var(--item-hover-shadow);
     background: var(--item-background-hover);
+    color: var(--item-text-color-hover);
     position: relative;
     .tile-title span.text {
       white-space: pre-wrap;
@@ -211,24 +279,29 @@ export default {
 
 /* Specify layout for alternate sized icons */
 .item {
+  /* Small Tile Specific Themes */
   &.size-small {
     display: flex;
     flex-direction: row-reverse;
     justify-content: flex-end;
     align-items: center;
     height: 2rem;
+    padding-top: 4px;
     div img, div svg.missing-image {
       width: 2rem;
     }
     .tile-title {
       height: fit-content;
       min-height: 1.2rem;
+      text-align: left;
+      max-width:140px;
       span.text {
         text-align: left;
         padding-left: 10%;
       }
     }
   }
+  /* Medium Tile Specific Themes */
   &.size-medium {
     display: flex;
     flex-direction: column;
@@ -243,14 +316,42 @@ export default {
       max-width: 160px;
     }
   }
+  /* Large Tile Specific Themes */
   &.size-large {
-    height: 100px;
+    display: flex;
+    flex-direction: row-reverse;
+    justify-content: flex-end;
+    text-align: left;
+    overflow: hidden;
+    align-items: center;
+    max-height: 6rem;
+    margin: 0.2rem;
+    padding: 0.5rem;
+    img {
+      padding: 0.1rem 0.25rem;
+    }
+    .tile-title {
+      height: auto;
+      padding: 0.1rem 0.25rem;
+      span.text {
+        position: relative;
+        font-weight: bold;
+        font-size: 1.1rem;
+        width: 100%;
+      }
+      p.description {
+        display: block;
+        margin: 0;
+        white-space: pre-wrap;
+        font-size: .9em;
+        text-overflow: ellipsis;
+      }
+    }
   }
-
   p.description {
-    display: none;
+    display: none; // By default, we don't show the description
   }
-  &:before {
+  &:before { // Certain themes (e.g. material) show css animated fas icon on hover
     display: none;
     font-family: FontAwesome;
     content: var(--open-icon, "\f054") !important;
diff --git a/src/components/LinkItems/ItemGroup.vue b/src/components/LinkItems/ItemGroup.vue
index 87805055..276c762c 100644
--- a/src/components/LinkItems/ItemGroup.vue
+++ b/src/components/LinkItems/ItemGroup.vue
@@ -27,6 +27,8 @@
         :target="item.target"
         :color="item.color"
         :backgroundColor="item.backgroundColor"
+        :statusCheckUrl="item.statusCheckUrl"
+        :statusCheckHeaders="item.statusCheckHeaders"
         :itemSize="newItemSize"
         :enableStatusCheck="shouldEnableStatusCheck(item.statusCheck)"
         :statusCheckInterval="getStatusCheckInterval()"
diff --git a/src/components/LinkItems/ItemIcon.vue b/src/components/LinkItems/ItemIcon.vue
index fe2a756b..3e4ca928 100644
--- a/src/components/LinkItems/ItemIcon.vue
+++ b/src/components/LinkItems/ItemIcon.vue
@@ -1,6 +1,7 @@
 <template>
   <div class="item-icon">
     <i v-if="iconType === 'font-awesome'" :class="`${icon} ${size}`" ></i>
+    <i v-else-if="iconType === 'emoji'" :class="`emoji-icon ${size}`" >{{getEmoji(iconPath)}}</i>
     <img v-else-if="icon" :src="iconPath" @error="imageNotFound"
       :class="`tile-icon ${size} ${broken ? 'broken' : ''}`"
     />
@@ -12,6 +13,8 @@
 import BrokenImage from '@/assets/interface-icons/broken-icon.svg';
 import ErrorHandler from '@/utils/ErrorHandler';
 import { faviconApi as defaultFaviconApi, faviconApiEndpoints } from '@/utils/defaults';
+import EmojiUnicodeRegex from '@/utils/EmojiUnicodeRegex';
+import emojiLookup from '@/utils/emojis.json';
 
 export default {
   name: 'Icon',
@@ -52,6 +55,27 @@ export default {
       if (splitPath.length >= 1) return validImgExtensions.includes(splitPath[1]);
       return false;
     },
+    /* Determins if a given string is an emoji, and if so what type it is */
+    isEmoji(img) {
+      if (EmojiUnicodeRegex.test(img) && img.match(/./gu).length) { // Is a unicode emoji
+        return { isEmoji: true, emojiType: 'glyph' };
+      } else if (new RegExp(/^:.*:$/).test(img)) { // Is a shortcode emoji
+        return { isEmoji: true, emojiType: 'shortcode' };
+      } else if (img.substring(0, 2) === 'U+' && img.length === 7) {
+        return { isEmoji: true, emojiType: 'unicode' };
+      }
+      return { isEmoji: false, emojiType: '' };
+    },
+    /* Formats and gets emoji from unicode or shortcode */
+    getEmoji(emojiCode) {
+      const { emojiType } = this.isEmoji(emojiCode);
+      if (emojiType === 'shortcode') {
+        if (emojiLookup[emojiCode]) return emojiLookup[emojiCode];
+      } else if (emojiType === 'unicode') {
+        return String.fromCodePoint(parseInt(emojiCode.substr(2), 16));
+      }
+      return emojiCode; // Emoji is a glyph already, just return
+    },
     /* Get favicon URL, for items which use the favicon as their icon */
     getFavicon(fullUrl) {
       if (this.shouldUseDefaultFavicon(fullUrl)) { // Check if we should use local icon
@@ -85,6 +109,7 @@ export default {
         case 'favicon': return this.getFavicon(url);
         case 'generative': return this.getGenerativeIcon(url);
         case 'svg': return img;
+        case 'emoji': return img;
         default: return '';
       }
     },
@@ -98,6 +123,7 @@ export default {
       else if (img.includes('fa-')) imgType = 'font-awesome';
       else if (img === 'favicon') imgType = 'favicon';
       else if (img === 'generative') imgType = 'generative';
+      else if (this.isEmoji(img).isEmoji) imgType = 'emoji';
       else imgType = 'none';
       return imgType;
     },
@@ -144,7 +170,17 @@ export default {
       fill: currentColor;
     }
   }
-
+  i.emoji-icon {
+    font-style: normal;
+    font-size: 2rem;
+    margin: 0.2rem;
+    &.small {
+      font-size: 1.5rem;
+    }
+    &.large {
+      font-size: 2.5rem;
+    }
+  }
   .missing-image {
     width: 3.5rem;
     path {
diff --git a/src/components/LinkItems/ItemOpenMethodIcon.vue b/src/components/LinkItems/ItemOpenMethodIcon.vue
index 2610ad72..b9270123 100644
--- a/src/components/LinkItems/ItemOpenMethodIcon.vue
+++ b/src/components/LinkItems/ItemOpenMethodIcon.vue
@@ -2,19 +2,24 @@
   <div :class="makeClass(position, isSmall, isTransparent)">
     <NewTabOpenIcon v-if="openingMethod === 'newtab'" />
     <SameTabOpenIcon v-else-if="openingMethod === 'sametab'" />
-    <IframeOpenIcon v-else-if="openingMethod === 'iframe'" />
+    <IframeOpenIcon v-else-if="openingMethod === 'modal'" />
+    <WorkspaceOpenIcon v-else-if="openingMethod === 'workspace'" />
   </div>
 </template>
 
 <script>
+/* This component displays a small icon, indicating opening method */
+
+// Import Icons
 import NewTabOpenIcon from '@/assets/interface-icons/open-new-tab.svg';
 import SameTabOpenIcon from '@/assets/interface-icons/open-current-tab.svg';
 import IframeOpenIcon from '@/assets/interface-icons/open-iframe.svg';
+import WorkspaceOpenIcon from '@/assets/interface-icons/open-workspace.svg';
 
 export default {
   name: 'ItemOpenMethodIcon',
   props: {
-    openingMethod: String, // newtab | sametab | iframe
+    openingMethod: String, // newtab | sametab | modal | workspace
     isSmall: Boolean, // If true, will apply small class
     position: String, // Position classes: top, bottom, left, right
     isTransparent: Boolean, // If true, will apply opacity
@@ -32,6 +37,7 @@ export default {
     NewTabOpenIcon,
     SameTabOpenIcon,
     IframeOpenIcon,
+    WorkspaceOpenIcon,
   },
 };
 </script>
diff --git a/src/components/PageStrcture/Footer.vue b/src/components/PageStrcture/Footer.vue
index c235f77f..77529692 100644
--- a/src/components/PageStrcture/Footer.vue
+++ b/src/components/PageStrcture/Footer.vue
@@ -36,7 +36,7 @@ footer {
   text-align: center;
   color: var(--medium-grey);
   opacity: var(--dimming-factor);
-  background: var(--background-darker);
+  background: var(--footer-background);
   margin-top: 1.5rem;
   border-top: 1px solid var(--outline-color);
   @include tablet-down {
diff --git a/src/components/Settings/SearchBar.vue b/src/components/Settings/SearchBar.vue
index 7b38f902..0083c21f 100644
--- a/src/components/Settings/SearchBar.vue
+++ b/src/components/Settings/SearchBar.vue
@@ -83,7 +83,7 @@ export default {
     background: var(--search-container-background);
     label {
         display: inline;
-        color: var(--settings-text-color);
+        color: var(--search-label-color);
         margin: 0.5rem;
         display: inline;
     }
diff --git a/src/main.js b/src/main.js
index c4e7361c..ca08f56d 100644
--- a/src/main.js
+++ b/src/main.js
@@ -7,16 +7,18 @@ import VSelect from 'vue-select'; // Select dropdown component
 import VTabs from 'vue-material-tabs'; // Tab view component, used on the config page
 import Toasted from 'vue-toasted'; // Toast component, used to show confirmation notifications
 
-import { toastedOptions } from './utils/defaults';
-import Dashy from './App.vue';
-import router from './router';
-import registerServiceWorker from './registerServiceWorker';
+import { toastedOptions } from '@/utils/defaults';
+import Dashy from '@/App.vue';
+import router from '@/router';
+import registerServiceWorker from '@/registerServiceWorker';
+import clickOutside from '@/utils/ClickOutside';
 
 Vue.use(VTooltip);
 Vue.use(VModal);
 Vue.use(VTabs);
 Vue.use(Toasted, toastedOptions);
 Vue.component('v-select', VSelect);
+Vue.directive('clickOutside', clickOutside);
 
 Vue.config.productionTip = false;
 
diff --git a/src/styles/color-palette.scss b/src/styles/color-palette.scss
index 2acf6a25..7b0f0497 100644
--- a/src/styles/color-palette.scss
+++ b/src/styles/color-palette.scss
@@ -42,6 +42,7 @@
   --nav-link-border-color: transparent;
   --nav-link-border-color-hover: var(--primary);
   --item-text-color: var(--primary);
+  --item-text-color-hover: var(--item-text-color);
   --item-group-outer-background: var(--primary);
   --item-group-heading-text-color: var(--item-group-background);
   --item-group-heading-text-color-hover: var(--background);
@@ -49,8 +50,10 @@
   --settings-text-color: var(--primary);
   --search-container-background: var(--background-darker);
   --search-field-background: var(--background);
+  --search-label-color: var(--settings-text-color);
   --footer-text-color: var(--medium-grey);
   --footer-text-color-link:  var(--primary);
+  --footer-background: var(--background-darker);
   --welcome-popup-background: var(--background-darker);
   --welcome-popup-text-color: var(--primary);
   --config-code-background: #fff;
@@ -78,4 +81,8 @@
   --status-check-tooltip-color: var(--primary);
   --code-editor-color: var(--black);
   --code-editor-background: var(--white);
+
+  --context-menu-background: var(--background);
+  --context-menu-color: var(--primary);
+  --context-menu-secondary-color: var(--background-darker);
 }
diff --git a/src/styles/color-themes.scss b/src/styles/color-themes.scss
index 24ef8c23..57ad1afa 100644
--- a/src/styles/color-themes.scss
+++ b/src/styles/color-themes.scss
@@ -88,9 +88,46 @@ html[data-theme='matrix'] {
   --font-body: 'Cutive Mono', monospace;
   --font-headings: 'VT323', monospace;
   --about-page-background: var(--background);
+  --context-menu-secondary-color: var(--primary);
   .prism-editor-wrapper.my-editor {
     border: 1px solid var(--primary);
   }
+  div.context-menu ul li:hover {
+    color: var(--background);
+  }
+}
+
+html[data-theme='blue-purple'] {
+  --primary: #54dbf8;
+  --background: #e5e8f5;
+  --background-darker: #5346f3;
+  --font-headings: 'Sniglet', cursive;
+
+  --dimming-factor: 0.8;
+  --curve-factor: 6px;
+
+  --settings-text-color: var(--background-darker);
+  --item-text-color: var(--background-darker);
+  --item-background: var(--white);
+  --item-background-hover: var(--primary);
+
+  --item-group-heading-text-color: var(--background-darker);
+  --item-group-background: var(--background);
+  --footer-text-color: var(--white);
+  --context-menu-background: var(--white);
+  --context-menu-color: var(--background-darker);
+  --context-menu-secondary-color: var(--primary);
+
+  .item {
+    box-shadow: none;
+    border: 1px solid var(--background-darker);
+  }
+  section.filter-container form label {
+    color: var(--primary);
+  }
+  footer {
+    color: var(--white);
+  }
 }
 
 html[data-theme='hacker-girl'] {
@@ -184,6 +221,12 @@ html[data-theme='material-original'] {
   --about-page-accent: #000;
   --about-page-color: var(--background-darker);
   --about-page-background: var(--background);
+  --context-menu-background: var(--white);
+  --context-menu-secondary-color: var(--white);
+  div.context-menu ul li:hover {
+    background: var(--primary);
+    color: var(--white);
+  }
 }
 
 html[data-theme='material-dark-original'] {
@@ -222,6 +265,13 @@ html[data-theme='material-dark-original'] {
   &::-webkit-scrollbar-thumb {
     border-left: 1px solid #131a1f;
   }
+  div.context-menu {
+    border: none;
+    background: #131a1f;
+    ul li:hover {
+      background: #333c43;
+    }
+  }
 }
 
 html[data-theme='colorful'] {
@@ -234,14 +284,14 @@ html[data-theme='colorful'] {
   --item-group-outer-background: #05070e;
   --item-group-heading-text-color: #e8eae1;
   --item-group-heading-text-color-hover: #fff;
-  .item:nth-child(1n) { color: #eb5cad; border: 1px solid #eb5cad; }
-  .item:nth-child(2n) { color: #985ceb; border: 1px solid #985ceb; }
-  .item:nth-child(3n) { color: #5c90eb; border: 1px solid #5c90eb; }
-  .item:nth-child(4n) { color: #5cdfeb; border: 1px solid #5cdfeb; }
-  .item:nth-child(5n) { color: #5ceb8d; border: 1px solid #5ceb8d; }
-  .item:nth-child(6n) { color: #afeb5c; border: 1px solid #afeb5c; }
-  .item:nth-child(7n) { color: #ebb75c; border: 1px solid #ebb75c; }
-  .item:nth-child(8n) { color: #eb615c; border: 1px solid #eb615c; }
+  .item-wrapper:nth-child(1n) { .item { color: #eb5cad; border: 1px solid #eb5cad; } }
+  .item-wrapper:nth-child(2n) { .item { color: #985ceb; border: 1px solid #985ceb; } }
+  .item-wrapper:nth-child(3n) { .item { color: #5c90eb; border: 1px solid #5c90eb; } }
+  .item-wrapper:nth-child(4n) { .item { color: #5cdfeb; border: 1px solid #5cdfeb; } }
+  .item-wrapper:nth-child(5n) { .item { color: #5ceb8d; border: 1px solid #5ceb8d; } }
+  .item-wrapper:nth-child(6n) { .item { color: #afeb5c; border: 1px solid #afeb5c; } }
+  .item-wrapper:nth-child(7n) { .item { color: #ebb75c; border: 1px solid #ebb75c; } }
+  .item-wrapper:nth-child(8n) { .item { color: #eb615c; border: 1px solid #eb615c; } }
   .item:hover, .item:focus {
     opacity: 0.85;
     outline: none;
@@ -253,12 +303,20 @@ html[data-theme='colorful'] {
   h1, h2, h3, h4 {
     font-weight: normal;
   }
+  div.context-menu {
+    border-color: var(--primary);
+  }
 }
 
 html[data-theme='minimal-light'], html[data-theme='minimal-dark'], html[data-theme='vaporware'] {
   --font-body: 'Courier New', monospace;
   --font-headings: 'Courier New', monospace;
+  --footer-height: 94px;
   
+  .item.size-medium .tile-title {
+    max-width: 100px;
+  }
+
   label.lbl-toggle h3 {
     font-size: 1.8rem;
   }
@@ -449,6 +507,7 @@ html[data-theme='material'] {
   --welcome-popup-text-color: #f5f5f5;
   --footer-text-color: #f5f5f5cc;
   // --login-form-background-secondary: #f5f5f5cc;
+  --context-menu-secondary-color: #f5f5f5;
 
   header {
     background: #4285f4;
@@ -467,6 +526,14 @@ html[data-theme='material'] {
   .prism-editor-wrapper {
     background: #f5f5f5;
   }
+  .item:focus {
+    outline-color: #4285f4cc;
+  }
+  div.context-menu {
+    border: none;
+    background: var(--white);
+    ul li:hover { svg path { fill: var(--background-darker); }}
+  }
 }
 
 html[data-theme='material-dark'] {
@@ -521,6 +588,13 @@ html[data-theme='material-dark'] {
       background: #131a1f !important;
     }
   }
+  div.context-menu {
+    border: none;
+    background: var(--background);
+    ul li:hover {
+      background: #131a1f;
+    }
+  }
 }
 
 html[data-theme='minimal-light'] {
@@ -547,7 +621,8 @@ html[data-theme='minimal-light'] {
   --login-form-color: #101931;
   --about-page-background: var(--background);
   --about-page-color: var(--background-darker);
-
+  --context-menu-color: var(--background-darker);
+  --context-menu-secondary-color: var(--primary);
   section.filter-container {
     background: #fff;
     border-bottom: 1px dashed #00000038;
@@ -592,6 +667,10 @@ html[data-theme='minimal-dark'] {
       border: 1px solid #fff;
     }
   }
+
+  div.context-menu {
+    border-color: var(--primary);
+  }
 }
 
 html[data-theme='vaporware'] {
@@ -613,7 +692,8 @@ html[data-theme='vaporware'] {
   --curve-factor: 2px;
   --curve-factor-navbar: 6px;
   --login-form-color: #09bfe6;
-
+  --config-settings-background: #100e2c;
+  
   .home {
     background: linear-gradient(180deg, rgba(16,14,44,1) 10%, rgba(27,24,79,1) 40%, rgba(16,14,44,1) 100%);
   }
@@ -674,4 +754,30 @@ html[data-theme='vaporware'] {
   //   background-size: cover;
   //   div.home { background: none; }
   // }
+}
+
+html[data-theme='cyberpunk'] {
+--pink: #ff2a6d;
+--pale:	#d1f7ff;
+--aqua:	#05d9e8;
+--teal:	#005678;
+--blue:	#01012b;
+--gold:	#ebeb0f;
+
+--primary: var(--gold);
+--background: var(--blue);
+--background-darker: var(--pink);
+--heading-text-color: var(--blue);
+--nav-link-background-color-hover: var(--blue);
+--nav-link-text-color-hover: var(--pink);
+--nav-link-border-color-hover: var(--blue);
+--config-settings-background: var(--blue);
+--config-settings-color: var(--pink);
+--search-label-color: var(--blue);
+--item-group-background: var(--blue);
+--item-text-color: var(--pale);
+--scroll-bar-color: var(--aqua);
+--scroll-bar-background: var(--teal);
+--footer-background: var(--aqua);
+--font-headings: 'Audiowide', cursive;
 }
\ No newline at end of file
diff --git a/src/styles/dimensions.scss b/src/styles/dimensions.scss
index 13eed42a..442cfb7d 100644
--- a/src/styles/dimensions.scss
+++ b/src/styles/dimensions.scss
@@ -19,6 +19,7 @@
   --item-icon-transform: drop-shadow(2px 4px 6px var(--transparent-50)) saturate(0.65);
   --item-icon-transform-hover: drop-shadow(4px 8px 3px var(--transparent-50)) saturate(2);
   --item-group-shadow: var(--item-shadow);
+  --context-menu-shadow: var(--item-shadow);
 
   /* Settings and config menu */
   --settings-container-shadow: none;
diff --git a/src/styles/typography.scss b/src/styles/typography.scss
index 539a5f5e..1888a754 100644
--- a/src/styles/typography.scss
+++ b/src/styles/typography.scss
@@ -42,7 +42,6 @@ html {
     font-weight: normal;
   }
 }
-
 /* Optional fonts for specific themes */
 /* These fonts are loaded from ./public and therefore not bundled within the apps source */
 @font-face { // Used by Dracula. Credit to Matt McInerney
@@ -73,3 +72,9 @@ html {
   font-family: 'VT323';
   src: url('/fonts/VT323-Regular.ttf');
 }
+
+@font-face { // Used by cyberpunk theme. Credit to Astigmatic
+  font-family: 'Audiowide';
+  src: url('/fonts/Audiowide-Regular.ttf');
+}
+
diff --git a/src/utils/Auth.js b/src/utils/Auth.js
index 563c5e13..57e519f8 100644
--- a/src/utils/Auth.js
+++ b/src/utils/Auth.js
@@ -1,8 +1,18 @@
 import sha256 from 'crypto-js/sha256';
 import { cookieKeys, localStorageKeys } from './defaults';
 
+/**
+ * Generates a 1-way hash, in order to be stored in local storage for authentication
+ * @param {String} user The username of user
+ * @returns {String} The hashed token
+ */
 const generateUserToken = (user) => sha256(user.toString()).toString().toLowerCase();
 
+/**
+ * Checks if the user is currently authenticated
+ * @param {Array[Object]} users An array of user objects pulled from the config
+ * @returns {Boolean} Will return true if the user is logged in, else false
+ */
 export const isLoggedIn = (users) => {
   const validTokens = users.map((user) => generateUserToken(user));
   let userAuthenticated = false;
@@ -20,6 +30,15 @@ export const isLoggedIn = (users) => {
   return userAuthenticated;
 };
 
+/**
+ * Checks credentials entered by the user against those in the config
+ * Returns an object containing a boolean indicating success/ failure
+ * along with a message outlining what's not right
+ * @param {String} username The username entered by the user
+ * @param {String} pass The password entered by the user
+ * @param {String[]} users An array of valid user objects
+ * @returns {Object} An object containing a boolean result and a message
+ */
 export const checkCredentials = (username, pass, users) => {
   let response;
   if (!username) {
@@ -40,12 +59,24 @@ export const checkCredentials = (username, pass, users) => {
   return response || { correct: false, msg: 'User not found' };
 };
 
-export const login = (username, pass) => {
+/**
+ * Sets the cookie value in order to login the user locally
+ * @param {String} username - The users username
+ * @param {String} pass - Password, not yet hashed
+ * @param {Number} timeout - A desired timeout for the session, in ms
+ */
+export const login = (username, pass, timeout) => {
+  const now = new Date();
+  const expiry = new Date(now.setTime(now.getTime() + timeout)).toGMTString();
   const userObject = { user: username, hash: sha256(pass).toString().toLowerCase() };
-  document.cookie = `authenticationToken=${generateUserToken(userObject)}; max-age=600`;
+  document.cookie = `authenticationToken=${generateUserToken(userObject)};`
+    + `${timeout > 0 ? `expires=${expiry}` : ''}`;
   localStorage.setItem(localStorageKeys.USERNAME, username);
 };
 
+/**
+ * Removed the browsers cookie, causing user to be logged out
+ */
 export const logout = () => {
   document.cookie = 'authenticationToken=null';
   localStorage.removeItem(localStorageKeys.USERNAME);
@@ -57,8 +88,8 @@ export const logout = () => {
  * But if auth is configured, then will verify user is correctly
  * logged in and then check weather they are of type admin, and
  * return false if any conditions fail
- * @param users[] : Array of users
- * @returns Boolean : True if admin privileges
+ * @param {String[]} - Array of users
+ * @returns {Boolean} - True if admin privileges
  */
 export const isUserAdmin = (users) => {
   if (!users || users.length === 0) return true; // Authentication not setup
diff --git a/src/utils/ClickOutside.js b/src/utils/ClickOutside.js
new file mode 100644
index 00000000..83bb4bbc
--- /dev/null
+++ b/src/utils/ClickOutside.js
@@ -0,0 +1,37 @@
+/**
+ * A simple Vue directive to trigger an event when the user
+ * clicks anywhere other than the specified element.
+ * Used to close context menu's popup menus and tips.
+ */
+
+const instances = [];
+
+function onDocumentClick(e, el, fn) {
+  const { target } = e;
+  if (el !== target && !el.contains(target)) {
+    fn(e);
+  }
+}
+
+export default {
+  bind(element, binding) {
+    const el = element;
+    el.dataset.outsideClickIndex = instances.length;
+
+    const fn = binding.value;
+    const click = (e) => {
+      onDocumentClick(e, el, fn);
+    };
+
+    document.addEventListener('click', click);
+    document.addEventListener('touchstart', click);
+    instances.push(click);
+  },
+  unbind(el) {
+    if (!el.dataset) return;
+    const index = el.dataset.outsideClickIndex;
+    const handler = instances[index];
+    document.removeEventListener('click', handler);
+    instances.splice(index, 1);
+  },
+};
diff --git a/src/utils/ConfigSchema.json b/src/utils/ConfigSchema.json
index 1416d2c9..b47d82c5 100644
--- a/src/utils/ConfigSchema.json
+++ b/src/utils/ConfigSchema.json
@@ -56,8 +56,31 @@
         },
         "theme": {
           "type": "string",
-          "default": "Callisto",
-          "description": "A theme to be applied by default on first load"
+          "default": "callisto",
+          "description": "A theme to be applied by default on first load",
+          "examples": [
+            "callisto",
+            "thebe",
+            "dracula",
+            "material",
+            "material-dark",
+            "colorful",
+            "nord",
+            "nord-frost",
+            "minimal-dark",
+            "minimal-light",
+            "matrix",
+            "matrix-red",
+            "hacker-girl",
+            "raspberry-jam",
+            "bee",
+            "tiger",
+            "material-original",
+            "material-dark-original",
+            "vaporware",
+            "high-contrast-dark",
+            "high-contrast-light"
+          ]
         },
         "enableFontAwesome": {
           "type": "boolean",
@@ -176,7 +199,12 @@
         "disableServiceWorker": {
           "type": "boolean",
           "default": false,
-          "description": "If set to true, then service worker will not be used"
+          "description": "If set to true, then service workers will not be used to cache page contents"
+        },
+        "disableContextMenu": {
+          "type": "boolean",
+          "default": false,
+          "description": "If set to true, custom right-click context menu will be disabled"
         }
       },
       "additionalProperties": false
@@ -295,7 +323,8 @@
                   "enum": [
                     "newtab",
                     "sametab",
-                    "iframe"
+                    "modal",
+                    "workspace"
                   ],
                   "default": "newtab",
                   "description": "Opening method, when item is clicked"
@@ -312,6 +341,14 @@
                   "type": "boolean",
                   "default": false,
                   "description": "Whether or not to display online/ offline status for this service. Will override appConfig.statusCheck"
+                },
+                "statusCheckUrl": {
+                  "type": "string",
+                  "description": "If you've enabled statusCheck, and want to use a different URL to what is defined under the item, then specify it here"
+                },
+                "statusCheckHeaders": {
+                  "type": "object",
+                  "description": " If you're endpoint requires any specific headers for the status checking, then define them here"
                 }
               }
             }
diff --git a/src/utils/EmojiUnicodeRegex.js b/src/utils/EmojiUnicodeRegex.js
new file mode 100644
index 00000000..b6384c34
--- /dev/null
+++ b/src/utils/EmojiUnicodeRegex.js
@@ -0,0 +1 @@
+module.exports = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/;
diff --git a/src/utils/defaults.js b/src/utils/defaults.js
index 370d8971..7e39e47a 100644
--- a/src/utils/defaults.js
+++ b/src/utils/defaults.js
@@ -31,8 +31,10 @@ module.exports = {
     'raspberry-jam',
     'bee',
     'tiger',
+    'blue-purple',
     'material-original',
     'material-dark-original',
+    'cyberpunk',
     'vaporware',
     'high-contrast-dark',
     'high-contrast-light',
diff --git a/src/utils/emojis.json b/src/utils/emojis.json
new file mode 100644
index 00000000..c268e82c
--- /dev/null
+++ b/src/utils/emojis.json
@@ -0,0 +1,1919 @@
+{
+  ":family_mothers_two_girls:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง",
+  ":family_mothers_children:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ",
+  ":family_mothers_two_boys:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ",
+  ":family_two_girls:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง",
+  ":family_children:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ",
+  ":family_two_boys:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ",
+  ":family_fathers_two_girls:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง",
+  ":family_fathers_children:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ",
+  ":family_fathers_two_boys:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ",
+  ":family_mothers_one_girl:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง",
+  ":family_mothers_one_boy:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ",
+  ":single_mother_two_girls:": "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง",
+  ":single_mother_two_children:": "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ",
+  ":single_mother_two_boys:": "๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ",
+  ":family_one_girl:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง",
+  ":family_fathers_one_girl:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง",
+  ":family_fathers_one_boy:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ",
+  ":single_father_two_girls:": "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง",
+  ":single_father_with_children:": "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ",
+  ":single_father_two_boys:": "๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ",
+  ":single_mother_one_girl:": "๐Ÿ‘ฉโ€๐Ÿ‘ง",
+  ":single_mother_one_boy:": "๐Ÿ‘ฉโ€๐Ÿ‘ฆ",
+  ":single_father_one_girl:": "๐Ÿ‘จโ€๐Ÿ‘ง",
+  ":single_father_one_boy:": "๐Ÿ‘จโ€๐Ÿ‘ฆ",
+  ":joy:": "๐Ÿ˜‚",
+  ":rolling_on_the_floor_laughing:": "๐Ÿคฃ",
+  ":heart:": "โค๏ธ",
+  ":hearts:": "โ™ฅ",
+  ":heart_eyes:": "๐Ÿ˜",
+  ":sob:": "๐Ÿ˜ญ",
+  ":blush:": "๐Ÿ˜Š",
+  ":unamused:": "๐Ÿ˜’",
+  ":kissing_heart:": "๐Ÿ˜˜",
+  ":two_hearts:": "๐Ÿ’•",
+  ":smiling:": "โ˜บ๏ธ",
+  ":weary:": "๐Ÿ˜ฉ",
+  ":ok_hand_dark_skin_tone:": "๐Ÿ‘Œ๐Ÿฟ",
+  ":ok_hand_medium_dark_skin_tone: ": "๐Ÿ‘Œ๐Ÿพ",
+  ":ok_hand_medium_skin_tone:": "๐Ÿ‘Œ๐Ÿฝ",
+  ":ok_hand_medium_light_skin_tone:": "๐Ÿ‘Œ๐Ÿผ",
+  ":ok_hand_light_skin_tone:": "๐Ÿ‘Œ๐Ÿป",
+  ":ok_hand:": "๐Ÿ‘Œ",
+  ":pensive:": "๐Ÿ˜”",
+  ":smirk:": "๐Ÿ˜",
+  ":grin:": "๐Ÿ˜",
+  ":recycle:": "โ™ป๏ธ",
+  ":wink:": "๐Ÿ˜‰",
+  ":thumbsup_dark_skin_tone:": "๐Ÿ‘๐Ÿฟ",
+  ":thumbsup_medium_dark_skin_tone:": "๐Ÿ‘๐Ÿพ",
+  ":thumbsup_medium_skin_tone:": "๐Ÿ‘๐Ÿฝ",
+  ":thumbsup_medium_light_skin_tone:": "๐Ÿ‘๐Ÿผ",
+  ":thumbsup_light_skin_tone:": "๐Ÿ‘๐Ÿป",
+  ":thumbsup:": "๐Ÿ‘",
+  ":pray_dark_skin_tone:": "๐Ÿ™๐Ÿฟ",
+  ":pray_medium_dark_skin_tone:": "๐Ÿ™๐Ÿพ",
+  ":pray_medium_skin_skin_tone:": "๐Ÿ™๐Ÿฝ",
+  ":pray_medium_light_skin_skin_tone:": "๐Ÿ™๐Ÿผ",
+  ":pray_light_skin_skin_tone:": "๐Ÿ™๐Ÿป",
+  ":pray:": "๐Ÿ™",
+  ":relieved:": "๐Ÿ˜Œ",
+  ":notes:": "๐ŸŽถ",
+  ":flushed:": "๐Ÿ˜ณ",
+  ":raised_hands_medium_dark_skin_tone:": "๐Ÿ™Œ๐Ÿพ",
+  ":raised_hands_medium_skin_tone:": "๐Ÿ™Œ๐Ÿฝ",
+  ":raised_hands_medium_light_skin_tone:": "๐Ÿ™Œ๐Ÿผ",
+  ":raised_hands_light_skin_tone:": "๐Ÿ™Œ๐Ÿป",
+  ":raised_hands:": "๐Ÿ™Œ",
+  ":see_no_evil:": "๐Ÿ™ˆ",
+  ":cry:": "๐Ÿ˜ข",
+  ":sunglasses:": "๐Ÿ˜Ž",
+  ":v_dark_skin_tone:": "โœŒ๐Ÿฟ",
+  ":v_medium_dark_skin_tone:": "โœŒ๐Ÿพ",
+  ":v_medium_skin_tone:": "โœŒ๐Ÿฝ",
+  ":v_medium_light_skin_tone:": "โœŒ๐Ÿผ",
+  ":v_light_skin_tone:": "โœŒ๐Ÿป",
+  ":v:": "โœŒ๏ธ",
+  ":eyes:": "๐Ÿ‘€",
+  ":sweat_smile:": "๐Ÿ˜…",
+  ":sparkles:": "โœจ",
+  ":sleeping:": "๐Ÿ˜ด",
+  ":smile:": "๐Ÿ˜„",
+  ":purple_heart:": "๐Ÿ’œ",
+  ":broken_heart:": "๐Ÿ’”",
+  ":100:": "๐Ÿ’ฏ",
+  ":expressionless:": "๐Ÿ˜‘",
+  ":sparkling_heart:": "๐Ÿ’–",
+  ":blue_heart:": "๐Ÿ’™",
+  ":confused:": "๐Ÿ˜•",
+  ":man_tip_hand_dark_skin_tone:": "๐Ÿ’๐Ÿฟโ€โ™‚",
+  ":man_tip_hand_medium_dark_skin_tone:": "๐Ÿ’๐Ÿพโ€โ™‚",
+  ":man_tip_hand_medium_skin_tone:": "๐Ÿ’๐Ÿฝโ€โ™‚",
+  ":man_tip_hand_medium_light_skin_tone:": "๐Ÿ’๐Ÿผโ€โ™‚",
+  ":man_tip_hand_light_skin_tone:": "๐Ÿ’๐Ÿปโ€โ™‚",
+  ":person_tip_hand:": "๐Ÿ’โ€โ™‚",
+  ":information_desk_person_dark_skin_tone:": "๐Ÿ’๐Ÿฟ",
+  ":information_desk_person_medium_dark_skin_tone:": "๐Ÿ’๐Ÿพ",
+  ":information_desk_person_medium_skin_tone:": "๐Ÿ’๐Ÿฝ",
+  ":information_desk_person_medium_light_skin_tone:": "๐Ÿ’๐Ÿผ",
+  ":information_desk_person_light_skin_tone:": "๐Ÿ’๐Ÿป",
+  ":information_desk_person:": "๐Ÿ’",
+  ":stuck_out_tongue_winking_eye:": "๐Ÿ˜œ",
+  ":disappointed:": "๐Ÿ˜ž",
+  ":yum:": "๐Ÿ˜‹",
+  ":neutral_face:": "๐Ÿ˜",
+  ":sleepy:": "๐Ÿ˜ช",
+  ":clap_dark_skin_tone:": "๐Ÿ‘๐Ÿฟ",
+  ":clap_medium_dark_skin_tone:": "๐Ÿ‘๐Ÿพ",
+  ":clap_medium_skin_tone:": "๐Ÿ‘๐Ÿฝ",
+  ":clap_medium_light_skin_tone:": "๐Ÿ‘๐Ÿผ",
+  ":clap_light_skin_tone:": "๐Ÿ‘๐Ÿป",
+  ":clap:": "๐Ÿ‘",
+  ":cupid:": "๐Ÿ’˜",
+  ":heartpulse:": "๐Ÿ’—",
+  ":revolving_hearts:": "๐Ÿ’ž",
+  ":arrow_left:": "โฌ…๏ธ",
+  ":speak_no_evil:": "๐Ÿ™Š",
+  ":raised_hand_dark_skin_tone:": "โœ‹๐Ÿฟ",
+  ":raised_hand_medium_dark_skin_tone:": "โœ‹๐Ÿพ",
+  ":raised_hand_medium_skin_tone:": "โœ‹๐Ÿฝ",
+  ":raised_hand_medium_light_skin_tone:": "โœ‹๐Ÿผ",
+  ":raised_hand_light_skin_tone:": "โœ‹๐Ÿป",
+  ":raised_hand:": "โœ‹",
+  ":kiss:": "๐Ÿ’‹",
+  ":point_right_dark_skin_tone:": "๐Ÿ‘‰๐Ÿฟ",
+  ":point_right_medium_dark_skin_tone:": "๐Ÿ‘‰๐Ÿพ",
+  ":point_right_medium_skin_tone:": "๐Ÿ‘‰๐Ÿฝ",
+  ":point_right_medium_light_skin_tone:": "๐Ÿ‘‰๐Ÿผ",
+  ":point_right_light_skin_tone:": "๐Ÿ‘‰๐Ÿป",
+  ":point_right:": "๐Ÿ‘‰",
+  ":cherry_blossom:": "๐ŸŒธ",
+  ":scream:": "๐Ÿ˜ฑ",
+  ":fire:": "๐Ÿ”ฅ",
+  ":rage:": "๐Ÿ˜ก",
+  ":smiley:": "๐Ÿ˜ƒ",
+  ":part_popper:": "๐ŸŽ‰",
+  ":punch_dark_skin_tone:": "๐Ÿ‘Š๐Ÿฟ",
+  ":punch_medium_dark_skin_tone:": "๐Ÿ‘Š๐Ÿพ",
+  ":punch_medium_skin_tone:": "๐Ÿ‘Š๐Ÿฝ",
+  ":punch_medium_light_skin_tone:": "๐Ÿ‘Š๐Ÿผ",
+  ":punch_light_skin_tone:": "๐Ÿ‘Š๐Ÿป",
+  ":punch:": "๐Ÿ‘Š",
+  ":tired_face:": "๐Ÿ˜ซ",
+  ":camera:": "๐Ÿ“ท",
+  ":rose:": "๐ŸŒน",
+  ":stuck_out_tongue_closed_eyes:": "๐Ÿ˜",
+  ":muscle_dark_skin_tone:": "๐Ÿ’ช๐Ÿฟ",
+  ":muscle_medium_dark_skin_tone:": "๐Ÿ’ช๐Ÿพ",
+  ":muscle_medium_skin_tone:": "๐Ÿ’ช๐Ÿฝ",
+  ":muscle_medium_light_skin_tone:": "๐Ÿ’ช๐Ÿผ",
+  ":muscle_light_skin_tone:": "๐Ÿ’ช๐Ÿป",
+  ":muscle:": "๐Ÿ’ช",
+  ":skull:": "๐Ÿ’€",
+  ":sunny:": "โ˜€๏ธ",
+  ":yellow_heart:": "๐Ÿ’›",
+  ":triumph:": "๐Ÿ˜ค",
+  ":new_moon_with_face:": "๐ŸŒš",
+  ":laughing:": "๐Ÿ˜†",
+  ":sweat:": "๐Ÿ˜“",
+  ":point_left_dark_skin_tone:": "๐Ÿ‘ˆ๐Ÿฟ",
+  ":point_left_medium_dark_skin_tone:": "๐Ÿ‘ˆ๐Ÿพ",
+  ":point_left_medium_skin_tone:": "๐Ÿ‘ˆ๐Ÿฝ",
+  ":point_left_medium_light_skin_tone:": "๐Ÿ‘ˆ๐Ÿผ",
+  ":point_left_light_skin_tone:": "๐Ÿ‘ˆ๐Ÿป",
+  ":point_left:": "๐Ÿ‘ˆ",
+  ":heavy_check_mark:": "โœ”๏ธ",
+  ":heart_eyes_cat:": "๐Ÿ˜ป",
+  ":grinning:": "๐Ÿ˜€",
+  ":mask:": "๐Ÿ˜ท",
+  ":green_heart:": "๐Ÿ’š",
+  ":wave_dark_skin_tone:": "๐Ÿ‘‹๐Ÿฟ",
+  ":wave_medium_dark_skin_tone:": "๐Ÿ‘‹๐Ÿพ",
+  ":wave_medium_skin_tone:": "๐Ÿ‘‹๐Ÿฝ",
+  ":wave_medium_light_skin_tone:": "๐Ÿ‘‹๐Ÿผ",
+  ":wave_light_skin_tone:": "๐Ÿ‘‹๐Ÿป",
+  ":wave:": "๐Ÿ‘‹",
+  ":persevere:": "๐Ÿ˜ฃ",
+  ":heartbeat:": "๐Ÿ’“",
+  ":arrow_forward:": "โ–ถ๏ธ",
+  ":arrow_backward:": "โ—€๏ธ",
+  ":arrow_right_hook:": "โ†ช๏ธ",
+  ":leftwards_arrow_with_hook:": "โ†ฉ๏ธ",
+  ":crown:": "๐Ÿ‘‘",
+  ":kissing_closed_eyes:": "๐Ÿ˜š",
+  ":stuck_out_tongue:": "๐Ÿ˜›",
+  ":disappointed_relieved:": "๐Ÿ˜ฅ",
+  ":innocent:": "๐Ÿ˜‡",
+  ":headphones:": "๐ŸŽง",
+  ":white_check_mark:": "โœ…",
+  ":confounded:": "๐Ÿ˜–",
+  ":arrow_right:": "โžก๏ธ",
+  ":angry:": "๐Ÿ˜ ",
+  ":grimacing:": "๐Ÿ˜ฌ",
+  ":star2:": "๐ŸŒŸ",
+  ":gun:": "๐Ÿ”ซ",
+  ":man_raising_hand_dark_skin_tone:": "๐Ÿ™‹๐Ÿฟโ€โ™‚",
+  ":man_raising_hand_medium_dark_skin_tone:": "๐Ÿ™‹๐Ÿพโ€โ™‚",
+  ":man_raising_hand_medium_skin_tone:": "๐Ÿ™‹๐Ÿฝโ€โ™‚",
+  ":man_raising_hand_medium_light_skin_tone:": "๐Ÿ™‹๐Ÿผโ€โ™‚",
+  ":man_raising_hand_light_skin_tone:": "๐Ÿ™‹๐Ÿปโ€โ™‚",
+  ":man_raising_hand:": "๐Ÿ™‹โ€โ™‚",
+  ":person_raising_hand_dark_skin_tone:": "๐Ÿ™‹๐Ÿฟ",
+  ":person_raising_hand_medium_dark_skin_tone:": "๐Ÿ™‹๐Ÿพ",
+  ":person_raising_hand_medium_skin_tone:": "๐Ÿ™‹๐Ÿฝ",
+  ":person_raising_hand_medium_light_skin_tone:": "๐Ÿ™‹๐Ÿผ",
+  ":person_raising_hand_light_skin_tone:": "๐Ÿ™‹๐Ÿป",
+  ":person_raising_hand:": "๐Ÿ™‹",
+  ":thumbsdown_dark_skin_tone:": "๐Ÿ‘Ž๐Ÿฟ",
+  ":thumbsdown_medium_dark_skin_tone:": "๐Ÿ‘Ž๐Ÿพ",
+  ":thumbsdown_medium_skin_tone:": "๐Ÿ‘Ž๐Ÿฝ",
+  ":thumbsdown_medium_light_skin_tone:": "๐Ÿ‘Ž๐Ÿผ",
+  ":thumbsdown_light_skin_tone:": "๐Ÿ‘Ž๐Ÿป",
+  ":thumbsdown:": "๐Ÿ‘Ž",
+  ":dancer_dark_skin_tone:": "๐Ÿ’ƒ๐Ÿฟ",
+  ":dancer_medium_dark_skin_tone:": "๐Ÿ’ƒ๐Ÿพ",
+  ":dancer_medium_skin_tone:": "๐Ÿ’ƒ๐Ÿฝ",
+  ":dancer_medium_light_skin_tone:": "๐Ÿ’ƒ๐Ÿผ",
+  ":dancer_light_skin_tone:": "๐Ÿ’ƒ๐Ÿป",
+  ":dancer:": "๐Ÿ’ƒ",
+  ":musical_note:": "๐ŸŽต",
+  ":no_mouth:": "๐Ÿ˜ถ",
+  ":dizzy:": "๐Ÿ’ซ",
+  ":fist_dark_skin_tone:": "โœŠ๐Ÿฟ",
+  ":fist_medium_dark_skin_tone:": "โœŠ๐Ÿพ",
+  ":fist_medium_skin_tone:": "โœŠ๐Ÿฝ",
+  ":fist_medium_light_skin_tone:": "โœŠ๐Ÿผ",
+  ":fist_light_skin_tone:": "โœŠ๐Ÿป",
+  ":fist:": "โœŠ",
+  ":point_down_dark_skin_tone:": "๐Ÿ‘‡๐Ÿฟ",
+  ":point_down_medium_dark_skin_tone:": "๐Ÿ‘‡๐Ÿพ",
+  ":point_down_medium_skin_tone:": "๐Ÿ‘‡๐Ÿฝ",
+  ":point_down_medium_light_skin_tone:": "๐Ÿ‘‡๐Ÿผ",
+  ":point_down_light_skin_tone:": "๐Ÿ‘‡๐Ÿป",
+  ":point_down:": "๐Ÿ‘‡",
+  ":red_circle:": "๐Ÿ”ด",
+  ":man_no_good_dark_skin_tone:": "๐Ÿ™…๐Ÿฟโ€โ™‚",
+  ":man_no_good_medium_dark_skin_tone:": "๐Ÿ™…๐Ÿพโ€โ™‚",
+  ":man_no_good_medium_skin_tone:": "๐Ÿ™…๐Ÿฝโ€โ™‚",
+  ":man_no_good_medium_light_skin_tone:": "๐Ÿ™…๐Ÿผโ€โ™‚",
+  ":man_no_good_light_skin_tone:": "๐Ÿ™…๐Ÿปโ€โ™‚",
+  ":man_no_good:": "๐Ÿ™…โ€โ™‚",
+  ":no_good_dark_skin_tone:": "๐Ÿ™…๐Ÿฟ",
+  ":no_good_medium_dark_skin_tone:": "๐Ÿ™…๐Ÿพ",
+  ":no_good_medium_skin_tone:": "๐Ÿ™…๐Ÿฝ",
+  ":no_good_medium_light_skin_tone:": "๐Ÿ™…๐Ÿผ",
+  ":no_good_light_skin_tone:": "๐Ÿ™…๐Ÿป",
+  ":no_good:": "๐Ÿ™…",
+  ":boom:": "๐Ÿ’ฅ",
+  ":copyright:": "ยฉ",
+  ":thought_balloon:": "๐Ÿ’ญ",
+  ":tongue:": "๐Ÿ‘…",
+  ":poop:": "๐Ÿ’ฉ",
+  ":cold_sweat:": "๐Ÿ˜ฐ",
+  ":gem:": "๐Ÿ’Ž",
+  ":ok_man_dark_skin_tone:": "๐Ÿ™†๐Ÿฟโ€โ™‚",
+  ":ok_man_medium_dark_skin_tone:": "๐Ÿ™†๐Ÿพโ€โ™‚",
+  ":ok_man_medium_skin_tone:": "๐Ÿ™†๐Ÿฝโ€โ™‚",
+  ":ok_man_medium_light_skin_tone:": "๐Ÿ™†๐Ÿผโ€โ™‚",
+  ":ok_man_light_skin_tone:": "๐Ÿ™†๐Ÿปโ€โ™‚",
+  ":ok_man:": "๐Ÿ™†โ€โ™‚",
+  ":ok_woman_dark_skin_tone:": "๐Ÿ™†๐Ÿฟ",
+  ":ok_woman_medium_dark_skin_tone:": "๐Ÿ™†๐Ÿพ",
+  ":ok_woman_medium_skin_tone:": "๐Ÿ™†๐Ÿฝ",
+  ":ok_woman_medium_light_skin_tone:": "๐Ÿ™†๐Ÿผ",
+  ":ok_woman_light_skin_tone:": "๐Ÿ™†๐Ÿป",
+  ":ok_woman:": "๐Ÿ™†",
+  ":pizza:": "๐Ÿ•",
+  ":joy_cat:": "๐Ÿ˜น",
+  ":sun_with_face:": "๐ŸŒž",
+  ":leaves:": "๐Ÿƒ",
+  ":sweat_drops:": "๐Ÿ’ฆ",
+  ":penguin:": "๐Ÿง",
+  ":zzz:": "๐Ÿ’ค",
+  ":woman_walking_dark_skin_tone:": "๐Ÿšถ๐Ÿฟโ€โ™€",
+  ":woman_walking_medium_dark_skin_tone:": "๐Ÿšถ๐Ÿพโ€โ™€",
+  ":woman_walking_medium_skin_tone:": "๐Ÿšถ๐Ÿฝโ€โ™€",
+  ":woman_walking_medium_light_skin_tone:": "๐Ÿšถ๐Ÿผโ€โ™€",
+  ":woman_walking_light_skin_tone:": "๐Ÿšถ๐Ÿปโ€โ™€",
+  ":woman_walking:": "๐Ÿšถโ€โ™€",
+  ":walking_dark_skin_tone:": "๐Ÿšถ๐Ÿฟ",
+  ":walking_medium_dark_skin_tone:": "๐Ÿšถ๐Ÿพ",
+  ":walking_medium_skin_tone:": "๐Ÿšถ๐Ÿฝ",
+  ":walking_medium_light_skin_tone:": "๐Ÿšถ๐Ÿผ",
+  ":walking_light_skin_tone:": "๐Ÿšถ๐Ÿป",
+  ":walking:": "๐Ÿšถ",
+  ":airplane:": "โœˆ๏ธ",
+  ":balloon:": "๐ŸŽˆ",
+  ":star:": "โญ๏ธ",
+  ":ribbon:": "๐ŸŽ€",
+  ":ballot_box_with_check:": "โ˜‘๏ธ",
+  ":worried:": "๐Ÿ˜Ÿ",
+  ":underage:": "๐Ÿ”ž",
+  ":fearful:": "๐Ÿ˜จ",
+  ":four_leaf_clover:": "๐Ÿ€",
+  ":hibiscus:": "๐ŸŒบ",
+  ":microphone:": "๐ŸŽค",
+  ":open_hands_dark_skin_tone:": "๐Ÿ‘๐Ÿฟ",
+  ":open_hands_medium_dark_skin_tone:": "๐Ÿ‘๐Ÿพ",
+  ":open_hands_medium_skin_tone:": "๐Ÿ‘๐Ÿฝ",
+  ":open_hands_medium_light_skin_tone:": "๐Ÿ‘๐Ÿผ",
+  ":open_hands_light_skin_tone:": "๐Ÿ‘๐Ÿป",
+  ":open_hands:": "๐Ÿ‘",
+  ":ghost:": "๐Ÿ‘ป",
+  ":palm_tree:": "๐ŸŒด",
+  ":bangbang:": "โ€ผ๏ธ",
+  ":nail_care_dark_skin_tone:": "๐Ÿ’…๐Ÿฟ",
+  ":nail_care_medium_dark_skin_tone:": "๐Ÿ’…๐Ÿพ",
+  ":nail_care_medium_skin_tone:": "๐Ÿ’…๐Ÿฝ",
+  ":nail_care_medium_light_skin_tone:": "๐Ÿ’…๐Ÿผ",
+  ":nail_care_light_skin_tone:": "๐Ÿ’…๐Ÿป",
+  ":nail_care:": "๐Ÿ’…",
+  ":x:": "โŒ",
+  ":alien:": "๐Ÿ‘ฝ",
+  ":bow_dark_skin_tone:": "๐Ÿ™‡๐Ÿฟ",
+  ":bow_medium_dark_skin_tone:": "๐Ÿ™‡๐Ÿพ",
+  ":bow_medium_skin_tone:": "๐Ÿ™‡๐Ÿฝ",
+  ":bow_medium_light_skin_tone:": "๐Ÿ™‡๐Ÿผ",
+  ":bow_light_skin_tone:": "๐Ÿ™‡๐Ÿป",
+  ":bow:": "๐Ÿ™‡",
+  ":cloud:": "โ˜๏ธ",
+  ":soccer:": "โšฝ๏ธ",
+  ":angel_dark_skin_tone:": "๐Ÿ‘ผ๐Ÿฟ",
+  ":angel_medium_dark_skin_tone:": "๐Ÿ‘ผ๐Ÿพ",
+  ":angel_medium_skin_tone:": "๐Ÿ‘ผ๐Ÿฝ",
+  ":angel_medium_light_skin_tone:": "๐Ÿ‘ผ๐Ÿผ",
+  ":angel_light_skin_tone:": "๐Ÿ‘ผ๐Ÿป",
+  ":angel:": "๐Ÿ‘ผ",
+  ":man_dancers:": "๐Ÿ‘ฏโ€โ™‚",
+  ":dancers:": "๐Ÿ‘ฏ",
+  ":exclamation:": "โ—",
+  ":snowflake:": "โ„๏ธ",
+  ":point_up_dark_skin_tone:": "โ˜๐Ÿฟ",
+  ":point_up_medium_dark_skin_tone:": "โ˜๐Ÿพ",
+  ":point_up_medium_skin_tone:": "โ˜๐Ÿฝ",
+  ":point_up_medium_light_skin_tone:": "โ˜๐Ÿผ",
+  ":point_up_light_skin_tone:": "โ˜๐Ÿป",
+  ":point_up:": "โ˜๏ธ",
+  ":kissing_smiling_eyes:": "๐Ÿ˜™",
+  ":rainbow:": "๐ŸŒˆ",
+  ":crescent_moon:": "๐ŸŒ™",
+  ":heart_decoration:": "๐Ÿ’Ÿ",
+  ":gift_heart:": "๐Ÿ’",
+  ":gift:": "๐ŸŽ",
+  ":beers:": "๐Ÿป",
+  ":anguished:": "๐Ÿ˜ง",
+  ":earth_africa:": "๐ŸŒ",
+  ":movie_camera:": "๐ŸŽฅ",
+  ":anchor:": "โš“๏ธ",
+  ":zap:": "โšก๏ธ",
+  ":clubs:": "โ™ฃ",
+  ":heavy_multiplication_x:": "โœ–๏ธ",
+  ":woman_runner_dark_skin_tone:": "๐Ÿƒ๐Ÿฟโ€โ™€",
+  ":woman_runner_medium_dark_skin_tone:": "๐Ÿƒ๐Ÿพโ€โ™€",
+  ":woman_runner_medium_skin_tone:": "๐Ÿƒ๐Ÿฝโ€โ™€",
+  ":woman_runner_medium_light_skin_tone:": "๐Ÿƒ๐Ÿผโ€โ™€",
+  ":woman_runner_light_skin_tone:": "๐Ÿƒ๐Ÿปโ€โ™€",
+  ":woman_runner": "๐Ÿƒโ€โ™€",
+  ":runner_dark_skin_tone:": "๐Ÿƒ๐Ÿฟ",
+  ":runner_medium_dark_skin_tone:": "๐Ÿƒ๐Ÿพ",
+  ":runner_medium_skin_tone:": "๐Ÿƒ๐Ÿฝ",
+  ":runner_medium_light_skin_tone:": "๐Ÿƒ๐Ÿผ",
+  ":runner_light_skin_tone:": "๐Ÿƒ๐Ÿป",
+  ":runner:": "๐Ÿƒ",
+  ":sunflower:": "๐ŸŒป",
+  ":earth_americas:": "๐ŸŒŽ",
+  ":bouquet:": "๐Ÿ’",
+  ":dog:": "๐Ÿถ",
+  ":moneybag:": "๐Ÿ’ฐ",
+  ":herb:": "๐ŸŒฟ",
+  ":couple:": "๐Ÿ‘ซ",
+  ":fallen_leaf:": "๐Ÿ‚",
+  ":tulip:": "๐ŸŒท",
+  ":birthday:": "๐ŸŽ‚",
+  ":cat:": "๐Ÿฑ",
+  ":coffee:": "โ˜•๏ธ",
+  ":dizzy_face:": "๐Ÿ˜ต",
+  ":point_up2_dark_skin_tone:": "๐Ÿ‘†๐Ÿฟ",
+  ":point_up2_medium_dark_skin_tone:": "๐Ÿ‘†๐Ÿพ",
+  ":point_up2_medium_skin_tone:": "๐Ÿ‘†๐Ÿฝ",
+  ":point_up2_medium_light_skin_tone:": "๐Ÿ‘†๐Ÿผ",
+  ":point_up2_light_skin_tone:": "๐Ÿ‘†๐Ÿป",
+  ":point_up_2:": "๐Ÿ‘†",
+  ":open_mouth:": "๐Ÿ˜ฎ",
+  ":hushed:": "๐Ÿ˜ฏ",
+  ":basketball:": "๐Ÿ€",
+  ":christmas_tree:": "๐ŸŽ„",
+  ":ring:": "๐Ÿ’",
+  ":full_moon_with_face:": "๐ŸŒ",
+  ":astonished:": "๐Ÿ˜ฒ",
+  ":two_women_holding_hands:": "๐Ÿ‘ญ",
+  ":money_with_wings:": "๐Ÿ’ธ",
+  ":crying_cat_face:": "๐Ÿ˜ฟ",
+  ":hear_no_evil:": "๐Ÿ™‰",
+  ":dash:": "๐Ÿ’จ",
+  ":cactus:": "๐ŸŒต",
+  ":hotsprings:": "โ™จ๏ธ",
+  ":telephone:": "โ˜Ž๏ธ",
+  ":maple_leaf:": "๐Ÿ",
+  ":princess_dark_skin_tone:": "๐Ÿ‘ธ๐Ÿฟ",
+  ":princess_medium_dark_skin_tone:": "๐Ÿ‘ธ๐Ÿพ",
+  ":princess_medium_skin_tone:": "๐Ÿ‘ธ๐Ÿป",
+  ":princess_medium_light_skin_tone:": "๐Ÿ‘ธ๐Ÿผ",
+  ":princess:": "๐Ÿ‘ธ",
+  ":man_massage_dark_skin_tone:": "๐Ÿ’†๐Ÿฟโ€โ™‚",
+  ":man_massage_medium_dark_skin_tone:": "๐Ÿ’†๐Ÿพโ€โ™‚",
+  ":man_massage_medium_skin_tone:": "๐Ÿ’†๐Ÿปโ€โ™‚",
+  ":man_massage_medium_light_skin_tone:": "๐Ÿ’†๐Ÿผโ€โ™‚",
+  ":man_massage:": "๐Ÿ’†โ€โ™‚",
+  ":massage_dark_skin_tone:": "๐Ÿ’†๐Ÿฟ",
+  ":massage_medium_dark_skin_tone:": "๐Ÿ’†๐Ÿพ",
+  ":massage_medium_skin_tone:": "๐Ÿ’†๐Ÿป",
+  ":massage_medium_light_skin_tone:": "๐Ÿ’†๐Ÿผ",
+  ":massage:": "๐Ÿ’†",
+  ":love_letter:": "๐Ÿ’Œ",
+  ":trophy:": "๐Ÿ†",
+  ":man_frowning_dark_skin_tone:": "๐Ÿ™๐Ÿฟโ€โ™‚",
+  ":man_frowning_medium_dark_skin_tone:": "๐Ÿ™๐Ÿพโ€โ™‚",
+  ":man_frowning_medium_skin_tone:": "๐Ÿ™๐Ÿฝโ€โ™‚",
+  ":man_frowning_medium_light_skin_tone:": "๐Ÿ™๐Ÿผโ€โ™‚",
+  ":man_frowning_light_skin_tone:": "๐Ÿ™๐Ÿปโ€โ™‚",
+  ":man_frowning:": "๐Ÿ™โ€โ™‚",
+  ":person_frowning_dark_skin_tone:": "๐Ÿ™๐Ÿฟ",
+  ":person_frowning_medium_dark_skin_tone:": "๐Ÿ™๐Ÿพ",
+  ":person_frowning_medium_skin_tone:": "๐Ÿ™๐Ÿฝ",
+  ":person_frowning_medium_light_skin_tone:": "๐Ÿ™๐Ÿผ",
+  ":person_frowning_light_skin_tone:": "๐Ÿ™๐Ÿป",
+  ":person_frowning:": "๐Ÿ™",
+  ":flag_us:": "๐Ÿ‡บ๐Ÿ‡ธ",
+  ":confetti_ball:": "๐ŸŽŠ",
+  ":blossom:": "๐ŸŒผ",
+  ":knife:": "๐Ÿ”ช",
+  ":lips:": "๐Ÿ‘„",
+  ":fries:": "๐ŸŸ",
+  ":doughnut:": "๐Ÿฉ",
+  ":frowning:": "๐Ÿ˜ฆ",
+  ":ocean:": "๐ŸŒŠ",
+  ":bomb:": "๐Ÿ’ฃ",
+  ":ok:": "๐Ÿ†—",
+  ":cyclone:": "๐ŸŒ€",
+  ":rocket:": "๐Ÿš€",
+  ":umbrella:": "โ˜”๏ธ",
+  ":couplekiss:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ",
+  ":couple_woman_kiss:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ",
+  ":couple_man_kiss:": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ",
+  ":couple_with_heart:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ",
+  ":girl_girl_love:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ",
+  ":man_man_love:": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ",
+  ":lollipop:": "๐Ÿญ",
+  ":clapper:": "๐ŸŽฌ",
+  ":pig:": "๐Ÿท",
+  ":smiling_imp:": "๐Ÿ˜ˆ",
+  ":imp:": "๐Ÿ‘ฟ",
+  ":bee:": "๐Ÿ",
+  ":kissing_cat:": "๐Ÿ˜ฝ",
+  ":anger:": "๐Ÿ’ข",
+  ":musical_score:": "๐ŸŽผ",
+  ":santa_dark_skin_tone:": "๐ŸŽ…๐Ÿฟ",
+  ":santa_medium_dark_skin_tone:": "๐ŸŽ…๐Ÿพ",
+  ":santa_medium_skin_tone:": "๐ŸŽ…๐Ÿฝ",
+  ":santa_medium_light_skin_tone:": "๐ŸŽ…๐Ÿผ",
+  ":santa_light_skin_tone:": "๐ŸŽ…๐Ÿป",
+  ":santa:": "๐ŸŽ…",
+  ":earth_asia:": "๐ŸŒ",
+  ":football:": "๐Ÿˆ",
+  ":guitar:": "๐ŸŽธ",
+  ":diamonds:": "โ™ฆ",
+  ":panda_face:": "๐Ÿผ",
+  ":speech_balloon:": "๐Ÿ’ฌ",
+  ":strawberry:": "๐Ÿ“",
+  ":smirk_cat:": "๐Ÿ˜ผ",
+  ":banana:": "๐ŸŒ",
+  ":watermelon:": "๐Ÿ‰",
+  ":snowman:": "โ˜ƒ๏ธ",
+  ":smile_cat:": "๐Ÿ˜ธ",
+  ":spades:": "โ™ ",
+  ":top:": "๐Ÿ”",
+  ":eggplant:": "๐Ÿ†",
+  ":crystal_ball:": "๐Ÿ”ฎ",
+  ":fork_and_knife:": "๐Ÿด",
+  ":calling:": "๐Ÿ“ฒ",
+  ":iphone:": "๐Ÿ“ฑ",
+  ":partly_sunny:": "โ›…๏ธ",
+  ":warning:": "โš ๏ธ",
+  ":scream_cat:": "๐Ÿ™€",
+  ":small_orange_diamond:": "๐Ÿ”ธ",
+  ":baby_dark_skin_tone:": "๐Ÿ‘ถ๐Ÿฟ",
+  ":baby_medium_dark_skin_tone:": "๐Ÿ‘ถ๐Ÿพ",
+  ":baby_medium_skin_tone:": "๐Ÿ‘ถ๐Ÿฝ",
+  ":baby_medium_light_skin_tone:": "๐Ÿ‘ถ๐Ÿผ",
+  ":baby_light_skin_tone:": "๐Ÿ‘ถ๐Ÿป",
+  ":baby:": "๐Ÿ‘ถ",
+  ":feet:": "๐Ÿพ",
+  ":footprints:": "๐Ÿ‘ฃ",
+  ":beer:": "๐Ÿบ",
+  ":wine_glass:": "๐Ÿท",
+  ":o:": "โญ•๏ธ",
+  ":video_camera:": "๐Ÿ“น",
+  ":rabbit:": "๐Ÿฐ",
+  ":tropical_drink:": "๐Ÿน",
+  ":smoking:": "๐Ÿšฌ",
+  ":space_invader:": "๐Ÿ‘พ",
+  ":peach:": "๐Ÿ‘",
+  ":snake:": "๐Ÿ",
+  ":turtle:": "๐Ÿข",
+  ":cherries:": "๐Ÿ’",
+  ":kissing:": "๐Ÿ˜—",
+  ":frog:": "๐Ÿธ",
+  ":milky_way:": "๐ŸŒŒ",
+  ":rotating_light:": "๐Ÿšจ",
+  ":hatching_chick:": "๐Ÿฃ",
+  ":closed_book:": "๐Ÿ“•",
+  ":candy:": "๐Ÿฌ",
+  ":hamburger:": "๐Ÿ”",
+  ":bear:": "๐Ÿป",
+  ":tiger:": "๐Ÿฏ",
+  ":red_car:": "๐Ÿš—",
+  ":fast_forward:": "โฉ",
+  ":icecream:": "๐Ÿฆ",
+  ":pineapple:": "๐Ÿ",
+  ":ear_of_rice:": "๐ŸŒพ",
+  ":syringe:": "๐Ÿ’‰",
+  ":put_litter_in_its_place:": "๐Ÿšฎ",
+  ":chocolate_bar:": "๐Ÿซ",
+  ":black_small_square:": "โ–ช๏ธ",
+  ":tv:": "๐Ÿ“บ",
+  ":pill:": "๐Ÿ’Š",
+  ":octopus:": "๐Ÿ™",
+  ":jack_o_lantern:": "๐ŸŽƒ",
+  ":grapes:": "๐Ÿ‡",
+  ":smiley_cat:": "๐Ÿ˜บ",
+  ":cd:": "๐Ÿ’ฟ",
+  ":cocktail:": "๐Ÿธ",
+  ":cake:": "๐Ÿฐ",
+  ":video_game:": "๐ŸŽฎ",
+  ":tm:": "โ„ข",
+  ":arrow_down:": "โฌ‡๏ธ",
+  ":no_entry_sign:": "๐Ÿšซ",
+  ":lipstick:": "๐Ÿ’„",
+  ":whale:": "๐Ÿณ",
+  ":pencil:": "๐Ÿ“",
+  ":registered:": "ยฎ",
+  ":cookie:": "๐Ÿช",
+  ":dolphin:": "๐Ÿฌ",
+  ":loud_sound:": "๐Ÿ”Š",
+  ":man_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟ",
+  ":man_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพ",
+  ":man_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝ",
+  ":man_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผ",
+  ":man_light_skin_tone:": "๐Ÿ‘จ๐Ÿป",
+  ":man:": "๐Ÿ‘จ",
+  ":hatched_chick:": "๐Ÿฅ",
+  ":monkey:": "๐Ÿ’",
+  ":books:": "๐Ÿ“š",
+  ":japanese_ogre:": "๐Ÿ‘น",
+  ":woman_guardsman_dark_skin_tone:": "๐Ÿ’‚๐Ÿฟโ€โ™€",
+  ":woman_guardsman_medium_dark_skin_tone:": "๐Ÿ’‚๐Ÿพโ€โ™€",
+  ":woman_guardsman_medium_skin_tone:": "๐Ÿ’‚๐Ÿฝโ€โ™€",
+  ":woman_guardsman_medium_light_skin_tone:": "๐Ÿ’‚๐Ÿผโ€โ™€",
+  ":woman_guardsman_light_skin_tone:": "๐Ÿ’‚๐Ÿปโ€โ™€",
+  ":woman_guardsman:": "๐Ÿ’‚โ€โ™€",
+  ":guardsman_dark_skin_tone:": "๐Ÿ’‚๐Ÿฟ",
+  ":guardsman_medium_dark_skin_tone:": "๐Ÿ’‚๐Ÿพ",
+  ":guardsman_medium_skin_tone:": "๐Ÿ’‚๐Ÿฝ",
+  ":guardsman_medium_light_skin_tone:": "๐Ÿ’‚๐Ÿผ",
+  ":guardsman_light_skin_tone:": "๐Ÿ’‚๐Ÿป",
+  ":guardsman:": "๐Ÿ’‚",
+  ":loudspeaker:": "๐Ÿ“ข",
+  ":scissors:": "โœ‚๏ธ",
+  ":girl_dark_skin_tone:": "๐Ÿ‘ง๐Ÿฟ",
+  ":girl_medium_dark_skin_tone:": "๐Ÿ‘ง๐Ÿพ",
+  ":girl_medium_skin_tone:": "๐Ÿ‘ง๐Ÿฝ",
+  ":girl_medium_light_skin_tone:": "๐Ÿ‘ง๐Ÿผ",
+  ":girl_light_skin_tone:": "๐Ÿ‘ง๐Ÿป",
+  ":girl:": "๐Ÿ‘ง",
+  ":mortar_board:": "๐ŸŽ“",
+  ":flag_fr:": "๐Ÿ‡ซ๐Ÿ‡ท",
+  ":baseball:": "โšพ๏ธ",
+  ":vertical_traffic_light:": "๐Ÿšฆ",
+  ":woman_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟ",
+  ":woman_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพ",
+  ":woman_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝ",
+  ":woman_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผ",
+  ":woman_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿป",
+  ":woman:": "๐Ÿ‘ฉ",
+  ":fireworks:": "๐ŸŽ†",
+  ":stars:": "๐ŸŒ ",
+  ":sos:": "๐Ÿ†˜",
+  ":mushroom:": "๐Ÿ„",
+  ":pouting_cat:": "๐Ÿ˜พ",
+  ":left_luggage:": "๐Ÿ›…",
+  ":high_heel:": "๐Ÿ‘ ",
+  ":dart:": "๐ŸŽฏ",
+  ":man_swimmer_dark_skin_tone:": "๐ŸŠ๐Ÿฟโ€โ™€",
+  ":man_swimmer_medium_dark_skin_tone:": "๐ŸŠ๐Ÿพโ€โ™€",
+  ":woman_swimmer_medium_skin_tone:": "๐ŸŠ๐Ÿฝโ€โ™€",
+  ":woman_swimmer_medium_light_skin_tone:": "๐ŸŠ๐Ÿผโ€โ™€",
+  ":woman_swimmer_light_skin_tone:": "๐ŸŠ๐Ÿปโ€โ™€",
+  ":woman_swimmer:": "๐ŸŠโ€โ™€",
+  ":swimmer_dark_skin_tone:": "๐ŸŠ๐Ÿฟ",
+  ":swimmer_medium_dark_skin_tone:": "๐ŸŠ๐Ÿพ",
+  ":swimmer_medium_skin_tone:": "๐ŸŠ๐Ÿฝ",
+  ":swimmer_medium_light_skin_tone:": "๐ŸŠ๐Ÿผ",
+  ":swimmer_light_skin_tone:": "๐ŸŠ๐Ÿป",
+  ":swimmer:": "๐ŸŠโ€โ™‚๏ธ",
+  ":key:": "๐Ÿ”‘",
+  ":bikini:": "๐Ÿ‘™",
+  ":family:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ",
+  ":pencil2:": "โœ๏ธ",
+  ":elephant:": "๐Ÿ˜",
+  ":droplet:": "๐Ÿ’ง",
+  ":seedling:": "๐ŸŒฑ",
+  ":apple:": "๐ŸŽ",
+  ":cool:": "๐Ÿ†’",
+  ":telephone_receiver:": "๐Ÿ“ž",
+  ":dollar:": "๐Ÿ’ต",
+  ":house_with_garden:": "๐Ÿก",
+  ":book:": "๐Ÿ“–",
+  ":man_haircut_dark_skin_tone:": "๐Ÿ’‡๐Ÿฟโ€โ™‚",
+  ":man_haircut_medium_dark_skin_tone:": "๐Ÿ’‡๐Ÿพโ€โ™‚",
+  ":man_haircut_medium_skin_tone:": "๐Ÿ’‡๐Ÿฝโ€โ™‚",
+  ":man_haircut_medium_light_skin_tone:": "๐Ÿ’‡๐Ÿผโ€โ™‚",
+  ":man_haircut_light_skin_tone:": "๐Ÿ’‡๐Ÿปโ€โ™‚",
+  ":man_haircut:": "๐Ÿ’‡โ€โ™‚",
+  ":haircut_dark_skin_tone:": "๐Ÿ’‡๐Ÿฟ",
+  ":haircut_medium_dark_skin_tone:": "๐Ÿ’‡๐Ÿพ",
+  ":haircut_medium_skin_tone:": "๐Ÿ’‡๐Ÿฝ",
+  ":haircut_medium_light_skin_tone:": "๐Ÿ’‡๐Ÿผ",
+  ":haircut_light_skin_tone:": "๐Ÿ’‡๐Ÿป",
+  ":haircut:": "๐Ÿ’‡",
+  ":computer:": "๐Ÿ’ป",
+  ":bulb:": "๐Ÿ’ก",
+  ":question:": "โ“",
+  ":back:": "๐Ÿ”™",
+  ":boy_dark_skin_tone:": "๐Ÿ‘ฆ๐Ÿฟ",
+  ":boy_medium_dark_skin_tone:": "๐Ÿ‘ฆ๐Ÿพ",
+  ":boy_medium_skin_tone:": "๐Ÿ‘ฆ๐Ÿฝ",
+  ":boy_medium_light_skin_tone:": "๐Ÿ‘ฆ๐Ÿผ",
+  ":boy_light_skin_tone:": "๐Ÿ‘ฆ๐Ÿป",
+  ":boy:": "๐Ÿ‘ฆ",
+  ":closed_lock_with_key:": "๐Ÿ”",
+  ":man_pouting_dark_skin_tone:": "๐Ÿ™Ž๐Ÿฟโ€โ™‚",
+  ":man_pouting_medium_dark_skin_tone:": "๐Ÿ™Ž๐Ÿพโ€โ™‚",
+  ":man_pouting_medium_skin_tone:": "๐Ÿ™Ž๐Ÿฝโ€โ™‚",
+  ":man_pouting_medium_light_skin_tone:": "๐Ÿ™Ž๐Ÿผโ€โ™‚",
+  ":man_pouting_light_skin_tone:": "๐Ÿ™Ž๐Ÿปโ€โ™‚",
+  ":man_pouting:": "๐Ÿ™Žโ€โ™‚",
+  ":pouting_dark_skin_tone:": "๐Ÿ™Ž๐Ÿฟ",
+  ":pouting_medium_dark_skin_tone:": "๐Ÿ™Ž๐Ÿพ",
+  ":pouting_medium_skin_tone:": "๐Ÿ™Ž๐Ÿฝ",
+  ":pouting_medium_light_skin_tone:": "๐Ÿ™Ž๐Ÿผ",
+  ":pouting_light_skin_tone:": "๐Ÿ™Ž๐Ÿป",
+  ":pouting:": "๐Ÿ™Ž",
+  ":tangerine:": "๐ŸŠ",
+  ":left_right_arrow:": "โ†”",
+  ":sunrise:": "๐ŸŒ…",
+  ":poultry_leg:": "๐Ÿ—",
+  ":blue_circle:": "๐Ÿ”ต",
+  ":oncoming_automobile:": "๐Ÿš˜",
+  ":shaved_ice:": "๐Ÿง",
+  ":flag_it:": "๐Ÿ‡ฎ๐Ÿ‡น",
+  ":bird:": "๐Ÿฆ",
+  ":flag_gb:": "๐Ÿ‡ฌ๐Ÿ‡ง",
+  ":first_quarter_moon_with_face:": "๐ŸŒ›",
+  ":eyeglasses:": "๐Ÿ‘“",
+  ":goat:": "๐Ÿ",
+  ":night_with_stars:": "๐ŸŒƒ",
+  ":older_woman_dark_skin_tone:": "๐Ÿ‘ต๐Ÿฟ",
+  ":older_woman_medium_dark_skin_tone:": "๐Ÿ‘ต๐Ÿพ",
+  ":older_woman_medium_skin_tone:": "๐Ÿ‘ต๐Ÿฝ",
+  ":older_woman_medium_light_skin_tone:": "๐Ÿ‘ต๐Ÿผ",
+  ":older_woman_light_skin_tone:": "๐Ÿ‘ต๐Ÿป",
+  ":older_woman:": "๐Ÿ‘ต",
+  ":black_circle:": "โšซ๏ธ",
+  ":new_moon:": "๐ŸŒ‘",
+  ":two_men_holding_hands:": "๐Ÿ‘ฌ",
+  ":white_circle:": "โšช๏ธ",
+  ":customs:": "๐Ÿ›ƒ",
+  ":tropical_fish:": "๐Ÿ ",
+  ":house:": "๐Ÿ ",
+  ":arrows_clockwise:": "๐Ÿ”ƒ",
+  ":last_quarter_moon_with_face:": "๐ŸŒœ",
+  ":round_pushpin:": "๐Ÿ“",
+  ":full_moon:": "๐ŸŒ•",
+  ":athletic_shoe:": "๐Ÿ‘Ÿ",
+  ":lemon:": "๐Ÿ‹",
+  ":baby_bottle:": "๐Ÿผ",
+  ":art:": "๐ŸŽจ",
+  ":envelope:": "โœ‰๏ธ",
+  ":spaghetti:": "๐Ÿ",
+  ":wind_chime:": "๐ŸŽ",
+  ":fish_cake:": "๐Ÿฅ",
+  ":evergreen_tree:": "๐ŸŒฒ",
+  ":up:": "๐Ÿ†™",
+  ":arrow_up:": "โฌ†๏ธ",
+  ":arrow_upper_right:": "โ†—๏ธ",
+  ":arrow_lower_right:": "โ†˜๏ธ",
+  ":arrow_lower_left:": "โ†™๏ธ",
+  ":performing_arts:": "๐ŸŽญ",
+  ":nose_dark_skin_tone:": "๐Ÿ‘ƒ๐Ÿฟ",
+  ":nose_medium_dark_skin_tone:": "๐Ÿ‘ƒ๐Ÿพ",
+  ":nose_medium_skin_tone:": "๐Ÿ‘ƒ๐Ÿฝ",
+  ":nose_medium_light_skin_tone:": "๐Ÿ‘ƒ๐Ÿผ",
+  ":nose_light_skin_tone:": "๐Ÿ‘ƒ๐Ÿป",
+  ":nose:": "๐Ÿ‘ƒ",
+  ":pig_nose:": "๐Ÿฝ",
+  ":fish:": "๐ŸŸ",
+  ":woman_with_turban_dark_skin_tone:": "๐Ÿ‘ณ๐Ÿฟโ€โ™€",
+  ":woman_with_turban_medium_dark_skin_tone:": "๐Ÿ‘ณ๐Ÿพโ€โ™€",
+  ":woman_with_turban_medium_skin_tone:": "๐Ÿ‘ณ๐Ÿฝโ€โ™€",
+  ":woman_with_turban_medium_light_skin_tone:": "๐Ÿ‘ณ๐Ÿผโ€โ™€",
+  ":woman_with_turban_light_skin_tone:": "๐Ÿ‘ณ๐Ÿปโ€โ™€",
+  ":woman_with_turban:": "๐Ÿ‘ณโ€โ™€",
+  ":person_with_turban_dark_skin_tone:": "๐Ÿ‘ณ๐Ÿฟ",
+  ":person_with_turban_medium_dark_skin_tone:": "๐Ÿ‘ณ๐Ÿพ",
+  ":person_with_turban_medium_skin_tone:": "๐Ÿ‘ณ๐Ÿฝ",
+  ":person_with_turban_medium_light_skin_tone:": "๐Ÿ‘ณ๐Ÿผ",
+  ":person_with_turban_light_skin_tone:": "๐Ÿ‘ณ๐Ÿป",
+  ":person_with_turban:": "๐Ÿ‘ณ",
+  ":koala:": "๐Ÿจ",
+  ":ear_dark_skin_tone:": "๐Ÿ‘‚๐Ÿฟ",
+  ":ear_medium_dark_skin_tone:": "๐Ÿ‘‚๐Ÿพ",
+  ":ear_medium_skin_tone:": "๐Ÿ‘‚๐Ÿฝ",
+  ":ear_medium_light_skin_tone:": "๐Ÿ‘‚๐Ÿผ",
+  ":ear_light_skin_tone:": "๐Ÿ‘‚๐Ÿป",
+  ":ear:": "๐Ÿ‘‚",
+  ":eight_spoked_asterisk:": "โœณ๏ธ",
+  ":small_blue_diamond:": "๐Ÿ”น",
+  ":shower:": "๐Ÿšฟ",
+  ":bug:": "๐Ÿ›",
+  ":ramen:": "๐Ÿœ",
+  ":tophat:": "๐ŸŽฉ",
+  ":bride_with_veil_dark_skin_tone:": "๐Ÿ‘ฐ๐Ÿฟ",
+  ":bride_with_veil_medium_dark_skin_tone:": "๐Ÿ‘ฐ๐Ÿพ",
+  ":bride_with_veil_medium_skin_tone:": "๐Ÿ‘ฐ๐Ÿฝ",
+  ":bride_with_veil_medium_light_skin_tone:": "๐Ÿ‘ฐ๐Ÿผ",
+  ":bride_with_veil_light_skin_tone:": "๐Ÿ‘ฐ๐Ÿป",
+  ":bride_with_veil:": "๐Ÿ‘ฐ",
+  ":fuelpump:": "โ›ฝ๏ธ",
+  ":checkered_flag:": "๐Ÿ",
+  ":horse:": "๐Ÿด",
+  ":watch:": "โŒš๏ธ",
+  ":monkey_face:": "๐Ÿต",
+  ":baby_symbol:": "๐Ÿšผ",
+  ":new:": "๐Ÿ†•",
+  ":free:": "๐Ÿ†“",
+  ":sparkler:": "๐ŸŽ‡",
+  ":corn:": "๐ŸŒฝ",
+  ":tennis:": "๐ŸŽพ",
+  ":alarm_clock:": "โฐ",
+  ":battery:": "๐Ÿ”‹",
+  ":grey_exclamation:": "โ•",
+  ":wolf:": "๐Ÿบ",
+  ":moyai:": "๐Ÿ—ฟ",
+  ":cow:": "๐Ÿฎ",
+  ":mega:": "๐Ÿ“ฃ",
+  ":older_man_dark_skin_tone:": "๐Ÿ‘ด๐Ÿฟ",
+  ":older_man_medium_dark_skin_tone:": "๐Ÿ‘ด๐Ÿพ",
+  ":older_man_medium_skin_tone:": "๐Ÿ‘ด๐Ÿฝ",
+  ":older_man_medium_light_skin_tone:": "๐Ÿ‘ด๐Ÿผ",
+  ":older_man_light_skin_tone:": "๐Ÿ‘ด๐Ÿป",
+  ":older_man:": "๐Ÿ‘ด",
+  ":dress:": "๐Ÿ‘—",
+  ":link:": "๐Ÿ”—",
+  ":chicken:": "๐Ÿ”",
+  ":cooking:": "๐Ÿณ",
+  ":whale2:": "๐Ÿ‹",
+  ":arrow_upper_left:": "โ†–๏ธ",
+  ":deciduous_tree:": "๐ŸŒณ",
+  ":bento:": "๐Ÿฑ",
+  ":pushpin:": "๐Ÿ“Œ",
+  ":soon:": "๐Ÿ”œ",
+  ":repeat:": "๐Ÿ”",
+  ":dragon:": "๐Ÿ‰",
+  ":hamster:": "๐Ÿน",
+  ":golf:": "โ›ณ๏ธ",
+  ":woman_surfer_dark_skin_tone:": "๐Ÿ„๐Ÿฟโ€โ™€",
+  ":woman_surfer_medium_dark_skin_tone:": "๐Ÿ„๐Ÿพโ€โ™€",
+  ":woman_surfer_medium_skin_tone:": "๐Ÿ„๐Ÿฝโ€โ™€",
+  ":woman_surfer_medium_light_skin_tone:": "๐Ÿ„๐Ÿผโ€โ™€",
+  ":woman_surfer_light_skin_tone:": "๐Ÿ„๐Ÿปโ€โ™€",
+  ":woman_surfer:": "๐Ÿ„โ€โ™€",
+  ":surfer_dark_skin_tone:": "๐Ÿ„๐Ÿฟ",
+  ":surfer_medium_dark_skin_tone:": "๐Ÿ„๐Ÿพ",
+  ":surfer_medium_skin_tone:": "๐Ÿ„๐Ÿฝ",
+  ":surfer_medium_light_skin_tone:": "๐Ÿ„๐Ÿผ",
+  ":surfer_light_skin_tone:": "๐Ÿ„๐Ÿป",
+  ":surfer:": "๐Ÿ„โ€โ™‚๏ธ",
+  ":mouse:": "๐Ÿญ",
+  ":waxing_crescent_moon:": "๐ŸŒ’",
+  ":blue_car:": "๐Ÿš™",
+  ":a:": "๐Ÿ…ฐ๏ธ",
+  ":interrobang:": "โ‰๏ธ",
+  ":u5272:": "๐Ÿˆน",
+  ":electric_plug:": "๐Ÿ”Œ",
+  ":first_quarter_moon:": "๐ŸŒ“",
+  ":cancer:": "โ™‹๏ธ",
+  ":trident:": "๐Ÿ”ฑ",
+  ":bread:": "๐Ÿž",
+  ":woman_cop_dark_skin_tone:": "๐Ÿ‘ฎ๐Ÿฟโ€โ™€",
+  ":woman_cop_medium_dark_skin_tone:": "๐Ÿ‘ฎ๐Ÿพโ€โ™€",
+  ":woman_cop_medium_skin_tone:": "๐Ÿ‘ฎ๐Ÿฝโ€โ™€",
+  ":woman_cop_medium_light_skin_tone:": "๐Ÿ‘ฎ๐Ÿผโ€โ™€",
+  ":woman_cop_light_skin_tone:": "๐Ÿ‘ฎ๐Ÿปโ€โ™€",
+  ":woman_cop:": "๐Ÿ‘ฎโ€โ™€",
+  ":cop_dark_skin_tone:": "๐Ÿ‘ฎ๐Ÿฟ",
+  ":cop_medium_dark_skin_tone:": "๐Ÿ‘ฎ๐Ÿพ",
+  ":cop_medium_skin_tone:": "๐Ÿ‘ฎ๐Ÿฝ",
+  ":cop_medium_light_skin_tone:": "๐Ÿ‘ฎ๐Ÿผ",
+  ":cop_light_skin_tone:": "๐Ÿ‘ฎ๐Ÿป",
+  ":cop:": "๐Ÿ‘ฎ",
+  ":tea:": "๐Ÿต",
+  ":fishing_pole_and_fish:": "๐ŸŽฃ",
+  ":waxing_gibbous_moon:": "๐ŸŒ”",
+  ":bike:": "๐Ÿšฒ",
+  ":bust_in_silhouette:": "๐Ÿ‘ค",
+  ":rice:": "๐Ÿš",
+  ":radio:": "๐Ÿ“ป",
+  ":baby_chick:": "๐Ÿค",
+  ":arrow_heading_down:": "โคต๏ธ",
+  ":waning_crescent_moon:": "๐ŸŒ˜",
+  ":arrow_up_down:": "โ†•๏ธ",
+  ":e:": "๐Ÿ‡ช",
+  ":last_quarter_moon:": "๐ŸŒ—",
+  ":radio_button:": "๐Ÿ”˜",
+  ":sheep:": "๐Ÿ‘",
+  ":woman_blond_hair_dark_skin_tone:": "๐Ÿ‘ฑ๐Ÿฟโ€โ™€",
+  ":woman_blond_hair_medium_dark_skin_tone:": "๐Ÿ‘ฑ๐Ÿพโ€โ™€",
+  ":woman_blond_hair_medium_skin_tone:": "๐Ÿ‘ฑ๐Ÿฝโ€โ™€",
+  ":woman_blond_hair_medium_light_skin_tone:": "๐Ÿ‘ฑ๐Ÿผโ€โ™€",
+  ":woman_blond_hair_light_skin_tone:": "๐Ÿ‘ฑ๐Ÿปโ€โ™€",
+  ":woman_blond_hair:": "๐Ÿ‘ฑโ€โ™€",
+  ":blond_hair_dark_skin_tone:": "๐Ÿ‘ฑ๐Ÿฟ",
+  ":blond_hair_medium_dark_skin_tone:": "๐Ÿ‘ฑ๐Ÿพ",
+  ":blond_hair_medium_skin_tone:": "๐Ÿ‘ฑ๐Ÿฝ",
+  ":blond_hair_medium_light_skin_tone:": "๐Ÿ‘ฑ๐Ÿผ",
+  ":blond_hair_light_skin_tone:": "๐Ÿ‘ฑ๐Ÿป",
+  ":blond_hair:": "๐Ÿ‘ฑ",
+  ":waning_gibbous_moon:": "๐ŸŒ–",
+  ":lock:": "๐Ÿ”’",
+  ":green_apple:": "๐Ÿ",
+  ":japanese_goblin:": "๐Ÿ‘บ",
+  ":curly_loop:": "โžฐ",
+  ":triangular_flag_on_post:": "๐Ÿšฉ",
+  ":arrows_counterclockwise:": "๐Ÿ”„",
+  ":racehorse:": "๐ŸŽ",
+  ":fried_shrimp:": "๐Ÿค",
+  ":sunrise_over_mountains:": "๐ŸŒ„",
+  ":volcano:": "๐ŸŒ‹",
+  ":rooster:": "๐Ÿ“",
+  ":inbox_tray:": "๐Ÿ“ฅ",
+  ":wedding:": "๐Ÿ’’",
+  ":sushi:": "๐Ÿฃ",
+  ":wavy_dash:": "ใ€ฐ๏ธ",
+  ":ice_cream:": "๐Ÿจ",
+  ":rewind:": "โช",
+  ":tomato:": "๐Ÿ…",
+  ":rabbit2:": "๐Ÿ‡",
+  ":eight_pointed_black_star:": "โœด๏ธ",
+  ":small_red_triangle:": "๐Ÿ”บ",
+  ":high_brightness:": "๐Ÿ”†",
+  ":heavy_plus_sign:": "โž•",
+  ":man_with_gua_pi_mao_dark_skin_tone:": "๐Ÿ‘ฒ๐Ÿฟ",
+  ":man_with_gua_pi_mao_medium_dark_skin_tone:": "๐Ÿ‘ฒ๐Ÿพ",
+  ":man_with_gua_pi_mao_medium_skin_tone:": "๐Ÿ‘ฒ๐Ÿฝ",
+  ":man_with_gua_pi_mao_medium_light_skin_tone:": "๐Ÿ‘ฒ๐Ÿผ",
+  ":man_with_gua_pi_mao_light_skin_tone:": "๐Ÿ‘ฒ๐Ÿป",
+  ":man_with_gua_pi_mao:": "๐Ÿ‘ฒ",
+  ":convenience_store:": "๐Ÿช",
+  ":busts_in_silhouette:": "๐Ÿ‘ฅ",
+  ":beetle:": "๐Ÿž",
+  ":small_red_triangle_down:": "๐Ÿ”ป",
+  ":flag_de:": "๐Ÿ‡ฉ๐Ÿ‡ช",
+  ":arrow_heading_up:": "โคด๏ธ",
+  ":name_badge:": "๐Ÿ“›",
+  ":bath_dark_skin_tone:": "๐Ÿ›€๐Ÿฟ",
+  ":bath_medium_dark_skin_tone:": "๐Ÿ›€๐Ÿพ",
+  ":bath_medium_skin_tone:": "๐Ÿ›€๐Ÿฝ",
+  ":bath_medium_light_skin_tone:": "๐Ÿ›€๐Ÿผ",
+  ":bath_light_skin_tone:": "๐Ÿ›€๐Ÿป",
+  ":bath:": "๐Ÿ›€",
+  ":no_entry:": "โ›”๏ธ",
+  ":crocodile:": "๐ŸŠ",
+  ":chestnut:": "๐ŸŒฐ",
+  ":dog2:": "๐Ÿ•",
+  ":cat2:": "๐Ÿˆ",
+  ":hammer:": "๐Ÿ”จ",
+  ":meat_on_bone:": "๐Ÿ–",
+  ":shell:": "๐Ÿš",
+  ":sparkle:": "โ‡๏ธ",
+  ":sailboat:": "โ›ต๏ธ",
+  ":b:": "๐Ÿ…ฑ๏ธ",
+  ":m:": "โ“‚๏ธ",
+  ":poodle:": "๐Ÿฉ",
+  ":aquarius:": "โ™’๏ธ",
+  ":stew:": "๐Ÿฒ",
+  ":jeans:": "๐Ÿ‘–",
+  ":honey_pot:": "๐Ÿฏ",
+  ":musical_keyboard:": "๐ŸŽน",
+  ":unlock:": "๐Ÿ”“",
+  ":black_nib:": "โœ’๏ธ",
+  ":statue_of_liberty:": "๐Ÿ—ฝ",
+  ":heavy_dollar_sign:": "๐Ÿ’ฒ",
+  ":snowboarder:": "๐Ÿ‚",
+  ":white_flower:": "๐Ÿ’ฎ",
+  ":necktie:": "๐Ÿ‘”",
+  ":diamond_shape_with_a_dot_inside:": "๐Ÿ’ ",
+  ":aries:": "โ™ˆ๏ธ",
+  ":womens:": "๐Ÿšบ",
+  ":ant:": "๐Ÿœ",
+  ":scorpius:": "โ™๏ธ",
+  ":city_sunset:": "๐ŸŒ†",
+  ":hourglass_flowing_sand:": "โณ",
+  ":o2:": "๐Ÿ…พ๏ธ",
+  ":dragon_face:": "๐Ÿฒ",
+  ":snail:": "๐ŸŒ",
+  ":dvd:": "๐Ÿ“€",
+  ":shirt:": "๐Ÿ‘•",
+  ":game_die:": "๐ŸŽฒ",
+  ":heavy_minus_sign:": "โž–",
+  ":dolls:": "๐ŸŽŽ",
+  ":sagittarius:": "โ™๏ธ",
+  ":8ball:": "๐ŸŽฑ",
+  ":bus:": "๐ŸšŒ",
+  ":custard:": "๐Ÿฎ",
+  ":crossed_flags:": "๐ŸŽŒ",
+  ":part_alternation_mark:": "ใ€ฝ๏ธ",
+  ":camel:": "๐Ÿซ",
+  ":curry:": "๐Ÿ›",
+  ":steam_locomotive:": "๐Ÿš‚",
+  ":hospital:": "๐Ÿฅ",
+  ":flag_jp:": "๐Ÿ‡ฏ๐Ÿ‡ต",
+  ":large_blue_diamond:": "๐Ÿ”ท",
+  ":tanabata_tree:": "๐ŸŽ‹",
+  ":bell:": "๐Ÿ””",
+  ":leo:": "โ™Œ๏ธ",
+  ":gemini:": "โ™Š๏ธ",
+  ":pear:": "๐Ÿ",
+  ":large_orange_diamond:": "๐Ÿ”ถ",
+  ":taurus:": "โ™‰๏ธ",
+  ":globe_with_meridians:": "๐ŸŒ",
+  ":door:": "๐Ÿšช",
+  ":clock6:": "๐Ÿ••",
+  ":oncoming_police_car:": "๐Ÿš”",
+  ":envelope_with_arrow:": "๐Ÿ“ฉ",
+  ":closed_umbrella:": "๐ŸŒ‚",
+  ":saxophone:": "๐ŸŽท",
+  ":church:": "โ›ช๏ธ",
+  ":woman_bicyclist_dark_skin_tone:": "๐Ÿšด๐Ÿฟโ€โ™€",
+  ":woman_bicyclist_medium_dark_skin_tone:": "๐Ÿšด๐Ÿพโ€โ™€",
+  ":woman_bicyclist_medium_skin_tone:": "๐Ÿšด๐Ÿฝโ€โ™€",
+  ":woman_bicyclist_medium_light_skin_tone:": "๐Ÿšด๐Ÿผโ€โ™€",
+  ":woman_bicyclist_light_skin_tone:": "๐Ÿšด๐Ÿปโ€โ™€",
+  ":woman_bicyclist:": "๐Ÿšดโ€โ™€",
+  ":bicyclist_dark_skin_tone:": "๐Ÿšด๐Ÿฟ",
+  ":bicyclist_medium_dark_skin_tone:": "๐Ÿšด๐Ÿพ",
+  ":bicyclist_medium_skin_tone:": "๐Ÿšด๐Ÿฝ",
+  ":bicyclist_medium_light_skin_tone:": "๐Ÿšด๐Ÿผ",
+  ":bicyclist_light_skin_tone:": "๐Ÿšด๐Ÿป",
+  ":bicyclist:": "๐Ÿšด",
+  ":pisces:": "โ™“๏ธ",
+  ":dango:": "๐Ÿก",
+  ":capricorn:": "โ™‘๏ธ",
+  ":office:": "๐Ÿข",
+  ":woman_rowboat_dark_skin_tone:": "๐Ÿšฃ๐Ÿฟโ€โ™€",
+  ":woman_rowboat_medium_dark_skin_tone:": "๐Ÿšฃ๐Ÿพโ€โ™€",
+  ":woman_rowboat_medium_skin_tone:": "๐Ÿšฃ๐Ÿฝโ€โ™€",
+  ":woman_rowboat_medium_light_skin_tone:": "๐Ÿšฃ๐Ÿผโ€โ™€",
+  ":woman_rowboat_light_skin_tone:": "๐Ÿšฃ๐Ÿปโ€โ™€",
+  ":woman_rowboat:": "๐Ÿšฃโ€โ™€",
+  ":rowboat_dark_skin_tone:": "๐Ÿšฃ๐Ÿฟ",
+  ":rowboat_medium_dark_skin_tone:": "๐Ÿšฃ๐Ÿพ",
+  ":rowboat_medium_skin_tone:": "๐Ÿšฃ๐Ÿฝ",
+  ":rowboat_medium_light_skin_tone:": "๐Ÿšฃ๐Ÿผ",
+  ":rowboat_light_skin_tone:": "๐Ÿšฃ๐Ÿป",
+  ":rowboat:": "๐Ÿšฃ",
+  ":womans_hat:": "๐Ÿ‘’",
+  ":mans_shoe:": "๐Ÿ‘ž",
+  ":love_hotel:": "๐Ÿฉ",
+  ":mount_fuji:": "๐Ÿ—ป",
+  ":dromedary_camel:": "๐Ÿช",
+  ":handbag:": "๐Ÿ‘œ",
+  ":hourglass:": "โŒ›๏ธ",
+  ":negative_squared_cross_mark:": "โŽ",
+  ":trumpet:": "๐ŸŽบ",
+  ":school:": "๐Ÿซ",
+  ":cow2:": "๐Ÿ„",
+  ":woman_construction_worker_dark_skin_tone:": "๐Ÿ‘ท๐Ÿฟโ€โ™€",
+  ":woman_construction_worker_medium_dark_skin_tone:": "๐Ÿ‘ท๐Ÿพโ€โ™€",
+  ":woman_construction_worker_medium_skin_tone:": "๐Ÿ‘ท๐Ÿฝโ€โ™€",
+  ":woman_construction_worker_medium_light_skin_tone:": "๐Ÿ‘ท๐Ÿผโ€โ™€",
+  ":woman_construction_worker_light_skin_tone:": "๐Ÿ‘ท๐Ÿปโ€โ™€",
+  ":woman_construction_worker:": "๐Ÿ‘ทโ€โ™€",
+  ":construction_worker_dark_skin_tone:": "๐Ÿ‘ท๐Ÿฟ",
+  ":construction_worker_medium_dark_skin_tone:": "๐Ÿ‘ท๐Ÿพ",
+  ":construction_worker_medium_skin_tone:": "๐Ÿ‘ท๐Ÿฝ",
+  ":construction_worker_medium_light_skin_tone:": "๐Ÿ‘ท๐Ÿผ",
+  ":construction_worker_light_skin_tone:": "๐Ÿ‘ท๐Ÿป",
+  ":construction_worker:": "๐Ÿ‘ท",
+  ":toilet:": "๐Ÿšฝ",
+  ":pig2:": "๐Ÿ–",
+  ":grey_question:": "โ”",
+  ":beginner:": "๐Ÿ”ฐ",
+  ":violin:": "๐ŸŽป",
+  ":on:": "๐Ÿ”›",
+  ":credit_card:": "๐Ÿ’ณ",
+  ":id:": "๐Ÿ†”",
+  ":secret:": "ใŠ™๏ธ",
+  ":ferris_wheel:": "๐ŸŽก",
+  ":bowling:": "๐ŸŽณ",
+  ":libra:": "โ™Ž๏ธ",
+  ":virgo:": "โ™๏ธ",
+  ":barber:": "๐Ÿ’ˆ",
+  ":purse:": "๐Ÿ‘›",
+  ":roller_coaster:": "๐ŸŽข",
+  ":rat:": "๐Ÿ€",
+  ":date:": "๐Ÿ“…",
+  ":rugby_football:": "๐Ÿ‰",
+  ":ram:": "๐Ÿ",
+  ":arrow_up_small:": "๐Ÿ”ผ",
+  ":black_square_button:": "๐Ÿ”ฒ",
+  ":mobile_phone_off:": "๐Ÿ“ด",
+  ":tokyo_tower:": "๐Ÿ—ผ",
+  ":congratulations:": "ใŠ—๏ธ",
+  ":kimono:": "๐Ÿ‘˜",
+  ":flag_ru:": "๐Ÿ‡ท๐Ÿ‡บ",
+  ":ship:": "๐Ÿšข",
+  ":mag_right:": "๐Ÿ”Ž",
+  ":mag:": "๐Ÿ”",
+  ":fire_engine:": "๐Ÿš’",
+  ":clock1130:": "๐Ÿ•ฆ",
+  ":police_car:": "๐Ÿš“",
+  ":black_joker:": "๐Ÿƒ",
+  ":bridge_at_night:": "๐ŸŒ‰",
+  ":package:": "๐Ÿ“ฆ",
+  ":oncoming_taxi:": "๐Ÿš–",
+  ":calendar:": "๐Ÿ“†",
+  ":horse_racing:": "๐Ÿ‡",
+  ":tiger2:": "๐Ÿ…",
+  ":boot:": "๐Ÿ‘ข",
+  ":ambulance:": "๐Ÿš‘",
+  ":white_square_button:": "๐Ÿ”ณ",
+  ":boar:": "๐Ÿ—",
+  ":school_satchel:": "๐ŸŽ’",
+  ":loop:": "โžฟ",
+  ":pound:": "๐Ÿ’ท",
+  ":information_source:": "โ„น๏ธ",
+  ":ox:": "๐Ÿ‚",
+  ":rice_ball:": "๐Ÿ™",
+  ":vs:": "๐Ÿ†š",
+  ":end:": "๐Ÿ”š",
+  ":parking:": "๐Ÿ…ฟ๏ธ",
+  ":sandal:": "๐Ÿ‘ก",
+  ":tent:": "โ›บ๏ธ",
+  ":seat:": "๐Ÿ’บ",
+  ":taxi:": "๐Ÿš•",
+  ":black_medium_small_square:": "โ—พ๏ธ",
+  ":briefcase:": "๐Ÿ’ผ",
+  ":newspaper:": "๐Ÿ“ฐ",
+  ":circus_tent:": "๐ŸŽช",
+  ":six_pointed_star:": "๐Ÿ”ฏ",
+  ":mens:": "๐Ÿšน",
+  ":european_castle:": "๐Ÿฐ",
+  ":flashlight:": "๐Ÿ”ฆ",
+  ":foggy:": "๐ŸŒ",
+  ":arrow_double_up:": "โซ",
+  ":bamboo:": "๐ŸŽ",
+  ":ticket:": "๐ŸŽซ",
+  ":helicopter:": "๐Ÿš",
+  ":minidisc:": "๐Ÿ’ฝ",
+  ":oncoming_bus:": "๐Ÿš",
+  ":melon:": "๐Ÿˆ",
+  ":white_small_square:": "โ–ซ๏ธ",
+  ":european_post_office:": "๐Ÿค",
+  ":keycap_ten:": "๐Ÿ”Ÿ",
+  ":notebook:": "๐Ÿ““",
+  ":no_bell:": "๐Ÿ”•",
+  ":oden:": "๐Ÿข",
+  ":flags:": "๐ŸŽ",
+  ":carousel_horse:": "๐ŸŽ ",
+  ":blowfish:": "๐Ÿก",
+  ":chart_with_upwards_trend:": "๐Ÿ“ˆ",
+  ":sweet_potato:": "๐Ÿ ",
+  ":ski:": "๐ŸŽฟ",
+  ":clock12:": "๐Ÿ•›",
+  ":signal_strength:": "๐Ÿ“ถ",
+  ":construction:": "๐Ÿšง",
+  ":number_sign:": "#",
+  ":black_medium_square:": "โ—ผ๏ธ",
+  ":satellite:": "๐Ÿ›ฐ",
+  ":euro:": "๐Ÿ’ถ",
+  ":womans_clothes:": "๐Ÿ‘š",
+  ":ledger:": "๐Ÿ“’",
+  ":leopard:": "๐Ÿ†",
+  ":low_brightness:": "๐Ÿ”…",
+  ":clock3:": "๐Ÿ•’",
+  ":department_store:": "๐Ÿฌ",
+  ":truck:": "๐Ÿšš",
+  ":sake:": "๐Ÿถ",
+  ":railway_car:": "๐Ÿšƒ",
+  ":speedboat:": "๐Ÿšค",
+  ":flag_kr:": "๐Ÿ‡ฐ๐Ÿ‡ท",
+  ":vhs:": "๐Ÿ“ผ",
+  ":clock1:": "๐Ÿ•",
+  ":arrow_double_down:": "โฌ",
+  ":water_buffalo:": "๐Ÿƒ",
+  ":arrow_down_small:": "๐Ÿ”ฝ",
+  ":yen:": "๐Ÿ’ด",
+  ":mute:": "๐Ÿ”‡",
+  ":running_shirt_with_sash:": "๐ŸŽฝ",
+  ":white_large_square:": "โฌœ๏ธ",
+  ":wheelchair:": "โ™ฟ๏ธ",
+  ":clock2:": "๐Ÿ•‘",
+  ":paperclip:": "๐Ÿ“Ž",
+  ":atm:": "๐Ÿง",
+  ":cinema:": "๐ŸŽฆ",
+  ":telescope:": "๐Ÿ”ญ",
+  ":rice_scene:": "๐ŸŽ‘",
+  ":blue_book:": "๐Ÿ“˜",
+  ":white_medium_square:": "โ—ป๏ธ",
+  ":postbox:": "๐Ÿ“ฎ",
+  ":e_mail:": "๐Ÿ“ง",
+  ":mouse2:": "๐Ÿ",
+  ":bullettrain_side:": "๐Ÿš„",
+  ":ideograph_advantage:": "๐Ÿ‰",
+  ":nut_and_bolt:": "๐Ÿ”ฉ",
+  ":ng:": "๐Ÿ†–",
+  ":hotel:": "๐Ÿจ",
+  ":wc:": "๐Ÿšพ",
+  ":izakaya_lantern:": "๐Ÿฎ",
+  ":repeat_one:": "๐Ÿ”‚",
+  ":mailbox_with_mail:": "๐Ÿ“ฌ",
+  ":chart_with_downwards_trend:": "๐Ÿ“‰",
+  ":green_book:": "๐Ÿ“—",
+  ":tractor:": "๐Ÿšœ",
+  ":fountain:": "โ›ฒ๏ธ",
+  ":metro:": "๐Ÿš‡",
+  ":clipboard:": "๐Ÿ“‹",
+  ":no_mobile_phones:": "๐Ÿ“ต",
+  ":clock4:": "๐Ÿ•“",
+  ":no_smoking:": "๐Ÿšญ",
+  ":black_large_square:": "โฌ›๏ธ",
+  ":slot_machine:": "๐ŸŽฐ",
+  ":clock5:": "๐Ÿ•”",
+  ":bathtub:": "๐Ÿ›",
+  ":scroll:": "๐Ÿ“œ",
+  ":station:": "๐Ÿš‰",
+  ":rice_cracker:": "๐Ÿ˜",
+  ":bank:": "๐Ÿฆ",
+  ":wrench:": "๐Ÿ”ง",
+  ":u6307:": "๐Ÿˆฏ๏ธ",
+  ":articulated_lorry:": "๐Ÿš›",
+  ":page_facing_up:": "๐Ÿ“„",
+  ":ophiuchus:": "โ›Ž",
+  ":bar_chart:": "๐Ÿ“Š",
+  ":no_pedestrians:": "๐Ÿšท",
+  ":flag_cn:": "๐Ÿ‡จ๐Ÿ‡ณ",
+  ":vibration_mode:": "๐Ÿ“ณ",
+  ":clock10:": "๐Ÿ•™",
+  ":clock9:": "๐Ÿ•˜",
+  ":bullettrain_front:": "๐Ÿš…",
+  ":minibus:": "๐Ÿš",
+  ":tram:": "๐ŸšŠ",
+  ":clock8:": "๐Ÿ•—",
+  ":u7a7a:": "๐Ÿˆณ",
+  ":traffic_light:": "๐Ÿšฅ",
+  ":woman_mountain_bicyclist_dark_skin_tone:": "๐Ÿšต๐Ÿฟโ€โ™€",
+  ":woman_mountain_bicyclist_medium_dark_skin_tone:": "๐Ÿšต๐Ÿพโ€โ™€",
+  ":woman_mountain_bicyclist_medium_skin_tone:": "๐Ÿšต๐Ÿฝโ€โ™€",
+  ":woman_mountain_bicyclist_medium_light_skin_tone:": "๐Ÿšต๐Ÿผโ€โ™€",
+  ":woman_mountain_bicyclist_light_skin_tone:": "๐Ÿšต๐Ÿปโ€โ™€",
+  ":woman_mountain_bicyclist:": "๐Ÿšตโ€โ™€",
+  ":mountain_bicyclist_dark_skin_tone:": "๐Ÿšต๐Ÿฟ",
+  ":mountain_bicyclist_medium_dark_skin_tone:": "๐Ÿšต๐Ÿพ",
+  ":mountain_bicyclist_medium_skin_tone:": "๐Ÿšต๐Ÿฝ",
+  ":mountain_bicyclist_medium_light_skin_tone:": "๐Ÿšต๐Ÿผ",
+  ":mountain_bicyclist_light_skin_tone:": "๐Ÿšต๐Ÿป",
+  ":mountain_bicyclist:": "๐Ÿšต",
+  ":microscope:": "๐Ÿ”ฌ",
+  ":japanese_castle:": "๐Ÿฏ",
+  ":bookmark:": "๐Ÿ”–",
+  ":bookmark_tabs:": "๐Ÿ“‘",
+  ":pouch:": "๐Ÿ‘",
+  ":ab:": "๐Ÿ†Ž",
+  ":page_with_curl:": "๐Ÿ“ƒ",
+  ":flower_playing_cards:": "๐ŸŽด",
+  ":clock11:": "๐Ÿ•š",
+  ":fax:": "๐Ÿ“ ",
+  ":clock7:": "๐Ÿ•–",
+  ":white_medium_small_square:": "โ—ฝ๏ธ",
+  ":currency_exchange:": "๐Ÿ’ฑ",
+  ":sound:": "๐Ÿ”‰",
+  ":chart:": "๐Ÿ’น",
+  ":cl:": "๐Ÿ†‘",
+  ":floppy_disk:": "๐Ÿ’พ",
+  ":post_office:": "๐Ÿฃ",
+  ":speaker:": "๐Ÿ”ˆ",
+  ":japan:": "๐Ÿ—พ",
+  ":u55b6:": "๐Ÿˆบ",
+  ":mahjong:": "๐Ÿ€„๏ธ",
+  ":incoming_envelope:": "๐Ÿ“จ",
+  ":orange_book:": "๐Ÿ“™",
+  ":restroom:": "๐Ÿšป",
+  ":u7121:": "๐Ÿˆš๏ธ",
+  ":u6709:": "๐Ÿˆถ",
+  ":triangular_ruler:": "๐Ÿ“",
+  ":train:": "๐Ÿš‹",
+  ":u7533:": "๐Ÿˆธ",
+  ":trolleybus:": "๐ŸšŽ",
+  ":u6708:": "๐Ÿˆท๏ธ",
+  ":1234:": "๐Ÿ”ข",
+  ":notebook_with_decorative_cover:": "๐Ÿ“”",
+  ":u7981:": "๐Ÿˆฒ",
+  ":u6e80:": "๐Ÿˆต",
+  ":postal_horn:": "๐Ÿ“ฏ",
+  ":factory:": "๐Ÿญ",
+  ":children_crossing:": "๐Ÿšธ",
+  ":train2:": "๐Ÿš†",
+  ":straight_ruler:": "๐Ÿ“",
+  ":pager:": "๐Ÿ“Ÿ",
+  ":accept:": "๐Ÿ‰‘",
+  ":u5408:": "๐Ÿˆด",
+  ":lock_with_ink_pen:": "๐Ÿ”",
+  ":clock130:": "๐Ÿ•œ",
+  ":sa:": "๐Ÿˆ‚๏ธ",
+  ":outbox_tray:": "๐Ÿ“ค",
+  ":twisted_rightwards_arrows:": "๐Ÿ”€",
+  ":mailbox:": "๐Ÿ“ซ",
+  ":light_rail:": "๐Ÿšˆ",
+  ":clock930:": "๐Ÿ•ค",
+  ":busstop:": "๐Ÿš",
+  ":open_file_folder:": "๐Ÿ“‚",
+  ":file_folder:": "๐Ÿ“",
+  ":potable_water:": "๐Ÿšฐ",
+  ":card_index:": "๐Ÿ“‡",
+  ":clock230:": "๐Ÿ•",
+  ":monorail:": "๐Ÿš",
+  ":clock1230:": "๐Ÿ•ง",
+  ":clock1030:": "๐Ÿ•ฅ",
+  ":abc:": "๐Ÿ”ค",
+  ":mailbox_closed:": "๐Ÿ“ช",
+  ":clock430:": "๐Ÿ•Ÿ",
+  ":mountain_railway:": "๐Ÿšž",
+  ":do_not_litter:": "๐Ÿšฏ",
+  ":clock330:": "๐Ÿ•ž",
+  ":heavy_division_sign:": "โž—",
+  ":clock730:": "๐Ÿ•ข",
+  ":clock530:": "๐Ÿ• ",
+  ":capital_abcd:": "๐Ÿ” ",
+  ":mailbox_with_no_mail:": "๐Ÿ“ญ",
+  ":symbols:": "๐Ÿ”ฃ",
+  ":aerial_tramway:": "๐Ÿšก",
+  ":clock830:": "๐Ÿ•ฃ",
+  ":clock630:": "๐Ÿ•ก",
+  ":abcd:": "๐Ÿ”ก",
+  ":mountain_cableway:": "๐Ÿš ",
+  ":koko:": "๐Ÿˆ",
+  ":passport_control:": "๐Ÿ›‚",
+  ":non_potable_water:": "๐Ÿšฑ",
+  ":suspension_railway:": "๐ŸšŸ",
+  ":baggage_claim:": "๐Ÿ›„",
+  ":no_bicycles:": "๐Ÿšณ",
+  ":rainbow_flag:": "๐Ÿณ๏ธโ€๐ŸŒˆ",
+  ":woman_detective_dark_skin_tone:": "๐Ÿ•ต๐Ÿฟโ€โ™€",
+  ":woman_detective_medium_dark_skin_tone:": "๐Ÿ•ต๐Ÿพโ€โ™€",
+  ":woman_detective_medium_skin_tone:": "๐Ÿ•ต๐Ÿฝโ€โ™€",
+  ":woman_detective_medium_light_skin_tone:": "๐Ÿ•ต๐Ÿผโ€โ™€",
+  ":woman_detective_light_skin_tone:": "๐Ÿ•ต๐Ÿปโ€โ™€",
+  ":woman_detective:": "๐Ÿ•ตโ€โ™€",
+  ":detective_dark_skin_tone:": "๐Ÿ•ต๐Ÿฟ",
+  ":detective_medium_dark_skin_tone:": "๐Ÿ•ต๐Ÿพ",
+  ":detective_medium_skin_tone:": "๐Ÿ•ต๐Ÿฝ",
+  ":detective_medium_light_skin_tone:": "๐Ÿ•ต๐Ÿผ",
+  ":detective_light_skin_tone:": "๐Ÿ•ต๐Ÿป",
+  ":detective:": "๐Ÿ•ต",
+  ":white_frowning_face:": "โ˜น๏ธ",
+  ":skull_crossbones:": "โ˜ ",
+  ":hugging:": "๐Ÿค—",
+  ":robot_face:": "๐Ÿค–",
+  ":face_with_head_bandage:": "๐Ÿค•",
+  ":thinking:": "๐Ÿค”",
+  ":nerd:": "๐Ÿค“",
+  ":face_with_thermometer:": "๐Ÿค’",
+  ":money_mouth_face:": "๐Ÿค‘",
+  ":zipper_mouth:": "๐Ÿค",
+  ":rolling_eyes:": "๐Ÿ™„",
+  ":upside_down:": "๐Ÿ™ƒ",
+  ":slight_smile:": "๐Ÿ™‚",
+  ":slightly_frowning_face:": "๐Ÿ™",
+  ":sign_of_the_horns_dark_skin_tone:": "๐Ÿค˜๐Ÿฟ",
+  ":sign_of_the_horns_medium_dark_skin_tone:": "๐Ÿค˜๐Ÿพ",
+  ":sign_of_the_horns_medium_skin_tone:": "๐Ÿค˜๐Ÿฝ",
+  ":sign_of_the_horns_medium_light_skin_tone:": "๐Ÿค˜๐Ÿผ",
+  ":sign_of_the_horns_light_skin_tone:": "๐Ÿค˜๐Ÿป",
+  ":sign_of_the_horns:": "๐Ÿค˜",
+  ":spock_hand_dark_skin_tone:": "๐Ÿ––๐Ÿฟ",
+  ":spock_hand_medium_dark_skin_tone:": "๐Ÿ––๐Ÿพ",
+  ":spock_hand_medium_skin_tone:": "๐Ÿ––๐Ÿฝ",
+  ":spock_hand_medium_light_skin_tone:": "๐Ÿ––๐Ÿผ",
+  ":spock_hand_light_skin_tone:": "๐Ÿ––๐Ÿป",
+  ":spock_hand:": "๐Ÿ––",
+  ":middle_finger_dark_skin_tone:": "๐Ÿ–•๐Ÿฟ",
+  ":middle_finger_medium_dark_skin_tone:": "๐Ÿ–•๐Ÿพ",
+  ":middle_finger_medium_skin_tone:": "๐Ÿ–•๐Ÿฝ",
+  ":middle_finger_medium_light_skin_tone:": "๐Ÿ–•๐Ÿผ",
+  ":middle_finger_light_skin_tone:": "๐Ÿ–•๐Ÿป",
+  ":middle_finger:": "๐Ÿ–•",
+  ":raised_hand_with_fingers_splayed_dark_skin_tone:": "๐Ÿ–๐Ÿฟ",
+  ":raised_hand_with_fingers_splayed_medium_dark_skin_tone:": "๐Ÿ–๐Ÿพ",
+  ":raised_hand_with_fingers_splayed_medium_skin_tone:": "๐Ÿ–๐Ÿฝ",
+  ":raised_hand_with_fingers_splayed_medium_light_skin_tone:": "๐Ÿ–๐Ÿผ",
+  ":raised_hand_with_fingers_splayed_light_skin_tone:": "๐Ÿ–๐Ÿป",
+  ":raised_hand_with_fingers_splayed:": "๐Ÿ–",
+  ":writing_hand_dark_skin_tone:": "โœ๐Ÿฟ",
+  ":writing_hand_medium_dark_skin_tone:": "โœ๐Ÿพ",
+  ":writing_hand_medium_skin_tone:": "โœ๐Ÿฝ",
+  ":writing_hand_medium_light_skin_tone:": "โœ๐Ÿผ",
+  ":writing_hand_light_skin_tone:": "โœ๐Ÿป",
+  ":writing_hand:": "โœ๏ธ",
+  ":dark_sunglasses:": "๐Ÿ•ถ",
+  ":eye_speachbubble:": "๐Ÿ‘โ€๐Ÿ—จ",
+  ":eye:": "๐Ÿ‘",
+  ":weightlifter_woman_dt:": "๐Ÿ‹๐Ÿฟโ€โ™€",
+  ":weightlifter_woman_mdt:": "๐Ÿ‹๐Ÿพโ€โ™€",
+  ":weightlifter_woman_mt:": "๐Ÿ‹๐Ÿฝโ€โ™€",
+  ":weightlifter_woman_mlt:": "๐Ÿ‹๐Ÿผโ€โ™€",
+  ":weightlifter_woman_lt:": "๐Ÿ‹๐Ÿปโ€โ™€",
+  ":weightlifter_woman:": "๐Ÿ‹โ€โ™€",
+  ":weightlifter_dt:": "๐Ÿ‹๐Ÿฟ",
+  ":weightlifter_mdt:": "๐Ÿ‹๐Ÿพ",
+  ":weightlifter_mt:": "๐Ÿ‹๐Ÿฝ",
+  ":weightlifter_mlt:": "๐Ÿ‹๐Ÿผ",
+  ":weightlifter_lt:": "๐Ÿ‹๐Ÿป",
+  ":weightlifter:": "๐Ÿ‹",
+  ":basketballer_woman_dt:": "โ›น๐Ÿฟโ€โ™€",
+  ":basketballer_woman_mdt:": "โ›น๐Ÿพโ€โ™€",
+  ":basketballer_woman_mt:": "โ›น๐Ÿฝโ€โ™€",
+  ":basketballer_woman_mlt:": "โ›น๐Ÿผโ€โ™€",
+  ":basketballer_woman_lt:": "โ›น๐Ÿปโ€โ™€",
+  ":basketballer_woman:": "โ›นโ€โ™€",
+  ":basketballer_darktone:": "โ›น๐Ÿฟ",
+  ":basketballer_mediumdarktone:": "โ›น๐Ÿพ",
+  ":basketballer_mediumtone:": "โ›น๐Ÿฝ",
+  ":basketballer_mediumlighttone:": "โ›น๐Ÿผ",
+  ":basketballer_lt:": "โ›น๐Ÿป",
+  ":basketballer:": "โ›น",
+  ":man_in_suit:": "๐Ÿ•ด",
+  ":golfer:": "๐ŸŒ๏ธโ€โ™‚๏ธ",
+  ":golfer_woman:": "๐ŸŒโ€โ™€",
+  "*": "*๏ธโƒฃ",
+  ":heart_exclamation:": "โฃ๏ธ",
+  ":star_of_david:": "โœก๏ธ",
+  ":cross:": "โœ๏ธ",
+  ":fleur_de_lis:": "โšœ๏ธ",
+  ":atom:": "โš›",
+  ":wheel_of_dharma:": "โ˜ธ๏ธ",
+  ":yin_yang:": "โ˜ฏ๏ธ",
+  ":peace:": "โ˜ฎ",
+  ":star_and_crescent:": "โ˜ช๏ธ",
+  ":orthodox_cross:": "โ˜ฆ๏ธ",
+  ":biohazard:": "โ˜ฃ",
+  ":radioactive:": "โ˜ข",
+  ":place_of_worship:": "๐Ÿ›",
+  ":anger_right:": "๐Ÿ—ฏ",
+  ":menorah:": "๐Ÿ•Ž",
+  ":om_symbol:": "๐Ÿ•‰",
+  ":funeral_urn:": "โšฑ๏ธ",
+  ":coffin:": "โšฐ๏ธ",
+  ":gear:": "โš™๏ธ",
+  ":alembic:": "โš—๏ธ",
+  ":scales:": "โš–๏ธ",
+  ":crossed_swords:": "โš”๏ธ",
+  ":keyboard:": "โŒจ๏ธ",
+  ":oil_drum:": "๐Ÿ›ข",
+  ":shield:": "๐Ÿ›ก",
+  ":hammer_and_wrench:": "๐Ÿ› ",
+  ":bed:": "๐Ÿ›",
+  ":bellhop_bell:": "๐Ÿ›Ž",
+  ":shopping_bags:": "๐Ÿ›",
+  ":sleeping_accommodation:": "๐Ÿ›Œ",
+  ":couch_and_lamp:": "๐Ÿ›‹",
+  ":ballot_box:": "๐Ÿ—ณ",
+  ":dagger_knife:": "๐Ÿ—ก",
+  ":rolled_up_newspaper:": "๐Ÿ—ž",
+  ":old_key:": "๐Ÿ—",
+  ":compression:": "๐Ÿ—œ",
+  ":spiral_calendar_pad:": "๐Ÿ—“",
+  ":spiral_note_pad:": "๐Ÿ—’",
+  ":wastebasket:": "๐Ÿ—‘",
+  ":file_cabinet:": "๐Ÿ—„",
+  ":card_file_box:": "๐Ÿ—ƒ",
+  ":card_index_dividers:": "๐Ÿ—‚",
+  ":frame_with_picture:": "๐Ÿ–ผ",
+  ":trackball:": "๐Ÿ–ฒ",
+  ":three_button_mouse:": "๐Ÿ–ฑ",
+  ":printer:": "๐Ÿ–จ",
+  ":desktop_computer:": "๐Ÿ–ฅ",
+  ":lower_left_crayon:": "๐Ÿ–",
+  ":lower_left_paintbrush:": "๐Ÿ–Œ",
+  ":lower_left_fountain_pen:": "๐Ÿ–‹",
+  ":lower_left_ballpoint_pen:": "๐Ÿ–Š",
+  ":linked_paperclips:": "๐Ÿ–‡",
+  ":joystick:": "๐Ÿ•น",
+  ":hole:": "๐Ÿ•ณ",
+  ":mantelpiece_clock:": "๐Ÿ•ฐ",
+  ":candle:": "๐Ÿ•ฏ",
+  ":prayer_beads:": "๐Ÿ“ฟ",
+  ":film_projector:": "๐Ÿ“ฝ",
+  ":camera_with_flash:": "๐Ÿ“ธ",
+  ":amphora:": "๐Ÿบ",
+  ":label:": "๐Ÿท",
+  ":flag_black:": "๐Ÿด",
+  ":flag_white:": "๐Ÿณ",
+  ":film_frames:": "๐ŸŽž",
+  ":control_knobs:": "๐ŸŽ›",
+  ":level_slider:": "๐ŸŽš",
+  ":studio_microphone:": "๐ŸŽ™",
+  ":thermometer:": "๐ŸŒก",
+  ":passenger_ship:": "๐Ÿ›ณ",
+  ":airplane_arriving:": "๐Ÿ›ฌ",
+  ":airplane_departure:": "๐Ÿ›ซ",
+  ":small_airplane:": "๐Ÿ›ฉ",
+  ":motor_boat:": "๐Ÿ›ฅ",
+  ":railway_track:": "๐Ÿ›ค",
+  ":motorway:": "๐Ÿ›ฃ",
+  ":world_map:": "๐Ÿ—บ",
+  ":synagogue:": "๐Ÿ•",
+  ":mosque:": "๐Ÿ•Œ",
+  ":kaaba:": "๐Ÿ•‹",
+  ":stadium:": "๐ŸŸ",
+  ":national_park:": "๐Ÿž",
+  ":desert_island:": "๐Ÿ",
+  ":desert:": "๐Ÿœ",
+  ":classical_building:": "๐Ÿ›",
+  ":derelict_house_building:": "๐Ÿš",
+  ":cityscape:": "๐Ÿ™",
+  ":house_buildings:": "๐Ÿ˜",
+  ":building_construction:": "๐Ÿ—",
+  ":beach_with_umbrella:": "๐Ÿ–",
+  ":camping:": "๐Ÿ•",
+  ":snow_capped_mountain:": "๐Ÿ”",
+  ":racing_car:": "๐ŸŽ",
+  ":racing_motorcycle:": "๐Ÿ",
+  ":bow_and_arrow:": "๐Ÿน",
+  ":badminton_racquet_and_shuttlecock:": "๐Ÿธ",
+  ":rosette:": "๐Ÿต",
+  ":table_tennis_paddle_and_ball:": "๐Ÿ“",
+  ":ice_hockey_stick_and_puck:": "๐Ÿ’",
+  ":field_hockey_stick_and_ball:": "๐Ÿ‘",
+  ":volleyball:": "๐Ÿ",
+  ":cricket_bat_and_ball:": "๐Ÿ",
+  ":medal:": "๐ŸŽ–",
+  ":admission_tickets:": "๐ŸŽŸ",
+  ":reminder_ribbon:": "๐ŸŽ—",
+  ":cheese_wedge:": "๐Ÿง€",
+  ":popcorn:": "๐Ÿฟ",
+  ":champagne:": "๐Ÿพ",
+  ":knife_fork_plate:": "๐Ÿฝ",
+  ":hot_pepper:": "๐ŸŒถ",
+  ":burrito:": "๐ŸŒฏ",
+  ":taco:": "๐ŸŒฎ",
+  ":hotdog:": "๐ŸŒญ",
+  ":shamrock:": "โ˜˜๏ธ",
+  ":comet:": "โ˜„๏ธ",
+  ":umbrella_with_rain_drops:": "โ˜‚๏ธ",
+  ":unicorn_face:": "๐Ÿฆ„",
+  ":turkey:": "๐Ÿฆƒ",
+  ":scorpion:": "๐Ÿฆ‚",
+  ":lion_face:": "๐Ÿฆ",
+  ":crab:": "๐Ÿฆ€",
+  ":spider_web:": "๐Ÿ•ธ",
+  ":spider:": "๐Ÿ•ท",
+  ":dove_of_peace:": "๐Ÿ•Š",
+  ":chipmunk:": "๐Ÿฟ",
+  ":wind_blowing_face:": "๐ŸŒฌ",
+  ":fog:": "๐ŸŒซ",
+  ":tornado_cloud:": "๐ŸŒช",
+  ":lightning_cloud:": "๐ŸŒฉ",
+  ":snow_cloud:": "๐ŸŒจ",
+  ":rain_cloud:": "๐ŸŒง",
+  ":sun_behind_rain_cloud:": "๐ŸŒฆ",
+  ":sun_behind_cloud:": "๐ŸŒฅ",
+  ":sun_small_cloud:": "๐ŸŒค",
+  ":speaking_head_in_silhouette:": "๐Ÿ—ฃ",
+  ":black_circle_for_record:": "โบ",
+  ":black_square_for_stop:": "โน",
+  ":double_vertical_bar:": "โธ",
+  ":play_pause:": "โฏ",
+  ":track_previous:": "โฎ",
+  ":track_next:": "โญ",
+  ":beach_umbrella:": "โ›ฑ",
+  ":chains:": "โ›“",
+  ":pick:": "โ›",
+  ":hammer_and_pick:": "โš’",
+  ":timer_clock:": "โฒ",
+  ":stopwatch:": "โฑ",
+  ":ferry:": "โ›ด",
+  ":mountain:": "โ›ฐ",
+  ":shinto_shrine:": "โ›ฉ",
+  ":ice_skate:": "โ›ธ",
+  ":skier:": "โ›ท",
+  ":thunder_cloud_and_rain:": "โ›ˆ",
+  ":helmet_with_white_cross": "โ›‘",
+  ":flag_ac:": "๐Ÿ‡ฆ๐Ÿ‡จ",
+  ":flag_ad:": "๐Ÿ‡ฆ๐Ÿ‡ฉ",
+  ":flag_ae:": "๐Ÿ‡ฆ๐Ÿ‡ช",
+  ":flag_af:": "๐Ÿ‡ฆ๐Ÿ‡ซ",
+  ":flag_ag:": "๐Ÿ‡ฆ๐Ÿ‡ฌ",
+  ":flag_ai:": "๐Ÿ‡ฆ๐Ÿ‡ฎ",
+  ":flag_al:": "๐Ÿ‡ฆ๐Ÿ‡ฑ",
+  ":flag_am:": "๐Ÿ‡ฆ๐Ÿ‡ฒ",
+  ":flag_ao:": "๐Ÿ‡ฆ๐Ÿ‡ด",
+  ":flag_aq:": "๐Ÿ‡ฆ๐Ÿ‡ถ",
+  ":flag_ar:": "๐Ÿ‡ฆ๐Ÿ‡ท",
+  ":flag_as:": "๐Ÿ‡ฆ๐Ÿ‡ธ",
+  ":flag_at:": "๐Ÿ‡ฆ๐Ÿ‡น",
+  ":flag_au:": "๐Ÿ‡ฆ๐Ÿ‡บ",
+  ":flag_aw:": "๐Ÿ‡ฆ๐Ÿ‡ผ",
+  ":flag_ax:": "๐Ÿ‡ฆ๐Ÿ‡ฝ",
+  ":flag_az:": "๐Ÿ‡ฆ๐Ÿ‡ฟ",
+  ":flag_ba:": "๐Ÿ‡ง๐Ÿ‡ฆ",
+  ":flag_bb:": "๐Ÿ‡ง๐Ÿ‡ง",
+  ":flag_bd:": "๐Ÿ‡ง๐Ÿ‡ฉ",
+  ":flag_be:": "๐Ÿ‡ง๐Ÿ‡ช",
+  ":flag_bf:": "๐Ÿ‡ง๐Ÿ‡ซ",
+  ":flag_bg:": "๐Ÿ‡ง๐Ÿ‡ฌ",
+  ":flag_bh:": "๐Ÿ‡ง๐Ÿ‡ญ",
+  ":flag_bi:": "๐Ÿ‡ง๐Ÿ‡ฎ",
+  ":flag_bj:": "๐Ÿ‡ง๐Ÿ‡ฏ",
+  ":flag_bl:": "๐Ÿ‡ง๐Ÿ‡ฑ",
+  ":flag_bm:": "๐Ÿ‡ง๐Ÿ‡ฒ",
+  ":flag_bn:": "๐Ÿ‡ง๐Ÿ‡ณ",
+  ":flag_bo:": "๐Ÿ‡ง๐Ÿ‡ด",
+  ":flag_bq:": "๐Ÿ‡ง๐Ÿ‡ถ",
+  ":flag_br:": "๐Ÿ‡ง๐Ÿ‡ท",
+  ":flag_bs:": "๐Ÿ‡ง๐Ÿ‡ธ",
+  ":flag_bt:": "๐Ÿ‡ง๐Ÿ‡น",
+  ":flag_bv:": "๐Ÿ‡ง๐Ÿ‡ป",
+  ":flag_bw:": "๐Ÿ‡ง๐Ÿ‡ผ",
+  ":flag_by:": "๐Ÿ‡ง๐Ÿ‡พ",
+  ":flag_bz:": "๐Ÿ‡ง๐Ÿ‡ฟ",
+  ":flag_ca:": "๐Ÿ‡จ๐Ÿ‡ฆ",
+  ":flag_cc:": "๐Ÿ‡จ๐Ÿ‡จ",
+  ":flag_cd:": "๐Ÿ‡จ๐Ÿ‡ฉ",
+  ":flag_cf:": "๐Ÿ‡จ๐Ÿ‡ซ",
+  ":flag_cg:": "๐Ÿ‡จ๐Ÿ‡ฌ",
+  ":flag_ch:": "๐Ÿ‡จ๐Ÿ‡ญ",
+  ":flag_ci:": "๐Ÿ‡จ๐Ÿ‡ฎ",
+  ":flag_ck:": "๐Ÿ‡จ๐Ÿ‡ฐ",
+  ":flag_cl:": "๐Ÿ‡จ๐Ÿ‡ฑ",
+  ":flag_cm:": "๐Ÿ‡จ๐Ÿ‡ฒ",
+  ":flag_co:": "๐Ÿ‡จ๐Ÿ‡ด",
+  ":flag_cp:": "๐Ÿ‡จ๐Ÿ‡ต",
+  ":flag_cr:": "๐Ÿ‡จ๐Ÿ‡ท",
+  ":flag_cu:": "๐Ÿ‡จ๐Ÿ‡บ",
+  ":flag_cv:": "๐Ÿ‡จ๐Ÿ‡ป",
+  ":flag_cw:": "๐Ÿ‡จ๐Ÿ‡ผ",
+  ":flag_cx:": "๐Ÿ‡จ๐Ÿ‡ฝ",
+  ":flag_cy:": "๐Ÿ‡จ๐Ÿ‡พ",
+  ":flag_cz:": "๐Ÿ‡จ๐Ÿ‡ฟ",
+  ":flag_dg:": "๐Ÿ‡ฉ๐Ÿ‡ฌ",
+  ":flag_dj:": "๐Ÿ‡ฉ๐Ÿ‡ฏ",
+  ":flag_dk:": "๐Ÿ‡ฉ๐Ÿ‡ฐ",
+  ":flag_dm:": "๐Ÿ‡ฉ๐Ÿ‡ฒ",
+  ":flag_do:": "๐Ÿ‡ฉ๐Ÿ‡ด",
+  ":flag_dz:": "๐Ÿ‡ฉ๐Ÿ‡ฟ",
+  ":flag_ea:": "๐Ÿ‡ช๐Ÿ‡ฆ",
+  ":flag_ec:": "๐Ÿ‡ช๐Ÿ‡จ",
+  ":flag_ee:": "๐Ÿ‡ช๐Ÿ‡ช",
+  ":flag_eg:": "๐Ÿ‡ช๐Ÿ‡ฌ",
+  ":flag_eh:": "๐Ÿ‡ช๐Ÿ‡ญ",
+  ":flag_er:": "๐Ÿ‡ช๐Ÿ‡ท",
+  ":flag_es:": "๐Ÿ‡ช๐Ÿ‡ธ",
+  ":flag_et:": "๐Ÿ‡ช๐Ÿ‡น",
+  ":flag_eu:": "๐Ÿ‡ช๐Ÿ‡บ",
+  ":flag_fi:": "๐Ÿ‡ซ๐Ÿ‡ฎ",
+  ":flag_fj:": "๐Ÿ‡ซ๐Ÿ‡ฏ",
+  ":flag_fk:": "๐Ÿ‡ซ๐Ÿ‡ฐ",
+  ":flag_fm:": "๐Ÿ‡ซ๐Ÿ‡ฒ",
+  ":flag_fo:": "๐Ÿ‡ซ๐Ÿ‡ด",
+  ":flag_ga:": "๐Ÿ‡ฌ๐Ÿ‡ฆ",
+  ":flag_gd:": "๐Ÿ‡ฌ๐Ÿ‡ฉ",
+  ":flag_ge:": "๐Ÿ‡ฌ๐Ÿ‡ช",
+  ":flag_gf:": "๐Ÿ‡ฌ๐Ÿ‡ซ",
+  ":flag_gg:": "๐Ÿ‡ฌ๐Ÿ‡ฌ",
+  ":flag_gh:": "๐Ÿ‡ฌ๐Ÿ‡ญ",
+  ":flag_gi:": "๐Ÿ‡ฌ๐Ÿ‡ฎ",
+  ":flag_gl:": "๐Ÿ‡ฌ๐Ÿ‡ฑ",
+  ":flag_gm:": "๐Ÿ‡ฌ๐Ÿ‡ฒ",
+  ":flag_gn:": "๐Ÿ‡ฌ๐Ÿ‡ณ",
+  ":flag_gp:": "๐Ÿ‡ฌ๐Ÿ‡ต",
+  ":flag_gq:": "๐Ÿ‡ฌ๐Ÿ‡ถ",
+  ":flag_gr:": "๐Ÿ‡ฌ๐Ÿ‡ท",
+  ":flag_gs:": "๐Ÿ‡ฌ๐Ÿ‡ธ",
+  ":flag_gt:": "๐Ÿ‡ฌ๐Ÿ‡น",
+  ":flag_gu:": "๐Ÿ‡ฌ๐Ÿ‡บ",
+  ":flag_gw:": "๐Ÿ‡ฌ๐Ÿ‡ผ",
+  ":flag_gy:": "๐Ÿ‡ฌ๐Ÿ‡พ",
+  ":flag_hk:": "๐Ÿ‡ญ๐Ÿ‡ฐ",
+  ":flag_hm:": "๐Ÿ‡ญ๐Ÿ‡ฒ",
+  ":flag_hn:": "๐Ÿ‡ญ๐Ÿ‡ณ",
+  ":flag_hr:": "๐Ÿ‡ญ๐Ÿ‡ท",
+  ":flag_ht:": "๐Ÿ‡ญ๐Ÿ‡น",
+  ":flag_hu:": "๐Ÿ‡ญ๐Ÿ‡บ",
+  ":flag_ic:": "๐Ÿ‡ฎ๐Ÿ‡จ",
+  ":flag_id:": "๐Ÿ‡ฎ๐Ÿ‡ฉ",
+  ":flag_ie:": "๐Ÿ‡ฎ๐Ÿ‡ช",
+  ":flag_il:": "๐Ÿ‡ฎ๐Ÿ‡ฑ",
+  ":flag_im:": "๐Ÿ‡ฎ๐Ÿ‡ฒ",
+  ":flag_in:": "๐Ÿ‡ฎ๐Ÿ‡ณ",
+  ":flag_io:": "๐Ÿ‡ฎ๐Ÿ‡ด",
+  ":flag_iq:": "๐Ÿ‡ฎ๐Ÿ‡ถ",
+  ":flag_ir:": "๐Ÿ‡ฎ๐Ÿ‡ท",
+  ":flag_is:": "๐Ÿ‡ฎ๐Ÿ‡ธ",
+  ":flag_je:": "๐Ÿ‡ฏ๐Ÿ‡ช",
+  ":flag_jm:": "๐Ÿ‡ฏ๐Ÿ‡ฒ",
+  ":flag_jo:": "๐Ÿ‡ฏ๐Ÿ‡ด",
+  ":flag_ke:": "๐Ÿ‡ฐ๐Ÿ‡ช",
+  ":flag_kg:": "๐Ÿ‡ฐ๐Ÿ‡ฌ",
+  ":flag_kh:": "๐Ÿ‡ฐ๐Ÿ‡ญ",
+  ":flag_ki:": "๐Ÿ‡ฐ๐Ÿ‡ฎ",
+  ":flag_km:": "๐Ÿ‡ฐ๐Ÿ‡ฒ",
+  ":flag_kn:": "๐Ÿ‡ฐ๐Ÿ‡ณ",
+  ":flag_kp:": "๐Ÿ‡ฐ๐Ÿ‡ต",
+  ":flag_kw:": "๐Ÿ‡ฐ๐Ÿ‡ผ",
+  ":flag_ky:": "๐Ÿ‡ฐ๐Ÿ‡พ",
+  ":flag_kz:": "๐Ÿ‡ฐ๐Ÿ‡ฟ",
+  ":flag_la:": "๐Ÿ‡ฑ๐Ÿ‡ฆ",
+  ":flag_lb:": "๐Ÿ‡ฑ๐Ÿ‡ง",
+  ":flag_lc:": "๐Ÿ‡ฑ๐Ÿ‡จ",
+  ":flag_li:": "๐Ÿ‡ฑ๐Ÿ‡ฎ",
+  ":flag_lk:": "๐Ÿ‡ฑ๐Ÿ‡ฐ",
+  ":flag_lr:": "๐Ÿ‡ฑ๐Ÿ‡ท",
+  ":flag_ls:": "๐Ÿ‡ฑ๐Ÿ‡ธ",
+  ":flag_lt:": "๐Ÿ‡ฑ๐Ÿ‡น",
+  ":flag_lu:": "๐Ÿ‡ฑ๐Ÿ‡บ",
+  ":flag_lv:": "๐Ÿ‡ฑ๐Ÿ‡ป",
+  ":flag_ly:": "๐Ÿ‡ฑ๐Ÿ‡พ",
+  ":flag_ma:": "๐Ÿ‡ฒ๐Ÿ‡ฆ",
+  ":flag_mc:": "๐Ÿ‡ฒ๐Ÿ‡จ",
+  ":flag_md:": "๐Ÿ‡ฒ๐Ÿ‡ฉ",
+  ":flag_me:": "๐Ÿ‡ฒ๐Ÿ‡ช",
+  ":flag_mf:": "๐Ÿ‡ฒ๐Ÿ‡ซ",
+  ":flag_mg:": "๐Ÿ‡ฒ๐Ÿ‡ฌ",
+  ":flag_mh:": "๐Ÿ‡ฒ๐Ÿ‡ญ",
+  ":flag_mk:": "๐Ÿ‡ฒ๐Ÿ‡ฐ",
+  ":flag_ml:": "๐Ÿ‡ฒ๐Ÿ‡ฑ",
+  ":flag_mm:": "๐Ÿ‡ฒ๐Ÿ‡ฒ",
+  ":flag_mn:": "๐Ÿ‡ฒ๐Ÿ‡ณ",
+  ":flag_mo:": "๐Ÿ‡ฒ๐Ÿ‡ด",
+  ":flag_mp:": "๐Ÿ‡ฒ๐Ÿ‡ต",
+  ":flag_mq:": "๐Ÿ‡ฒ๐Ÿ‡ถ",
+  ":flag_mr:": "๐Ÿ‡ฒ๐Ÿ‡ท",
+  ":flag_ms:": "๐Ÿ‡ฒ๐Ÿ‡ธ",
+  ":flag_mt:": "๐Ÿ‡ฒ๐Ÿ‡น",
+  ":flag_mu:": "๐Ÿ‡ฒ๐Ÿ‡บ",
+  ":flag_mv:": "๐Ÿ‡ฒ๐Ÿ‡ป",
+  ":flag_mw:": "๐Ÿ‡ฒ๐Ÿ‡ผ",
+  ":flag_mx:": "๐Ÿ‡ฒ๐Ÿ‡ฝ",
+  ":flag_my:": "๐Ÿ‡ฒ๐Ÿ‡พ",
+  ":flag_mz:": "๐Ÿ‡ฒ๐Ÿ‡ฟ",
+  ":flag_na:": "๐Ÿ‡ณ๐Ÿ‡ฆ",
+  ":flag_nc:": "๐Ÿ‡ณ๐Ÿ‡จ",
+  ":flag_ne:": "๐Ÿ‡ณ๐Ÿ‡ช",
+  ":flag_nf:": "๐Ÿ‡ณ๐Ÿ‡ซ",
+  ":flag_ng:": "๐Ÿ‡ณ๐Ÿ‡ฌ",
+  ":flag_ni:": "๐Ÿ‡ณ๐Ÿ‡ฎ",
+  ":flag_nl:": "๐Ÿ‡ณ๐Ÿ‡ฑ",
+  ":flag_no:": "๐Ÿ‡ณ๐Ÿ‡ด",
+  ":flag_np:": "๐Ÿ‡ณ๐Ÿ‡ต",
+  ":flag_nr:": "๐Ÿ‡ณ๐Ÿ‡ท",
+  ":flag_nu:": "๐Ÿ‡ณ๐Ÿ‡บ",
+  ":flag_nz:": "๐Ÿ‡ณ๐Ÿ‡ฟ",
+  ":flag_om:": "๐Ÿ‡ด๐Ÿ‡ฒ",
+  ":flag_pa:": "๐Ÿ‡ต๐Ÿ‡ฆ",
+  ":flag_pe:": "๐Ÿ‡ต๐Ÿ‡ช",
+  ":flag_pf:": "๐Ÿ‡ต๐Ÿ‡ซ",
+  ":flag_pg:": "๐Ÿ‡ต๐Ÿ‡ฌ",
+  ":flag_ph:": "๐Ÿ‡ต๐Ÿ‡ญ",
+  ":flag_pk:": "๐Ÿ‡ต๐Ÿ‡ฐ",
+  ":flag_pl:": "๐Ÿ‡ต๐Ÿ‡ฑ",
+  ":flag_pm:": "๐Ÿ‡ต๐Ÿ‡ฒ",
+  ":flag_pn:": "๐Ÿ‡ต๐Ÿ‡ณ",
+  ":flag_pr:": "๐Ÿ‡ต๐Ÿ‡ท",
+  ":flag_ps:": "๐Ÿ‡ต๐Ÿ‡ธ",
+  ":flag_pt:": "๐Ÿ‡ต๐Ÿ‡น",
+  ":flag_pw:": "๐Ÿ‡ต๐Ÿ‡ผ",
+  ":flag_py:": "๐Ÿ‡ต๐Ÿ‡พ",
+  ":flag_qa:": "๐Ÿ‡ถ๐Ÿ‡ฆ",
+  ":flag_re:": "๐Ÿ‡ท๐Ÿ‡ช",
+  ":flag_ro:": "๐Ÿ‡ท๐Ÿ‡ด",
+  ":flag_rs:": "๐Ÿ‡ท๐Ÿ‡ธ",
+  ":flag_rw:": "๐Ÿ‡ท๐Ÿ‡ผ",
+  ":flag_sa:": "๐Ÿ‡ธ๐Ÿ‡ฆ",
+  ":flag_sb:": "๐Ÿ‡ธ๐Ÿ‡ง",
+  ":flag_sc:": "๐Ÿ‡ธ๐Ÿ‡จ",
+  ":flag_sd:": "๐Ÿ‡ธ๐Ÿ‡ฉ",
+  ":flag_se:": "๐Ÿ‡ธ๐Ÿ‡ช",
+  ":flag_sg:": "๐Ÿ‡ธ๐Ÿ‡ฌ",
+  ":flag_sh:": "๐Ÿ‡ธ๐Ÿ‡ญ",
+  ":flag_si:": "๐Ÿ‡ธ๐Ÿ‡ฎ",
+  ":flag_sj:": "๐Ÿ‡ธ๐Ÿ‡ฏ",
+  ":flag_sk:": "๐Ÿ‡ธ๐Ÿ‡ฐ",
+  ":flag_sl:": "๐Ÿ‡ธ๐Ÿ‡ฑ",
+  ":flag_sm:": "๐Ÿ‡ธ๐Ÿ‡ฒ",
+  ":flag_sn:": "๐Ÿ‡ธ๐Ÿ‡ณ",
+  ":flag_so:": "๐Ÿ‡ธ๐Ÿ‡ด",
+  ":flag_sr:": "๐Ÿ‡ธ๐Ÿ‡ท",
+  ":flag_ss:": "๐Ÿ‡ธ๐Ÿ‡ธ",
+  ":flag_st:": "๐Ÿ‡ธ๐Ÿ‡น",
+  ":flag_sv:": "๐Ÿ‡ธ๐Ÿ‡ป",
+  ":flag_sx:": "๐Ÿ‡ธ๐Ÿ‡ฝ",
+  ":flag_sy:": "๐Ÿ‡ธ๐Ÿ‡พ",
+  ":flag_sz:": "๐Ÿ‡ธ๐Ÿ‡ฟ",
+  ":flag_ta:": "๐Ÿ‡น๐Ÿ‡ฆ",
+  ":flag_tc:": "๐Ÿ‡น๐Ÿ‡จ",
+  ":flag_td:": "๐Ÿ‡น๐Ÿ‡ฉ",
+  ":flag_tf:": "๐Ÿ‡น๐Ÿ‡ซ",
+  ":flag_tg:": "๐Ÿ‡น๐Ÿ‡ฌ",
+  ":flag_th:": "๐Ÿ‡น๐Ÿ‡ญ",
+  ":flag_tj:": "๐Ÿ‡น๐Ÿ‡ฏ",
+  ":flag_tk:": "๐Ÿ‡น๐Ÿ‡ฐ",
+  ":flag_tl:": "๐Ÿ‡น๐Ÿ‡ฑ",
+  ":flag_tm:": "๐Ÿ‡น๐Ÿ‡ฒ",
+  ":flag_tn:": "๐Ÿ‡น๐Ÿ‡ณ",
+  ":flag_to:": "๐Ÿ‡น๐Ÿ‡ด",
+  ":flag_tr:": "๐Ÿ‡น๐Ÿ‡ท",
+  ":flag_tt:": "๐Ÿ‡น๐Ÿ‡น",
+  ":flag_tv:": "๐Ÿ‡น๐Ÿ‡ป",
+  ":flag_tw:": "๐Ÿ‡น๐Ÿ‡ผ",
+  ":flag_tz:": "๐Ÿ‡น๐Ÿ‡ฟ",
+  ":flag_ua:": "๐Ÿ‡บ๐Ÿ‡ฆ",
+  ":flag_ug:": "๐Ÿ‡บ๐Ÿ‡ฌ",
+  ":flag_um:": "๐Ÿ‡บ๐Ÿ‡ฒ",
+  ":flag_uy:": "๐Ÿ‡บ๐Ÿ‡พ",
+  ":flag_uz:": "๐Ÿ‡บ๐Ÿ‡ฟ",
+  ":flag_va:": "๐Ÿ‡ป๐Ÿ‡ฆ",
+  ":flag_vc:": "๐Ÿ‡ป๐Ÿ‡จ",
+  ":flag_ve:": "๐Ÿ‡ป๐Ÿ‡ช",
+  ":flag_vg:": "๐Ÿ‡ป๐Ÿ‡ฌ",
+  ":flag_vi:": "๐Ÿ‡ป๐Ÿ‡ฎ",
+  ":flag_vn:": "๐Ÿ‡ป๐Ÿ‡ณ",
+  ":flag_vu:": "๐Ÿ‡ป๐Ÿ‡บ",
+  ":flag_wf:": "๐Ÿ‡ผ๐Ÿ‡ซ",
+  ":flag_ws:": "๐Ÿ‡ผ๐Ÿ‡ธ",
+  ":flag_xk:": "๐Ÿ‡ฝ๐Ÿ‡ฐ",
+  ":flag_ye:": "๐Ÿ‡พ๐Ÿ‡ช",
+  ":flag_yt:": "๐Ÿ‡พ๐Ÿ‡น",
+  ":flag_za:": "๐Ÿ‡ฟ๐Ÿ‡ฆ",
+  ":flag_zm:": "๐Ÿ‡ฟ๐Ÿ‡ฒ",
+  ":flag_zw:": "๐Ÿ‡ฟ๐Ÿ‡ผ",
+  ":black_heart:": "๐Ÿ–ค",
+  ":speech_left:": "๐Ÿ—จ",
+  ":egg:": "๐Ÿฅš",
+  ":octagonal_sign:": "๐Ÿ›‘",
+  ":drum:": "๐Ÿฅ",
+  ":0:": "0๏ธโƒฃ",
+  ":1:": "1๏ธโƒฃ",
+  ":2:": "2๏ธโƒฃ",
+  ":3:": "3๏ธโƒฃ",
+  ":4:": "4๏ธโƒฃ",
+  ":5:": "5๏ธโƒฃ",
+  ":6:": "6๏ธโƒฃ",
+  ":7:": "7๏ธโƒฃ",
+  ":8:": "8๏ธโƒฃ",
+  ":9:": "9๏ธโƒฃ",
+  ":hash:": "#๏ธโƒฃ",
+  ":asterisk:": "*โƒฃ",
+  ":zero:": "0โƒฃ",
+  ":one:": "1โƒฃ",
+  ":two:": "2โƒฃ",
+  ":three:": "3โƒฃ",
+  ":four:": "4โƒฃ",
+  ":five:": "5โƒฃ",
+  ":six:": "6โƒฃ",
+  ":seven:": "7โƒฃ",
+  ":eight:": "8โƒฃ",
+  ":nine:": "9โƒฃ",
+  ":skull_and_crossbones:": "โ˜ ๏ธ",
+  ":radioactive_sign:": "โ˜ข๏ธ",
+  ":biohazard_sign:": "โ˜ฃ๏ธ",
+  ":female_sign:": "โ™€",
+  ":male_sign:": "โ™‚",
+  ":staff_of_aesculapius:": "โš•",
+  ":heavy_exclamation_mark:": "โ—๏ธ",
+  ":eject:": "โ",
+  ":peace_symbol:": "โ˜ฎ๏ธ",
+  ":atom_symbol:": "โš›๏ธ",
+  ":snowman_without_snow:": "โ›„๏ธ",
+  ":waving_white_flag:": "๐Ÿณ๏ธ",
+  ":skin_tone_2:": "๐Ÿป",
+  ":skin_tone_3:": "๐Ÿผ",
+  ":skin_tone_4:": "๐Ÿฝ",
+  ":skin_tone_5:": "๐Ÿพ",
+  ":skin_tone_6:": "๐Ÿฟ",
+  ":man_dancing:": "๐Ÿ•บ",
+  ":shopping_trolley:": "๐Ÿ›’",
+  ":scooter:": "๐Ÿ›ด",
+  ":motor_scooter:": "๐Ÿ›ต",
+  ":canoe:": "๐Ÿ›ถ",
+  ":call_me_hand:": "๐Ÿค™",
+  ":raised_back_of_hand:": "๐Ÿคš",
+  ":left_facing_fist:": "๐Ÿค›",
+  ":right_facing_fist:": "๐Ÿคœ",
+  ":handshake:": "๐Ÿค",
+  ":hand_with_index_and_middle_fingers_crossed:": "๐Ÿคž",
+  ":face_with_cowboy_hat:": "๐Ÿค ",
+  ":clown_face:": "๐Ÿคก",
+  ":nauseated_face:": "๐Ÿคข",
+  ":drooling_face:": "๐Ÿคค",
+  ":lying_face:": "๐Ÿคฅ",
+  ":face_palm:": "๐Ÿคฆ",
+  ":sneezing_face:": "๐Ÿคง",
+  ":pregnant_woman:": "๐Ÿคฐ",
+  ":selfie:": "๐Ÿคณ",
+  ":prince:": "๐Ÿคด",
+  ":man_in_tuxedo:": "๐Ÿคต",
+  ":mother_christmas:": "๐Ÿคถ",
+  ":shrug:": "๐Ÿคท",
+  ":person_doing_cartwheel:": "๐Ÿคธ",
+  ":juggling:": "๐Ÿคน",
+  ":fencer:": "๐Ÿคบ",
+  ":wrestlers:": "๐Ÿคผ",
+  ":water_polo:": "๐Ÿคฝ",
+  ":handball:": "๐Ÿคพ",
+  ":wilted_flower:": "๐Ÿฅ€",
+  ":clinking_glasses:": "๐Ÿฅ‚",
+  ":tumbler_glass:": "๐Ÿฅƒ",
+  ":spoon:": "๐Ÿฅ„",
+  ":goal_net:": "๐Ÿฅ…",
+  ":first_place_medal:": "๐Ÿฅ‡",
+  ":second_place_medal:": "๐Ÿฅˆ",
+  ":third_place_medal:": "๐Ÿฅ‰",
+  ":boxing_glove:": "๐ŸฅŠ",
+  ":martial_arts_uniform:": "๐Ÿฅ‹",
+  ":croissant:": "๐Ÿฅ",
+  ":avocado:": "๐Ÿฅ‘",
+  ":cucumber:": "๐Ÿฅ’",
+  ":bacon:": "๐Ÿฅ“",
+  ":potato:": "๐Ÿฅ”",
+  ":carrot:": "๐Ÿฅ•",
+  ":baguette_bread:": "๐Ÿฅ–",
+  ":green_salad:": "๐Ÿฅ—",
+  ":shallow_pan_of_food:": "๐Ÿฅ˜",
+  ":stuffed_flatbread:": "๐Ÿฅ™",
+  ":glass_of_milk:": "๐Ÿฅ›",
+  ":peanuts:": "๐Ÿฅœ",
+  ":kiwifruit:": "๐Ÿฅ",
+  ":pancakes:": "๐Ÿฅž",
+  ":eagle:": "๐Ÿฆ…",
+  ":duck:": "๐Ÿฆ†",
+  ":bat:": "๐Ÿฆ‡",
+  ":shark:": "๐Ÿฆˆ",
+  ":owl:": "๐Ÿฆ‰",
+  ":fox_face:": "๐ŸฆŠ",
+  ":butterfly:": "๐Ÿฆ‹",
+  ":deer:": "๐ŸฆŒ",
+  ":gorilla:": "๐Ÿฆ",
+  ":lizard:": "๐ŸฆŽ",
+  ":rhinoceros:": "๐Ÿฆ",
+  ":shrimp:": "๐Ÿฆ",
+  ":squid:": "๐Ÿฆ‘",
+  ":flag_un:": "๐Ÿ‡บ๐Ÿ‡ณ",
+  ":male_farmer:": "๐Ÿ‘จโ€๐ŸŒพ",
+  ":male_cook:": "๐Ÿ‘จโ€๐Ÿณ",
+  ":male_student:": "๐Ÿ‘จโ€๐ŸŽ“",
+  ":male_singer:": "๐Ÿ‘จโ€๐ŸŽค",
+  ":male_artist:": "๐Ÿ‘จโ€๐ŸŽจ",
+  ":male_teacher:": "๐Ÿ‘จโ€๐Ÿซ",
+  ":male_factory_worker:": "๐Ÿ‘จโ€๐Ÿญ",
+  ":male_technologist:": "๐Ÿ‘จโ€๐Ÿ’ป",
+  ":male_office_worker:": "๐Ÿ‘จโ€๐Ÿ’ผ",
+  ":male_mechanic:": "๐Ÿ‘จโ€๐Ÿ”ง",
+  ":male_scientist:": "๐Ÿ‘จโ€๐Ÿ”ฌ",
+  ":male_astronaut:": "๐Ÿ‘จโ€๐Ÿš€",
+  ":male_firefighter:": "๐Ÿ‘จโ€๐Ÿš’",
+  ":female_farmer:": "๐Ÿ‘ฉโ€๐ŸŒพ",
+  ":female_cook:": "๐Ÿ‘ฉโ€๐Ÿณ",
+  ":female_student:": "๐Ÿ‘ฉโ€๐ŸŽ“",
+  ":female_singer:": "๐Ÿ‘ฉโ€๐ŸŽค",
+  ":female_artist:": "๐Ÿ‘ฉโ€๐ŸŽจ",
+  ":female_teacher:": "๐Ÿ‘ฉโ€๐Ÿซ",
+  ":female_factory_worker:": "๐Ÿ‘ฉโ€๐Ÿญ",
+  ":female_technologist:": "๐Ÿ‘ฉโ€๐Ÿ’ป",
+  ":female_office_worker:": "๐Ÿ‘ฉโ€๐Ÿ’ผ",
+  ":female_mechanic:": "๐Ÿ‘ฉโ€๐Ÿ”ง",
+  ":female_scientist:": "๐Ÿ‘ฉโ€๐Ÿ”ฌ",
+  ":female_astronaut:": "๐Ÿ‘ฉโ€๐Ÿš€",
+  ":female_firefighter:": "๐Ÿ‘ฉโ€๐Ÿš’",
+  ":woman_running:": "๐Ÿƒโ€โ™€๏ธ",
+  ":running:": "๐Ÿƒโ€โ™‚๏ธ",
+  ":woman_surfing:": "๐Ÿ„โ€โ™€๏ธ",
+  ":woman_swimming:": "๐ŸŠโ€โ™€๏ธ",
+  ":woman_lifting_weights:": "๐Ÿ‹๏ธโ€โ™€๏ธ",
+  ":weight_lifter:": "๐Ÿ‹๏ธโ€โ™‚๏ธ",
+  ":woman_golfing:": "๐ŸŒ๏ธโ€โ™€๏ธ",
+  ":eye_in_speech_bubble:": "๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ",
+  ":male_doctor:": "๐Ÿ‘จโ€โš•๏ธ",
+  ":male_judge:": "๐Ÿ‘จโ€โš–๏ธ",
+  ":male_pilot:": "๐Ÿ‘จโ€โœˆ๏ธ",
+  ":female_doctor:": "๐Ÿ‘ฉโ€โš•๏ธ",
+  ":female_judge:": "๐Ÿ‘ฉโ€โš–๏ธ",
+  ":female_pilot:": "๐Ÿ‘ฉโ€โœˆ๏ธ",
+  ":woman_facepalming:": "๐Ÿคฆโ€โ™€๏ธ",
+  ":man_facepalming:": "๐Ÿคฆโ€โ™‚๏ธ",
+  ":woman_shrugging:": "๐Ÿคทโ€โ™€๏ธ",
+  ":man_shrugging:": "๐Ÿคทโ€โ™‚๏ธ",
+  ":woman_cartwheeling:": "๐Ÿคธโ€โ™€๏ธ",
+  ":man_cartwheeling:": "๐Ÿคธโ€โ™‚๏ธ",
+  ":woman_juggling:": "๐Ÿคนโ€โ™€๏ธ",
+  ":man_juggling:": "๐Ÿคนโ€โ™‚๏ธ",
+  ":woman_wrestling:": "๐Ÿคผโ€โ™€๏ธ",
+  ":man_wrestling:": "๐Ÿคผโ€โ™‚๏ธ",
+  ":woman_playing_water_polo:": "๐Ÿคฝโ€โ™€๏ธ",
+  ":man_playing_water_polo:": "๐Ÿคฝโ€โ™‚๏ธ",
+  ":woman_playing_handball:": "๐Ÿคพโ€โ™€๏ธ",
+  ":man_playing_handball:": "๐Ÿคพโ€โ™‚๏ธ",
+  ":woman_bouncing_ball:": "โ›น๏ธโ€โ™€๏ธ",
+  ":person_with_ball:": "โ›น๏ธโ€โ™‚๏ธ"
+}
\ No newline at end of file
diff --git a/src/views/Home.vue b/src/views/Home.vue
index 1ae9d0da..a55399a1 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -160,13 +160,17 @@ export default {
     },
     /* Checks if any of the icons are Font Awesome glyphs */
     checkIfFontAwesomeNeeded() {
-      let isFound = false;
+      let isNeeded = false;
+      if (!this.sections) return false;
       this.sections.forEach((section) => {
+        if (section.icon && section.icon.includes('fa-')) isNeeded = true;
         section.items.forEach((item) => {
-          if (item.icon && item.icon.includes('fa-')) isFound = true;
+          if (item.icon && item.icon.includes('fa-')) isNeeded = true;
         });
       });
-      return isFound;
+      const currentTheme = localStorage[localStorageKeys.THEME]; // Some themes require FA
+      if (['material', 'material-dark'].includes(currentTheme)) isNeeded = true;
+      return isNeeded;
     },
     /* Injects font-awesome's script tag, only if needed */
     initiateFontAwesome() {
diff --git a/src/views/Login.vue b/src/views/Login.vue
index 3d16e0bb..4d723e1e 100644
--- a/src/views/Login.vue
+++ b/src/views/Login.vue
@@ -4,6 +4,14 @@
       <h2 class="login-title">Dashy</h2>
       <Input v-model="username" label="Username" class="login-field username" type="text" />
       <Input v-model="password" label="Password" class="login-field password" type="password" />
+      <label>Remember me for</label>
+      <v-select
+        v-model="timeout"
+        :options="dropDownMenu"
+        label="label"
+        :selectOnTab="true"
+        class="login-time-dropdown"
+      />
       <Button class="login-button" :click="submitLogin">Login</Button>
       <transition name="bounce">
       <p :class="`login-error-message ${status}`" v-show="message">{{ message }}</p>
@@ -30,6 +38,13 @@ export default {
       password: '',
       message: '',
       status: 'waiting', // wating, error, success
+      timeout: { label: 'Never', time: 0 },
+      dropDownMenu: [ // Data for timeout dropdown menu, label + value
+        { label: 'Never', time: 0 }, // Time is specified in ms
+        { label: '4 Hours', time: 14400 * 1000 },
+        { label: '1 Day', time: 86400 * 1000 },
+        { label: '1 Week', time: 604800 * 1000 },
+      ],
     };
   },
   components: {
@@ -38,11 +53,12 @@ export default {
   },
   methods: {
     submitLogin() {
+      const timeout = this.timeout.time || 0;
       const response = checkCredentials(this.username, this.password, this.appConfig.auth || []);
       this.message = response.msg; // Show error or success message to the user
       this.status = response.correct ? 'success' : 'error';
       if (response.correct) { // Yay, credentials were correct :)
-        login(this.username, this.password); // Login, to set the cookie
+        login(this.username, this.password, timeout); // Login, to set the cookie
         setTimeout(() => { // Wait a short while, then redirect back home
           router.push({ path: '/' });
         }, 250);
@@ -130,4 +146,30 @@ export default {
   100% { transform: scale(1); }
 }
 
+.v-select.login-time-dropdown {
+  margin: 0.5rem 0;
+  .vs__dropdown-toggle {
+    border-color: var(--login-form-color);
+    background: var(--login-form-background);
+    span.vs__selected {
+      color: var(--login-form-color);
+    }
+    .vs__actions svg path { fill: var(--login-form-color); }
+  }
+  ul.vs__dropdown-menu {
+    background: var(--login-form-background);
+    border-color: var(--login-form-color);
+    li {
+      color: var(--login-form-color);
+      &:hover {
+        color: var(--login-form-background);
+        background: var(--login-form-color);
+      }
+      &.vs__dropdown-option--highlight {
+        color: var(--login-form-background) !important;
+        background: var(--login-form-color);
+      }
+    }
+  }
+}
 </style>
diff --git a/vue.config.js b/vue.config.js
index a6d2c576..95d791e7 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -9,8 +9,8 @@ module.exports = {
   chainWebpack: config => {
     config.module.rules.delete('svg');
   },
-
   configureWebpack: {
+    performance: { hints: false },
     module: {
       rules: [
         { test: /.svg$/, loader: 'vue-svg-loader' },
@@ -26,12 +26,12 @@ module.exports = {
       }),
     ],
   },
-
   pwa: {
     name: 'Dashy',
     manifestPath: './manifest.json',
     themeColor: '#00af87',
     msTileColor: '#0b1021',
+    mode: 'production',
     iconPaths: {
       manifestCrossorigin: 'use-credentials',
       favicon64: './web-icons/favicon-64x64.png',