From 542a3edd00d1f0040727c4968eaf769c5ce85d42 Mon Sep 17 00:00:00 2001 From: Norm Rasmussen Date: Tue, 19 Sep 2023 17:11:37 -0400 Subject: [PATCH] First post up! I can't get CSS or JS to load via an nginx server though. The MIME type isn't supported. Looks like others are having issues, but no answers yet. --- content/posts/npm_to_nginx_tutorial.md | 245 ++++++++++ dark-theme-config.toml | 56 +++ hugo.toml | 14 +- public/404.html | 132 ++++++ public/bundle.min.js | 45 ++ public/categories/index.html | 134 ++++++ public/categories/index.xml | 10 + ...77666d37e9feb10efb12626040c729c01d2941.css | 1 + public/fonts/FiraCode-Bold.woff | Bin 0 -> 97028 bytes public/fonts/FiraCode-Regular.woff | Bin 0 -> 97744 bytes public/img/theme-colors/blue.png | Bin 0 -> 189 bytes public/img/theme-colors/green.png | Bin 0 -> 190 bytes public/img/theme-colors/orange.png | Bin 0 -> 190 bytes public/img/theme-colors/pink.png | Bin 0 -> 190 bytes public/img/theme-colors/red.png | Bin 0 -> 189 bytes public/index.html | 182 ++++++++ public/index.xml | 281 ++++++++++++ ...8415d19d1588e1d9a4f3328f0614c52f1a3963b.js | 1 + public/page/1/index.html | 10 + public/posts/index.html | 171 +++++++ public/posts/index.xml | 281 ++++++++++++ public/posts/npm_to_nginx_tutorial/index.html | 418 ++++++++++++++++++ public/posts/page/1/index.html | 10 + public/sitemap.xml | 25 ++ public/styles.css | 3 + public/styles.css.map | 45 ++ public/tags/index.html | 150 +++++++ public/tags/index.xml | 31 ++ public/tags/self-hosted/index.html | 172 +++++++ public/tags/self-hosted/index.xml | 281 ++++++++++++ public/tags/self-hosted/page/1/index.html | 10 + public/tags/tutorial/index.html | 172 +++++++ public/tags/tutorial/index.xml | 281 ++++++++++++ public/tags/tutorial/page/1/index.html | 10 + ...s_3b33337114e481782feeb60752452e17.content | 3 + ...scss_3b33337114e481782feeb60752452e17.json | 1 + themes/terminal | 1 + 37 files changed, 3173 insertions(+), 3 deletions(-) create mode 100644 content/posts/npm_to_nginx_tutorial.md create mode 100644 dark-theme-config.toml create mode 100644 public/404.html create mode 100644 public/bundle.min.js create mode 100644 public/categories/index.html create mode 100644 public/categories/index.xml create mode 100644 public/css/index.min.d769fcae9b652a4ac8ee5ab1bc267604bd6eb6156d80edb2184dcdaec0bf1a0275c755605e14086296051d441377666d37e9feb10efb12626040c729c01d2941.css create mode 100644 public/fonts/FiraCode-Bold.woff create mode 100644 public/fonts/FiraCode-Regular.woff create mode 100644 public/img/theme-colors/blue.png create mode 100644 public/img/theme-colors/green.png create mode 100644 public/img/theme-colors/orange.png create mode 100644 public/img/theme-colors/pink.png create mode 100644 public/img/theme-colors/red.png create mode 100644 public/index.html create mode 100644 public/index.xml create mode 100644 public/js/index.min.76f28ad9d7f1e1b68cfc55f930e89f7439bf72c0def552fa19d37555afaaaa776fc8533a913ac30e0162a7fb08415d19d1588e1d9a4f3328f0614c52f1a3963b.js create mode 100644 public/page/1/index.html create mode 100644 public/posts/index.html create mode 100644 public/posts/index.xml create mode 100644 public/posts/npm_to_nginx_tutorial/index.html create mode 100644 public/posts/page/1/index.html create mode 100644 public/sitemap.xml create mode 100644 public/styles.css create mode 100644 public/styles.css.map create mode 100644 public/tags/index.html create mode 100644 public/tags/index.xml create mode 100644 public/tags/self-hosted/index.html create mode 100644 public/tags/self-hosted/index.xml create mode 100644 public/tags/self-hosted/page/1/index.html create mode 100644 public/tags/tutorial/index.html create mode 100644 public/tags/tutorial/index.xml create mode 100644 public/tags/tutorial/page/1/index.html create mode 100644 resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.content create mode 100644 resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.json create mode 160000 themes/terminal diff --git a/content/posts/npm_to_nginx_tutorial.md b/content/posts/npm_to_nginx_tutorial.md new file mode 100644 index 0000000..7061b12 --- /dev/null +++ b/content/posts/npm_to_nginx_tutorial.md @@ -0,0 +1,245 @@ ++++ +title = 'Tutorial: Move from NginxProxyManager to Nginx' +date = 2023-08-05T15:23:51-05:00 +draft = false +tags = ["tutorial", "self-hosted", ] ++++ + +A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for [this reddit +post](https://www.reddit.com/r/selfhosted/comments/15j4v80/minitutorial_migrating_from_nginx_proxy_manager/) and to post this [my Github profile](https://github.com/Normanras/Npm_to_Nginx). Thought my website would also be a good place to share it for any passers-by. + +## Goal + +To give clear instructions to help users migrate from using [Nginx Proxy Manager](https://nginxproxymanager.com/) (NPM) to standard [Nginx](https://docs.nginx.com/). This tutorial is not exhaustive and there are many other implementations of this transition. I would recommend checking out the many Nginx [Documentation Sites](http://nginx.org/en/docs/) and tutorials to learn more. + +### Introduction + +If you're anything like me and you got into the self-hosted/homelab/diy game sometime within the last 5 years, you've likely been recommended to use Nginx Proxy Manager as one of the choice Reverse Proxy services. If you've also been paying attention to various self-hosted communities, you may have also come across Christian Lempa's Video on [trusting smaller self hosted projects and tools](https://youtu.be/uaixCKTaqY0). + +*Spoilers:* He roasts NPM in his video and towards the end says he won't be using NPM anymore. He also, perhaps purposely, doesn't share which tool he will be migrating to. + +Whether you follow Christian away from NPM or not, it dawned on me that while NPM is using a very trusted web server and reverse proxy under the hood, I hadn't taken the time to understand how an Nginx Config actually worked. Since NPM was already creating most of the files for Nginx, I got to reading through all the files and reworking them so that I could begin using Nginx without the NPM gui. + +*Contributing: This is not all encompassing of Nginx possibilities. Including instructions for various installation methods, using OpenResty, and any other migrations or use cases would help the community. If you'd like to add in additional information on how to migrate from NPM to Nginx, that is welcome. Simply submit a PR with your steps.* + +### TL;DR - Quick Steps + +1. Copy the following contents (including sub-directories) from the NPM `/data/nginx` directory to the Nginx `/etc/nginx` folder: + + * `proxy_hosts` > `sites-available` + * `conf.d` > `conf.d` + * `snippets` > `snippets` + * `custom_ssl` > `custom_ssl` (if applicable) + +2. Edit each file in your `sites-available` directory and update the paths. Most will change from `/data/nginx/` to `/etc/nginx`. +3. Edit your `nginx.conf` file and ensure the following two paths are there: + + * `include /etc/nginx/conf.d/*.conf;` and `include /etc/nginx/sites-enabled/*;` + +4. Symlink the proxy host files in `sites-available` to `sites-enabled` + + * `ln -s * ./sites-enabled` + +5. Test your changes with `nginx -t`. Make appropriate changes if there are error messages. + +### Pre-requisites & Assumptions + +I am using an Ubuntu VM with NPM and it's db as a Docker Container while Nginx is installed natively on the machine. You don't have to use this setup exactly, but I am making a few assumptions as to what you should have access to before you begin. I am also using custom SSL certs, but theoretically, the transition should be the same when using Lets Encrypt. + +I've added some example files to show before and after changes to this repo and outlined file trees below. + +* You understand the basics of what a Reverse Proxy is doing and are sticking with some stock settings (like exposing port 80 an 443). +* You've installed [NPM](https://nginxproxymanager.com/setup/) and [Nginx](https://www.nginx.com/resources/wiki/start/topics/tutorials/install/) using your preferred method. +* You have access to both NPMs file tree and Nginx's. +* If using NPM in docker, make sure you've mapped a local volume on the host to the container. +* My setup using docker-compose is the following: `/user/nginx/data:/data`. +* Know where your Nginx files are. If using docker, same as above, make sure your container directories are mapped to the host. +* For a linux install, they should be accessible at `/etc/nginx`. +* You know how to edit files at the command line using `nano`, `vi`, `vim`, `neovim`, `emacs`, or something else. + +### Nginx Files + +Nginx uses the `nginx.conf` file and within that file, it will include your proxy files. These exist under `./nginx/sites-enabled/`. In the main `nginx.conf` file, the line `include /etc/nginx/sites-enabled/*;` will bring in those files to the config file, making the proxies accessible. + +### How to Transition - Detailed Version + +1. Since NPM uses Nginx under the hood, they are both, by default, going to try and use ports 80 and 443 to serve up your apps and content. Turn off both systems. + + * Docker: `docker stop [app_container, db_container]` + * Systemd: `systemctl stop nginx` + +2. Copy your `proxy_host` (NPM) files to the `sites-available` (Nginx) folder. +`cp -r /user/nginx/data/nginx/proxy_hosts/* /etc/nginx/sites-available/` + +3. Nginx doesn't really care what the files are called, but NPM numbers them based on the order in which you added them in the GUI. I find it better to rename them to what service they actually serve up for easier identification later. + +4. Copy your `custom_ssl` folder from NPM to the `custom_ssl` folder in Nginx. See the following step for the various default paths in both systems. + + * `cp -r /user/nginx/data/custom_ssl/* /etc/nginx/custom_ssl/` + +5. Copy the `conf.d` folder from NPM to the `conf.d` folder in Nginx. *Note: For some reason, not all of the files in + the proxy files were actually in my `conf.d` directory. If you're missing any files, please download and/or copy and + paste them from the [NPM Repo](https://github.com/NginxProxyManager/nginx-proxy-manager/tree/fa851b61da3fe3726d1a04c25e69d36e79edea2d/docker/rootfs/etc/nginx/conf.d/include)* + + * `cp -r /user/nginx/data/nginx/conf.d /etc/nginx/` + +6. If you had any additional files included in the Advanced section of an NPM Proxy Host, make sure you copy them over. For my setup and this tutorial, they were all located in the `snippets` directory. + + * `cp -r /user/nginx/data/nginx/snippets/* /etc/nginx/snippets/` + +7. There are a number of lines that need to be updated in each proxy configuration file to make them work with Nginx. I've placed additional comments in [`./proxy_host/npm_proxy.conf`](./proxy_host/npm_proxy.conf) file. The line changes are the following: + + 1. Custom SSL path: + + * NPM path: `/data/custom_ssl...` + * Nginx path: `/etc/nginx/custom_ssl...` + + 2. conf.d: + + * The paths should remain the same. However, if you changed the path for `conf.d` in Nginx and differed in step 5, above, make sure you use the correct path. + + 3. Access & Error Logs + + * NPM path: `/data/logs/...` + * Nginx path: `/var/log/nginx/...` + +8. Double Check all your paths! If this is your first time using Nginx, make sure every directory is correct! Save your work. +9. Navigate to the `nginx.conf` file which is located at `/etc/nginx/`. You can see the one I am using in this repo. +10. Make sure that you have the following two lines in the main conf file and that they are pointing to the appropriate directories in the nginx directory path. + * `include /etc/nginx/conf.d/*.conf;` and `include /etc/nginx/sites-enabled/*;` +11. You'll notice that you ensured there was a `sites-enabled` directory in the configuration file, but you changed all your proxy host config files in `sites-available`! Good eye, all that's left is to symlink the files to `sites-enabled` so that nginx can start using them. +12. To symlink the available proxy files run the following command within the `sites-available` directory: + * `ln -s * ./sites-enabled` +13. Once you're confident that you've done all the above correctly, you can test your setup using nginx command and flags. While in the directory with your `nginx.conf` file - usually `/etc/nginx` - run the following command: `nginx -t`. +14. If all is working as expected you should see the below output. If it returns any errors, fix them appropriately. It will usually tell you what line is throwing the error. In this case, there's a high likelihood that it will be path error. + +```bash +nginx: the configuration file /etc/nginx/nginx.conf syntax is ok +nginx: configuration file /etc/nginx/nginx.conf test is successful +``` + +And that's it! You can now restart your nginx service on the host and access all your sites just as if you were using Nginx Proxy Manager! Make sure you take a look at your logs and system's status should nginx fail to start. + +### Additional Information/Appendix + +#### File Trees for NPM (in container) and Nginx (on host) + +*I did not expand every directory in these trees. Only the ones that are pertinent for reference in this tutorial.* + +#### NGINX + +```bash +├── conf.d +│   └── include +│   ├── assets.conf +│   ├── block-exploits.conf +│   ├── force-ssl.conf +│   ├── ip_ranges.conf +│   ├── proxy.conf +│   └── resolvers.conf +├── custom_ssl +│   ├── npm-1 +│   │   ├── fullchain.pem +│   │   └── privkey.pem +│   ├── npm-2 +│   │   ├── fullchain.pem +│   │   └── privkey.pem +│   └── npm-3 +│   ├── fullchain.pem +│   └── privkey.pem +├── fastcgi.conf +├── fastcgi_params +├── koi-utf +├── koi-win +├── mime.types +├── modules-available +├── modules-enabled +├── nginx.conf +├── proxy_params +├── scgi_params +├── sites-available +│   ├── auth.conf +│   ├── bitwarden.conf +│   ├── codehub.conf +│   ├── default.backup +│   ├── files.conf +│   ├── notes.conf +│   ├── photos.conf +│   ├── rsmsn-root.conf +│   ├── wordle.conf +│   └── wordle-it.conf +├── sites-enabled +│   ├── auth.conf -> /etc/nginx/sites-available/auth.conf +│   ├── bitwarden.conf -> /etc/nginx/sites-available/bitwarden.conf +│   ├── codehub.conf -> /etc/nginx/sites-available/codehub.conf +│   ├── files.conf -> /etc/nginx/sites-available/files.conf +│   ├── notes.conf -> /etc/nginx/sites-available/notes.conf +│   ├── photos.conf -> /etc/nginx/sites-available/photos.conf +│   ├── wordle.conf -> /etc/nginx/sites-available/wordle.conf +│   └── wordle-it.conf -> /etc/nginx/sites-available/wordle-it.conf +├── snippets +│   ├── authelia-authrequest-basic.conf +│   ├── authelia-authrequest.conf +│   ├── authelia-authrequest-detect.conf +│   ├── authelia-location-basic.conf +│   ├── authelia-location.conf +│   ├── authelia-location-detect.conf +│   ├── fastcgi-php.conf +│   ├── proxy.conf +│   └── snakeoil.conf +├── uwsgi_params +└── win-utf +``` + +#### NPM + +```bash +├── data +│   ├── access +│   ├── custom_ssl +│   │   ├── npm-1 +│   │   │   ├── fullchain.pem +│   │   │   └── privkey.pem +│   │   ├── npm-2 +│   │   │   ├── fullchain.pem +│   │   │   └── privkey.pem +│   │   └── npm-3 +│   │   ├── fullchain.pem +│   │   └── privkey.pem +│   ├── keys.json +│   ├── letsencrypt-acme-challenge +│   ├── logs +│   ├── mysql +│   └── nginx +│   ├── custom +│   ├── dead_host +│   ├── default_host +│   ├── default_www +│   ├── dummycert.pem +│   ├── dummykey.pem +│   ├── proxy_host +│   │   ├── 10.conf +│   │   ├── 11.conf +│   │   ├── 12.conf +│   │   ├── 13.conf +│   │   ├── 15.conf +│   │   ├── 1.conf +│   │   ├── 2.conf +│   │   ├── 4.conf +│   │   ├── 5.conf +│   │   └── 6.conf +│   ├── redirection_host +│   ├── snippets +│   │   ├── authelia-authrequest-basic.conf +│   │   ├── authelia-authrequest.conf +│   │   ├── authelia-authrequest-detect.conf +│   │   ├── authelia-location-basic.conf +│   │   ├── authelia-location.conf +│   │   ├── authelia-location-detect.conf +│   │   └── proxy.conf +│   ├── stream +│   └── temp +├── docker-compose.yml +└── letsencrypt +└── renewal-hooks +``` diff --git a/dark-theme-config.toml b/dark-theme-config.toml new file mode 100644 index 0000000..d6fe9c5 --- /dev/null +++ b/dark-theme-config.toml @@ -0,0 +1,56 @@ +[params] + [params.site] + faviconUrl = "" + localCss = [] + externalCss = [] + localJs = [] + externalJs = [] + [params.header] + title = "My New Hugo Site" + subtitle = "A Site Built by Hugo" + [params.header.logo] + imgUrl = "" + logoLink = "" + + [params.footer] + copyrightStr = "All Rights Reserved ®." + counter = true + language = true + hugoVersion = true + theme = true + modifiedTime = true + dateFormat = "Jan 02 2006 15:04:05" + gitHash = true + + [params.footer.socialLink] + github = "" + facebook = "" + twitter = "" + email = "" + linkedin = "" + instagram = "" + telegram = "" + medium = "" + vimeo = "" + youtube = "" + + [params.globalFrontmatter] + author = "Jing Wang" + description = "This is my new hugo site" + keywords = "hugo,site,new" + + [params.homePage] + siteLongDescription = "Hugo is a fast and easy-to-use static website generator written in Go. It renders a complete HTML website from content and templates in a directory, utilizing Markdown files for metadata. It's optimized for speed and suitable for various website types." + + siteLongDescriptionTitle = "Start" + showRecentPostsBlock = true + numOfRecentPosts = 5 + recentPostShowUrl = true + + [params.page] + includeToc = true + showAuthor = true + showDate = true + dateFormat = "2006.01.02" + showTimeToRead = true + showBreadcrumb = true diff --git a/hugo.toml b/hugo.toml index 1e733fb..570d826 100644 --- a/hugo.toml +++ b/hugo.toml @@ -1,8 +1,13 @@ -baseURL = 'localhost' +baseURL = 'https://selfhosted.rsmsn.co/' +relativeURLs = true languageCode = 'en-us' title = 'Rsmsn Blog' subtitle = 'A mostly technical blog & series of experiences working in tech and my homelab' -theme = 'dark-theme-editor' +theme = 'terminal' +themesDir = './themes/' + +[params] + dateFormat = "02 Jan 2006" [params.globalFrontmatter] author = "Norm Rasmussen" @@ -13,6 +18,9 @@ theme = 'dark-theme-editor' includeToc = true showAuthor = true showDate = true - dateFormate = "2023.09.14" showTimeToRead = true showBreadcrumb = true + +[mediaTypes] +[mediaTypes."application/javascript"] +suffixes = ["js","jsm","mjs"] diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..ced9554 --- /dev/null +++ b/public/404.html @@ -0,0 +1,132 @@ + + + + + 404 Page not found :: Rsmsn Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+ + +
+ +
+

404 — Page not found...

+ +
+ Back to home page → +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ + + diff --git a/public/bundle.min.js b/public/bundle.min.js new file mode 100644 index 0000000..6867157 --- /dev/null +++ b/public/bundle.min.js @@ -0,0 +1,45 @@ +(()=>{var t=document.querySelector(".container"),e=document.querySelectorAll(".menu");document.body.addEventListener("click",()=>{e.forEach(e=>{e.classList.contains("open")&&e.classList.remove("open")})}),window.addEventListener("resize",()=>{e.forEach(e=>{e.classList.remove("open")})}),e.forEach(n=>{const o=n.querySelector(".menu__trigger"),s=n.querySelector(".menu__dropdown");o.addEventListener("click",o=>{o.stopPropagation(),n.classList.contains("open")?n.classList.remove("open"):(e.forEach(e=>e.classList.remove("open")),n.classList.add("open")),s.getBoundingClientRect().right>t.getBoundingClientRect().right&&(s.style.left="auto",s.style.right=0)}),s.addEventListener("click",e=>e.stopPropagation())})})(),(()=>{var e=Object.getOwnPropertyNames,t=(t,n)=>function(){return n||(0,t[e(t)[0]])((n={exports:{}}).exports,n),n.exports},n=t({""(e,t){var s="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},n=function(e){var s,c,o=/\blang(?:uage)?-([\w-]+)\b/i,d=0,i={},t={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof n?new n(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);f+=u.value.length,u=u.next){if(b=u.value,o.length>s.length)return;if(!(b instanceof n)){if(O=1,z){if(!(g=l(N,f,s,S)))break;var E=g.index,L=g.index+g[0].length,p=f;for(p+=u.value.length;p<=E;)u=u.next,p+=u.value.length;if(p-=u.value.length,f=p,u.value instanceof n)continue;for(j=u;j!==o.tail&&(pd.reach&&(d.reach=k),w=u.prev,A&&(w=a(o,w,A),f+=A.length),h(o,w,O),D=new n(_,M?t.tokenize(C,M):C,R,C),(u=a(o,w,D),T&&a(o,u,T),1d.reach&&(d.reach=x.reach))}}}}}(e,o,s,o.head,0),function(e){for(var n=[],t=e.head.next;t!==e.tail;)n.push(t.value),t=t.next;return n}(o)},hooks:{all:{},add:function(e,n){var s=t.hooks.all;s[e]=s[e]||[],s[e].push(n)},run:function(e,n){var o,i,s=t.hooks.all[e];if(s&&s.length)for(i=0;o=s[i++];)o(n)}},Token:n};function n(e,t,n,s){this.type=e,this.content=t,this.alias=n,this.length=0|(s||"").length}function l(e,t,n,s){e.lastIndex=t;var i,o=e.exec(n);return o&&s&&o[1]&&(i=o[1].length,o.index+=i,o[0]=o[0].slice(i)),o}function u(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function a(e,t,n){var o=t.next,s={value:n,prev:t,next:o};return t.next=s,o.prev=s,e.length++,s}function h(e,t,n){for(var s=t.next,o=0;o"+o.content+""},!e.document)return e.addEventListener&&(t.disableWorkerMessageHandler||e.addEventListener("message",function(n){var s=JSON.parse(n.data),o=s.language,i=s.code,a=s.immediateClose;e.postMessage(t.highlight(i,t.languages[o],o)),a&&e.close()},!1)),t;s=t.util.currentScript();function r(){t.manual||t.highlightAll()}return(s&&(t.filename=s.src,s.hasAttribute("data-manual")&&(t.manual=!0)),!t.manual)&&(c=document.readyState,"loading"===c||"interactive"===c&&s&&s.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)),t}(s);"undefined"!=typeof t&&t.exports&&(t.exports=n),"undefined"!=typeof global&&(global.Prism=n),n.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>/=$<%]+(?:\s(?:\s*[^\s>/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>/]+/,inside:{namespace:/^[^\s>/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},n.languages.markup.tag.inside["attr-value"].inside.entity=n.languages.markup.entity,n.languages.markup.doctype.inside["internal-subset"].inside=n.languages.markup,n.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(n.languages.markup.tag,"addInlined",{value:function(e,t){var o,i,s={};s["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:n.languages[t]},s.cdata=/^$/i,o={"included-cdata":{pattern://i,inside:s}},o["language-"+t]={pattern:/[\s\S]+/,inside:n.languages[t]},i={},i[e]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:o},n.languages.insertBefore("markup","cdata",i)}}),Object.defineProperty(n.languages.markup.tag,"addAttribute",{value:function(e,t){n.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(`(^|["'\\s])(?:`+e+`)\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s'">=]+(?=[\\s>]))`,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:n.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),n.languages.html=n.languages.markup,n.languages.mathml=n.languages.markup,n.languages.svg=n.languages.markup,n.languages.xml=n.languages.extend("markup",{}),n.languages.ssml=n.languages.xml,n.languages.atom=n.languages.xml,n.languages.rss=n.languages.xml,!function(e){var n,t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+`|(?:[^\\\\ +()"']|\\\\[^])*)\\)`,"i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,n=e.languages.markup,n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(n),n.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},n.languages.javascript=n.languages.extend("clike",{"class-name":[n.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),n.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,n.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:n.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:n.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:n.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:n.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:n.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),n.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:n.languages.javascript}},string:/[\s\S]+/}}}),n.languages.markup&&(n.languages.markup.tag.addInlined("script","javascript"),n.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),n.languages.js=n.languages.javascript,n.languages.actionscript=n.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|override|set|static)\b/,operator:/\+\+|--|(?:[+\-*/%^]|&&?|\|\|?|<>?>?|[!=]=?)=?|[~?@]/}),n.languages.actionscript["class-name"].alias="function",n.languages.markup&&n.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:n.languages.markup}}),n.languages.apacheconf={comment:/#.*/,"directive-inline":{pattern:/(^[\t ]*)\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|Add(?:Alt|AltByEncoding|AltByType|Charset|DefaultCharset|Description|Encoding|Handler|Icon|IconByEncoding|IconByType|InputFilter|Language|ModuleInfo|OutputFilter|OutputFilterByType|Type)|Alias|AliasMatch|Allow(?:CONNECT|EncodedSlashes|Methods|Override|OverrideList)?|Anonymous(?:_LogEmail|_MustGiveEmail|_NoUserID|_VerifyEmail)?|AsyncRequestWorkerFactor|Auth(?:BasicAuthoritative|BasicFake|BasicProvider|BasicUseDigestAlgorithm|DBDUserPWQuery|DBDUserRealmQuery|DBMGroupFile|DBMType|DBMUserFile|Digest(?:Algorithm|Domain|NonceLifetime|Provider|Qop|ShmemSize)|Form(?:Authoritative|Body|DisableNoStore|FakeBasicAuth|Location|LoginRequiredLocation|LoginSuccessLocation|LogoutLocation|Method|Mimetype|Password|Provider|SitePassphrase|Size|Username)|GroupFile|LDAP(?:AuthorizePrefix|BindAuthoritative|BindDN|BindPassword|CharsetConfig|CompareAsUser|CompareDNOnServer|DereferenceAliases|GroupAttribute|GroupAttributeIsDN|InitialBindAsUser|InitialBindPattern|MaxSubGroupDepth|RemoteUserAttribute|RemoteUserIsDN|SearchAsUser|SubGroupAttribute|SubGroupClass|Url)|Merging|Name|Type|UserFile|nCache(?:Context|Enable|ProvideFor|SOCache|Timeout)|nzFcgiCheckAuthnProvider|nzFcgiDefineProvider|zDBDLoginToReferer|zDBDQuery|zDBDRedirectQuery|zDBMType|zSendForbiddenOnFailure)|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferSize|BufferedLogs|CGIDScriptTimeout|CGIMapExtension|Cache(?:DefaultExpire|DetailHeader|DirLength|DirLevels|Disable|Enable|File|Header|IgnoreCacheControl|IgnoreHeaders|IgnoreNoLastMod|IgnoreQueryString|IgnoreURLSessionIdentifiers|KeyBaseURL|LastModifiedFactor|Lock|LockMaxAge|LockPath|MaxExpire|MaxFileSize|MinExpire|MinFileSize|NegotiatedDocs|QuickHandler|ReadSize|ReadTime|Root|Socache(?:MaxSize|MaxTime|MinTime|ReadSize|ReadTime)?|StaleOnError|StoreExpired|StoreNoStore|StorePrivate)|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DTracePrivileges|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|Deflate(?:BufferSize|CompressionLevel|FilterNote|InflateLimitRequestBody|InflateRatio(?:Burst|Limit)|MemLevel|WindowSize)|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtFilterDefine|ExtFilterOptions|ExtendedStatus|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|Heartbeat(?:Address|Listen|MaxServers|Storage)|HostnameLookups|ISAPI(?:AppendLogToErrors|AppendLogToQuery|CacheFile|FakeAsync|LogNotSupported|ReadAheadBuffer)|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|Index(?:HeadInsert|Ignore|IgnoreReset|Options|OrderDefault|StyleSheet)|InputSed|KeepAlive|KeepAliveTimeout|KeptBodySize|LDAP(?:CacheEntries|CacheTTL|ConnectionPoolTTL|ConnectionTimeout|LibraryDebug|OpCacheEntries|OpCacheTTL|ReferralHopLimit|Referrals|Retries|RetryDelay|SharedCacheFile|SharedCacheSize|Timeout|TrustedClientCert|TrustedGlobalCert|TrustedMode|VerifyServerCert)|LanguagePriority|Limit(?:InternalRecursion|Request(?:Body|FieldSize|Fields|Line)|XMLRequestBody)|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|Lua(?:Hook(?:AccessChecker|AuthChecker|CheckUserID|Fixups|InsertFilter|Log|MapToStorage|TranslateName|TypeChecker)|Inherit|InputFilter|MapHandler|OutputFilter|PackageCPath|PackagePath|QuickHandler|Root|Scope)|MMapFile|Max(?:ConnectionsPerChild|KeepAliveRequests|MemFree|RangeOverlaps|RangeReversals|Ranges|RequestWorkers|SpareServers|SpareThreads|Threads)|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|ModMimeUsePathInfo|ModemStandard|MultiviewsMatch|Mutex|NWSSLTrustedCerts|NWSSLUpgradeable|NameVirtualHost|NoProxy|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|Proxy(?:AddHeaders|BadHeader|Block|Domain|ErrorOverride|ExpressDBMFile|ExpressDBMType|ExpressEnable|FtpDirCharset|FtpEscapeWildcards|FtpListOnWildcard|HTML(?:BufSize|CharsetOut|DocType|Enable|Events|Extended|Fixups|Interp|Links|Meta|StripComments|URLMap)|IOBufferSize|MaxForwards|Pass(?:Inherit|InterpolateEnv|Match|Reverse|ReverseCookieDomain|ReverseCookiePath)?|PreserveHost|ReceiveBufferSize|Remote|RemoteMatch|Requests|SCGIInternalRedirect|SCGISendfile|Set|SourceAddress|Status|Timeout|Via)|RLimitCPU|RLimitMEM|RLimitNPROC|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIP(?:Header|InternalProxy|InternalProxyList|ProxiesHeader|TrustedProxy|TrustedProxyList)|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|Rewrite(?:Base|Cond|Engine|Map|Options|Rule)|SSIETag|SSIEndTag|SSIErrorMsg|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSL(?:CACertificateFile|CACertificatePath|CADNRequestFile|CADNRequestPath|CARevocationCheck|CARevocationFile|CARevocationPath|CertificateChainFile|CertificateFile|CertificateKeyFile|CipherSuite|Compression|CryptoDevice|Engine|FIPS|HonorCipherOrder|InsecureRenegotiation|OCSP(?:DefaultResponder|Enable|OverrideResponder|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|UseRequestNonce)|OpenSSLConfCmd|Options|PassPhraseDialog|Protocol|Proxy(?:CACertificateFile|CACertificatePath|CARevocation(?:Check|File|Path)|CheckPeer(?:CN|Expire|Name)|CipherSuite|Engine|MachineCertificate(?:ChainFile|File|Path)|Protocol|Verify|VerifyDepth)|RandomSeed|RenegBufferSize|Require|RequireSSL|SRPUnknownUserSeed|SRPVerifierFile|Session(?:Cache|CacheTimeout|TicketKeyFile|Tickets)|Stapling(?:Cache|ErrorCacheTimeout|FakeTryLater|ForceURL|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|ReturnResponderErrors|StandardCacheTimeout)|StrictSNIVHostCheck|UseStapling|UserName|VerifyClient|VerifyDepth)|Satisfy|ScoreBoardFile|Script(?:Alias|AliasMatch|InterpreterSource|Log|LogBuffer|LogLength|Sock)?|SecureListen|SeeRequestTail|SendBufferSize|Server(?:Admin|Alias|Limit|Name|Path|Root|Signature|Tokens)|Session(?:Cookie(?:Name|Name2|Remove)|Crypto(?:Cipher|Driver|Passphrase|PassphraseFile)|DBD(?:CookieName|CookieName2|CookieRemove|DeleteLabel|InsertLabel|PerUser|SelectLabel|UpdateLabel)|Env|Exclude|Header|Include|MaxAge)?|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadStackSize|ThreadsPerChild|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|Virtual(?:DocumentRoot|ScriptAlias)(?:IP)?|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/im,lookbehind:!0,alias:"property"},"directive-block":{pattern:/<\/?\b(?:Auth[nz]ProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|Require(?:All|Any|None)|VirtualHost)\b.*>/i,inside:{"directive-block":{pattern:/^<\/?\w+/,inside:{punctuation:/^<\/?/},alias:"tag"},"directive-block-parameter":{pattern:/.*[^>]/,inside:{punctuation:/:/,string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}}},alias:"attr-value"},punctuation:/>/},alias:"tag"},"directive-flags":{pattern:/\[(?:[\w=],?)+\]/,alias:"keyword"},string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}},variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/,regex:/\^?.*\$|\^.*\$?/},n.languages.applescript={comment:[/\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/,/--.+/,/#.+/],string:/"(?:\\.|[^"\\\r\n])*"/,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e-?\d+)?\b/i,operator:[/[&=≠≤≥*+\-/÷^]|[<>]=?/,/\b(?:(?:start|begin|end)s? with|(?:(?:does not|doesn't) contain|contains?)|(?:is|isn't|is not) (?:in|contained by)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:(?:does not|doesn't) come|comes) (?:before|after)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equals|equal to|isn't|is not)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|or|div|mod|as|not))\b/],keyword:/\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b/,class:{pattern:/\b(?:alias|application|boolean|class|constant|date|file|integer|list|number|POSIX file|real|record|reference|RGB color|script|text|centimetres|centimeters|feet|inches|kilometres|kilometers|metres|meters|miles|yards|square feet|square kilometres|square kilometers|square metres|square meters|square miles|square yards|cubic centimetres|cubic centimeters|cubic feet|cubic inches|cubic metres|cubic meters|cubic yards|gallons|litres|liters|quarts|grams|kilograms|ounces|pounds|degrees Celsius|degrees Fahrenheit|degrees Kelvin)\b/,alias:"builtin"},punctuation:/[{}():,¬«»《》]/},!function(e){var n="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",o={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},t={bash:o,environment:{pattern:RegExp("\\$"+n),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!/]|##?|%%?|\^\^?|,,?/,punctuation:/[[\]]/,environment:{pattern:RegExp("(\\{)"+n),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+n),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:t},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:o}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:t},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:t.entity}}],environment:{pattern:RegExp("\\$?"+n),alias:"constant"},variable:t.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},o.inside=e.languages.bash;for(var i=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=t.variable[1].inside,s=0;s>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),n.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},n.languages.c.string],comment:n.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:n.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete n.languages.c.boolean,!function(e){function n(e,t){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+t[+n]+")"})}function t(e,t,s){return RegExp(n(e,t),s||"")}function r(e,t){for(var n=0;n>/g,function(){return"(?:"+e+")"});return e.replace(/<>/g,"[^\\s\\S]")}var S="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",c="class enum interface record struct",_="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",f="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var v=l(c),d=RegExp(l(S+" "+c+" "+_+" "+f)),z=l(c+" "+_+" "+f),T=l(S+" "+c+" "+f),u=r("<(?:[^<>;=+\\-*/%&|^]|<>)*>",2),h=r("\\((?:[^()]|<>)*\\)",2),o="@?\\b[A-Za-z_]\\w*\\b",m=n("<<0>>(?:\\s*<<1>>)?",[o,u]),i=n("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*",[z,m]),p="\\[\\s*(?:,\\s*)*\\]",D=n("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?",[i,p]),a=n("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?",[n("\\(<<0>>+(?:,<<0>>+)+\\)",[n("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>",[u,h,p])]),i,p]),s={keyword:d,punctuation:/[<>()?,.:[\]]/},w=`'(?:[^ +'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'`,O=`"(?:\\\\.|[^\\\\" +])*"`;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:t("(^|[^$\\\\])<<0>>",['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),lookbehind:!0,greedy:!0},{pattern:t("(^|[^@$\\\\])<<0>>",[O]),lookbehind:!0,greedy:!0},{pattern:RegExp(w),greedy:!0,alias:"character"}],"class-name":[{pattern:t("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)",[i]),lookbehind:!0,inside:s},{pattern:t("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)",[o,a]),lookbehind:!0,inside:s},{pattern:t("(\\busing\\s+)<<0>>(?=\\s*=)",[o]),lookbehind:!0},{pattern:t("(\\b<<0>>\\s+)<<1>>",[v,m]),lookbehind:!0,inside:s},{pattern:t("(\\bcatch\\s*\\(\\s*)<<0>>",[i]),lookbehind:!0,inside:s},{pattern:t("(\\bwhere\\s+)<<0>>",[o]),lookbehind:!0},{pattern:t("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>",[D]),lookbehind:!0,inside:s},{pattern:t("\\b<<0>>(?=\\s+(?!<<1>>|with\\s*\\{)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",[a,T,o]),inside:s}],keyword:d,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:ul|lu|[dflmu])?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:t("([(,]\\s*)<<0>>(?=\\s*:)",[o]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:t("(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",[o]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:t("(\\b(?:default|typeof|sizeof)\\s*\\(\\s*(?!\\s))(?:[^()\\s]|\\s(?!\\s)|<<0>>)*(?=\\s*\\))",[h]),lookbehind:!0,alias:"class-name",inside:s},"return-type":{pattern:t("<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",[a,i]),inside:s,alias:"class-name"},"constructor-invocation":{pattern:t("(\\bnew\\s+)<<0>>(?=\\s*[[({])",[a]),lookbehind:!0,inside:s,alias:"class-name"},"generic-method":{pattern:t("<<0>>\\s*<<1>>(?=\\s*\\()",[o,u]),inside:{function:t("^<<0>>",[o]),generic:{pattern:RegExp(u),alias:"class-name",inside:s}}},"type-list":{pattern:t("\\b((?:<<0>>\\s+<<1>>|record\\s+<<1>>\\s*<<5>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>|<<1>>\\s*<<5>>|<<6>>)(?:\\s*,\\s*(?:<<3>>|<<4>>|<<6>>))*(?=\\s*(?:where|[{;]|=>|$))",[v,m,o,a,d.source,h,"\\bnew\\s*\\(\\s*\\)"]),lookbehind:!0,inside:{"record-arguments":{pattern:t("(^(?!new\\s*\\()<<0>>\\s*)<<1>>",[m,h]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:d,"class-name":{pattern:RegExp(a),greedy:!0,inside:s},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var x=O+"|"+w,C=n(`/(?![*/])|//[^ +]*[ +]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>`,[x]),b=r(n(`[^"'/()]|<<0>>|\\(<>*\\)`,[C]),2),k="\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",F=n("<<0>>(?:\\s*\\(<<1>>*\\))?",[i,b]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:t("((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",[k,F]),lookbehind:!0,greedy:!0,inside:{target:{pattern:t("^<<0>>(?=\\s*:)",[k]),alias:"keyword"},"attribute-arguments":{pattern:t("\\(<<0>>*\\)",[b]),inside:e.languages.csharp},"class-name":{pattern:RegExp(i),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var g=`:[^} +]+`,M=r(n(`[^"'/()]|<<0>>|\\(<>*\\)`,[C]),2),A=n("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[M,g]),E=r(n(`[^"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<>*\\)`,[x]),2),y=n("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[E,g]);function j(n,s){return{interpolation:{pattern:t("((?:^|[^{])(?:\\{\\{)*)<<0>>",[n]),lookbehind:!0,inside:{"format-string":{pattern:t("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)",[s,g]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:t('(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',[A]),lookbehind:!0,greedy:!0,inside:j(A,M)},{pattern:t('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"',[y]),lookbehind:!0,greedy:!0,inside:j(y,E)}]})}(n),n.languages.dotnet=n.languages.cs=n.languages.csharp,!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n="\\b(?!)\\w+(?:\\s*\\.\\s*\\w+)*\\b".replace(//g,function(){return t.source});e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(`(\\b(?:module|import)\\s+)(?:"(?:\\\\(?: +|[^])|[^"\\\\ +])*"|<[^<> +]*>|`+"(?:\\s*:\\s*)?|:\\s*".replace(//g,function(){return n})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b[a-z_]\w*\s*<(?:[^<>]|<(?:[^<>])*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(n),n.languages.cmake={comment:/#.*/,string:{pattern:/"(?:[^\\"]|\\.)*"/,greedy:!0,inside:{interpolation:{pattern:/\$\{(?:[^{}$]|\$\{[^{}$]*\})*\}/,inside:{punctuation:/\$\{|\}/,variable:/\w+/}}}},variable:/\b(?:CMAKE_\w+|\w+_(?:VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?|(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_(?:BINARY_DIR|DESCRIPTION|HOMEPAGE_URL|NAME|SOURCE_DIR|VERSION|VERSION_(?:MAJOR|MINOR|PATCH|TWEAK))|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE|XCODE_VERSION))\b/,property:/\b(?:cxx_\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\w+|\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|GLOBAL_KEYWORD|GLOBAL_PROJECT_TYPES|GLOBAL_ROOTNAMESPACE|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\b/,keyword:/\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\s*\()\b/,boolean:/\b(?:ON|OFF|TRUE|FALSE)\b/,namespace:/\b(?:PROPERTIES|SHARED|PRIVATE|STATIC|PUBLIC|INTERFACE|TARGET_OBJECTS)\b/,operator:/\b(?:NOT|AND|OR|MATCHES|LESS|GREATER|EQUAL|STRLESS|STRGREATER|STREQUAL|VERSION_LESS|VERSION_EQUAL|VERSION_GREATER|DEFINED)\b/,inserted:{pattern:/\b\w+::\w+\b/,alias:"class-name"},number:/\b\d+(?:\.\d+)*\b/,function:/\b[a-z_]\w*(?=\s*\()\b/i,punctuation:/[()>}]|\$[<{]/},!function(e){var n=/#(?!\{).+/,t={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:n,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:t}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:n,interpolation:t}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:t}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(n),n.languages.csp={directive:{pattern:/(^|[^-\da-z])(?:base-uri|block-all-mixed-content|(?:child|connect|default|font|frame|img|manifest|media|object|prefetch|script|style|worker)-src|disown-opener|form-action|frame-(?:ancestors|options)|input-protection(?:-(?:clip|selectors))?|navigate-to|plugin-types|policy-uri|referrer|reflected-xss|report-(?:to|uri)|require-sri-for|sandbox|(?:script|style)-src-(?:attr|elem)|upgrade-insecure-requests)(?=[^-\da-z]|$)/i,lookbehind:!0,alias:"keyword"},safe:{pattern:/'(?:deny|none|report-sample|self|strict-dynamic|top-only|(?:nonce|sha(?:256|384|512))-[-+/\w=]+)'/i,alias:"selector"},unsafe:{pattern:/(?:'unsafe-(?:allow-redirects|dynamic|eval|hash-attributes|hashed-attributes|hashes|inline)'|\*)/i,alias:"function"}},!function(e){t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:n={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp(`\\[(?:[^[\\]"']|`+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=n,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var t,n,s={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:s,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:s,number:o})}(n),!function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach(function(n){var o=t[n],s=[];/^\w+$/.test(n)||s.push(/\w+/.exec(n)[0]),"diff"===n&&s.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+o+`].*(?: +?| +|(?![\\s\\S])))+`,"m"),alias:s,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}}),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(n),!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,s,o,i){if(n.language===s){var a=n.tokenStack=[];n.code=n.code.replace(o,function(e){if("function"==typeof i&&!i(e))return e;for(var r,o=a.length;-1!==n.code.indexOf(r=t(s,o));)++o;return a[o]=e,r}),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,s){if(n.language===s&&n.tokenStack){n.grammar=e.languages[s];var o=0,i=Object.keys(n.tokenStack);!function a(r){for(d=0;d=i.length);d++)if(c=r[d],"string"==typeof c||c.content&&"string"==typeof c.content){{var c,d,m=i[o],f=n.tokenStack[m],u="string"==typeof c?c:c.content,p=t(s,m),h=u.indexOf(p);if(-1]?|>[=>]?|[&|^~]/,number:/\b\d+(?:\.\d+)?\b/,boolean:/[Tt]rue|[Ff]alse|[Nn]one/,variable:/\b\w+?\b/,punctuation:/[{}[\](),.:;]/};var n=/\{\{[\s\S]*?\}\}|\{%[\s\S]*?%\}|\{#[\s\S]*?#\}/g,t=e.languages["markup-templating"];e.hooks.add("before-tokenize",function(e){t.buildPlaceholders(e,"django",n)}),e.hooks.add("after-tokenize",function(e){t.tokenizePlaceholders(e,"django")}),e.languages.jinja2=e.languages.django,e.hooks.add("before-tokenize",function(e){t.buildPlaceholders(e,"jinja2",n)}),e.hooks.add("after-tokenize",function(e){t.tokenizePlaceholders(e,"jinja2")})}(n),!function(e){var i="(?:[ ]+(?![ ])(?:)?|)".replace(//g,function(){return`\\\\[ +](?:\\s|\\\\[ +]|#.*(?!.))*(?![\\s#]|\\\\[ +])`}),n=`"(?:[^"\\\\ +]|\\\\(?: +|[^]))*"|'(?:[^'\\\\ +]|\\\\(?: +|[^]))*'`,a=`--[\\w-]+=(?:|(?!["'])(?:[^\\s\\\\]|\\\\.)+)`.replace(//g,function(){return n}),s={pattern:RegExp(n),greedy:!0},o={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function t(e,t){return e=e.replace(//g,function(){return a}).replace(//g,function(){return i}),RegExp(e,t)}e.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:t("(^(?:ONBUILD)?\\w+)(?:)*","i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[s,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:t("(^(?:ONBUILD)?HEALTHCHECK(?:)*)(?:CMD|NONE)\\b","i"),lookbehind:!0,greedy:!0},{pattern:t("(^(?:ONBUILD)?FROM(?:)*(?!--)[^ \\\\]+)AS","i"),lookbehind:!0,greedy:!0},{pattern:t("(^ONBUILD)\\w+","i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:o,string:s,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:o},e.languages.dockerfile=e.languages.docker}(n),n.languages.elixir={doc:{pattern:/@(?:doc|moduledoc)\s+(?:("""|''')[\s\S]*?\1|("|')(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2)/,inside:{attribute:/^@\w+/,string:/['"][\s\S]+/}},comment:{pattern:/#.*/m,greedy:!0},regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},module:{pattern:/\b[A-Z]\w*\b/,alias:"class-name"},"attr-name":/\b\w+\??:(?!:)/,argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},function:/\b[_a-zA-Z]\w*[?!]?(?:(?=\s*(?:\.\s*)?\()|(?=\/\d))/,number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\b/,boolean:/\b(?:true|false|nil)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%[\]{}()]/},n.languages.elixir.string.forEach(function(e){e.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:n.languages.elixir}}}}),n.languages.elm={comment:/--.*|\{-[\s\S]*?-\}/,char:{pattern:/'(?:[^\\'\r\n]|\\(?:[abfnrtv\\']|\d+|x[0-9a-fA-F]+))'/,greedy:!0},string:[{pattern:/"""[\s\S]*?"""/,greedy:!0},{pattern:/"(?:[^\\"\r\n]|\\.)*"/,greedy:!0}],"import-statement":{pattern:/(^[\t ]*)import\s+[A-Z]\w*(?:\.[A-Z]\w*)*(?:\s+as\s+(?:[A-Z]\w*)(?:\.[A-Z]\w*)*)?(?:\s+exposing\s+)?/m,lookbehind:!0,inside:{keyword:/\b(?:import|as|exposing)\b/}},keyword:/\b(?:alias|as|case|else|exposing|if|in|infixl|infixr|let|module|of|then|type)\b/,builtin:/\b(?:abs|acos|always|asin|atan|atan2|ceiling|clamp|compare|cos|curry|degrees|e|flip|floor|fromPolar|identity|isInfinite|isNaN|logBase|max|min|negate|never|not|pi|radians|rem|round|sin|sqrt|tan|toFloat|toPolar|toString|truncate|turns|uncurry|xor)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0x[0-9a-f]+)\b/i,operator:/\s\.\s|[+\-/*=.$<>:&|^?%#@~!]{2,}|[+\-/*=$<>:&|^?%#@~!]/,hvariable:/\b(?:[A-Z]\w*\.)*[a-z]\w*\b/,constant:/\b(?:[A-Z]\w*\.)*[A-Z]\w*\b/,punctuation:/[{}[\]|(),.:]/},n.languages.erlang={comment:/%.+/,string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},"quoted-function":{pattern:/'(?:\\.|[^\\'\r\n])+'(?=\()/,alias:"function"},"quoted-atom":{pattern:/'(?:\\.|[^\\'\r\n])+'/,alias:"atom"},boolean:/\b(?:true|false)\b/,keyword:/\b(?:fun|when|case|of|end|if|receive|after|try|catch)\b/,number:[/\$\\?./,/\b\d+#[a-z0-9]+/i,/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i],function:/\b[a-z][\w@]*(?=\()/,variable:{pattern:/(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,lookbehind:!0},operator:[/[=/<>:]=|=[:/]=|\+\+?|--?|[=*/!]|\b(?:bnot|div|rem|band|bor|bxor|bsl|bsr|not|and|or|xor|orelse|andalso)\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\b[a-z][\w@]*/,punctuation:/[()[\]{}:;,.#|]|<<|>>/},n.languages.fsharp=n.languages.extend("clike",{comment:[{pattern:/(^|[^\\])\(\*(?!\))[\s\S]*?\*\)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(?:"""[\s\S]*?"""|@"(?:""|[^"])*"|"(?:\\[\s\S]|[^\\"])*")B?|'(?:[^\\']|\\(?:.|\d{3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}|U[a-fA-F\d]{8}))'B?/,greedy:!0},"class-name":{pattern:/(\b(?:exception|inherit|interface|new|of|type)\s+|\w\s*:\s*|\s:\??>\s*)[.\w]+\b(?:\s*(?:->|\*)\s*[.\w]+\b)*(?!\s*[:.])/,lookbehind:!0,inside:{operator:/->|\*/,punctuation:/\./}},keyword:/\b(?:let|return|use|yield)(?:!\B|\b)|\b(?:abstract|and|as|assert|base|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|global|if|in|inherit|inline|interface|internal|lazy|match|member|module|mutable|namespace|new|not|null|of|open|or|override|private|public|rec|select|static|struct|then|to|true|try|type|upcast|val|void|when|while|with|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall|trait|virtual|volatile)\b/,number:[/\b0x[\da-fA-F]+(?:un|lf|LF)?\b/,/\b0b[01]+(?:y|uy)?\b/,/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[fm]|e[+-]?\d+)?\b/i,/\b\d+(?:[IlLsy]|u[lsy]?|UL)?\b/],operator:/([<>~&^])\1\1|([*.:<>&])\2|<-|->|[!=:]=|?|\??(?:<=|>=|<>|[-+*/%=<>])\??|[!?^&]|~[+~-]|:>|:\?>?/}),n.languages.insertBefore("fsharp","keyword",{preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(^#)\b(?:else|endif|if|light|line|nowarn)\b/,lookbehind:!0,alias:"keyword"}}}}),n.languages.insertBefore("fsharp","punctuation",{"computation-expression":{pattern:/\b[_a-z]\w*(?=\s*\{)/i,alias:"keyword"}}),n.languages.insertBefore("fsharp","string",{annotation:{pattern:/\[<.+?>\]/,inside:{punctuation:/^\[<|>\]$/,"class-name":{pattern:/^\w+$|(^|;\s*)[A-Z]\w*(?=\()/,lookbehind:!0},"annotation-content":{pattern:/[\s\S]+/,inside:n.languages.fsharp}}}}),!function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Nn]umber|[Ss]tring|[Bb]oolean|Function|any|mixed|null|void)\b/,alias:"tag"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:type|opaque|declare|Class)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:await|Diff|Exact|Keys|ObjMap|PropertyType|Shape|Record|Supertype|Subtype|Enum)\b(?!\$)/,lookbehind:!0})}(n),n.languages.git={comment:/^#.*/m,deleted:/^[-–].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/m}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},n.languages.go=n.languages.extend("clike",{string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,number:/(?:\b0x[a-f\d]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[-+]?\d+)?)i?/i,operator:/[*/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/}),delete n.languages.go["class-name"],n.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:n.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:true|false)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/[A-Z]\w*Input(?=!?.*$)/m,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}[\]:=,]/,property:/\w+/},n.hooks.add("after-tokenize",function(e){if("graphql"===e.language)for(var o,i,a,r,c,l,d,n=e.tokens.filter(function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type}),t=0;t\\\\]|\\\\[^])*>"].join("|")+")[egimnosux]{0,6}"),greedy:!0,inside:{interpolation:t}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:{pattern:/(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/,lookbehind:!0},"method-definition":{pattern:/(\bdef\s+)[\w.]+/,lookbehind:!0,inside:{function:/\w+$/,rest:e.languages.ruby}}}),e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z]\w*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:RegExp("%[qQiIwWxs]?(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","\\((?:[^()\\\\]|\\\\[^])*\\)","\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[^])*\\}","\\[(?:[^\\[\\]\\\\]|\\\\[^])*\\]","<(?:[^<>\\\\]|\\\\[^])*>"].join("|")+")"),greedy:!0,inside:{interpolation:t}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|[a-z_]\w*$/i,alias:"symbol",inside:{punctuation:/^<<[-~]?/}},interpolation:t}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|[a-z_]\w*$/i,alias:"symbol",inside:{punctuation:/^<<[-~]?'|'$/}}}}],e.languages.rb=e.languages.ruby}(n),!function(e){e.languages.haml={"multiline-comment":{pattern:/((?:^|\r?\n|\r)([\t ]*))(?:\/|-#).*(?:(?:\r?\n|\r)\2[\t ].+)*/,lookbehind:!0,alias:"comment"},"multiline-code":[{pattern:/((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*,[\t ]*(?:(?:\r?\n|\r)\2[\t ].*,[\t ]*)*(?:(?:\r?\n|\r)\2[\t ].+)/,lookbehind:!0,inside:e.languages.ruby},{pattern:/((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*\|[\t ]*(?:(?:\r?\n|\r)\2[\t ].*\|[\t ]*)*/,lookbehind:!0,inside:e.languages.ruby}],filter:{pattern:/((?:^|\r?\n|\r)([\t ]*)):[\w-]+(?:(?:\r?\n|\r)(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"}}},markup:{pattern:/((?:^|\r?\n|\r)[\t ]*)<.+/,lookbehind:!0,inside:e.languages.markup},doctype:{pattern:/((?:^|\r?\n|\r)[\t ]*)!!!(?: .+)?/,lookbehind:!0},tag:{pattern:/((?:^|\r?\n|\r)[\t ]*)[%.#][\w\-#.]*[\w-](?:\([^)]+\)|\{(?:\{[^}]+\}|[^{}])+\}|\[[^\]]+\])*[/<>]*/,lookbehind:!0,inside:{attributes:[{pattern:/(^|[^#])\{(?:\{[^}]+\}|[^{}])+\}/,lookbehind:!0,inside:e.languages.ruby},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*)(?:"(?:\\.|[^\\"\r\n])*"|[^)\s]+)/,lookbehind:!0},"attr-name":/[\w:-]+(?=\s*!?=|\s*[,)])/,punctuation:/[=(),]/}},{pattern:/\[[^\]]+\]/,inside:e.languages.ruby}],punctuation:/[<>]/}},code:{pattern:/((?:^|\r?\n|\r)[\t ]*(?:[~-]|[&!]?=)).+/,lookbehind:!0,inside:e.languages.ruby},interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:e.languages.ruby}},punctuation:{pattern:/((?:^|\r?\n|\r)[\t ]*)[~=\-&!]+/,lookbehind:!0}};for(var t,s=["css",{filter:"coffee",language:"coffeescript"},"erb","javascript","less","markdown","ruby","scss","textile"],o={},n=0,i=s.length;n@[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,/;<=>@[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)}),e.hooks.add("after-tokenize",function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")}),e.languages.hbs=e.languages.handlebars}(n),n.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\/].*|$)|\{-[\s\S]*?-\})/m,lookbehind:!0},char:{pattern:/'(?:[^\\']|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,alias:"string"},string:{pattern:/"(?:[^\\"]|\\(?:\S|\s+\\))*"/,greedy:!0},keyword:/\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,"import-statement":{pattern:/(^[\t ]*)import\s+(?:qualified\s+)?(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*(?:\s+as\s+(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,lookbehind:!0,inside:{keyword:/\b(?:import|qualified|as|hiding)\b/,punctuation:/\./}},builtin:/\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:[{pattern:/`(?:[A-Z][\w']*\.)*[_a-z][\w']*`/,greedy:!0},{pattern:/(\s)\.(?=\s)/,lookbehind:!0},/[-!#$%*+=?&@|~:<>^\\/][-!#$%*+=?&@|~.:<>^\\/]*|\.[-!#$%*+=?&@|~.:<>^\\/]+/],hvariable:{pattern:/\b(?:[A-Z][\w']*\.)*[_a-z][\w']*/,inside:{punctuation:/\./}},constant:{pattern:/\b(?:[A-Z][\w']*\.)*[A-Z][\w']*/,inside:{punctuation:/\./}},punctuation:/[{}[\];(),.:]/},n.languages.hs=n.languages.haskell,!function(e){e.languages.http={"request-line":{pattern:/^(?:GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH|PRI|SEARCH)\s(?:https?:\/\/|\/)\S*\sHTTP\/[0-9.]+/m,inside:{method:{pattern:/^[A-Z]+\b/,alias:"property"},"request-target":{pattern:/^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,lookbehind:!0,alias:"url",inside:e.languages.uri},"http-version":{pattern:/^(\s)HTTP\/[0-9.]+/,lookbehind:!0,alias:"property"}}},"response-status":{pattern:/^HTTP\/[0-9.]+ \d+ .+/m,inside:{"http-version":{pattern:/^HTTP\/[0-9.]+/,alias:"property"},"status-code":{pattern:/^(\s)\d+(?=\s)/,lookbehind:!0,alias:"number"},"reason-phrase":{pattern:/^(\s).+/,lookbehind:!0,alias:"string"}}},"header-name":{pattern:/^[\w-]+:(?=.)/m,alias:"keyword"}};var n,s,i,a,r,t=e.languages,o={"application/javascript":t.javascript,"application/json":t.json||t.javascript,"application/xml":t.xml,"text/xml":t.xml,"text/html":t.html,"text/css":t.css},c={"application/json":!0,"application/xml":!0};for(n in o)o[n]&&(s=s||{},r=c[n]?(void 0,a=(i=n).replace(/^[a-z]+\//,""),"(?:"+i+"|\\w+/(?:[\\w.-]+\\+)+"+a+"(?![+\\w.-]))"):n,s[n.replace(/\//g,"-")]={pattern:RegExp("(content-type:\\s*"+r+`(?:(?:\\r\\n?|\\n).+)*)(?:\\r?\\n|\\r){2}[\\s\\S]*`,"i"),lookbehind:!0,inside:o[n]});s&&e.languages.insertBefore("http","header-name",s)}(n),!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,s="(^|[^\\w.])(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",n={pattern:RegExp(s+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{"class-name":[n,{pattern:RegExp(s+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()])"),lookbehind:!0,inside:n.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":n,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp("(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?".replace(//g,function(){return t.source})),lookbehind:!0,inside:{punctuation:/\./}}})}(n),n.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},n.languages.webmanifest=n.languages.json,!function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"],e.languages.insertBefore("kotlin","string",{"raw-string":{pattern:/("""|''')[\s\S]*?\1/,alias:"string"}}),e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}});var t=[{pattern:/\$\{[^}]+\}/,inside:{delimiter:{pattern:/^\$\{|\}$/,alias:"variable"},rest:e.languages.kotlin}},{pattern:/\$\w+/,alias:"variable"}];e.languages.kotlin.string.inside=e.languages.kotlin["raw-string"].inside={interpolation:t},e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(n),!function(e){var t=/\\(?:[^a-z()[\]]|[a-z*]+)/i,n={"equation-command":{pattern:t,alias:"regex"}};e.languages.latex={comment:/%.*/m,cdata:{pattern:/(\\begin\{((?:verbatim|lstlisting)\*?)\})[\s\S]*?(?=\\end\{\2\})/,lookbehind:!0},equation:[{pattern:/\$\$(?:\\[\s\S]|[^\\$])+\$\$|\$(?:\\[\s\S]|[^\\$])+\$|\\\([\s\S]*?\\\)|\\\[[\s\S]*?\\\]/,inside:n,alias:"string"},{pattern:/(\\begin\{((?:equation|math|eqnarray|align|multline|gather)\*?)\})[\s\S]*?(?=\\end\{\2\})/,lookbehind:!0,inside:n,alias:"string"}],keyword:{pattern:/(\\(?:begin|end|ref|cite|label|usepackage|documentclass)(?:\[[^\]]+\])?\{)[^}]+(?=\})/,lookbehind:!0},url:{pattern:/(\\url\{)[^}]+(?=\})/,lookbehind:!0},headline:{pattern:/(\\(?:part|chapter|section|subsection|frametitle|subsubsection|paragraph|subparagraph|subsubparagraph|subsubsubparagraph)\*?(?:\[[^\]]+\])?\{)[^}]+(?=\})/,lookbehind:!0,alias:"class-name"},function:{pattern:t,alias:"selector"},punctuation:/[[\]{}&]/},e.languages.tex=e.languages.latex,e.languages.context=e.languages.latex}(n),n.languages.less=n.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i,operator:/[+\-*/]/}),n.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),n.languages.llvm={comment:/;.*/,string:{pattern:/"[^"]*"/,greedy:!0},boolean:/\b(?:true|false)\b/,variable:/[%@!#](?:(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+|\d+)/i,label:/(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+:/i,type:{pattern:/\b(?:double|float|fp128|half|i[1-9]\d*|label|metadata|ppc_fp128|token|void|x86_fp80|x86_mmx)\b/,alias:"class-name"},keyword:/\b[a-z_][a-z_0-9]*\b/,number:/[+-]?\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-Fa-f]+\b|\b0xK[\dA-Fa-f]{20}\b|\b0x[ML][\dA-Fa-f]{32}\b|\b0xH[\dA-Fa-f]{4}\b/,punctuation:/[{}[\];(),.!*=<>]/},n.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},!function(e){function n(e){return e=e.replace(//g,function(){return`(?:\\\\.|[^\\\\ + ]|(?: +| +?)(?![ +]))`}),RegExp("((?:^|[^\\\\])(?:\\\\{2})*)(?:"+e+")")}var s="(?:\\\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\\\|\r\n`])+",t=`\\|?__(?:\\|__)+\\|?(?:(?: +| +?)|(?![^]))`.replace(/__/g,function(){return s}),o=`\\|?[ ]*:?-{3,}:?[ ]*(?:\\|[ ]*:?-{3,}:?[ ]*)+\\|?(?: +| +?)`;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"font-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+t+o+"(?:"+t+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+t+o+")(?:"+t+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(s),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+t+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+t+"$"),inside:{"table-header":{pattern:RegExp(s),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[[\]!:]|[<>]/},alias:"url"},bold:{pattern:n("\\b__(?:(?!_)|_(?:(?!_))+_)+__\\b|\\*\\*(?:(?!\\*)|\\*(?:(?!\\*))+\\*)+\\*\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n("\\b_(?:(?!_)|__(?:(?!_))+__)+_\\b|\\*(?:(?!\\*)|\\*\\*(?:(?!\\*))+\\*\\*)+\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n("(~~?)(?:(?!~))+\\2"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n('!?\\[(?:(?!\\]))+\\](?:\\([^\\s)]+(?:[ ]+"(?:\\\\.|[^"\\\\])*")?\\)|[ ]?\\[(?:(?!\\]))+\\])'),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(t){["url","bold","italic","strike","code-snippet"].forEach(function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])})}),e.hooks.add("after-tokenize",function(e){"markdown"!==e.language&&"md"!==e.language||!function e(t){if(t&&"string"!=typeof t)for(var n,s,o,i,r,a=0,c=t.length;a",quot:'"'},r=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(n),n.languages.nasm={comment:/;.*$/m,string:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,label:{pattern:/(^\s*)[A-Za-z._?$][\w.?$@~#]*:/m,lookbehind:!0,alias:"function"},keyword:[/\[?BITS (?:16|32|64)\]?/,{pattern:/(^\s*)section\s*[a-z.]+:?/im,lookbehind:!0},/(?:extern|global)[^;\r\n]*/i,/(?:CPU|FLOAT|DEFAULT).*$/m],register:{pattern:/\b(?:st\d|[xyz]mm\d\d?|[cdt]r\d|r\d\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|sp|si|di)|[cdefgs]s)\b/i,alias:"variable"},number:/(?:\b|(?=\$))(?:0[hx](?:\.[\da-f]+|[\da-f]+(?:\.[\da-f]+)?)(?:p[+-]?\d+)?|\d[\da-f]+[hx]|\$\d[\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\d+|(?:\d+(?:\.\d+)?|\.\d+)(?:\.?e[+-]?\d+)?[dt]?)\b/i,operator:/[[\]*+\-/%<>=&|$!]/},n.languages.objectivec=n.languages.extend("c",{string:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|@"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,keyword:/\b(?:asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|in|self|super)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*/@]/}),delete n.languages.objectivec["class-name"],n.languages.objc=n.languages.objectivec,n.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?[\d_]+)?)/i,directive:{pattern:/\B#\w+/,alias:"important"},label:{pattern:/\B~\w+/,alias:"function"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"variable"},module:{pattern:/\b[A-Z]\w+/,alias:"variable"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,operator:/:=|[=<>@^|&+\-*/$%!?~][!$%&*+\-./:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/[(){}[\]|.,:;]|\b_\b/},n.languages.perl={comment:[{pattern:/(^\s*)=\w[\s\S]*?=cut.*/m,lookbehind:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0}],string:[{pattern:/\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s{([<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,greedy:!0},{pattern:/("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/'(?:[^'\\\r\n]|\\.)*'/,greedy:!0}],regex:[{pattern:/\b(?:m|qr)\s*([^a-zA-Z0-9\s{([<])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s{([<])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/\/(?:[^/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/,greedy:!0}],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+(?![\w$]))+(?:::)*/i,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*>|\b_\b/,alias:"symbol"},vstring:{pattern:/v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,alias:"string"},function:{pattern:/sub \w+/i,inside:{keyword:/sub/}},keyword:/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,punctuation:/[{}[\];(),:]/},!function(e){var t,n,s=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,o=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],i=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,a=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,r=/[{}[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:s,variable:/\$+(?:\w+\b|(?=\{))/i,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:bool|boolean|int|integer|float|string|object|array)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:bool|int|float|string|object|array(?!\s*\()|mixed|self|static|callable|iterable|(?:null|false)(?=\s*\|))\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*[\w|]\|\s*)(?:null|false)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:bool|int|float|string|object|void|array(?!\s*\()|mixed|self|static|callable|iterable|(?:null|false)(?=\s*\|))\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?[\w|]\|\s*)(?:null|false)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:bool|int|float|string|object|void|array(?!\s*\()|mixed|iterable|(?:null|false)(?=\s*\|))\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:null|false)\b/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|match|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:o,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:i,operator:a,punctuation:r},t={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},n=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:t}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:t}}],e.languages.insertBefore("php","variable",{string:n,attribute:{pattern:/#\[(?:[^"'/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:s,string:n,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:o,number:i,operator:a,punctuation:r}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",function(t){/<\?/.test(t.code)&&e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/gi)}),e.hooks.add("after-tokenize",function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")})}(n),n.languages.insertBefore("php","variable",{this:/\$this\b/,global:/\$(?:_(?:SERVER|GET|POST|FILES|REQUEST|SESSION|ENV|COOKIE)|GLOBALS|HTTP_RAW_POST_DATA|argc|argv|php_errormsg|http_response_header)\b/,scope:{pattern:/\b[\w\\]+::/,inside:{keyword:/static|self|parent/,punctuation:/::|\\/}}}),!function(){var t=n.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:{function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:{}}}},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^[\]])*\]|[^[\]])*\]/i,boolean:/\$(?:true|false)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(\W?)(?:!|-(?:eq|ne|gt|ge|lt|le|sh[lr]|not|b?(?:and|x?or)|(?:Not)?(?:Like|Match|Contains|In)|Replace|Join|is(?:Not)?|as)\b|-[-=]?|\+[+=]?|[*/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/},s=t.string[0].inside;s.boolean=t.boolean,s.variable=t.variable,s.function.inside=t}(),n.languages.processing=n.languages.extend("clike",{keyword:/\b(?:break|catch|case|class|continue|default|else|extends|final|for|if|implements|import|new|null|private|public|return|static|super|switch|this|try|void|while)\b/,operator:/<[<=]?|>[>=]?|&&?|\|\|?|[%?]|[!=+\-*/]=?/}),n.languages.insertBefore("processing","number",{constant:/\b(?!XML\b)[A-Z][A-Z\d_]+\b/,type:{pattern:/\b(?:boolean|byte|char|color|double|float|int|[A-Z]\w*)\b/,alias:"variable"}}),n.languages.processing.function=/\b\w+(?=\s*\()/,n.languages.processing["class-name"].alias="variable",!function(e){e.languages.pug={comment:{pattern:/(^([\t ]*))\/\/.*(?:(?:\r?\n|\r)\2[\t ].+)*/m,lookbehind:!0},"multiline-script":{pattern:/(^([\t ]*)script\b.*\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:e.languages.javascript},filter:{pattern:/(^([\t ]*)):.+(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"}}},"multiline-plain-text":{pattern:/(^([\t ]*)[\w\-#.]+\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0},markup:{pattern:/(^[\t ]*)<.+/m,lookbehind:!0,inside:e.languages.markup},doctype:{pattern:/((?:^|\n)[\t ]*)doctype(?: .+)?/,lookbehind:!0},"flow-control":{pattern:/(^[\t ]*)(?:if|unless|else|case|when|default|each|while)\b(?: .+)?/m,lookbehind:!0,inside:{each:{pattern:/^each .+? in\b/,inside:{keyword:/\b(?:each|in)\b/,punctuation:/,/}},branch:{pattern:/^(?:if|unless|else|case|when|default|while)\b/,alias:"keyword"},rest:e.languages.javascript}},keyword:{pattern:/(^[\t ]*)(?:block|extends|include|append|prepend)\b.+/m,lookbehind:!0},mixin:[{pattern:/(^[\t ]*)mixin .+/m,lookbehind:!0,inside:{keyword:/^mixin/,function:/\w+(?=\s*\(|\s*$)/,punctuation:/[(),.]/}},{pattern:/(^[\t ]*)\+.+/m,lookbehind:!0,inside:{name:{pattern:/^\+\w+/,alias:"function"},rest:e.languages.javascript}}],script:{pattern:/(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]).+/m,lookbehind:!0,inside:e.languages.javascript},"plain-text":{pattern:/(^[\t ]*(?!-)[\w\-#.]*[\w-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]).+/m,lookbehind:!0},tag:{pattern:/(^[\t ]*)(?!-)[\w\-#.]*[\w-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,lookbehind:!0,inside:{attributes:[{pattern:/&[^(]+\([^)]+\)/,inside:e.languages.javascript},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*(?!\s))(?:\{[^}]*\}|[^,)\r\n]+)/,lookbehind:!0,inside:e.languages.javascript},"attr-name":/[\w-]+(?=\s*!?=|\s*[,)])/,punctuation:/[!=(),]+/}}],punctuation:/:/,"attr-id":/#[\w-]+/,"attr-class":/\.[\w-]+/}},code:[{pattern:/(^[\t ]*(?:-|!?=)).+/m,lookbehind:!0,inside:e.languages.javascript}],punctuation:/[.\-!=|]+/};for(var t,s=[{filter:"atpl",language:"twig"},{filter:"coffee",language:"coffeescript"},"ejs","handlebars","less","livescript","markdown",{filter:"sass",language:"scss"},"stylus"],o={},n=0,i=s.length;n(?:(?:\r?\n|\r(?!\n))(?:\\2[ ].+|\\s*?(?=\r?\n|\r)))+".replace("",function(){return t.filter}),"m"),lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},rest:e.languages[t.language]}});e.languages.insertBefore("pug","filter",o)}(n),n.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},n.languages.python["string-interpolation"].inside.interpolation.inside.rest=n.languages.python,n.languages.py=n.languages.python,n.languages.r={comment:/#.*/,string:{pattern:/(['"])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"percent-operator":{pattern:/%[^%\s]*%/,alias:"operator"},boolean:/\b(?:TRUE|FALSE)\b/,ellipsis:/\.\.(?:\.|\d+)/,number:[/\b(?:NaN|Inf)\b/,/(?:\b0x[\dA-Fa-f]+(?:\.\d*)?|\b\d+(?:\.\d*)?|\B\.\d+)(?:[EePp][+-]?\d+)?[iL]?/],keyword:/\b(?:if|else|repeat|while|function|for|in|next|break|NULL|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\b/,operator:/->?>?|<(?:=|=!]=?|::?|&&?|\|\|?|[+*/^$@~]/,punctuation:/[(){}[\],;]/},!function(e){var t,o,i=e.util.clone(e.languages.javascript),s="(?:\\{*\\.{3}(?:[^{}]|)*\\})";function n(e,t){return e=e.replace(//g,function(){return"(?:\\s|//.*(?!.)|/\\*(?:[^*]|\\*(?!/))\\*/)"}).replace(//g,function(){return"(?:\\{(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])*\\})"}).replace(//g,function(){return s}),RegExp(e,t)}s=n(s).source,e.languages.jsx=e.languages.extend("markup",i),e.languages.jsx.tag.pattern=n(`+(?:[\\w.:$-]+(?:=(?:"(?:\\\\[^]|[^\\\\"])*"|'(?:\\\\[^]|[^\\\\'])*'|[^\\s{'"/>=]+|))?|))**/?)?>`),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>/]*/i,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/i,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=i.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:n(""),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:n("="),inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx},alias:"language-javascript"}},e.languages.jsx.tag),t=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(t).join(""):""},o=function(n){for(var s,r,c,i=[],a=0;a"===s.content[s.content.length-1].content||i.push({tagName:t(s.content[0].content[1]),openedBraces:0}):0]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|as|declare|implements|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[{*]|$))/),delete e.languages.typescript.parameter;var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(n),!function(e){var t,n=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",n),t=e.languages.tsx.tag,t.pattern=RegExp("(^|[^\\w$]|(?=|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*/]\.?|\b(?:mod|land|lor|lxor|lsl|lsr|asr)\b/}),n.languages.insertBefore("reason","class-name",{character:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,alias:"string"},constructor:{pattern:/\b[A-Z]\w*\b(?!\s*\.)/,alias:"variable"},label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete n.languages.reason.function,!function(e){for(var t="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|)*\\*/",n=0;n<2;n++)t=t.replace(//g,function(){return t});t=t.replace(//g,function(){return"[^\\s\\S]"}),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0,alias:"string"},attribute:{pattern:/#!?\[(?:[^[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|Self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:[ui](?:8|16|32|64|128|size)|f(?:32|64)|bool|char|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64|size)?|f32|f64))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(n),!function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(n),n.languages.scss=n.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),n.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|forward|for|each|while|import|use|extend|debug|warn|mixin|include|function|return|content)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),n.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),n.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|with|show|hide)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),n.languages.scss.atrule.inside.rest=n.languages.scss,n.languages.scala=n.languages.extend("java",{"triple-quoted-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/<-|=>|\b(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|null|object|override|package|private|protected|return|sealed|self|super|this|throw|trait|try|type|val|var|while|with|yield)\b/,number:/\b0x(?:[\da-f]*\.)?[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e\d+)?[dfl]?/i,builtin:/\b(?:String|Int|Long|Short|Byte|Boolean|Double|Float|Char|Any|AnyRef|AnyVal|Unit|Nothing)\b/,symbol:/'[^\d\s\\]\w*/}),delete n.languages.scala["class-name"],delete n.languages.scala.function,n.languages.scheme={comment:/;.*|#;\s*(?:\((?:[^()]|\([^()]*\))*\)|\[(?:[^[\]]|\[[^[\]]*\])*\])|#\|(?:[^#|]|#(?!\|)|\|(?!#)|#\|(?:[^#|]|#(?!\|)|\|(?!#))*\|#)*\|#/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()[\]#'\s]+/,greedy:!0},character:{pattern:/#\\(?:[ux][a-fA-F\d]+\b|[-a-zA-Z]+\b|[\uD800-\uDBFF][\uDC00-\uDFFF]|\S)/,greedy:!0,alias:"string"},"lambda-parameter":[{pattern:/((?:^|[^'`#])[([]lambda\s+)(?:[^|()[\]'\s]+|\|(?:[^\\|]|\\.)*\|)/,lookbehind:!0},{pattern:/((?:^|[^'`#])[([]lambda\s+[([])[^()[\]']+/,lookbehind:!0}],keyword:{pattern:/((?:^|[^'`#])[([])(?:begin|case(?:-lambda)?|cond(?:-expand)?|define(?:-library|-macro|-record-type|-syntax|-values)?|defmacro|delay(?:-force)?|do|else|export|except|guard|if|import|include(?:-ci|-library-declarations)?|lambda|let(?:rec)?(?:-syntax|-values|\*)?|let\*-values|only|parameterize|prefix|(?:quasi-?)?quote|rename|set!|syntax-(?:case|rules)|unless|unquote(?:-splicing)?|when)(?=[()[\]\s]|$)/,lookbehind:!0},builtin:{pattern:/((?:^|[^'`#])[([])(?:abs|and|append|apply|assoc|ass[qv]|binary-port\?|boolean=?\?|bytevector(?:-append|-copy|-copy!|-length|-u8-ref|-u8-set!|\?)?|caar|cadr|call-with-(?:current-continuation|port|values)|call\/cc|car|cdar|cddr|cdr|ceiling|char(?:->integer|-ready\?|\?|<\?|<=\?|=\?|>\?|>=\?)|close-(?:input-port|output-port|port)|complex\?|cons|current-(?:error|input|output)-port|denominator|dynamic-wind|eof-object\??|eq\?|equal\?|eqv\?|error|error-object(?:-irritants|-message|\?)|eval|even\?|exact(?:-integer-sqrt|-integer\?|\?)?|expt|features|file-error\?|floor(?:-quotient|-remainder|\/)?|flush-output-port|for-each|gcd|get-output-(?:bytevector|string)|inexact\??|input-port(?:-open\?|\?)|integer(?:->char|\?)|lcm|length|list(?:->string|->vector|-copy|-ref|-set!|-tail|\?)?|make-(?:bytevector|list|parameter|string|vector)|map|max|member|memq|memv|min|modulo|negative\?|newline|not|null\?|number(?:->string|\?)|numerator|odd\?|open-(?:input|output)-(?:bytevector|string)|or|output-port(?:-open\?|\?)|pair\?|peek-char|peek-u8|port\?|positive\?|procedure\?|quotient|raise|raise-continuable|rational\?|rationalize|read-(?:bytevector|bytevector!|char|error\?|line|string|u8)|real\?|remainder|reverse|round|set-c[ad]r!|square|string(?:->list|->number|->symbol|->utf8|->vector|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?|<\?|<=\?|=\?|>\?|>=\?)?|substring|symbol(?:->string|\?|=\?)|syntax-error|textual-port\?|truncate(?:-quotient|-remainder|\/)?|u8-ready\?|utf8->string|values|vector(?:->list|->string|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?)?|with-exception-handler|write-(?:bytevector|char|string|u8)|zero\?)(?=[()[\]\s]|$)/,lookbehind:!0},operator:{pattern:/((?:^|[^'`#])[([])(?:[-+*%/]|[<>]=?|=>?)(?=[()\[\]\s]|$)/,lookbehind:!0},number:{pattern:RegExp(function(e){for(var t in e)e[t]=e[t].replace(/<[\w\s]+>/g,function(t){return"(?:"+e[t].trim()+")"});return e[t]}({"":"\\d+(?:/\\d+)|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?","":"[+-]?|[+-](?:inf|nan)\\.0","":"[+-](?:|(?:inf|nan)\\.0)?i","":"(?:@|)?|","":"(?:#d(?:#[ei])?|#[ei](?:#d)?)?","":"[0-9a-f]+(?:/[0-9a-f]+)?","":"[+-]?|[+-](?:inf|nan)\\.0","":"[+-](?:|(?:inf|nan)\\.0)?i","":"(?:@|)?|","":"#[box](?:#[ei])?|(?:#[ei])?#[box]","":"(^|[()\\[\\]\\s])(?:|)(?=[()\\[\\]\\s]|$)"}),"i"),lookbehind:!0},boolean:{pattern:/(^|[()[\]\s])#(?:[ft]|false|true)(?=[()[\]\s]|$)/,lookbehind:!0},function:{pattern:/((?:^|[^'`#])[([])(?:[^|()[\]'\s]+|\|(?:[^\\|]|\\.)*\|)(?=[()[\]\s]|$)/,lookbehind:!0},identifier:{pattern:/(^|[()[\]\s])\|(?:[^\\|]|\\.)*\|(?=[()[\]\s]|$)/,lookbehind:!0,greedy:!0},punctuation:/[()[\]']/},n.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:S|ING)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|IN|ILIKE|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},!function(e){var n={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},s={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},t={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:if|else|for|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:n,number:s,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:n,boolean:/\b(?:true|false)\b/,operator:[/~|[+!/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:s,punctuation:/[{}()[\];:,]/};t.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:t}},t.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:t}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:t}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:t}},statement:{pattern:/(^[ \t]*)(?:if|else|for|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:t}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:t.interpolation}},rest:t}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:t.interpolation,comment:t.comment,punctuation:/[{},]/}},func:t.func,string:t.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:t.interpolation,punctuation:/[{}()[\];:.]/}}(n),n.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(`(^|[^"#])(?:"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)| +|[^(])|[^\\\\ +"])*"|"""(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|[^(])|[^\\\\"]|"(?!""))*""")(?!["#])`),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp('(^|[^"#])(#+)(?:"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^#])|[^\\\\\r\n])*?"|"""(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|[^#])|[^\\\\])*?""")\\2'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp("#(?:(?:elseif|if)\\b(?:[ ]*(?:![ ]*)?(?:\\b\\w+\\b(?:[ ]*\\((?:[^()]|\\([^()]*\\))*\\))?|\\((?:[^()]|\\([^()]*\\))*\\))(?:[ ]*(?:&&|\\|\\|))?)+|(?:else|endif)\\b)"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:true|false)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:true|false)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},n.languages.swift["string-literal"].forEach(function(e){e.inside.interpolation.inside=n.languages.swift}),!function(e){function t(e,t){return RegExp(e.replace(//g,function(){return`(?:\\([^|() +]+\\)|\\[[^\\] +]+\\]|\\{[^} +]+\\})`}).replace(//g,function(){return`(?:\\)|\\((?![^|() +]+\\)))`}),t||"")}var o,a,i={css:{pattern:/\{[^{}]+\}/,inside:{rest:e.languages.css}},"class-id":{pattern:/(\()[^()]+(?=\))/,lookbehind:!0,alias:"attr-value"},lang:{pattern:/(\[)[^[\]]+(?=\])/,lookbehind:!0,alias:"attr-value"},punctuation:/[\\/]\d+|\S/},r=e.languages.textile=e.languages.extend("markup",{phrase:{pattern:/(^|\r|\n)\S[\s\S]*?(?=$|\r?\n\r?\n|\r\r)/,lookbehind:!0,inside:{"block-tag":{pattern:t("^[a-z]\\w*(?:||[<>=])*\\."),inside:{modifier:{pattern:t("(^[a-z]\\w*)(?:||[<>=])+(?=\\.)"),lookbehind:!0,inside:i},tag:/^[a-z]\w*/,punctuation:/\.$/}},list:{pattern:t("^[*#]+*\\s+\\S.*","m"),inside:{modifier:{pattern:t("(^[*#]+)+"),lookbehind:!0,inside:i},punctuation:/^[*#]+/}},table:{pattern:t("^(?:(?:||[<>=^~])+\\.\\s*)?(?:\\|(?:(?:||[<>=^~_]|[\\\\/]\\d+)+\\.|(?!(?:||[<>=^~_]|[\\\\/]\\d+)+\\.))[^|]*)+\\|","m"),inside:{modifier:{pattern:t(`(^|\\|(?: ? +| )?)(?:||[<>=^~_]|[\\\\/]\\d+)+(?=\\.)`),lookbehind:!0,inside:i},punctuation:/\||^\./}},inline:{pattern:t("(^|[^a-zA-Z\\d])(\\*\\*|__|\\?\\?|[*_%@+\\-^~])*.+?\\2(?![a-zA-Z\\d])"),lookbehind:!0,inside:{bold:{pattern:t("(^(\\*\\*?)*).+?(?=\\2)"),lookbehind:!0},italic:{pattern:t("(^(__?)*).+?(?=\\2)"),lookbehind:!0},cite:{pattern:t("(^\\?\\?*).+?(?=\\?\\?)"),lookbehind:!0,alias:"string"},code:{pattern:t("(^@*).+?(?=@)"),lookbehind:!0,alias:"keyword"},inserted:{pattern:t("(^\\+*).+?(?=\\+)"),lookbehind:!0},deleted:{pattern:t("(^-*).+?(?=-)"),lookbehind:!0},span:{pattern:t("(^%*).+?(?=%)"),lookbehind:!0},modifier:{pattern:t("(^\\*\\*|__|\\?\\?|[*_%@+\\-^~])+"),lookbehind:!0,inside:i},punctuation:/[*_%?@+\-^~]+/}},"link-ref":{pattern:/^\[[^\]]+\]\S+$/m,inside:{string:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0},url:{pattern:/(^\])\S+$/,lookbehind:!0},punctuation:/[[\]]/}},link:{pattern:t('"*[^"]+":.+?(?=[^\\w/]?(?:\\s|$))'),inside:{text:{pattern:t('(^"*)[^"]+(?=")'),lookbehind:!0},modifier:{pattern:t('(^")+'),lookbehind:!0,inside:i},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[":]/}},image:{pattern:t("!(?:||[<>=])*(?![<>=])[^!\\s()]+(?:\\([^)]+\\))?!(?::.+?(?=[^\\w/]?(?:\\s|$)))?"),inside:{source:{pattern:t("(^!(?:||[<>=])*)(?![<>=])[^!\\s()]+(?:\\([^)]+\\))?(?=!)"),lookbehind:!0,alias:"url"},modifier:{pattern:t("(^!)(?:||[<>=])+"),lookbehind:!0,inside:i},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[!:]/}},footnote:{pattern:/\b\[\d+\]/,alias:"comment",inside:{punctuation:/\[|\]/}},acronym:{pattern:/\b[A-Z\d]+\([^)]+\)/,inside:{comment:{pattern:/(\()[^()]+(?=\))/,lookbehind:!0},punctuation:/[()]/}},mark:{pattern:/\b\((?:TM|R|C)\)/,alias:"comment",inside:{punctuation:/[()]/}}}}}),s=r.phrase.inside,n={inline:s.inline,link:s.link,image:s.image,footnote:s.footnote,acronym:s.acronym,mark:s.mark};r.tag.pattern=/<\/?(?!\d)[a-z0-9]+(?:\s+[^\s>/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,a=s.inline.inside,a.bold.inside=n,a.italic.inside=n,a.inserted.inside=n,a.deleted.inside=n,a.span.inside=n,o=s.table.inside,o.inline=n.inline,o.link=n.link,o.image=n.image,o.footnote=n.footnote,o.acronym=n.acronym,o.mark=n.mark}(n),!function(e){function t(e){return e.replace(/__/g,function(){return`(?:[\\w-]+|'[^' + ]*'|"(?:\\\\.|[^\\\\" +])*")`})}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(t("(^[ ]*\\[\\s*(?:\\[\\s*)?)__(?:\\s*\\.\\s*__)*(?=\\s*\\])"),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(t("(^[ ]*|[{,]\\s*)__(?:\\s*\\.\\s*__)*(?=\\s*=)"),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:true|false)\b/,punctuation:/[.,=[\]{}]/}}(n),n.languages.twig={comment:/\{#[\s\S]*?#\}/,tag:{pattern:/\{\{[\s\S]*?\}\}|\{%[\s\S]*?%\}/,inside:{ld:{pattern:/^(?:\{\{-?|\{%-?\s*\w+)/,inside:{punctuation:/^(?:\{\{|\{%)-?/,keyword:/\w+/}},rd:{pattern:/-?(?:%\}|\}\})$/,inside:{punctuation:/.+/}},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,boolean:/\b(?:true|false|null)\b/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,operator:[{pattern:/(\s)(?:and|b-and|b-xor|b-or|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],property:/\b[a-zA-Z_]\w*\b/,punctuation:/[()[\]{}:.,]/}},other:{pattern:/\S(?:[\s\S]*\S)?/,inside:n.languages.markup}},n.languages.vim={string:/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\r\n]|'')*'/,comment:/".*/,function:/\b\w+(?=\()/,keyword:/\b(?:ab|abbreviate|abc|abclear|abo|aboveleft|al|all|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|ar|args|argu|argument|as|ascii|bad|badd|ba|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bN|bNext|bo|botright|bp|bprevious|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|br|brewind|bro|browse|bufdo|b|buffer|buffers|bun|bunload|bw|bwipeout|ca|cabbrev|cabc|cabclear|caddb|caddbuffer|cad|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cgetb|cgetbuffer|cgete|cgetexpr|cg|cgetfile|c|change|changes|chd|chdir|che|checkpath|checkt|checktime|cla|clast|cl|clist|clo|close|cmapc|cmapclear|cnew|cnewer|cn|cnext|cN|cNext|cnf|cnfile|cNfcNfile|cnorea|cnoreabbrev|col|colder|colo|colorscheme|comc|comclear|comp|compiler|conf|confirm|con|continue|cope|copen|co|copy|cpf|cpfile|cp|cprevious|cq|cquit|cr|crewind|cuna|cunabbrev|cu|cunmap|cw|cwindow|debugg|debuggreedy|delc|delcommand|d|delete|delf|delfunction|delm|delmarks|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|di|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|earlier|echoe|echoerr|echom|echomsg|echon|e|edit|el|else|elsei|elseif|em|emenu|endfo|endfor|endf|endfunction|endfun|en|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fina|finally|fin|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|folddoc|folddoclosed|foldd|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|ha|hardcopy|h|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iuna|iunabbrev|iu|iunmap|j|join|ju|jumps|k|keepalt|keepj|keepjumps|kee|keepmarks|laddb|laddbuffer|lad|laddexpr|laddf|laddfile|lan|language|la|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|let|left|lefta|leftabove|lex|lexpr|lf|lfile|lfir|lfirst|lgetb|lgetbuffer|lgete|lgetexpr|lg|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|l|list|ll|lla|llast|lli|llist|lmak|lmake|lm|lmap|lmapc|lmapclear|lnew|lnewer|lne|lnext|lN|lNext|lnf|lnfile|lNf|lNfile|ln|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lpf|lpfile|lp|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|mak|make|ma|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkvie|mkview|mkv|mkvimrc|mod|mode|m|move|mzf|mzfile|mz|mzscheme|nbkey|new|n|next|N|Next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|omapc|omapclear|on|only|o|open|opt|options|ou|ounmap|pc|pclose|ped|pedit|pe|perl|perld|perldo|po|pop|popu|popup|pp|ppop|pre|preserve|prev|previous|p|print|P|Print|profd|profdel|prof|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptN|ptNext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|pyf|pyfile|py|python|qa|qall|q|quit|quita|quitall|r|read|rec|recover|redi|redir|red|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|rub|ruby|rubyd|rubydo|rubyf|rubyfile|ru|runtime|rv|rviminfo|sal|sall|san|sandbox|sa|sargument|sav|saveas|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbN|sbNext|sbp|sbprevious|sbr|sbrewind|sb|sbuffer|scripte|scriptencoding|scrip|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sla|slast|sl|sleep|sm|smagic|smap|smapc|smapclear|sme|smenu|sn|snext|sN|sNext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|sor|sort|so|source|spelld|spelldump|spe|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|sp|split|spr|sprevious|sre|srewind|sta|stag|startg|startgreplace|star|startinsert|startr|startreplace|stj|stjump|st|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tab|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabnew|tabn|tabnext|tabN|tabNext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|ta|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tmenu|tn|tnext|tN|tNext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tunmenu|una|unabbreviate|u|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|verb|verbose|ve|version|vert|vertical|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|vi|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|wa|wall|wh|while|winc|wincmd|windo|winp|winpos|win|winsize|wn|wnext|wN|wNext|wp|wprevious|wq|wqa|wqall|w|write|ws|wsverb|wv|wviminfo|X|xa|xall|x|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|XMLent|XMLns|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\b/,builtin:/\b(?:autocmd|acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|t_AB|t_AF|t_al|t_AL|t_bc|t_cd|t_ce|t_Ce|t_cl|t_cm|t_Co|t_cs|t_Cs|t_CS|t_CV|t_da|t_db|t_dl|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_fs|t_IE|t_IS|t_k1|t_K1|t_k2|t_k3|t_K3|t_k4|t_K4|t_k5|t_K5|t_k6|t_K6|t_k7|t_K7|t_k8|t_K8|t_k9|t_K9|t_KA|t_kb|t_kB|t_KB|t_KC|t_kd|t_kD|t_KD|t_ke|t_KE|t_KF|t_KG|t_kh|t_KH|t_kI|t_KI|t_KJ|t_KK|t_kl|t_KL|t_kN|t_kP|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_RI|t_RV|t_Sb|t_se|t_Sf|t_SI|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_WP|t_WS|t_xs|t_ZH|t_ZR)\b/,number:/\b(?:0x[\da-f]+|\d+(?:\.\d+)?)\b/i,operator:/\|\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*/%?]|\b(?:is(?:not)?)\b/,punctuation:/[{}[\](),;:]/},n.languages["visual-basic"]={comment:{pattern:/(?:['‘’]|REM\b)(?:[^\r\n_]|_(?:\r\n?|\n)?)*/i,inside:{keyword:/^REM/i}},directive:{pattern:/#(?:Const|Else|ElseIf|End|ExternalChecksum|ExternalSource|If|Region)(?:[^\S\r\n]_[^\S\r\n]*(?:\r\n?|\n)|.)+/i,alias:"comment",greedy:!0},string:{pattern:/\$?["“”](?:["“”]{2}|[^"“”])*["“”]C?/i,greedy:!0},date:{pattern:/#[^\S\r\n]*(?:\d+([/-])\d+\1\d+(?:[^\S\r\n]+(?:\d+[^\S\r\n]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[^\S\r\n]*(?:AM|PM))?))?|\d+[^\S\r\n]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[^\S\r\n]*(?:AM|PM))?)[^\S\r\n]*#/i,alias:"builtin"},number:/(?:(?:\b\d+(?:\.\d+)?|\.\d+)(?:E[+-]?\d+)?|&[HO][\dA-F]+)(?:U?[ILS]|[FRD])?/i,boolean:/\b(?:True|False|Nothing)\b/i,keyword:/\b(?:AddHandler|AddressOf|Alias|And(?:Also)?|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|C(?:Bool|Byte|Char|Date|Dbl|Dec|Int|Lng|Obj|SByte|Short|Sng|Str|Type|UInt|ULng|UShort)|Char|Class|Const|Continue|Currency|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else(?:If)?|End(?:If)?|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get(?:Type|XMLNamespace)?|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|Must(?:Inherit|Override)|My(?:Base|Class)|Namespace|Narrowing|New|Next|Not(?:Inheritable|Overridable)?|Object|Of|On|Operator|Option(?:al)?|Or(?:Else)?|Out|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TryCast|Type|TypeOf|U(?:Integer|Long|Short)|Using|Variant|Wend|When|While|Widening|With(?:Events)?|WriteOnly|Until|Xor)\b/i,operator:[/[+\-*/\\^<=>&#@$%!]/,{pattern:/([^\S\r\n])_(?=[^\S\r\n]*[\r\n])/,lookbehind:!0}],punctuation:/[{}().,:?]/},n.languages.vb=n.languages["visual-basic"],n.languages.vba=n.languages["visual-basic"],n.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/i,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/},!function(e){var n=/[*&][^\s[\]{},]+/,s=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,o="(?:"+s.source+"(?:[ ]+"+n.source+")?|"+n.source+"(?:[ ]+"+s.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ ]*(?:(?![#:])|:))*".replace(//g,function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"}),i=`"(?:[^"\\\\ +]|\\\\.)*"|'(?:[^'\\\\ +]|\\\\.)*'`;function t(e,t){t=(t||"").replace(/m/g,"")+"m";var n=`([:\\-,[{]\\s*(?:\\s<>[ ]+)?)(?:<>)(?=[ ]*(?:$|,|\\]|\\}|(?:[ +]\\s*)?#))`.replace(/<>/g,function(){return o}).replace(/<>/g,function(){return e});return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ ]+)?[|>])[ ]*(?:((?:\r?\n|\r)[ ]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,function(){return o})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(`((?:^|[:\\-,[{ +?])[ ]*(?:<>[ ]+)?)<>(?=\\s*:\\s)`.replace(/<>/g,function(){return o}).replace(/<>/g,function(){return"(?:"+a+"|"+i+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:t("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ ]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ ]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:t("true|false","i"),lookbehind:!0,alias:"important"},null:{pattern:t("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:t(i),lookbehind:!0,greedy:!0},number:{pattern:t("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:s,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(n),!function(){if("undefined"!=typeof n&&"undefined"!=typeof document&&document.querySelector){var s,r="line-numbers",e="linkable-line-numbers",h=function(){if(void 0===s){var e=document.createElement("div");e.style.fontSize="13px",e.style.lineHeight="1.5",e.style.padding="0",e.style.border="0",e.innerHTML=" 
 ",document.body.appendChild(e),s=38===e.offsetHeight,document.body.removeChild(e)}return s},o=!0,c=0;n.hooks.add("before-sanity-check",function(e){var n,s=e.element.parentElement;i(s)&&(n=0,t(".line-highlight",s).forEach(function(e){n+=e.textContent.length,e.parentNode.removeChild(e)}),n&&/^(?: \n)+$/.test(e.code.slice(-n))&&(e.code=e.code.slice(0,-n)))}),n.hooks.add("complete",function e(t){if(s=t.element.parentElement,i(s)){clearTimeout(c);var s,o=n.plugins.lineNumbers,d=t.plugins&&t.plugins.lineNumbers;l(s,r)&&o&&!d?n.hooks.add("line-numbers",e):(a(s)(),c=setTimeout(u,1))}}),window.addEventListener("hashchange",u),window.addEventListener("resize",function(){t("pre").filter(i).map(function(e){return a(e)}).forEach(d)})}function t(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function l(e,t){return e.classList.contains(t)}function d(e){e()}function i(t){return!!t&&!!/pre/i.test(t.nodeName)&&(!!t.hasAttribute("data-line")||!!t.id&&!!n.util.isActive(t,e))}function a(s,i,a){var f,v,b=(i="string"==typeof i?i:s.getAttribute("data-line")||"").replace(/\s+/g,"").split(",").filter(Boolean),j=+s.getAttribute("data-line-offset")||0,y=(h()?parseInt:parseFloat)(getComputedStyle(s).lineHeight),m=n.util.isActive(s,r),u=s.querySelector("code"),p=m?s:u||s,c=[],g=u&&p!=u?function(e,t){var o=getComputedStyle(e),s=getComputedStyle(t);function n(e){return+e.substr(0,e.length-2)}return t.offsetTop+n(s.borderTopWidth)+n(s.paddingTop)-n(o.paddingTop)}(s,u):0;return b.forEach(function(e){var r,l,u,h,d=e.split("-"),o=+d[0],i=+d[1]||o,t=s.querySelector('.line-highlight[data-range="'+e+'"]')||document.createElement("div");c.push(function(){t.setAttribute("aria-hidden","true"),t.setAttribute("data-range",e),t.className=(a||"")+" line-highlight"}),m&&n.plugins.lineNumbers?(r=n.plugins.lineNumbers.getLine(s,o),l=n.plugins.lineNumbers.getLine(s,i),r&&(u=r.offsetTop+g+"px",c.push(function(){t.style.top=u})),l&&(h=l.offsetTop-r.offsetTop+l.offsetHeight+"px",c.push(function(){t.style.height=h}))):c.push(function(){t.setAttribute("data-start",String(o)),o span",s).forEach(function(e,t){var n=t+v;e.onclick=function(){var e=f+"."+n;o=!1,location.hash=e,setTimeout(function(){o=!0},1)}})),function(){c.forEach(d)}}function u(){if(e=location.hash.slice(1),t(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)}),s=(e.match(/\.([\d,-]+)$/)||[,""])[1],s&&!document.getElementById(e)){var e,s,i=e.slice(0,e.lastIndexOf(".")),n=document.getElementById(i);n&&(n.hasAttribute("data-line")||n.setAttribute("data-line",""),a(n,s,"temporary ")(),o&&document.querySelector(".temporary.line-highlight").scrollIntoView())}}}(),!function(){if("undefined"!=typeof n&&"undefined"!=typeof document){var e="line-numbers",s=/\n(?!$)/g,i=n.plugins.lineNumbers={getLine:function(t,n){if("PRE"===t.tagName&&t.classList.contains(e)&&(s=t.querySelector(".line-numbers-rows"),s)){var s,a,o=parseInt(t.getAttribute("data-start"),10)||1,i=o+(s.children.length-1);return n");(r=document.createElement("span")).setAttribute("aria-hidden","true"),r.className="line-numbers-rows",r.innerHTML=d,i.hasAttribute("data-start")&&(i.style.counterReset="linenumber "+(parseInt(i.getAttribute("data-start"),10)-1)),o.element.appendChild(r),t([i]),n.hooks.run("line-numbers",o)}}),n.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0})}function t(e){if(0!=(e=e.filter(function(e){var t=function(e){return e?window.getComputedStyle?getComputedStyle(e):e.currentStyle||null:null}(e)["white-space"];return"pre-wrap"===t||"pre-line"===t})).length){var t=e.map(function(e){var t,o,i,n=e.querySelector("code"),a=e.querySelector(".line-numbers-rows");if(n&&a)return t=e.querySelector(".line-numbers-sizer"),o=n.textContent.split(s),t||((t=document.createElement("span")).className="line-numbers-sizer",n.appendChild(t)),t.innerHTML="0",t.style.display="block",i=t.getBoundingClientRect().height,t.innerHTML="",{element:e,lines:o,lineHeights:[],oneLinerHeight:i,sizer:t}}).filter(Boolean);t.forEach(function(e){var s=e.sizer,t=e.lines,n=e.lineHeights,o=e.oneLinerHeight;n[t.length-1]=void 0,t.forEach(function(e,t){if(e&&1o.length&&(s=o.length),s--;for(t=--n;t<=s;t++)u[t]=o[t],o[t]=""}});else if(d)for(a=0;a',u):d=o('',u),a=document.createElement("span"),a.className=s,a.innerHTML=d;for(var i,a,r,l,d,u,h,f=i.outputLines||[],c=0,p=f.length;c + + + + Categories :: Rsmsn Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+ + +
+ +
+

Categories

+ +
    + + +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + + diff --git a/public/categories/index.xml b/public/categories/index.xml new file mode 100644 index 0000000..ba8c052 --- /dev/null +++ b/public/categories/index.xml @@ -0,0 +1,10 @@ + + + + Categories on Rsmsn Blog + https://selfhosted.rsmsn.co/categories/ + Recent content in Categories on Rsmsn Blog + Hugo -- gohugo.io + en-us + + diff --git a/public/css/index.min.d769fcae9b652a4ac8ee5ab1bc267604bd6eb6156d80edb2184dcdaec0bf1a0275c755605e14086296051d441377666d37e9feb10efb12626040c729c01d2941.css b/public/css/index.min.d769fcae9b652a4ac8ee5ab1bc267604bd6eb6156d80edb2184dcdaec0bf1a0275c755605e14086296051d441377666d37e9feb10efb12626040c729c01d2941.css new file mode 100644 index 0000000..e43d9bf --- /dev/null +++ b/public/css/index.min.d769fcae9b652a4ac8ee5ab1bc267604bd6eb6156d80edb2184dcdaec0bf1a0275c755605e14086296051d441377666d37e9feb10efb12626040c729c01d2941.css @@ -0,0 +1 @@ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}table{border-collapse:collapse;border-spacing:0}@charset "UTF-8";:root{--artile_main_width:calc(85% - 3pt - 4% - 1px)}body{height:100vh;max-height:100vh}header{height:3%}main{height:calc(94% - 2pt);display:flex}aside.sidebar{width:15%}article{width:var(--artile_main_width)}footer{height:3%}@charset "UTF-8";a,a:link,a:visited,a:hover,a:active{text-decoration:none;color:inherit}em{font-style:italic}body{background-color:#282c34;font-size:16px;font-family:system-ui,-apple-system,segoe ui,Roboto,helvetica neue,Arial,noto sans,liberation sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;overflow:hidden}header{font-size:8pt;color:#fff;border-bottom:1pt solid #3b3b3b}header>div{vertical-align:middle;text-align:center;line-height:3vh;height:100%}header>div.header_left{float:left;position:relative;left:5pt;top:0}header>div.header_left>img.logo{height:100%}aside.exapandable{width:3pt;background-color:#3b3b3b;cursor:col-resize}aside.exapandable:hover{background-color:#636363}article.main{text-align:left;color:#c6c6c7;padding:2%;overflow-y:auto}article.main>button.sidebar-toggle-btn{display:none}article.main>div.title{display:flex;justify-content:space-between;padding-bottom:15pt}article.main>div.title>h1.title-header{flex:none;font-size:2rem;font-weight:700;margin-bottom:.5rem}article.main>div.title>div.author-date-readtime{flex:none;display:flex;flex-direction:column;align-items:flex-end;font-size:.9rem;color:#939bab}article.main>div.title>div.author-date-readtime>div:not(:first-child){padding-top:1em}article.main>div.title>div.author-date-readtime>div.author:hover{color:#fff}article.main>div.article-meta{color:#939bab;font-size:1rem;margin-top:-2em}article.main>div.article-meta a{padding:2pt 10pt;margin:0 5pt;border-radius:10px;color:#fff}article.main>hr{border-color:#5c5e60;border-width:1pt;margin-bottom:25pt}article.main>div.article-meta>div:only-child{padding-top:20pt}article.main>div.article-meta>div.categories>a.cat-btn{background:#2f5292}article.main>div.article-meta>div.categories>a.cat-btn:hover{background:#5779b9}article.main>div.article-meta>div.tags>a.tag-btn{background:#327e5e}article.main>div.article-meta>div.tags>a.tag-btn:hover{background:#479775}article.main>div.article-meta>div:where(.categories,.tags)>a{line-height:3em}article.main>div.article-meta>div.breadcumb>a.bread-btn{color:#99a1ff;padding-left:5pt;padding-right:5pt;line-height:1.5em}article.main>nav#TableOfContents{margin-bottom:20pt}article.main>nav#TableOfContents ul{display:block;list-style-type:disc;padding-inline-start:20px}article.main>nav#TableOfContents ul ul{list-style-type:circle}article.main>nav#TableOfContents ul ul ul{list-style-type:square}article.main>nav#TableOfContents li{margin:8pt 0}article.main>nav#TableOfContents a{color:#4398e5}article.main>nav#TableOfContents a:hover{color:#7fb8ee;text-decoration:underline}article.main>div.list-files ul.section-tree{font-size:14pt}article.main>div.list-files ul.section-tree>li{line-height:140%;padding-left:5pt}article.main>div.list-files ul.section-tree>li.file{font-size:12pt}article.main>div.list-files>ul.section-tree>li.file:hover{color:#fff}article.main>div.list-terms>ul{display:flex;flex-wrap:wrap}article.main>div.list-terms>ul>li{border:1px solid #6c6d6e;border-radius:30px;padding:.5em 1em;margin:.5em 1em}article.main>div.list-terms>ul>li:hover{border-color:#969697;border-width:2px;color:#fff;background-color:#727272}footer{font-size:8pt;color:grey;border-top:1pt solid #3b3b3b;padding:0 3pt;display:flex;justify-content:space-between}footer>div{display:inline;flex:none;overflow-x:hidden}footer>div>ul{display:flex;height:100%;align-items:stretch}footer>div>ul>li{flex:none;padding:0 5pt;display:inline-flex;align-items:center;cursor:default}footer>div>ul>li:hover{background-color:#414141;color:#969696}footer>div.footer-left{max-width:40%}footer>div.footer-left>ul{justify-content:flex-start}footer>div.footer-right{min-width:60%}footer>div.footer-right>ul{justify-content:flex-end}ul.section-tree>li>a{cursor:pointer;line-height:120%}ul.section-tree>li>a:hover{color:#fff!important}ul.section-tree>li.dir{padding-left:10pt;padding-top:10pt;color:grey}ul.section-tree>li.dir>span.dir-text{cursor:pointer;margin-left:5pt}ul.section-tree>li.dir>span.dir-text:hover{color:#fff}ul.section-tree>li.closed-dir::before{content:" ";border-color:#fff;border-width:1pt 1pt 0 0;border-style:solid;padding:3pt;transform:rotate(45deg);display:inline-block;position:relative;bottom:1pt}ul.section-tree>li.closed-dir>ul{display:none}ul.section-tree>li.opened-dir::before{content:" ";border-color:#fff;border-width:1pt 1pt 0 0;border-style:solid;padding:3pt;transform:rotate(135deg);display:inline-block;position:relative;bottom:3pt}ul.section-tree>li.file{padding-left:5pt;padding-top:7pt;color:grey;font-size:95%;margin-left:28pt}ul.section-tree>li.file::before{content:"\f383";font-family:bootstrap-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;margin-left:-1.6em;vertical-align:-.3ex;padding-right:.4em}ul.section-tree ul.section-tree>li.dir{padding-left:18pt}ul.section-tree ul.section-tree>li.file{padding-left:4pt}@keyframes slide-in{100%{transform:translateX(0%)}}article.main:has(>div.home){padding:8vh 20vw;min-height:calc(100vh - 3% - 3% - 16vh - 2pt);--artile_main_width:calc(85% - 3pt - 40vw - 1px)}article.main>div.home{height:100%}article.main>div.home>div.recommend{display:flex;margin-top:18pt}article.main>div.home>div.recommend>div:where(.left,.right){flex:1 1 100%;width:50%}@media only screen and (max-width:1400px){article.main:has(>div.home){padding:8vh 10vw;--artile_main_width:calc(85% - 3pt - 20vw - 1px)}}@media only screen and (max-width:900px){article.main:has(>div.home){padding:8vh 5vw;min-height:calc(100vh - 6vh - 6vh - 12px - 16vh - 2pt);--artile_main_width:calc(85% - 3pt - 10vw - 1px)}}@media only screen and (max-width:700px){article.main:has(>div.home){padding:5vh 5vw;min-height:calc(100vh - 6vh - 6vh - 12px - 10vh - 2pt)}}article.main>div.home>div.title>h1.title-caption{font-weight:400;font-size:2.2em;white-space:nowrap;margin-bottom:16pt;color:#fffaf0}article.main>div.home>div.title>h2.subtitle{font-size:1.6em;line-height:1.4em;white-space:nowrap}article.main>div.home>div.recommend>div:where(.left,.right) h3.recommend-title{font-size:1.4em;line-height:1.4em;white-space:nowrap;margin-top:8pt;margin-bottom:8pt;color:#fffaf0}article.main>div.home>div.recommend>div.left{padding-right:25pt}article.main>div.home>div.recommend>div.right{padding-left:25pt}article.main>div.home>div.recommend>div.left>div.start{margin-bottom:16pt}article.main>div.home>div.recommend>div.left>div.start>p.long-description{line-height:1.6em;font-size:90%;text-align:justify}article.main>div.home>div.recommend>div.left>div.recent>ul.recent-posts-list>li{line-height:1.6em;font-size:95%;color:#80cbc4}article.main>div.home>div.recommend>div.left>div.recent>ul.recent-posts-list>li:hover{line-height:1.6em;font-size:95%;color:#eff}article.main>div.home>div.recommend>div.left>div.recent>ul.recent-posts-list>li>span.recent-posts-items-path{font-size:90%;color:#eff;padding-left:1em}article.main>div.home>div.recommend>div.right>ul.section-tree>li{padding-left:0}article.main>div.home>div.recommend>div.right>ul.section-tree>li:first-child{padding-top:0}article.main>div.home>div.recommend>div.right ul.section-tree>li.file{margin-top:6pt}article.main>div.home>div.recommend>div.right ul.section-tree>li>a{padding:2pt 4pt;border-radius:5pt}article.main>div.home>div.recommend>div.right ul.section-tree>li>a:hover{background-color:#3a3939;color:#c9c9c9!important}@media only screen and (max-width:640px){article.main>div.home>div.recommend{flex-wrap:wrap}article.main>div.home>div.recommend>div.left,article.main>div.home>div.recommend>div.right{width:100%;padding-right:0;padding-left:0}article.main>div.home>div.recommend>div:where(.left,.right)>div{margin-bottom:16pt}}@charset "UTF-8";@media only screen and (max-width:900px){:root{--artile_main_width:calc(100% - 8vw - 1px)}body{height:100%;max-height:100%;overflow-y:auto}header{height:6vh;position:sticky;top:0;width:100%;font-size:10pt;background-color:#282c34;text-overflow:ellipsis;overflow:hidden}header>div{line-height:6vh}aside:where(.exapandable,.sidebar){display:none}main:has(article.main>button.sidebar-toggle-btn[aria-expanded=true]){width:130%;animation:slide-in .5s forwards;transform:translateX(calc(-20%))}aside.sidebar{width:30%;border-right:3pt solid #3b3b3b}article.main{padding:4vw;min-height:calc(100vh - 6vh - 6vh - 8vw - 2pt - 12px)}article.main>button.sidebar-toggle-btn{background-color:#282c34;border:1px solid grey;border-radius:20%;padding:.2em;color:#c6c6c7;font-size:22pt;line-height:.6em;display:block;position:fixed;top:20px;right:10px;cursor:pointer}article.main>button.sidebar-toggle-btn:where(:hover,:active,:focus){color:#fff;border-color:#fff;border-width:2px}article.main>div.title{flex-direction:column}article.main>div.title>div.author-date-readtime{flex-direction:row}article.main>div.title>div.author-date-readtime>div{padding-top:0;padding-right:2em}article.main>div.article-meta{margin-top:.2em}footer{height:6vh;font-size:14pt;padding-top:6px;padding-bottom:6px}footer>div>ul{flex-wrap:wrap}footer>div.footer-left{min-width:60%;max-width:100%}footer>div.footer-right{display:none}}@media only screen and (max-width:700px){main:has(article.main>button.sidebar-toggle-btn[aria-expanded=true]){width:150%}aside.sidebar{width:50%}}@media only screen and (max-width:440px){:root{--artile_main_width:calc(100% - 12vw - 1px)}main:has(article.main>button.sidebar-toggle-btn[aria-expanded=true]){width:180%}aside.sidebar{width:80%}article.main{padding:6vw;min-height:calc(100vh - 6vh - 6vh - 12vw - 2pt - 12px)}article.main>div.title>div.author-date-readtime{align-items:flex-start;flex-direction:column}article.main>div.title>div.author-date-readtime>div{padding-top:1em}footer{font-size:12pt}}@charset "UTF-8";article.main>div.content *{line-height:14pt}article.main>div.content>:first-child{margin-top:24pt}article.main>div.content :where(h1,h2,h3){margin:24pt 0;font-weight:700}article.main>div.content :where(h1,h2){font-size:1.8rem}article.main>div.content h1{border-bottom:1.5pt solid #5c5e60;padding-bottom:15pt}article.main>div.content h3{font-size:1.3rem}article.main>div.content :where(h4,h5,h6){margin:15pt 0;font-weight:700}article.main>div.content p{line-height:22pt;text-align:justify;margin-top:.5em;margin-bottom:.5em}article.main>div.content p+p{margin-top:2em}article.main>div.content a{color:#4398e5}article.main>div.content a:hover{color:#7fb8ee;text-decoration:underline}article.main>div.content ul{display:block;list-style-type:disc;padding-inline-start:20px;padding-left:2em}article.main>div.content ul ul{list-style-type:circle}article.main>div.content ul ul ul{list-style-type:square}article.main>div.content ol{display:block;list-style-type:decimal;padding-inline-start:20px;padding-left:2em}article.main>div.content li{margin:8pt 0}article.main>div.content img{height:auto;width:100%}article.main>div.content em{font-style:italic}article.main>div.content strong{font-weight:700;font-size:106%;color:#c8c8c8}article.main>div.content del{text-decoration:line-through}article.main>div.content hr{height:.1em;background-color:#525252;margin:12pt 0;padding:0;border:0}article.main>div.content table{display:block;max-width:100%;overflow:auto;margin:15pt 0}article.main>div.content table tr{border-bottom:1px solid #726f6f}article.main>div.content table th{font-weight:700;font-size:106%;color:#c8c8c8}article.main>div.content table :where(th,td){padding:.8em 1.4em}article.main>div.content table>thead>tr:last-child{border-bottom-style:double;border-bottom-width:4px}article.main>div.content table>tbody>tr:last-child{border-bottom:none}article.main>div.content table>tbody>tr:nth-child(2n){background-color:#202020}article.main>div.content :where(pre,code){font-family:Menlo,Monaco,Consolas,courier new,monospace}article.main>div.content code:not(div.highlight code){padding:.2em .4em;font-size:85%;background-color:#5c5c5c;border-radius:5pt;margin-left:.2em;margin-right:.2em}article.main>div.content pre:not(div.highlight pre){border-radius:10px;padding:1em;overflow:auto;background-color:#202020}article.main>div.content pre:not(div.highlight pre)>code{border:none;padding:0;font-size:100%;background-color:transparent}article.main>div.content div.codeblock{margin-top:-2em}article.main>div.content div.codeblock>div.copy-button-box{display:inline-flex;position:relative;top:2.4em;width:100%;justify-content:flex-end}article.main>div.content div.codeblock>div.copy-button-box>button.copy-button{height:2.5em;color:rgba(238,255,255,.4);background-color:transparent;border:rgba(238,255,255,.4)solid 1pt;border-radius:10%;margin-right:.5em;cursor:pointer;padding-left:.8em;padding-right:.8em}article.main>div.content div.codeblock>div.copy-button-box>button.copy-button:hover{color:#eff;border-color:#eff}article.main>div.content div.codeblock>div.highlight :where(pre,div){border-radius:10pt;padding-top:.5em;padding-bottom:.5em}article.main>div.content div.codeblock>div.highlight pre{padding-left:.6em}article.main>div.content div.codeblock>div.highlight code{background:0 0;border-radius:0}article.main>div.content div.codeblock>div.highlight table{padding:5pt!important;overflow-y:hidden!important}article.main>div.content div.codeblock>div.highlight table tr{border:none}article.main>div.content blockquote{padding:0 1em;border-left:.2em solid #727272;color:#ada9a9;margin-top:2em;margin-bottom:2em;margin-left:1em}article.main>div.content blockquote blockquote{margin-top:0}article.main>div.content blockquote p{padding-top:.2em;padding-bottom:.2em}article.main>div.content blockquote p+p{margin-top:.5em}article.main>div.content blockquote blockquote p{padding-top:.1em;margin-top:.5em}article.main>div.content dt{font-weight:700;font-size:106%;color:#c8c8c8}article.main>div.content dd{margin-bottom:1em;margin-left:.5em}article.main>div.content sup{vertical-align:super;font-size:80%}article.main>div.content sub{vertical-align:sub;font-size:80%}article.main>div.content div.footnotes :where(p,p+p){margin:0}:where(article.main,article.main *)::-webkit-scrollbar{width:8px;height:8px;background-color:#5f5e5e}:where(article.main,article.main *)::-webkit-scrollbar-thumb{background:#8b8b8b;border-radius:10pt} \ No newline at end of file diff --git a/public/fonts/FiraCode-Bold.woff b/public/fonts/FiraCode-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..61d5e6475d7343bdbdb988a06736c0787139f578 GIT binary patch literal 97028 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%0DVc^!P!`TlFIh14sBJIWP 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
+ +
+ + +
+ + +
+ + +
+ + + + + + + + + + +
+

+ Tutorial: Move from NginxProxyManager to Nginx +

+ + + + + + + + + + +
+ + A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for this reddit post and to post this my Github profile. Thought my website would also be a good place to share it for any passers-by. +Goal To give clear instructions to help users migrate from using Nginx Proxy Manager (NPM) to standard Nginx. This tutorial is not exhaustive and there are many other implementations of this transition. + +
+ + +
+ +
+ +
+ + + + +
+ +
+ + + + + + + + + + + + + + + + +
+ + + diff --git a/public/index.xml b/public/index.xml new file mode 100644 index 0000000..2552758 --- /dev/null +++ b/public/index.xml @@ -0,0 +1,281 @@ + + + + Rsmsn Blog + https://selfhosted.rsmsn.co/ + Recent content on Rsmsn Blog + Hugo -- gohugo.io + en-us + Sat, 05 Aug 2023 15:23:51 -0500 + + Tutorial: Move from NginxProxyManager to Nginx + https://selfhosted.rsmsn.co/posts/npm_to_nginx_tutorial/ + Sat, 05 Aug 2023 15:23:51 -0500 + + https://selfhosted.rsmsn.co/posts/npm_to_nginx_tutorial/ + A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for this reddit post and to post this my Github profile. Thought my website would also be a good place to share it for any passers-by. +Goal To give clear instructions to help users migrate from using Nginx Proxy Manager (NPM) to standard Nginx. This tutorial is not exhaustive and there are many other implementations of this transition. + <p>A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for <a href="https://www.reddit.com/r/selfhosted/comments/15j4v80/minitutorial_migrating_from_nginx_proxy_manager/">this reddit +post</a> and to post this <a href="https://github.com/Normanras/Npm_to_Nginx">my Github profile</a>. Thought my website would also be a good place to share it for any passers-by.</p> +<h2 id="goal">Goal</h2> +<p>To give clear instructions to help users migrate from using <a href="https://nginxproxymanager.com/">Nginx Proxy Manager</a> (NPM) to standard <a href="https://docs.nginx.com/">Nginx</a>. This tutorial is not exhaustive and there are many other implementations of this transition. I would recommend checking out the many Nginx <a href="http://nginx.org/en/docs/">Documentation Sites</a> and tutorials to learn more.</p> +<h3 id="introduction">Introduction</h3> +<p>If you&rsquo;re anything like me and you got into the self-hosted/homelab/diy game sometime within the last 5 years, you&rsquo;ve likely been recommended to use Nginx Proxy Manager as one of the choice Reverse Proxy services. If you&rsquo;ve also been paying attention to various self-hosted communities, you may have also come across Christian Lempa&rsquo;s Video on <a href="https://youtu.be/uaixCKTaqY0">trusting smaller self hosted projects and tools</a>.</p> +<p><em>Spoilers:</em> He roasts NPM in his video and towards the end says he won&rsquo;t be using NPM anymore. He also, perhaps purposely, doesn&rsquo;t share which tool he will be migrating to.</p> +<p>Whether you follow Christian away from NPM or not, it dawned on me that while NPM is using a very trusted web server and reverse proxy under the hood, I hadn&rsquo;t taken the time to understand how an Nginx Config actually worked. Since NPM was already creating most of the files for Nginx, I got to reading through all the files and reworking them so that I could begin using Nginx without the NPM gui.</p> +<p><em>Contributing: This is not all encompassing of Nginx possibilities. Including instructions for various installation methods, using OpenResty, and any other migrations or use cases would help the community. If you&rsquo;d like to add in additional information on how to migrate from NPM to Nginx, that is welcome. Simply submit a PR with your steps.</em></p> +<h3 id="tldr---quick-steps">TL;DR - Quick Steps</h3> +<ol> +<li> +<p>Copy the following contents (including sub-directories) from the NPM <code>/data/nginx</code> directory to the Nginx <code>/etc/nginx</code> folder:</p> +<ul> +<li><code>proxy_hosts</code> &gt; <code>sites-available</code></li> +<li><code>conf.d</code> &gt; <code>conf.d</code></li> +<li><code>snippets</code> &gt; <code>snippets</code></li> +<li><code>custom_ssl</code> &gt; <code>custom_ssl</code> (if applicable)</li> +</ul> +</li> +<li> +<p>Edit each file in your <code>sites-available</code> directory and update the paths. Most will change from <code>/data/nginx/</code> to <code>/etc/nginx</code>.</p> +</li> +<li> +<p>Edit your <code>nginx.conf</code> file and ensure the following two paths are there:</p> +<ul> +<li><code>include /etc/nginx/conf.d/*.conf;</code> and <code>include /etc/nginx/sites-enabled/*;</code></li> +</ul> +</li> +<li> +<p>Symlink the proxy host files in <code>sites-available</code> to <code>sites-enabled</code></p> +<ul> +<li><code>ln -s * ./sites-enabled</code></li> +</ul> +</li> +<li> +<p>Test your changes with <code>nginx -t</code>. Make appropriate changes if there are error messages.</p> +</li> +</ol> +<h3 id="pre-requisites--assumptions">Pre-requisites &amp; Assumptions</h3> +<p>I am using an Ubuntu VM with NPM and it&rsquo;s db as a Docker Container while Nginx is installed natively on the machine. You don&rsquo;t have to use this setup exactly, but I am making a few assumptions as to what you should have access to before you begin. I am also using custom SSL certs, but theoretically, the transition should be the same when using Lets Encrypt.</p> +<p>I&rsquo;ve added some example files to show before and after changes to this repo and outlined file trees below.</p> +<ul> +<li>You understand the basics of what a Reverse Proxy is doing and are sticking with some stock settings (like exposing port 80 an 443).</li> +<li>You&rsquo;ve installed <a href="https://nginxproxymanager.com/setup/">NPM</a> and <a href="https://www.nginx.com/resources/wiki/start/topics/tutorials/install/">Nginx</a> using your preferred method.</li> +<li>You have access to both NPMs file tree and Nginx&rsquo;s.</li> +<li>If using NPM in docker, make sure you&rsquo;ve mapped a local volume on the host to the container.</li> +<li>My setup using docker-compose is the following: <code>/user/nginx/data:/data</code>.</li> +<li>Know where your Nginx files are. If using docker, same as above, make sure your container directories are mapped to the host.</li> +<li>For a linux install, they should be accessible at <code>/etc/nginx</code>.</li> +<li>You know how to edit files at the command line using <code>nano</code>, <code>vi</code>, <code>vim</code>, <code>neovim</code>, <code>emacs</code>, or something else.</li> +</ul> +<h3 id="nginx-files">Nginx Files</h3> +<p>Nginx uses the <code>nginx.conf</code> file and within that file, it will include your proxy files. These exist under <code>./nginx/sites-enabled/</code>. In the main <code>nginx.conf</code> file, the line <code>include /etc/nginx/sites-enabled/*;</code> will bring in those files to the config file, making the proxies accessible.</p> +<h3 id="how-to-transition---detailed-version">How to Transition - Detailed Version</h3> +<ol> +<li> +<p>Since NPM uses Nginx under the hood, they are both, by default, going to try and use ports 80 and 443 to serve up your apps and content. Turn off both systems.</p> +<ul> +<li>Docker: <code>docker stop [app_container, db_container]</code></li> +<li>Systemd: <code>systemctl stop nginx</code></li> +</ul> +</li> +<li> +<p>Copy your <code>proxy_host</code> (NPM) files to the <code>sites-available</code> (Nginx) folder. +<code>cp -r /user/nginx/data/nginx/proxy_hosts/* /etc/nginx/sites-available/</code></p> +</li> +<li> +<p>Nginx doesn&rsquo;t really care what the files are called, but NPM numbers them based on the order in which you added them in the GUI. I find it better to rename them to what service they actually serve up for easier identification later.</p> +</li> +<li> +<p>Copy your <code>custom_ssl</code> folder from NPM to the <code>custom_ssl</code> folder in Nginx. See the following step for the various default paths in both systems.</p> +<ul> +<li><code>cp -r /user/nginx/data/custom_ssl/* /etc/nginx/custom_ssl/</code></li> +</ul> +</li> +<li> +<p>Copy the <code>conf.d</code> folder from NPM to the <code>conf.d</code> folder in Nginx. <em>Note: For some reason, not all of the files in +the proxy files were actually in my <code>conf.d</code> directory. If you&rsquo;re missing any files, please download and/or copy and +paste them from the <a href="https://github.com/NginxProxyManager/nginx-proxy-manager/tree/fa851b61da3fe3726d1a04c25e69d36e79edea2d/docker/rootfs/etc/nginx/conf.d/include">NPM Repo</a></em></p> +<ul> +<li><code>cp -r /user/nginx/data/nginx/conf.d /etc/nginx/</code></li> +</ul> +</li> +<li> +<p>If you had any additional files included in the Advanced section of an NPM Proxy Host, make sure you copy them over. For my setup and this tutorial, they were all located in the <code>snippets</code> directory.</p> +<ul> +<li><code>cp -r /user/nginx/data/nginx/snippets/* /etc/nginx/snippets/</code></li> +</ul> +</li> +<li> +<p>There are a number of lines that need to be updated in each proxy configuration file to make them work with Nginx. I&rsquo;ve placed additional comments in <a href="./proxy_host/npm_proxy.conf"><code>./proxy_host/npm_proxy.conf</code></a> file. The line changes are the following:</p> +<ol> +<li> +<p>Custom SSL path:</p> +<ul> +<li>NPM path: <code>/data/custom_ssl...</code></li> +<li>Nginx path: <code>/etc/nginx/custom_ssl...</code></li> +</ul> +</li> +<li> +<p>conf.d:</p> +<ul> +<li>The paths should remain the same. However, if you changed the path for <code>conf.d</code> in Nginx and differed in step 5, above, make sure you use the correct path.</li> +</ul> +</li> +<li> +<p>Access &amp; Error Logs</p> +<ul> +<li>NPM path: <code>/data/logs/...</code></li> +<li>Nginx path: <code>/var/log/nginx/...</code></li> +</ul> +</li> +</ol> +</li> +<li> +<p>Double Check all your paths! If this is your first time using Nginx, make sure every directory is correct! Save your work.</p> +</li> +<li> +<p>Navigate to the <code>nginx.conf</code> file which is located at <code>/etc/nginx/</code>. You can see the one I am using in this repo.</p> +</li> +<li> +<p>Make sure that you have the following two lines in the main conf file and that they are pointing to the appropriate directories in the nginx directory path.</p> +<ul> +<li><code>include /etc/nginx/conf.d/*.conf;</code> and <code>include /etc/nginx/sites-enabled/*;</code></li> +</ul> +</li> +<li> +<p>You&rsquo;ll notice that you ensured there was a <code>sites-enabled</code> directory in the configuration file, but you changed all your proxy host config files in <code>sites-available</code>! Good eye, all that&rsquo;s left is to symlink the files to <code>sites-enabled</code> so that nginx can start using them.</p> +</li> +<li> +<p>To symlink the available proxy files run the following command within the <code>sites-available</code> directory:</p> +<ul> +<li><code>ln -s * ./sites-enabled</code></li> +</ul> +</li> +<li> +<p>Once you&rsquo;re confident that you&rsquo;ve done all the above correctly, you can test your setup using nginx command and flags. While in the directory with your <code>nginx.conf</code> file - usually <code>/etc/nginx</code> - run the following command: <code>nginx -t</code>.</p> +</li> +<li> +<p>If all is working as expected you should see the below output. If it returns any errors, fix them appropriately. It will usually tell you what line is throwing the error. In this case, there&rsquo;s a high likelihood that it will be path error.</p> +</li> +</ol> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nginx: the configuration file /etc/nginx/nginx.conf syntax is ok +</span></span><span style="display:flex;"><span>nginx: configuration file /etc/nginx/nginx.conf test is successful +</span></span></code></pre></div><p>And that&rsquo;s it! You can now restart your nginx service on the host and access all your sites just as if you were using Nginx Proxy Manager! Make sure you take a look at your logs and system&rsquo;s status should nginx fail to start.</p> +<h3 id="additional-informationappendix">Additional Information/Appendix</h3> +<h4 id="file-trees-for-npm-in-container-and-nginx-on-host">File Trees for NPM (in container) and Nginx (on host)</h4> +<p><em>I did not expand every directory in these trees. Only the ones that are pertinent for reference in this tutorial.</em></p> +<h4 id="nginx">NGINX</h4> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>├── conf.d +</span></span><span style="display:flex;"><span>│   └── include +</span></span><span style="display:flex;"><span>│   ├── assets.conf +</span></span><span style="display:flex;"><span>│   ├── block-exploits.conf +</span></span><span style="display:flex;"><span>│   ├── force-ssl.conf +</span></span><span style="display:flex;"><span>│   ├── ip_ranges.conf +</span></span><span style="display:flex;"><span>│   ├── proxy.conf +</span></span><span style="display:flex;"><span>│   └── resolvers.conf +</span></span><span style="display:flex;"><span>├── custom_ssl +</span></span><span style="display:flex;"><span>│   ├── npm-1 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   ├── npm-2 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   └── npm-3 +</span></span><span style="display:flex;"><span>│   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   └── privkey.pem +</span></span><span style="display:flex;"><span>├── fastcgi.conf +</span></span><span style="display:flex;"><span>├── fastcgi_params +</span></span><span style="display:flex;"><span>├── koi-utf +</span></span><span style="display:flex;"><span>├── koi-win +</span></span><span style="display:flex;"><span>├── mime.types +</span></span><span style="display:flex;"><span>├── modules-available +</span></span><span style="display:flex;"><span>├── modules-enabled +</span></span><span style="display:flex;"><span>├── nginx.conf +</span></span><span style="display:flex;"><span>├── proxy_params +</span></span><span style="display:flex;"><span>├── scgi_params +</span></span><span style="display:flex;"><span>├── sites-available +</span></span><span style="display:flex;"><span>│   ├── auth.conf +</span></span><span style="display:flex;"><span>│   ├── bitwarden.conf +</span></span><span style="display:flex;"><span>│   ├── codehub.conf +</span></span><span style="display:flex;"><span>│   ├── default.backup +</span></span><span style="display:flex;"><span>│   ├── files.conf +</span></span><span style="display:flex;"><span>│   ├── notes.conf +</span></span><span style="display:flex;"><span>│   ├── photos.conf +</span></span><span style="display:flex;"><span>│   ├── rsmsn-root.conf +</span></span><span style="display:flex;"><span>│   ├── wordle.conf +</span></span><span style="display:flex;"><span>│   └── wordle-it.conf +</span></span><span style="display:flex;"><span>├── sites-enabled +</span></span><span style="display:flex;"><span>│   ├── auth.conf -&gt; /etc/nginx/sites-available/auth.conf +</span></span><span style="display:flex;"><span>│   ├── bitwarden.conf -&gt; /etc/nginx/sites-available/bitwarden.conf +</span></span><span style="display:flex;"><span>│   ├── codehub.conf -&gt; /etc/nginx/sites-available/codehub.conf +</span></span><span style="display:flex;"><span>│   ├── files.conf -&gt; /etc/nginx/sites-available/files.conf +</span></span><span style="display:flex;"><span>│   ├── notes.conf -&gt; /etc/nginx/sites-available/notes.conf +</span></span><span style="display:flex;"><span>│   ├── photos.conf -&gt; /etc/nginx/sites-available/photos.conf +</span></span><span style="display:flex;"><span>│   ├── wordle.conf -&gt; /etc/nginx/sites-available/wordle.conf +</span></span><span style="display:flex;"><span>│   └── wordle-it.conf -&gt; /etc/nginx/sites-available/wordle-it.conf +</span></span><span style="display:flex;"><span>├── snippets +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest-basic.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest-detect.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location-basic.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location-detect.conf +</span></span><span style="display:flex;"><span>│   ├── fastcgi-php.conf +</span></span><span style="display:flex;"><span>│   ├── proxy.conf +</span></span><span style="display:flex;"><span>│   └── snakeoil.conf +</span></span><span style="display:flex;"><span>├── uwsgi_params +</span></span><span style="display:flex;"><span>└── win-utf +</span></span></code></pre></div><h4 id="npm">NPM</h4> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>├── data +</span></span><span style="display:flex;"><span>│   ├── access +</span></span><span style="display:flex;"><span>│   ├── custom_ssl +</span></span><span style="display:flex;"><span>│   │   ├── npm-1 +</span></span><span style="display:flex;"><span>│   │   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   │   ├── npm-2 +</span></span><span style="display:flex;"><span>│   │   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   │   └── npm-3 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   ├── keys.json +</span></span><span style="display:flex;"><span>│   ├── letsencrypt-acme-challenge +</span></span><span style="display:flex;"><span>│   ├── logs +</span></span><span style="display:flex;"><span>│   ├── mysql +</span></span><span style="display:flex;"><span>│   └── nginx +</span></span><span style="display:flex;"><span>│   ├── custom +</span></span><span style="display:flex;"><span>│   ├── dead_host +</span></span><span style="display:flex;"><span>│   ├── default_host +</span></span><span style="display:flex;"><span>│   ├── default_www +</span></span><span style="display:flex;"><span>│   ├── dummycert.pem +</span></span><span style="display:flex;"><span>│   ├── dummykey.pem +</span></span><span style="display:flex;"><span>│   ├── proxy_host +</span></span><span style="display:flex;"><span>│   │   ├── 10.conf +</span></span><span style="display:flex;"><span>│   │   ├── 11.conf +</span></span><span style="display:flex;"><span>│   │   ├── 12.conf +</span></span><span style="display:flex;"><span>│   │   ├── 13.conf +</span></span><span style="display:flex;"><span>│   │   ├── 15.conf +</span></span><span style="display:flex;"><span>│   │   ├── 1.conf +</span></span><span style="display:flex;"><span>│   │   ├── 2.conf +</span></span><span style="display:flex;"><span>│   │   ├── 4.conf +</span></span><span style="display:flex;"><span>│   │   ├── 5.conf +</span></span><span style="display:flex;"><span>│   │   └── 6.conf +</span></span><span style="display:flex;"><span>│   ├── redirection_host +</span></span><span style="display:flex;"><span>│   ├── snippets +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest-basic.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest-detect.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location-basic.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location-detect.conf +</span></span><span style="display:flex;"><span>│   │   └── proxy.conf +</span></span><span style="display:flex;"><span>│   ├── stream +</span></span><span style="display:flex;"><span>│   └── temp +</span></span><span style="display:flex;"><span>├── docker-compose.yml +</span></span><span style="display:flex;"><span>└── letsencrypt +</span></span><span style="display:flex;"><span>└── renewal-hooks +</span></span></code></pre></div> + + + + diff --git a/public/js/index.min.76f28ad9d7f1e1b68cfc55f930e89f7439bf72c0def552fa19d37555afaaaa776fc8533a913ac30e0162a7fb08415d19d1588e1d9a4f3328f0614c52f1a3963b.js b/public/js/index.min.76f28ad9d7f1e1b68cfc55f930e89f7439bf72c0def552fa19d37555afaaaa776fc8533a913ac30e0162a7fb08415d19d1588e1d9a4f3328f0614c52f1a3963b.js new file mode 100644 index 0000000..2128a06 --- /dev/null +++ b/public/js/index.min.76f28ad9d7f1e1b68cfc55f930e89f7439bf72c0def552fa19d37555afaaaa776fc8533a913ac30e0162a7fb08415d19d1588e1d9a4f3328f0614c52f1a3963b.js @@ -0,0 +1 @@ +let isSidebarExpand=!1,isSidebarShow=!1;function isSidebarExpandStart(){isSidebarExpand=!0}function isSidebarExpandEnd(){isSidebarExpand=!1}function isSidebarExpanding(e){if(!isSidebarExpand)return;const t=e.pageX/window.innerWidth*100;if(t>10&&t<50){const e=100-t;document.querySelector("aside.sidebar").style.width=`${t}%`;const n=getComputedStyle(document.querySelector("article.main")).getPropertyValue("--artile_main_width"),s=n.replace(/[\d.]+/,e);document.querySelector("article.main").style.setProperty("--artile_main_width",s)}}function showSidebar(){document.querySelector("aside.sidebar").style.display="block",isSidebarShow=!0,document.querySelector("button.sidebar-toggle-btn").setAttribute("aria-expanded","true")}function hideSidebar(){isSidebarShow&&(document.querySelector("aside.sidebar").style.display="",isSidebarShow=!1,document.querySelector("button.sidebar-toggle-btn").setAttribute("aria-expanded","false"))}window.addEventListener("load",function(){document.querySelectorAll("button.copy-button").forEach(e=>{e.addEventListener("click",e=>{let t=e.currentTarget;t.getAttribute("state")==="copy"&&(navigator.clipboard.writeText(decodeURI(t.getAttribute("data"))),t.setAttribute("state","copied"),t.textContent="Copied !",window.setTimeout(()=>{t.setAttribute("state","copy"),t.textContent="Copy"},3*1e3))})}),document.querySelector("aside.exapandable").addEventListener("mousedown",isSidebarExpandStart),document.querySelector("aside.exapandable").addEventListener("touchstart",isSidebarExpandStart),window.addEventListener("mousemove",isSidebarExpanding),window.addEventListener("touchmove",isSidebarExpanding),window.addEventListener("mouseup",isSidebarExpandEnd),window.addEventListener("touchend",isSidebarExpandEnd),document.querySelector("button.sidebar-toggle-btn").addEventListener("click",e=>{e.stopPropagation(),e.preventDefault(),e.currentTarget.getAttribute("aria-expanded")==="true"?hideSidebar():showSidebar()}),this.document.querySelector("article.main").addEventListener("click",hideSidebar),this.document.querySelector("article.main").addEventListener("touchstart",hideSidebar),this.document.querySelector("article.main").addEventListener("mousedown",hideSidebar),this.window.addEventListener("resize",()=>{window.innerWidth>900&&(isSidebarShow=!1,document.querySelector("aside.sidebar").style.display="",document.querySelector("button.sidebar-toggle-btn").setAttribute("aria-expanded","false"))}),this.window.addEventListener("resize",()=>{let e=document.querySelector("article.main");const t=e.style.getPropertyValue("--artile_main_width");if(t){const n=t.match(/[\d.]+/)[0];e.style.setProperty("--artile_main_width","");const s=getComputedStyle(e).getPropertyValue("--artile_main_width").replace(/[\d.]+/,n);e.style.setProperty("--artile_main_width",s)}}),document.querySelectorAll("li.dir > span.dir-text").forEach(e=>{e.addEventListener("click",function(){this.parentNode.classList.toggle("opened-dir"),this.parentNode.classList.toggle("closed-dir")})})}) \ No newline at end of file diff --git a/public/page/1/index.html b/public/page/1/index.html new file mode 100644 index 0000000..5843f93 --- /dev/null +++ b/public/page/1/index.html @@ -0,0 +1,10 @@ + + + + https://selfhosted.rsmsn.co/ + + + + + + diff --git a/public/posts/index.html b/public/posts/index.html new file mode 100644 index 0000000..1e8de45 --- /dev/null +++ b/public/posts/index.html @@ -0,0 +1,171 @@ + + + + + Posts :: Rsmsn Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+ + +
+ + +
+ +
+

+ Tutorial: Move from NginxProxyManager to Nginx +

+ + + + + + + + + +
+ + A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for this reddit post and to post this my Github profile. Thought my website would also be a good place to share it for any passers-by. +Goal To give clear instructions to help users migrate from using Nginx Proxy Manager (NPM) to standard Nginx. This tutorial is not exhaustive and there are many other implementations of this transition. + +
+ + +
+ +
+ +
+ + + + +
+ +
+ + + + + + + + + + + + + + + + +
+ + + diff --git a/public/posts/index.xml b/public/posts/index.xml new file mode 100644 index 0000000..434a8ed --- /dev/null +++ b/public/posts/index.xml @@ -0,0 +1,281 @@ + + + + Posts on Rsmsn Blog + https://selfhosted.rsmsn.co/posts/ + Recent content in Posts on Rsmsn Blog + Hugo -- gohugo.io + en-us + Sat, 05 Aug 2023 15:23:51 -0500 + + Tutorial: Move from NginxProxyManager to Nginx + https://selfhosted.rsmsn.co/posts/npm_to_nginx_tutorial/ + Sat, 05 Aug 2023 15:23:51 -0500 + + https://selfhosted.rsmsn.co/posts/npm_to_nginx_tutorial/ + A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for this reddit post and to post this my Github profile. Thought my website would also be a good place to share it for any passers-by. +Goal To give clear instructions to help users migrate from using Nginx Proxy Manager (NPM) to standard Nginx. This tutorial is not exhaustive and there are many other implementations of this transition. + <p>A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for <a href="https://www.reddit.com/r/selfhosted/comments/15j4v80/minitutorial_migrating_from_nginx_proxy_manager/">this reddit +post</a> and to post this <a href="https://github.com/Normanras/Npm_to_Nginx">my Github profile</a>. Thought my website would also be a good place to share it for any passers-by.</p> +<h2 id="goal">Goal</h2> +<p>To give clear instructions to help users migrate from using <a href="https://nginxproxymanager.com/">Nginx Proxy Manager</a> (NPM) to standard <a href="https://docs.nginx.com/">Nginx</a>. This tutorial is not exhaustive and there are many other implementations of this transition. I would recommend checking out the many Nginx <a href="http://nginx.org/en/docs/">Documentation Sites</a> and tutorials to learn more.</p> +<h3 id="introduction">Introduction</h3> +<p>If you&rsquo;re anything like me and you got into the self-hosted/homelab/diy game sometime within the last 5 years, you&rsquo;ve likely been recommended to use Nginx Proxy Manager as one of the choice Reverse Proxy services. If you&rsquo;ve also been paying attention to various self-hosted communities, you may have also come across Christian Lempa&rsquo;s Video on <a href="https://youtu.be/uaixCKTaqY0">trusting smaller self hosted projects and tools</a>.</p> +<p><em>Spoilers:</em> He roasts NPM in his video and towards the end says he won&rsquo;t be using NPM anymore. He also, perhaps purposely, doesn&rsquo;t share which tool he will be migrating to.</p> +<p>Whether you follow Christian away from NPM or not, it dawned on me that while NPM is using a very trusted web server and reverse proxy under the hood, I hadn&rsquo;t taken the time to understand how an Nginx Config actually worked. Since NPM was already creating most of the files for Nginx, I got to reading through all the files and reworking them so that I could begin using Nginx without the NPM gui.</p> +<p><em>Contributing: This is not all encompassing of Nginx possibilities. Including instructions for various installation methods, using OpenResty, and any other migrations or use cases would help the community. If you&rsquo;d like to add in additional information on how to migrate from NPM to Nginx, that is welcome. Simply submit a PR with your steps.</em></p> +<h3 id="tldr---quick-steps">TL;DR - Quick Steps</h3> +<ol> +<li> +<p>Copy the following contents (including sub-directories) from the NPM <code>/data/nginx</code> directory to the Nginx <code>/etc/nginx</code> folder:</p> +<ul> +<li><code>proxy_hosts</code> &gt; <code>sites-available</code></li> +<li><code>conf.d</code> &gt; <code>conf.d</code></li> +<li><code>snippets</code> &gt; <code>snippets</code></li> +<li><code>custom_ssl</code> &gt; <code>custom_ssl</code> (if applicable)</li> +</ul> +</li> +<li> +<p>Edit each file in your <code>sites-available</code> directory and update the paths. Most will change from <code>/data/nginx/</code> to <code>/etc/nginx</code>.</p> +</li> +<li> +<p>Edit your <code>nginx.conf</code> file and ensure the following two paths are there:</p> +<ul> +<li><code>include /etc/nginx/conf.d/*.conf;</code> and <code>include /etc/nginx/sites-enabled/*;</code></li> +</ul> +</li> +<li> +<p>Symlink the proxy host files in <code>sites-available</code> to <code>sites-enabled</code></p> +<ul> +<li><code>ln -s * ./sites-enabled</code></li> +</ul> +</li> +<li> +<p>Test your changes with <code>nginx -t</code>. Make appropriate changes if there are error messages.</p> +</li> +</ol> +<h3 id="pre-requisites--assumptions">Pre-requisites &amp; Assumptions</h3> +<p>I am using an Ubuntu VM with NPM and it&rsquo;s db as a Docker Container while Nginx is installed natively on the machine. You don&rsquo;t have to use this setup exactly, but I am making a few assumptions as to what you should have access to before you begin. I am also using custom SSL certs, but theoretically, the transition should be the same when using Lets Encrypt.</p> +<p>I&rsquo;ve added some example files to show before and after changes to this repo and outlined file trees below.</p> +<ul> +<li>You understand the basics of what a Reverse Proxy is doing and are sticking with some stock settings (like exposing port 80 an 443).</li> +<li>You&rsquo;ve installed <a href="https://nginxproxymanager.com/setup/">NPM</a> and <a href="https://www.nginx.com/resources/wiki/start/topics/tutorials/install/">Nginx</a> using your preferred method.</li> +<li>You have access to both NPMs file tree and Nginx&rsquo;s.</li> +<li>If using NPM in docker, make sure you&rsquo;ve mapped a local volume on the host to the container.</li> +<li>My setup using docker-compose is the following: <code>/user/nginx/data:/data</code>.</li> +<li>Know where your Nginx files are. If using docker, same as above, make sure your container directories are mapped to the host.</li> +<li>For a linux install, they should be accessible at <code>/etc/nginx</code>.</li> +<li>You know how to edit files at the command line using <code>nano</code>, <code>vi</code>, <code>vim</code>, <code>neovim</code>, <code>emacs</code>, or something else.</li> +</ul> +<h3 id="nginx-files">Nginx Files</h3> +<p>Nginx uses the <code>nginx.conf</code> file and within that file, it will include your proxy files. These exist under <code>./nginx/sites-enabled/</code>. In the main <code>nginx.conf</code> file, the line <code>include /etc/nginx/sites-enabled/*;</code> will bring in those files to the config file, making the proxies accessible.</p> +<h3 id="how-to-transition---detailed-version">How to Transition - Detailed Version</h3> +<ol> +<li> +<p>Since NPM uses Nginx under the hood, they are both, by default, going to try and use ports 80 and 443 to serve up your apps and content. Turn off both systems.</p> +<ul> +<li>Docker: <code>docker stop [app_container, db_container]</code></li> +<li>Systemd: <code>systemctl stop nginx</code></li> +</ul> +</li> +<li> +<p>Copy your <code>proxy_host</code> (NPM) files to the <code>sites-available</code> (Nginx) folder. +<code>cp -r /user/nginx/data/nginx/proxy_hosts/* /etc/nginx/sites-available/</code></p> +</li> +<li> +<p>Nginx doesn&rsquo;t really care what the files are called, but NPM numbers them based on the order in which you added them in the GUI. I find it better to rename them to what service they actually serve up for easier identification later.</p> +</li> +<li> +<p>Copy your <code>custom_ssl</code> folder from NPM to the <code>custom_ssl</code> folder in Nginx. See the following step for the various default paths in both systems.</p> +<ul> +<li><code>cp -r /user/nginx/data/custom_ssl/* /etc/nginx/custom_ssl/</code></li> +</ul> +</li> +<li> +<p>Copy the <code>conf.d</code> folder from NPM to the <code>conf.d</code> folder in Nginx. <em>Note: For some reason, not all of the files in +the proxy files were actually in my <code>conf.d</code> directory. If you&rsquo;re missing any files, please download and/or copy and +paste them from the <a href="https://github.com/NginxProxyManager/nginx-proxy-manager/tree/fa851b61da3fe3726d1a04c25e69d36e79edea2d/docker/rootfs/etc/nginx/conf.d/include">NPM Repo</a></em></p> +<ul> +<li><code>cp -r /user/nginx/data/nginx/conf.d /etc/nginx/</code></li> +</ul> +</li> +<li> +<p>If you had any additional files included in the Advanced section of an NPM Proxy Host, make sure you copy them over. For my setup and this tutorial, they were all located in the <code>snippets</code> directory.</p> +<ul> +<li><code>cp -r /user/nginx/data/nginx/snippets/* /etc/nginx/snippets/</code></li> +</ul> +</li> +<li> +<p>There are a number of lines that need to be updated in each proxy configuration file to make them work with Nginx. I&rsquo;ve placed additional comments in <a href="./proxy_host/npm_proxy.conf"><code>./proxy_host/npm_proxy.conf</code></a> file. The line changes are the following:</p> +<ol> +<li> +<p>Custom SSL path:</p> +<ul> +<li>NPM path: <code>/data/custom_ssl...</code></li> +<li>Nginx path: <code>/etc/nginx/custom_ssl...</code></li> +</ul> +</li> +<li> +<p>conf.d:</p> +<ul> +<li>The paths should remain the same. However, if you changed the path for <code>conf.d</code> in Nginx and differed in step 5, above, make sure you use the correct path.</li> +</ul> +</li> +<li> +<p>Access &amp; Error Logs</p> +<ul> +<li>NPM path: <code>/data/logs/...</code></li> +<li>Nginx path: <code>/var/log/nginx/...</code></li> +</ul> +</li> +</ol> +</li> +<li> +<p>Double Check all your paths! If this is your first time using Nginx, make sure every directory is correct! Save your work.</p> +</li> +<li> +<p>Navigate to the <code>nginx.conf</code> file which is located at <code>/etc/nginx/</code>. You can see the one I am using in this repo.</p> +</li> +<li> +<p>Make sure that you have the following two lines in the main conf file and that they are pointing to the appropriate directories in the nginx directory path.</p> +<ul> +<li><code>include /etc/nginx/conf.d/*.conf;</code> and <code>include /etc/nginx/sites-enabled/*;</code></li> +</ul> +</li> +<li> +<p>You&rsquo;ll notice that you ensured there was a <code>sites-enabled</code> directory in the configuration file, but you changed all your proxy host config files in <code>sites-available</code>! Good eye, all that&rsquo;s left is to symlink the files to <code>sites-enabled</code> so that nginx can start using them.</p> +</li> +<li> +<p>To symlink the available proxy files run the following command within the <code>sites-available</code> directory:</p> +<ul> +<li><code>ln -s * ./sites-enabled</code></li> +</ul> +</li> +<li> +<p>Once you&rsquo;re confident that you&rsquo;ve done all the above correctly, you can test your setup using nginx command and flags. While in the directory with your <code>nginx.conf</code> file - usually <code>/etc/nginx</code> - run the following command: <code>nginx -t</code>.</p> +</li> +<li> +<p>If all is working as expected you should see the below output. If it returns any errors, fix them appropriately. It will usually tell you what line is throwing the error. In this case, there&rsquo;s a high likelihood that it will be path error.</p> +</li> +</ol> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nginx: the configuration file /etc/nginx/nginx.conf syntax is ok +</span></span><span style="display:flex;"><span>nginx: configuration file /etc/nginx/nginx.conf test is successful +</span></span></code></pre></div><p>And that&rsquo;s it! You can now restart your nginx service on the host and access all your sites just as if you were using Nginx Proxy Manager! Make sure you take a look at your logs and system&rsquo;s status should nginx fail to start.</p> +<h3 id="additional-informationappendix">Additional Information/Appendix</h3> +<h4 id="file-trees-for-npm-in-container-and-nginx-on-host">File Trees for NPM (in container) and Nginx (on host)</h4> +<p><em>I did not expand every directory in these trees. Only the ones that are pertinent for reference in this tutorial.</em></p> +<h4 id="nginx">NGINX</h4> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>├── conf.d +</span></span><span style="display:flex;"><span>│   └── include +</span></span><span style="display:flex;"><span>│   ├── assets.conf +</span></span><span style="display:flex;"><span>│   ├── block-exploits.conf +</span></span><span style="display:flex;"><span>│   ├── force-ssl.conf +</span></span><span style="display:flex;"><span>│   ├── ip_ranges.conf +</span></span><span style="display:flex;"><span>│   ├── proxy.conf +</span></span><span style="display:flex;"><span>│   └── resolvers.conf +</span></span><span style="display:flex;"><span>├── custom_ssl +</span></span><span style="display:flex;"><span>│   ├── npm-1 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   ├── npm-2 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   └── npm-3 +</span></span><span style="display:flex;"><span>│   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   └── privkey.pem +</span></span><span style="display:flex;"><span>├── fastcgi.conf +</span></span><span style="display:flex;"><span>├── fastcgi_params +</span></span><span style="display:flex;"><span>├── koi-utf +</span></span><span style="display:flex;"><span>├── koi-win +</span></span><span style="display:flex;"><span>├── mime.types +</span></span><span style="display:flex;"><span>├── modules-available +</span></span><span style="display:flex;"><span>├── modules-enabled +</span></span><span style="display:flex;"><span>├── nginx.conf +</span></span><span style="display:flex;"><span>├── proxy_params +</span></span><span style="display:flex;"><span>├── scgi_params +</span></span><span style="display:flex;"><span>├── sites-available +</span></span><span style="display:flex;"><span>│   ├── auth.conf +</span></span><span style="display:flex;"><span>│   ├── bitwarden.conf +</span></span><span style="display:flex;"><span>│   ├── codehub.conf +</span></span><span style="display:flex;"><span>│   ├── default.backup +</span></span><span style="display:flex;"><span>│   ├── files.conf +</span></span><span style="display:flex;"><span>│   ├── notes.conf +</span></span><span style="display:flex;"><span>│   ├── photos.conf +</span></span><span style="display:flex;"><span>│   ├── rsmsn-root.conf +</span></span><span style="display:flex;"><span>│   ├── wordle.conf +</span></span><span style="display:flex;"><span>│   └── wordle-it.conf +</span></span><span style="display:flex;"><span>├── sites-enabled +</span></span><span style="display:flex;"><span>│   ├── auth.conf -&gt; /etc/nginx/sites-available/auth.conf +</span></span><span style="display:flex;"><span>│   ├── bitwarden.conf -&gt; /etc/nginx/sites-available/bitwarden.conf +</span></span><span style="display:flex;"><span>│   ├── codehub.conf -&gt; /etc/nginx/sites-available/codehub.conf +</span></span><span style="display:flex;"><span>│   ├── files.conf -&gt; /etc/nginx/sites-available/files.conf +</span></span><span style="display:flex;"><span>│   ├── notes.conf -&gt; /etc/nginx/sites-available/notes.conf +</span></span><span style="display:flex;"><span>│   ├── photos.conf -&gt; /etc/nginx/sites-available/photos.conf +</span></span><span style="display:flex;"><span>│   ├── wordle.conf -&gt; /etc/nginx/sites-available/wordle.conf +</span></span><span style="display:flex;"><span>│   └── wordle-it.conf -&gt; /etc/nginx/sites-available/wordle-it.conf +</span></span><span style="display:flex;"><span>├── snippets +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest-basic.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest-detect.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location-basic.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location-detect.conf +</span></span><span style="display:flex;"><span>│   ├── fastcgi-php.conf +</span></span><span style="display:flex;"><span>│   ├── proxy.conf +</span></span><span style="display:flex;"><span>│   └── snakeoil.conf +</span></span><span style="display:flex;"><span>├── uwsgi_params +</span></span><span style="display:flex;"><span>└── win-utf +</span></span></code></pre></div><h4 id="npm">NPM</h4> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>├── data +</span></span><span style="display:flex;"><span>│   ├── access +</span></span><span style="display:flex;"><span>│   ├── custom_ssl +</span></span><span style="display:flex;"><span>│   │   ├── npm-1 +</span></span><span style="display:flex;"><span>│   │   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   │   ├── npm-2 +</span></span><span style="display:flex;"><span>│   │   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   │   └── npm-3 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   ├── keys.json +</span></span><span style="display:flex;"><span>│   ├── letsencrypt-acme-challenge +</span></span><span style="display:flex;"><span>│   ├── logs +</span></span><span style="display:flex;"><span>│   ├── mysql +</span></span><span style="display:flex;"><span>│   └── nginx +</span></span><span style="display:flex;"><span>│   ├── custom +</span></span><span style="display:flex;"><span>│   ├── dead_host +</span></span><span style="display:flex;"><span>│   ├── default_host +</span></span><span style="display:flex;"><span>│   ├── default_www +</span></span><span style="display:flex;"><span>│   ├── dummycert.pem +</span></span><span style="display:flex;"><span>│   ├── dummykey.pem +</span></span><span style="display:flex;"><span>│   ├── proxy_host +</span></span><span style="display:flex;"><span>│   │   ├── 10.conf +</span></span><span style="display:flex;"><span>│   │   ├── 11.conf +</span></span><span style="display:flex;"><span>│   │   ├── 12.conf +</span></span><span style="display:flex;"><span>│   │   ├── 13.conf +</span></span><span style="display:flex;"><span>│   │   ├── 15.conf +</span></span><span style="display:flex;"><span>│   │   ├── 1.conf +</span></span><span style="display:flex;"><span>│   │   ├── 2.conf +</span></span><span style="display:flex;"><span>│   │   ├── 4.conf +</span></span><span style="display:flex;"><span>│   │   ├── 5.conf +</span></span><span style="display:flex;"><span>│   │   └── 6.conf +</span></span><span style="display:flex;"><span>│   ├── redirection_host +</span></span><span style="display:flex;"><span>│   ├── snippets +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest-basic.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest-detect.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location-basic.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location-detect.conf +</span></span><span style="display:flex;"><span>│   │   └── proxy.conf +</span></span><span style="display:flex;"><span>│   ├── stream +</span></span><span style="display:flex;"><span>│   └── temp +</span></span><span style="display:flex;"><span>├── docker-compose.yml +</span></span><span style="display:flex;"><span>└── letsencrypt +</span></span><span style="display:flex;"><span>└── renewal-hooks +</span></span></code></pre></div> + + + + diff --git a/public/posts/npm_to_nginx_tutorial/index.html b/public/posts/npm_to_nginx_tutorial/index.html new file mode 100644 index 0000000..7bee024 --- /dev/null +++ b/public/posts/npm_to_nginx_tutorial/index.html @@ -0,0 +1,418 @@ + + + + + Tutorial: Move from NginxProxyManager to Nginx :: Rsmsn Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+ + +
+ +
+

+ Tutorial: Move from NginxProxyManager to Nginx +

+ + + + + + + + + + +
+

A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for this reddit +post and to post this my Github profile. Thought my website would also be a good place to share it for any passers-by.

+

Goal

+

To give clear instructions to help users migrate from using Nginx Proxy Manager (NPM) to standard Nginx. This tutorial is not exhaustive and there are many other implementations of this transition. I would recommend checking out the many Nginx Documentation Sites and tutorials to learn more.

+

Introduction

+

If you’re anything like me and you got into the self-hosted/homelab/diy game sometime within the last 5 years, you’ve likely been recommended to use Nginx Proxy Manager as one of the choice Reverse Proxy services. If you’ve also been paying attention to various self-hosted communities, you may have also come across Christian Lempa’s Video on trusting smaller self hosted projects and tools.

+

Spoilers: He roasts NPM in his video and towards the end says he won’t be using NPM anymore. He also, perhaps purposely, doesn’t share which tool he will be migrating to.

+

Whether you follow Christian away from NPM or not, it dawned on me that while NPM is using a very trusted web server and reverse proxy under the hood, I hadn’t taken the time to understand how an Nginx Config actually worked. Since NPM was already creating most of the files for Nginx, I got to reading through all the files and reworking them so that I could begin using Nginx without the NPM gui.

+

Contributing: This is not all encompassing of Nginx possibilities. Including instructions for various installation methods, using OpenResty, and any other migrations or use cases would help the community. If you’d like to add in additional information on how to migrate from NPM to Nginx, that is welcome. Simply submit a PR with your steps.

+

TL;DR - Quick Steps

+
    +
  1. +

    Copy the following contents (including sub-directories) from the NPM /data/nginx directory to the Nginx /etc/nginx folder:

    +
      +
    • proxy_hosts > sites-available
    • +
    • conf.d > conf.d
    • +
    • snippets > snippets
    • +
    • custom_ssl > custom_ssl (if applicable)
    • +
    +
  2. +
  3. +

    Edit each file in your sites-available directory and update the paths. Most will change from /data/nginx/ to /etc/nginx.

    +
  4. +
  5. +

    Edit your nginx.conf file and ensure the following two paths are there:

    +
      +
    • include /etc/nginx/conf.d/*.conf; and include /etc/nginx/sites-enabled/*;
    • +
    +
  6. +
  7. +

    Symlink the proxy host files in sites-available to sites-enabled

    +
      +
    • ln -s * ./sites-enabled
    • +
    +
  8. +
  9. +

    Test your changes with nginx -t. Make appropriate changes if there are error messages.

    +
  10. +
+

Pre-requisites & Assumptions

+

I am using an Ubuntu VM with NPM and it’s db as a Docker Container while Nginx is installed natively on the machine. You don’t have to use this setup exactly, but I am making a few assumptions as to what you should have access to before you begin. I am also using custom SSL certs, but theoretically, the transition should be the same when using Lets Encrypt.

+

I’ve added some example files to show before and after changes to this repo and outlined file trees below.

+
    +
  • You understand the basics of what a Reverse Proxy is doing and are sticking with some stock settings (like exposing port 80 an 443).
  • +
  • You’ve installed NPM and Nginx using your preferred method.
  • +
  • You have access to both NPMs file tree and Nginx’s.
  • +
  • If using NPM in docker, make sure you’ve mapped a local volume on the host to the container.
  • +
  • My setup using docker-compose is the following: /user/nginx/data:/data.
  • +
  • Know where your Nginx files are. If using docker, same as above, make sure your container directories are mapped to the host.
  • +
  • For a linux install, they should be accessible at /etc/nginx.
  • +
  • You know how to edit files at the command line using nano, vi, vim, neovim, emacs, or something else.
  • +
+

Nginx Files

+

Nginx uses the nginx.conf file and within that file, it will include your proxy files. These exist under ./nginx/sites-enabled/. In the main nginx.conf file, the line include /etc/nginx/sites-enabled/*; will bring in those files to the config file, making the proxies accessible.

+

How to Transition - Detailed Version

+
    +
  1. +

    Since NPM uses Nginx under the hood, they are both, by default, going to try and use ports 80 and 443 to serve up your apps and content. Turn off both systems.

    +
      +
    • Docker: docker stop [app_container, db_container]
    • +
    • Systemd: systemctl stop nginx
    • +
    +
  2. +
  3. +

    Copy your proxy_host (NPM) files to the sites-available (Nginx) folder. +cp -r /user/nginx/data/nginx/proxy_hosts/* /etc/nginx/sites-available/

    +
  4. +
  5. +

    Nginx doesn’t really care what the files are called, but NPM numbers them based on the order in which you added them in the GUI. I find it better to rename them to what service they actually serve up for easier identification later.

    +
  6. +
  7. +

    Copy your custom_ssl folder from NPM to the custom_ssl folder in Nginx. See the following step for the various default paths in both systems.

    +
      +
    • cp -r /user/nginx/data/custom_ssl/* /etc/nginx/custom_ssl/
    • +
    +
  8. +
  9. +

    Copy the conf.d folder from NPM to the conf.d folder in Nginx. Note: For some reason, not all of the files in +the proxy files were actually in my conf.d directory. If you’re missing any files, please download and/or copy and +paste them from the NPM Repo

    +
      +
    • cp -r /user/nginx/data/nginx/conf.d /etc/nginx/
    • +
    +
  10. +
  11. +

    If you had any additional files included in the Advanced section of an NPM Proxy Host, make sure you copy them over. For my setup and this tutorial, they were all located in the snippets directory.

    +
      +
    • cp -r /user/nginx/data/nginx/snippets/* /etc/nginx/snippets/
    • +
    +
  12. +
  13. +

    There are a number of lines that need to be updated in each proxy configuration file to make them work with Nginx. I’ve placed additional comments in ./proxy_host/npm_proxy.conf file. The line changes are the following:

    +
      +
    1. +

      Custom SSL path:

      +
        +
      • NPM path: /data/custom_ssl...
      • +
      • Nginx path: /etc/nginx/custom_ssl...
      • +
      +
    2. +
    3. +

      conf.d:

      +
        +
      • The paths should remain the same. However, if you changed the path for conf.d in Nginx and differed in step 5, above, make sure you use the correct path.
      • +
      +
    4. +
    5. +

      Access & Error Logs

      +
        +
      • NPM path: /data/logs/...
      • +
      • Nginx path: /var/log/nginx/...
      • +
      +
    6. +
    +
  14. +
  15. +

    Double Check all your paths! If this is your first time using Nginx, make sure every directory is correct! Save your work.

    +
  16. +
  17. +

    Navigate to the nginx.conf file which is located at /etc/nginx/. You can see the one I am using in this repo.

    +
  18. +
  19. +

    Make sure that you have the following two lines in the main conf file and that they are pointing to the appropriate directories in the nginx directory path.

    +
      +
    • include /etc/nginx/conf.d/*.conf; and include /etc/nginx/sites-enabled/*;
    • +
    +
  20. +
  21. +

    You’ll notice that you ensured there was a sites-enabled directory in the configuration file, but you changed all your proxy host config files in sites-available! Good eye, all that’s left is to symlink the files to sites-enabled so that nginx can start using them.

    +
  22. +
  23. +

    To symlink the available proxy files run the following command within the sites-available directory:

    +
      +
    • ln -s * ./sites-enabled
    • +
    +
  24. +
  25. +

    Once you’re confident that you’ve done all the above correctly, you can test your setup using nginx command and flags. While in the directory with your nginx.conf file - usually /etc/nginx - run the following command: nginx -t.

    +
  26. +
  27. +

    If all is working as expected you should see the below output. If it returns any errors, fix them appropriately. It will usually tell you what line is throwing the error. In this case, there’s a high likelihood that it will be path error.

    +
  28. +
+
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
+nginx: configuration file /etc/nginx/nginx.conf test is successful
+

And that’s it! You can now restart your nginx service on the host and access all your sites just as if you were using Nginx Proxy Manager! Make sure you take a look at your logs and system’s status should nginx fail to start.

+

Additional Information/Appendix

+

File Trees for NPM (in container) and Nginx (on host)

+

I did not expand every directory in these trees. Only the ones that are pertinent for reference in this tutorial.

+

NGINX

+
├── conf.d
+│   └── include
+│       ├── assets.conf
+│       ├── block-exploits.conf
+│       ├── force-ssl.conf
+│       ├── ip_ranges.conf
+│       ├── proxy.conf
+│       └── resolvers.conf
+├── custom_ssl
+│   ├── npm-1
+│   │   ├── fullchain.pem
+│   │   └── privkey.pem
+│   ├── npm-2
+│   │   ├── fullchain.pem
+│   │   └── privkey.pem
+│   └── npm-3
+│       ├── fullchain.pem
+│       └── privkey.pem
+├── fastcgi.conf
+├── fastcgi_params
+├── koi-utf
+├── koi-win
+├── mime.types
+├── modules-available
+├── modules-enabled
+├── nginx.conf
+├── proxy_params
+├── scgi_params
+├── sites-available
+│   ├── auth.conf
+│   ├── bitwarden.conf
+│   ├── codehub.conf
+│   ├── default.backup
+│   ├── files.conf
+│   ├── notes.conf
+│   ├── photos.conf
+│   ├── rsmsn-root.conf
+│   ├── wordle.conf
+│   └── wordle-it.conf
+├── sites-enabled
+│   ├── auth.conf -> /etc/nginx/sites-available/auth.conf
+│   ├── bitwarden.conf -> /etc/nginx/sites-available/bitwarden.conf
+│   ├── codehub.conf -> /etc/nginx/sites-available/codehub.conf
+│   ├── files.conf -> /etc/nginx/sites-available/files.conf
+│   ├── notes.conf -> /etc/nginx/sites-available/notes.conf
+│   ├── photos.conf -> /etc/nginx/sites-available/photos.conf
+│   ├── wordle.conf -> /etc/nginx/sites-available/wordle.conf
+│   └── wordle-it.conf -> /etc/nginx/sites-available/wordle-it.conf
+├── snippets
+│   ├── authelia-authrequest-basic.conf
+│   ├── authelia-authrequest.conf
+│   ├── authelia-authrequest-detect.conf
+│   ├── authelia-location-basic.conf
+│   ├── authelia-location.conf
+│   ├── authelia-location-detect.conf
+│   ├── fastcgi-php.conf
+│   ├── proxy.conf
+│   └── snakeoil.conf
+├── uwsgi_params
+└── win-utf
+

NPM

+
├── data
+│   ├── access
+│   ├── custom_ssl
+│   │   ├── npm-1
+│   │   │   ├── fullchain.pem
+│   │   │   └── privkey.pem
+│   │   ├── npm-2
+│   │   │   ├── fullchain.pem
+│   │   │   └── privkey.pem
+│   │   └── npm-3
+│   │       ├── fullchain.pem
+│   │       └── privkey.pem
+│   ├── keys.json
+│   ├── letsencrypt-acme-challenge
+│   ├── logs
+│   ├── mysql
+│   └── nginx
+│       ├── custom
+│       ├── dead_host
+│       ├── default_host
+│       ├── default_www
+│       ├── dummycert.pem
+│       ├── dummykey.pem
+│       ├── proxy_host
+│       │   ├── 10.conf
+│       │   ├── 11.conf
+│       │   ├── 12.conf
+│       │   ├── 13.conf
+│       │   ├── 15.conf
+│       │   ├── 1.conf
+│       │   ├── 2.conf
+│       │   ├── 4.conf
+│       │   ├── 5.conf
+│       │   └── 6.conf
+│       ├── redirection_host
+│       ├── snippets
+│       │   ├── authelia-authrequest-basic.conf
+│       │   ├── authelia-authrequest.conf
+│       │   ├── authelia-authrequest-detect.conf
+│       │   ├── authelia-location-basic.conf
+│       │   ├── authelia-location.conf
+│       │   ├── authelia-location-detect.conf
+│       │   └── proxy.conf
+│       ├── stream
+│       └── temp
+├── docker-compose.yml
+└── letsencrypt
+└── renewal-hooks
+
+
+ + + + + + + +
+ +
+ + + + + + + + + + + + + + + + +
+ + + diff --git a/public/posts/page/1/index.html b/public/posts/page/1/index.html new file mode 100644 index 0000000..91d3e4c --- /dev/null +++ b/public/posts/page/1/index.html @@ -0,0 +1,10 @@ + + + + https://selfhosted.rsmsn.co/posts/ + + + + + + diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..52ddf67 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,25 @@ + + + + https://selfhosted.rsmsn.co/posts/ + 2023-08-05T15:23:51-05:00 + + https://selfhosted.rsmsn.co/ + 2023-08-05T15:23:51-05:00 + + https://selfhosted.rsmsn.co/tags/self-hosted/ + 2023-08-05T15:23:51-05:00 + + https://selfhosted.rsmsn.co/tags/ + 2023-08-05T15:23:51-05:00 + + https://selfhosted.rsmsn.co/tags/tutorial/ + 2023-08-05T15:23:51-05:00 + + https://selfhosted.rsmsn.co/posts/npm_to_nginx_tutorial/ + 2023-08-05T15:23:51-05:00 + + https://selfhosted.rsmsn.co/categories/ + + diff --git a/public/styles.css b/public/styles.css new file mode 100644 index 0000000..7ac618e --- /dev/null +++ b/public/styles.css @@ -0,0 +1,3 @@ +@font-face{font-display:swap;font-family:'Fira Code';font-style:normal;font-weight:400;src:url("../fonts/FiraCode-Regular.woff") format("woff")}@font-face{font-display:swap;font-family:'Fira Code';font-style:normal;font-weight:800;src:url("../fonts/FiraCode-Bold.woff") format("woff")}.button-container{display:table;margin-left:auto;margin-right:auto}button,.button,a.button{position:relative;display:flex;align-items:center;justify-content:center;padding:8px 18px;margin:5px 0;text-decoration:none;text-align:center;border-radius:8;border:1px solid #FFA86A;background:#FFA86A;color:#222129;font:inherit;font-weight:bold;appearance:none;cursor:pointer;outline:none}button:hover,.button:hover,a.button:hover{background:rgba(255,168,106,0.9)}button.outline,.button.outline,a.button.outline{background:transparent;box-shadow:none;padding:8px 18px}button.outline :hover,.button.outline :hover,a.button.outline :hover{transform:none;box-shadow:none}button.link,.button.link,a.button.link{background:none;font-size:1rem}button.small,.button.small,a.button.small{font-size:.8rem}button.wide,.button.wide,a.button.wide{min-width:200px;padding:14px 24px}a.read-more,a.read-more:hover,a.read-more:active{display:inline-flex;border:none;color:#FFA86A;background:none;box-shadow:none;padding:0;margin:20px 0;max-width:100%}.code-toolbar{margin-bottom:20px}.code-toolbar .toolbar-item a{position:relative;display:inline-flex;align-items:center;justify-content:center;padding:3px 8px;margin-bottom:5px;text-decoration:none;text-align:center;font-size:13px;font-weight:500;border-radius:8px;border:1px solid transparent;appearance:none;cursor:pointer;outline:none}input,textarea,select{background:transparent;color:#FFA86A;border:1px solid #FFA86A;border-radius:0;padding:10px;margin:5px 0;font:inherit;appearance:none}input:focus,input :active,textarea:focus,textarea :active,select:focus,select :active{border-color:#fff;outline:1px solid #fff}input:active,textarea:active,select:active{box-shadow:none}select{background:#222129}select option{background:#222129}::placeholder{color:rgba(255,168,106,0.5)}input[type="checkbox"]{vertical-align:middle;padding:10px;box-shadow:inset 0 0 0 3px #222129}input[type="checkbox"]:checked{background:#FFA86A}.header{display:flex;flex-direction:column;position:relative}@media print{.header{display:none}}.header__inner{display:flex;align-items:center;justify-content:space-between}.header__logo{display:flex;flex:1}.header__logo:after{content:'';background:repeating-linear-gradient(90deg, #FFA86A, #FFA86A 2px, transparent 0, transparent 10px);display:block;width:100%;right:10px}.header__logo a{flex:0 0 auto;max-width:100%;text-decoration:none}.navigation-menu{display:flex;align-items:flex-start;justify-content:space-between;margin:20px 1px}@media (max-width: 684px){.navigation-menu{margin:0}}.navigation-menu__inner{display:flex;flex:1;flex-wrap:wrap;list-style:none;margin:0;padding:0}.navigation-menu__inner>li{flex:0 0 auto;margin-bottom:10px;white-space:nowrap}.navigation-menu__inner>li:not(:last-of-type){margin-right:20px}@media (max-width: 684px){.navigation-menu__inner{flex-direction:column;align-items:flex-start;padding:0}.navigation-menu__inner li{margin:0;padding:5px}}.navigation-menu .spacer{flex-grow:1 !important}.menu{display:flex;flex-direction:column;position:relative;list-style:none;padding:0;margin:0}.menu__trigger{margin-right:0 !important;color:#FFA86A;user-select:none;cursor:pointer}.menu__dropdown{display:none;flex-direction:column;position:absolute;background:#222129;box-shadow:0 10px rgba(34,33,41,0.8),-10px 10px rgba(34,33,41,0.8),10px 10px rgba(34,33,41,0.8);color:white;border:2px solid;margin:0;padding:10px;top:10px;left:0;list-style:none;z-index:99}.open .menu__dropdown{display:flex}.menu__dropdown>li{flex:0 0 auto}.menu__dropdown>li:not(:last-of-type){margin-bottom:10px}.menu__dropdown>li a{display:flex;padding:5px}@media (max-width: 684px){.menu--desktop{display:none}}.menu--mobile .menu__trigger{color:#FFA86A;border:2px solid;margin-left:10px;height:100%;padding:3px 8px;margin-bottom:0 !important;position:relative;cursor:pointer;display:none}@media (max-width: 684px){.menu--mobile .menu__trigger{display:block}}@media (max-width: 684px){.menu--mobile .menu__dropdown{left:auto;right:0}}.menu--mobile li{flex:0 0 auto}.menu--mobile li:not(:last-of-type){margin-bottom:10px}.menu--language-selector .menu__trigger{color:#FFA86A;border:2px solid;margin-left:10px;height:100%;padding:3px 8px;margin-bottom:0 !important;position:relative;cursor:pointer}@media (max-width: 684px){.menu--language-selector .menu__trigger{display:none}}.menu--language-selector .menu__dropdown{left:auto;right:0}.logo{display:flex;align-items:center;text-decoration:none;background:#FFA86A;color:black;padding:5px 10px}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}body{margin:0;padding:0;font-family:'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace;font-size:1rem;line-height:1.54;letter-spacing:-0.02em;background-color:#222129;color:#fff;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;font-feature-settings:"liga", "tnum", "zero", "ss01", "locl";font-variant-ligatures:contextual;-webkit-overflow-scrolling:touch;-webkit-text-size-adjust:100%}@media (max-width: 684px){body{font-size:1rem}}.headings--one-size h1,.headings--one-size h2,.headings--one-size h3,.headings--one-size h4,.headings--one-size h5,.headings--one-size h6{line-height:1.3}.headings--one-size h1:not(first-child),.headings--one-size h2:not(first-child),.headings--one-size h3:not(first-child),.headings--one-size h4:not(first-child),.headings--one-size h5:not(first-child),.headings--one-size h6:not(first-child){margin-top:40px}.headings--one-size h1,.headings--one-size h2,.headings--one-size h3{font-size:1.4rem}.headings--one-size h4,.headings--one-size h5,.headings--one-size h6{font-size:1.2rem}a{color:inherit}img{display:block;max-width:100%}img.left{margin-right:auto}img.center{margin-left:auto;margin-right:auto}img.right{margin-left:auto}p{margin-bottom:20px}figure{display:table;max-width:100%;margin:25px 0}figure.left{margin-right:auto}figure.center{margin-left:auto;margin-right:auto}figure.right{margin-left:auto}figure figcaption{font-size:14px;padding:5px 10px;margin-top:5px;background:#FFA86A;color:#222129}figure figcaption.left{text-align:left}figure figcaption.center{text-align:center}figure figcaption.right{text-align:right}code,kbd{font-family:'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace !important;font-feature-settings:normal;background:rgba(255,168,106,0.2);color:#FFA86A;padding:1px 6px;margin:0 2px;font-size:.95rem}code code,code kbd,kbd code,kbd kbd{background:transparent;padding:0;margin:0}pre{background:transparent !important;padding:20px 10px;margin:40px 0;font-size:.95rem !important;overflow:auto;border-top:1px solid rgba(255,255,255,0.1);border-bottom:1px solid rgba(255,255,255,0.1)}pre+pre{border-top:0;margin-top:-40px}@media (max-width: 684px){pre{white-space:pre-wrap;word-wrap:break-word}}pre code{background:none !important;margin:0;padding:0;font-size:inherit;border:none}blockquote{border-top:1px solid #FFA86A;border-bottom:1px solid #FFA86A;margin:40px 0;padding:25px}@media (max-width: 684px){blockquote{padding-right:0}}blockquote p:first-of-type{margin-top:0}blockquote p:last-of-type{margin-bottom:0}blockquote p{position:relative}blockquote p:first-of-type:before{content:'>';display:block;position:absolute;left:-25px;color:#FFA86A}blockquote.twitter-tweet{position:relative;background:rgba(255,168,106,0.1);font:inherit;color:inherit;border:1px solid #FFA86A;padding-top:60px}blockquote.twitter-tweet p:before{content:''}blockquote.twitter-tweet:before{content:'> From Twitter:';position:absolute;top:20px;color:#FFA86A;font-weight:bold}blockquote.twitter-tweet a{color:#FFA86A}table{table-layout:auto;border-collapse:collapse;width:100%;margin:40px 0}table,th,td{border:1px dashed #FFA86A;padding:10px}th{color:#FFA86A}ul,ol{margin-left:22px;padding:0}ul li,ol li{position:relative}@media (max-width: 684px){ul,ol{margin-left:20px}}ol{list-style:none;counter-reset:li}ol>li{counter-increment:li}ol>li:before{content:counter(li);position:absolute;right:calc(100% + 10px);color:#FFA86A;display:inline-block;text-align:right}ol>li>ol{margin-left:38px}ol>li>ol>li{counter-increment:li}ol>li>ol>li:before{content:counters(li, ".") " "}mark{background:#FFA86A;color:#222129}.container{display:flex;flex-direction:column;padding:40px;max-width:864px;min-height:100vh;border-right:1px solid rgba(255,255,255,0.1)}.container.full,.container.center{border:none;margin:0 auto}.container.full{max-width:100%}@media (max-width: 684px){.container{padding:20px}}@media print{.container{display:initial}}.content{display:flex;flex-direction:column}@media print{.content{display:initial}}hr{width:100%;border:none;background:rgba(255,255,255,0.1);height:1px}.hidden{display:none}sup{line-height:0}.index-content{margin-top:20px}.framed{border:1px solid #FFA86A;padding:20px}.framed *:first-child{margin-top:0}.framed *:last-child{margin-bottom:0}.posts{width:100%}.post{width:100%;text-align:left;margin:20px auto;padding:20px 0}.post:not(:last-of-type){border-bottom:1px solid rgba(255,255,255,0.1)}.post-meta{font-size:1rem;margin-bottom:10px;color:rgba(255,168,106,0.7)}.post-meta>*:not(:first-child)::before{content:"::";display:inline-block;margin:0 8px}.post-title{position:relative;color:#FFA86A;margin:0 0 15px;padding-bottom:15px;border-bottom:3px dotted #FFA86A}.post-title:after{content:'';position:absolute;bottom:2px;display:block;width:100%;border-bottom:3px dotted #FFA86A}.post-title a{text-decoration:none}.post-tags{display:block;margin-bottom:20px;font-size:1rem;opacity:.5}.post-tags a{text-decoration:none}.post-content{margin-top:30px}.post-cover{border:20px solid #FFA86A;background:transparent;margin:40px 0;padding:20px}@media (max-width: 684px){.post-cover{padding:10px;border-width:10px}}.post ul{list-style:none}.post ul li:not(:empty):before{content:'-';position:absolute;left:-20px;color:#FFA86A}.post--regulation h1{justify-content:center}.post--regulation h2{justify-content:center;margin-bottom:10px}.post--regulation h2+h2{margin-top:-10px;margin-bottom:20px}.hanchor{color:rgba(255,168,106,0.9);text-decoration:none;margin-left:10px;visibility:hidden}h1:hover a,h2:hover a,h3:hover a,h4:hover a{visibility:visible}.footnotes{color:rgba(255,255,255,0.5)}.pagination{margin-top:50px}@media print{.pagination{display:none}}.pagination__title{display:flex;text-align:center;position:relative;margin:100px 0 20px}.pagination__title-h{text-align:center;margin:0 auto;padding:5px 10px;background:#222129;color:rgba(255,255,255,0.3);font-size:.8rem;text-transform:uppercase;text-decoration:none;letter-spacing:.1em;z-index:1}.pagination__title hr{position:absolute;left:0;right:0;width:100%;margin-top:15px;z-index:0}.pagination__buttons{display:flex;align-items:center;justify-content:center;flex-flow:row wrap;gap:10px}.pagination__buttons a{text-decoration:none}.button{position:relative;display:inline-flex;align-items:center;justify-content:center;font-size:1rem;padding:0;appearance:none}@media (max-width: 684px){.button{flex:1}}.button a{display:flex;justify-content:center;flex:1;padding:8px 16px;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.button__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.button.next .button__icon{margin-left:8px}.button.previous .button__icon{margin-right:8px}.footer{padding:40px 0;flex-grow:0;opacity:.5}.footer__inner{display:flex;align-items:center;justify-content:space-between;margin:0;width:760px;max-width:100%}@media (max-width: 900px){.footer__inner{flex-direction:column}}.footer a{color:inherit}.footer .copyright{display:flex;flex-flow:row wrap;flex:1;align-items:center;font-size:1rem;justify-content:center}.footer .copyright--user{margin:auto;text-align:center}.footer .copyright>*:first-child:not(:only-child){margin-right:10px}.footer .copyright span{white-space:nowrap}code[class*="language-"],pre[class*="language-"]{color:#ccc;background:none;font-family:Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*="language-"]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#2d2d2d}:not(pre)>code[class*="language-"]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}pre[data-line]{position:relative;padding:1em 0 1em 3em}.line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}@media print{.line-highlight{-webkit-print-color-adjust:exact;color-adjust:exact}}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:before,.line-numbers .line-highlight:after{content:none}pre[id].linkable-line-numbers span.line-numbers-rows{pointer-events:all}pre[id].linkable-line-numbers span.line-numbers-rows>span:before{cursor:pointer}pre[id].linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:rgba(128,128,128,0.2)}pre[class*="language-"].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*="language-"].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:0.8em;text-align:right}.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.command-line-prompt>span:before{color:#999;content:' ';display:block;padding-right:0.8em}.command-line-prompt>span[data-user]:before{content:"[" attr(data-user) "@" attr(data-host) "] $"}.command-line-prompt>span[data-user="root"]:before{content:"[" attr(data-user) "@" attr(data-host) "] #"}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:.3em;right:.2em;transition:opacity 0.3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:none;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224,224,224,0.2);box-shadow:0 2px 0 0 rgba(0,0,0,0.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus{color:inherit;text-decoration:none}code.language-css,code.language-scss,.token.boolean,.token.string,.token.entity,.token.url,.language-css .token.string,.language-scss .token.string,.style .token.string,.token.attr-value,.token.keyword,.token.control,.token.directive,.token.statement,.token.regex,.token.atrule,.token.number,.token.inserted,.token.important{color:#FFA86A !important}.token.tag-id,.token.atrule-id,.token.operator,.token.unit,.token.placeholder,.token.variable,.token.tag,.token.attr-name,.token.namespace,.token.deleted,.token.property,.token.class-name,.token.constant,.token.symbol{color:rgba(255,168,106,0.7) !important}.token.property,.token.function,.token.function-name,.token.deleted,code.language-javascript,code.language-html,.command-line-prompt>span:before{color:#9a9999 !important}.token.selector,.token.tag,.token.punctuation{color:white}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:rgba(255,255,255,0.3) !important}.token.namespace{opacity:.7 !important}pre[data-line]{position:relative}pre[class*="language-"]{margin:0;padding:0;overflow:auto}.line-highlight{position:absolute;left:0;right:0;padding:0;margin:0;background:rgba(245,167,111,0.08);pointer-events:none;line-height:inherit;white-space:pre}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:before,.line-numbers .line-highlight:after{content:none}.code-toolbar{position:relative;margin:40px 0;padding:20px;border:1px solid rgba(255,255,255,0.1)}.code-toolbar+.code-toolbar,.code-toolbar+.highlight,.code-toolbar+.highlight .code-toolbar{border-top:0;margin-top:calc(-1 * $code-margin)}.code-toolbar pre,.code-toolbar code{border:none}.code-toolbar code{display:block;color:inherit}.code-toolbar>.toolbar button{font-size:.8em !important;background:rgba(224,224,224,0.2) !important;color:#bbb !important;box-shadow:0 2px 0 0 rgba(0,0,0,0.2) !important;border-radius:0 !important;margin:6px !important;padding:10px !important;user-select:none}.collapsable-code{position:relative;width:100%;margin:40px 0}.collapsable-code input[type="checkbox"]{position:absolute;visibility:hidden}.collapsable-code input[type="checkbox"]:checked~pre,.collapsable-code input[type="checkbox"]:checked~.code-toolbar pre{height:0;padding:0;border-top:none}.collapsable-code input[type="checkbox"]:checked~.code-toolbar{padding:0;border-top:none}.collapsable-code input[type="checkbox"]:checked~.code-toolbar .toolbar{display:none}.collapsable-code input[type="checkbox"]:checked~label .collapsable-code__toggle:after{content:attr(data-label-expand)}.collapsable-code label{position:relative;display:flex;justify-content:space-between;min-width:30px;min-height:30px;margin:0;border-bottom:1px solid #f5a76f;cursor:pointer}.collapsable-code__title{flex:1;color:#FFA86A;padding:3px 10px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.collapsable-code__language{color:#FFA86A;border:1px solid #f5a76f;border-bottom:none;text-transform:uppercase;padding:3px 10px}.collapsable-code__toggle{color:#FFA86A;font-size:16px;padding:3px 10px}.collapsable-code__toggle:after{content:attr(data-label-collapse)}.collapsable-code pre{margin-top:0}.collapsable-code pre::first-line{line-height:0}.collapsable-code .code-toolbar{margin:0}.terms h3{font-size:initial}.terms ul{list-style:none}.terms ul li a{color:#FFA86A}.terms ul li:not(:empty):before{content:'-';position:absolute;left:-20px;color:#FFA86A}body .gist .blob-num,body .gist .blob-code-inner{border:none} + +/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/public/styles.css.map b/public/styles.css.map new file mode 100644 index 0000000..8e170d0 --- /dev/null +++ b/public/styles.css.map @@ -0,0 +1,45 @@ +{ + "version": 3, + "file": "styles.css", + "sourceRoot": "/Users/normrasmussen/Documents/Projects/hugo_blog/rsmsn_blog", + "sources": [ + "css/base.scss", + "themes/terminal/assets/css/variables.scss", + "themes/terminal/assets/css/font.scss", + "themes/terminal/assets/css/buttons.scss", + "themes/terminal/assets/css/form.scss", + "themes/terminal/assets/css/header.scss", + "themes/terminal/assets/css/menu.scss", + "themes/terminal/assets/css/logo.scss", + "themes/terminal/assets/css/main.scss", + "themes/terminal/assets/css/post.scss", + "themes/terminal/assets/css/pagination.scss", + "themes/terminal/assets/css/footer.scss", + "themes/terminal/assets/css/prism.scss", + "themes/terminal/assets/css/syntax.scss", + "themes/terminal/assets/css/code.scss", + "themes/terminal/assets/css/terms.scss", + "themes/terminal/assets/css/gist.scss" + ], + "sourcesContent": [ + "$accent: #FFA86A;\n@import \"variables\";\n\n@import \"font\";\n@import \"buttons\";\n@import \"form\";\n\n@import \"header\";\n@import \"menu\";\n@import \"logo\";\n@import \"main\";\n@import \"post\";\n@import \"pagination\";\n@import \"footer\";\n\n@import \"prism\";\n@import \"syntax\";\n@import \"code\";\n@import \"terms\";\n@import \"gist\";\n", + "/* COLOR VARIABLES */\n$background: mix($accent, #1D1E28, 2%);\n$color: white;\n$border-color: rgba(255, 255, 255, .1);\n\n/* MEDIA QUERIES */\n$phone: \"max-width: 684px\";\n$tablet: \"max-width: 900px\";\n", + "@font-face {\n font-display: swap;\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 400;\n src: url(\"../fonts/FiraCode-Regular.woff\") format(\"woff\");\n}\n\n@font-face {\n font-display: swap;\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 800;\n src: url(\"../fonts/FiraCode-Bold.woff\") format(\"woff\");\n}\n", + ".button-container {\n display: table;\n margin-left: auto;\n margin-right: auto;\n}\n\nbutton,\n.button,\na.button {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px 18px;\n margin: 5px 0;\n text-decoration: none;\n text-align: center;\n border-radius: 8;\n border: 1px solid $accent;\n background: $accent;\n color: $background;\n font: inherit;\n font-weight: bold;\n appearance: none;\n cursor: pointer;\n outline: none;\n\n &:hover {\n background: transparentize($accent, .1);\n }\n\n /* variants */\n\n &.outline {\n background: transparent;\n box-shadow: none;\n padding: 8px 18px;\n\n :hover {\n transform: none;\n box-shadow: none;\n }\n }\n\n &.link {\n background: none;\n font-size: 1rem;\n }\n\n /* sizes */\n\n &.small {\n font-size: .8rem;\n }\n\n &.wide {\n min-width: 200px;\n padding: 14px 24px;\n }\n}\n\na.read-more,\na.read-more:hover,\na.read-more:active {\n display: inline-flex;\n border: none;\n color: $accent;\n background: none;\n box-shadow: none;\n padding: 0;\n margin: 20px 0;\n max-width: 100%;\n}\n\n.code-toolbar {\n margin-bottom: 20px;\n\n .toolbar-item a {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px 8px;\n margin-bottom: 5px;\n text-decoration: none;\n text-align: center;\n font-size: 13px;\n font-weight: 500;\n border-radius: 8px;\n border: 1px solid transparent;\n appearance: none;\n cursor: pointer;\n outline: none;\n }\n}\n", + "input, textarea, select {\n background: transparent;\n color: $accent;\n border: 1px solid $accent;\n border-radius: 0;\n padding: 10px;\n margin: 5px 0;\n font: inherit;\n appearance: none;\n\n &:focus, :active {\n border-color: $color;\n outline: 1px solid $color;\n }\n\n &:active {\n box-shadow: none;\n }\n}\n\nselect {\n background: $background;\n\n option {\n background: $background;\n }\n}\n\n::placeholder {\n color: transparentize($accent, .5);\n}\n\ninput {\n &[type=\"checkbox\"] {\n vertical-align: middle;\n padding: 10px;\n box-shadow: inset 0 0 0 3px $background;\n\n &:checked {\n background: $accent;\n }\n }\n}\n", + ".header {\n display: flex;\n flex-direction: column;\n position: relative;\n\n @media print {\n display: none;\n }\n\n &__inner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n &__logo {\n display: flex;\n flex: 1;\n\n &:after {\n content: '';\n background: repeating-linear-gradient(90deg, $accent, $accent 2px, transparent 0, transparent 10px);\n display: block;\n width: 100%;\n right: 10px;\n }\n\n a {\n flex: 0 0 auto;\n max-width: 100%;\n text-decoration: none;\n }\n }\n}\n", + "@mixin menu {\n display: none;\n flex-direction: column;\n $shadow-color: transparentize($background, .2);\n $shadow: 0 10px $shadow-color, -10px 10px $shadow-color, 10px 10px $shadow-color;\n position: absolute;\n background: $background;\n box-shadow: $shadow;\n color: white;\n border: 2px solid;\n margin: 0;\n padding: 10px;\n top: 10px;\n left: 0;\n list-style: none;\n z-index: 99;\n}\n\n@mixin header-menu-trigger {\n color: $accent;\n border: 2px solid;\n margin-left: 10px;\n height: 100%;\n padding: 3px 8px;\n margin-bottom: 0 !important;\n position: relative;\n cursor: pointer;\n}\n\n.navigation-menu {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin: 20px 1px;\n\n @media ($phone) {\n margin: 0;\n }\n\n &__inner {\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n list-style: none;\n margin: 0;\n padding: 0;\n\n > li {\n flex: 0 0 auto;\n margin-bottom: 10px;\n white-space: nowrap;\n\n &:not(:last-of-type) {\n margin-right: 20px;\n }\n }\n\n @media ($phone) {\n flex-direction: column;\n align-items: flex-start;\n padding: 0;\n\n li {\n margin: 0;\n padding: 5px;\n }\n }\n }\n\n .spacer {\n flex-grow: 1 !important;\n }\n}\n\n.menu {\n display: flex;\n flex-direction: column;\n position: relative;\n list-style: none;\n padding: 0;\n margin: 0;\n\n &__trigger {\n margin-right: 0 !important;\n color: $accent;\n user-select: none;\n cursor: pointer;\n }\n\n &__dropdown {\n @include menu;\n\n .open & {\n display: flex;\n }\n\n > li {\n flex: 0 0 auto;\n\n &:not(:last-of-type) {\n margin-bottom: 10px;\n }\n\n a {\n display: flex;\n padding: 5px;\n }\n }\n }\n\n &--desktop {\n @media ($phone) {\n display: none\n }\n }\n\n &--mobile {\n .menu__trigger {\n @include header-menu-trigger;\n display: none;\n\n @media ($phone) {\n display: block;\n }\n }\n\n .menu__dropdown {\n @media ($phone) {\n left: auto;\n right: 0;\n }\n }\n\n li {\n flex: 0 0 auto;\n\n &:not(:last-of-type) {\n margin-bottom: 10px;\n }\n }\n }\n\n &--language-selector {\n .menu__trigger {\n @include header-menu-trigger;\n\n @media ($phone) {\n display: none;\n }\n }\n\n .menu__dropdown {\n left: auto;\n right: 0;\n }\n }\n}\n", + ".logo {\n display: flex;\n align-items: center;\n text-decoration: none;\n background: $accent;\n color: black;\n padding: 5px 10px;\n}\n", + "html {\n box-sizing: border-box;\n}\n\n*,\n*:before,\n*:after {\n box-sizing: inherit;\n}\n\nbody {\n margin: 0;\n padding: 0;\n font-family: 'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace;\n font-size: 1rem;\n line-height: 1.54;\n letter-spacing: -0.02em;\n background-color: $background;\n color: $color;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n font-feature-settings: \"liga\", \"tnum\", \"zero\", \"ss01\", \"locl\";\n font-variant-ligatures: contextual;\n -webkit-overflow-scrolling: touch;\n -webkit-text-size-adjust: 100%;\n\n @media ($phone) {\n font-size: 1rem;\n }\n}\n\n.headings--one-size {\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n line-height: 1.3;\n\n &:not(first-child) {\n margin-top: 40px;\n }\n }\n\n h1,\n h2,\n h3 {\n font-size: 1.4rem;\n }\n\n h4,\n h5,\n h6 {\n font-size: 1.2rem;\n }\n}\n\na {\n color: inherit;\n\n /* Waiting for a better times... */\n /* &:has(code) {\n text-decoration-color: $accent;\n } */\n}\n\nimg {\n display: block;\n max-width: 100%;\n\n &.left {\n margin-right: auto;\n }\n\n &.center {\n margin-left: auto;\n margin-right: auto;\n }\n\n &.right {\n margin-left: auto;\n }\n}\n\np {\n margin-bottom: 20px;\n}\n\nfigure {\n display: table;\n max-width: 100%;\n margin: 25px 0;\n\n &.left {\n margin-right: auto;\n }\n\n &.center {\n margin-left: auto;\n margin-right: auto;\n }\n\n &.right {\n margin-left: auto;\n }\n\n figcaption {\n font-size: 14px;\n padding: 5px 10px;\n margin-top: 5px;\n background: $accent;\n color: $background;\n /* opacity: .8; */\n\n &.left {\n text-align: left;\n }\n\n &.center {\n text-align: center;\n }\n\n &.right {\n text-align: right;\n }\n }\n}\n\ncode, kbd {\n font-family: 'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace !important;\n font-feature-settings: normal;\n background: transparentize($accent, .8);\n color: $accent;\n padding: 1px 6px;\n margin: 0 2px;\n font-size: .95rem;\n\n code, kbd {\n background: transparent;\n padding: 0;\n margin: 0;\n }\n}\n\npre {\n background: transparent !important;\n padding: 20px 10px;\n margin: 40px 0;\n font-size: .95rem !important;\n overflow: auto;\n border-top: 1px solid rgba(255, 255, 255, .1);\n border-bottom: 1px solid rgba(255, 255, 255, .1);\n\n + pre {\n border-top: 0;\n margin-top: -40px;\n }\n\n @media ($phone) {\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n\n code {\n background: none !important;\n margin: 0;\n padding: 0;\n font-size: inherit;\n border: none;\n }\n}\n\nblockquote {\n border-top: 1px solid $accent;\n border-bottom: 1px solid $accent;\n margin: 40px 0;\n padding: 25px;\n\n @media ($phone) {\n padding-right: 0;\n }\n\n p:first-of-type {\n margin-top: 0;\n }\n\n p:last-of-type {\n margin-bottom: 0;\n }\n\n p {\n position: relative;\n }\n\n p:first-of-type:before {\n content: '>';\n display: block;\n position: absolute;\n left: -25px;\n color: $accent;\n }\n\n &.twitter-tweet {\n position: relative;\n background: transparentize($accent, .9);\n font: inherit;\n color: inherit;\n border: 1px solid $accent;\n padding-top: 60px;\n\n p:before {\n content: '';\n }\n\n &:before {\n content: '> From Twitter:';\n position: absolute;\n top: 20px;\n color: $accent;\n font-weight: bold;\n }\n\n a {\n color: $accent;\n }\n }\n}\n\ntable {\n table-layout: auto;\n border-collapse: collapse;\n width: 100%;\n margin: 40px 0;\n}\n\ntable,\nth,\ntd {\n border: 1px dashed $accent;\n padding: 10px;\n}\n\nth {\n color: $accent;\n}\n\nul,\nol {\n margin-left: 22px;\n padding: 0;\n\n li {\n position: relative;\n }\n\n @media ($phone) {\n margin-left: 20px;\n }\n}\n\nol {\n list-style: none;\n counter-reset: li;\n\n > li {\n counter-increment: li;\n\n &:before {\n content: counter(li);\n position: absolute;\n right: calc(100% + 10px);\n color: $accent;\n display: inline-block;\n text-align: right;\n }\n\n > ol {\n margin-left: 38px;\n\n > li {\n counter-increment: li;\n\n &:before {\n content: counters(li, \".\") \" \";\n }\n }\n }\n }\n}\n\nmark {\n background: $accent;\n color: $background;\n}\n\n.container {\n display: flex;\n flex-direction: column;\n padding: 40px;\n max-width: 864px;\n min-height: 100vh;\n border-right: 1px solid rgba(255, 255, 255, 0.1);\n\n &.full,\n &.center {\n border: none;\n margin: 0 auto;\n }\n\n &.full {\n max-width: 100%;\n }\n\n @media ($phone) {\n padding: 20px;\n }\n\n @media print {\n display: initial;\n }\n}\n\n.content {\n display: flex;\n flex-direction: column;\n\n @media print {\n display: initial;\n }\n}\n\nhr {\n width: 100%;\n border: none;\n background: $border-color;\n height: 1px;\n}\n\n.hidden {\n display: none;\n}\n\nsup {\n line-height: 0;\n}\n", + ".index-content {\n margin-top: 20px;\n}\n\n.framed {\n border: 1px solid $accent;\n padding: 20px;\n\n *:first-child {\n margin-top: 0;\n }\n\n *:last-child {\n margin-bottom: 0;\n }\n}\n\n.posts {\n width: 100%;\n}\n\n.post {\n width: 100%;\n text-align: left;\n margin: 20px auto;\n padding: 20px 0;\n\n &:not(:last-of-type) {\n border-bottom: 1px solid $border-color;\n }\n\n &-meta {\n font-size: 1rem;\n margin-bottom: 10px;\n color: transparentize($accent, .3);\n\n & > *:not(:first-child) {\n &::before {\n content: \"::\";\n display: inline-block;\n margin: 0 8px;\n }\n }\n }\n\n &-title {\n $border: 3px dotted $accent;\n position: relative;\n color: $accent;\n margin: 0 0 15px;\n padding-bottom: 15px;\n border-bottom: $border;\n\n &:after {\n content: '';\n position: absolute;\n bottom: 2px;\n display: block;\n width: 100%;\n border-bottom: $border;\n }\n\n a {\n text-decoration: none;\n }\n }\n\n &-tags {\n display: block;\n margin-bottom: 20px;\n font-size: 1rem;\n opacity: .5;\n\n a {\n text-decoration: none;\n }\n }\n\n &-content {\n margin-top: 30px;\n }\n\n &-cover {\n border: 20px solid $accent;\n background: transparent;\n margin: 40px 0;\n padding: 20px;\n\n @media ($phone) {\n padding: 10px;\n border-width: 10px;\n }\n }\n\n ul {\n list-style: none;\n\n li:not(:empty):before {\n content: '-';\n position: absolute;\n left: -20px;\n color: $accent;\n }\n }\n}\n\n.post--regulation {\n h1 {\n justify-content: center;\n }\n\n h2 {\n justify-content: center;\n margin-bottom: 10px;\n\n & + h2 {\n margin-top: -10px;\n margin-bottom: 20px;\n }\n }\n}\n\n.hanchor {\n color: transparentize($accent, .1);\n text-decoration: none;\n margin-left: 10px;\n visibility: hidden;\n}\n\nh1:hover a, h2:hover a, h3:hover a, h4:hover a {\n visibility: visible;\n}\n\n.footnotes {\n color: transparentize($color, .5);\n}\n", + ".pagination {\n margin-top: 50px;\n\n @media print {\n display: none;\n }\n\n &__title {\n display: flex;\n text-align: center;\n position: relative;\n margin: 100px 0 20px;\n\n &-h {\n text-align: center;\n margin: 0 auto;\n padding: 5px 10px;\n background: $background;\n color: transparentize($color, .7);\n font-size: .8rem;\n text-transform: uppercase;\n text-decoration: none;\n letter-spacing: .1em;\n z-index: 1;\n }\n\n hr {\n position: absolute;\n left: 0;\n right: 0;\n width: 100%;\n margin-top: 15px;\n z-index: 0;\n }\n }\n\n &__buttons {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-flow: row wrap;\n gap: 10px;\n\n a {\n text-decoration: none;\n }\n }\n}\n\n.button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 1rem;\n padding: 0;\n appearance: none;\n\n @media($phone) {\n flex: 1;\n }\n\n a {\n display: flex;\n justify-content: center;\n flex: 1;\n padding: 8px 16px;\n text-decoration: none;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n &__text {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n &.next .button__icon {\n margin-left: 8px;\n }\n\n &.previous .button__icon {\n margin-right: 8px;\n }\n}\n", + ".footer {\n padding: 40px 0;\n flex-grow: 0;\n opacity: .5;\n\n &__inner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 0;\n width: 760px;\n max-width: 100%;\n\n @media ($tablet) {\n flex-direction: column;\n }\n }\n\n a {\n color: inherit;\n }\n\n .copyright {\n display: flex;\n flex-flow: row wrap;\n flex: 1;\n align-items: center;\n font-size: 1rem;\n justify-content: center;\n\n &--user {\n margin: auto;\n text-align: center;\n }\n\n & > *:first-child:not(:only-child) {\n margin-right: 10px;\n }\n\n span {\n white-space: nowrap;\n }\n }\n}\n", + "/* PrismJS 1.24.1\nhttps://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+actionscript+apacheconf+applescript+bash+c+csharp+cpp+cmake+coffeescript+csp+css-extras+diff+django+docker+elixir+elm+erlang+fsharp+flow+git+go+graphql+haml+handlebars+haskell+http+java+json+kotlin+latex+less+llvm+makefile+markdown+markup-templating+nasm+objectivec+ocaml+perl+php+php-extras+powershell+processing+pug+python+r+jsx+tsx+reason+ruby+rust+sass+scss+scala+scheme+sql+stylus+swift+textile+toml+twig+typescript+vim+visual-basic+wasm+yaml&plugins=line-highlight+line-numbers+jsonp-highlight+highlight-keywords+command-line+toolbar+copy-to-clipboard */\n/**\n * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML\n * Based on https://github.com/chriskempson/tomorrow-theme\n * @author Rose Pritchard\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: #ccc;\n\tbackground: none;\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground: #2d2d2d;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .1em;\n\tborder-radius: .3em;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.block-comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #999;\n}\n\n.token.punctuation {\n\tcolor: #ccc;\n}\n\n.token.tag,\n.token.attr-name,\n.token.namespace,\n.token.deleted {\n\tcolor: #e2777a;\n}\n\n.token.function-name {\n\tcolor: #6196cc;\n}\n\n.token.boolean,\n.token.number,\n.token.function {\n\tcolor: #f08d49;\n}\n\n.token.property,\n.token.class-name,\n.token.constant,\n.token.symbol {\n\tcolor: #f8c555;\n}\n\n.token.selector,\n.token.important,\n.token.atrule,\n.token.keyword,\n.token.builtin {\n\tcolor: #cc99cd;\n}\n\n.token.string,\n.token.char,\n.token.attr-value,\n.token.regex,\n.token.variable {\n\tcolor: #7ec699;\n}\n\n.token.operator,\n.token.entity,\n.token.url {\n\tcolor: #67cdcc;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n\n.token.inserted {\n\tcolor: green;\n}\n\npre[data-line] {\n\tposition: relative;\n\tpadding: 1em 0 1em 3em;\n}\n\n.line-highlight {\n\tposition: absolute;\n\tleft: 0;\n\tright: 0;\n\tpadding: inherit 0;\n\tmargin-top: 1em; /* Same as .prism’s padding-top */\n\n\tbackground: hsla(24, 20%, 50%,.08);\n\tbackground: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));\n\n\tpointer-events: none;\n\n\tline-height: inherit;\n\twhite-space: pre;\n}\n\n@media print {\n\t.line-highlight {\n\t\t/*\n\t\t * This will prevent browsers from replacing the background color with white.\n\t\t * It's necessary because the element is layered on top of the displayed code.\n\t\t */\n\t\t-webkit-print-color-adjust: exact;\n\t\tcolor-adjust: exact;\n\t}\n}\n\n\t.line-highlight:before,\n\t.line-highlight[data-end]:after {\n\t\tcontent: attr(data-start);\n\t\tposition: absolute;\n\t\ttop: .4em;\n\t\tleft: .6em;\n\t\tmin-width: 1em;\n\t\tpadding: 0 .5em;\n\t\tbackground-color: hsla(24, 20%, 50%,.4);\n\t\tcolor: hsl(24, 20%, 95%);\n\t\tfont: bold 65%/1.5 sans-serif;\n\t\ttext-align: center;\n\t\tvertical-align: .3em;\n\t\tborder-radius: 999px;\n\t\ttext-shadow: none;\n\t\tbox-shadow: 0 1px white;\n\t}\n\n\t.line-highlight[data-end]:after {\n\t\tcontent: attr(data-end);\n\t\ttop: auto;\n\t\tbottom: .4em;\n\t}\n\n.line-numbers .line-highlight:before,\n.line-numbers .line-highlight:after {\n\tcontent: none;\n}\n\npre[id].linkable-line-numbers span.line-numbers-rows {\n\tpointer-events: all;\n}\npre[id].linkable-line-numbers span.line-numbers-rows > span:before {\n\tcursor: pointer;\n}\npre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before {\n\tbackground-color: rgba(128, 128, 128, .2);\n}\n\npre[class*=\"language-\"].line-numbers {\n\tposition: relative;\n\tpadding-left: 3.8em;\n\tcounter-reset: linenumber;\n}\n\npre[class*=\"language-\"].line-numbers > code {\n\tposition: relative;\n\twhite-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n\tposition: absolute;\n\tpointer-events: none;\n\ttop: 0;\n\tfont-size: 100%;\n\tleft: -3.8em;\n\twidth: 3em; /* works for line-numbers below 1000 lines */\n\tletter-spacing: -1px;\n\tborder-right: 1px solid #999;\n\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n}\n\n\t.line-numbers-rows > span {\n\t\tdisplay: block;\n\t\tcounter-increment: linenumber;\n\t}\n\n\t\t.line-numbers-rows > span:before {\n\t\t\tcontent: counter(linenumber);\n\t\t\tcolor: #999;\n\t\t\tdisplay: block;\n\t\t\tpadding-right: 0.8em;\n\t\t\ttext-align: right;\n\t\t}\n\n.command-line-prompt {\n\tborder-right: 1px solid #999;\n\tdisplay: block;\n\tfloat: left;\n\tfont-size: 100%;\n\tletter-spacing: -1px;\n\tmargin-right: 1em;\n\tpointer-events: none;\n\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.command-line-prompt > span:before {\n\tcolor: #999;\n\tcontent: ' ';\n\tdisplay: block;\n\tpadding-right: 0.8em;\n}\n\n.command-line-prompt > span[data-user]:before {\n\tcontent: \"[\" attr(data-user) \"@\" attr(data-host) \"] $\";\n}\n\n.command-line-prompt > span[data-user=\"root\"]:before {\n\tcontent: \"[\" attr(data-user) \"@\" attr(data-host) \"] #\";\n}\n\n.command-line-prompt > span[data-prompt]:before {\n\tcontent: attr(data-prompt);\n}\n\ndiv.code-toolbar {\n\tposition: relative;\n}\n\ndiv.code-toolbar > .toolbar {\n\tposition: absolute;\n\ttop: .3em;\n\tright: .2em;\n\ttransition: opacity 0.3s ease-in-out;\n\topacity: 0;\n}\n\ndiv.code-toolbar:hover > .toolbar {\n\topacity: 1;\n}\n\n/* Separate line b/c rules are thrown out if selector is invalid.\n IE11 and old Edge versions don't support :focus-within. */\ndiv.code-toolbar:focus-within > .toolbar {\n\topacity: 1;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item {\n\tdisplay: inline-block;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a {\n\tcursor: pointer;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > button {\n\tbackground: none;\n\tborder: 0;\n\tcolor: inherit;\n\tfont: inherit;\n\tline-height: normal;\n\toverflow: visible;\n\tpadding: 0;\n\t-webkit-user-select: none; /* for button */\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a,\ndiv.code-toolbar > .toolbar > .toolbar-item > button,\ndiv.code-toolbar > .toolbar > .toolbar-item > span {\n\tcolor: #bbb;\n\tfont-size: .8em;\n\tpadding: 0 .5em;\n\tbackground: #f5f2f0;\n\tbackground: rgba(224, 224, 224, 0.2);\n\tbox-shadow: 0 2px 0 0 rgba(0,0,0,0.2);\n\tborder-radius: .5em;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > a:focus,\ndiv.code-toolbar > .toolbar > .toolbar-item > button:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > button:focus,\ndiv.code-toolbar > .toolbar > .toolbar-item > span:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > span:focus {\n\tcolor: inherit;\n\ttext-decoration: none;\n}\n\n", + "code.language-css,\ncode.language-scss,\n.token.boolean,\n.token.string,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.language-scss .token.string,\n.style .token.string,\n.token.attr-value,\n.token.keyword,\n.token.control,\n.token.directive,\n.token.statement,\n.token.regex,\n.token.atrule,\n.token.number,\n.token.inserted,\n.token.important {\n color: $accent !important;\n}\n\n.token.tag-id,\n.token.atrule-id,\n.token.operator,\n.token.unit,\n.token.placeholder,\n.token.variable,\n.token.tag,\n.token.attr-name,\n.token.namespace,\n.token.deleted,\n.token.property,\n.token.class-name,\n.token.constant,\n.token.symbol {\n color: transparentize($accent, .3) !important;\n}\n\n.token.property,\n.token.function,\n.token.function-name,\n.token.deleted,\ncode.language-javascript,\ncode.language-html,\n.command-line-prompt > span:before {\n color: mix($accent, #999, .9) !important;\n}\n\n.token.selector,\n.token.tag,\n.token.punctuation {\n color: white;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n color: rgba(255, 255, 255, .3) !important;\n}\n\n.token.namespace {\n opacity: .7 !important;\n}\n\npre[data-line] {\n position: relative;\n}\n\npre[class*=\"language-\"] {\n margin: 0;\n padding: 0;\n overflow: auto;\n}\n\n.line-highlight {\n position: absolute;\n left: 0;\n right: 0;\n padding: 0;\n margin: 0;\n background: transparentize(mix($accent, #999, 90%), .92);\n pointer-events: none;\n line-height: inherit;\n white-space: pre;\n}\n\n.line-highlight:before,\n.line-highlight[data-end]:after {\n content: attr(data-start);\n position: absolute;\n /* top: .4em; */\n left: .6em;\n min-width: 1em;\n padding: 0 .5em;\n background-color: hsla(24, 20%, 50%, .4);\n color: hsl(24, 20%, 95%);\n font: bold 65%/1.5 sans-serif;\n text-align: center;\n vertical-align: .3em;\n border-radius: 999px;\n text-shadow: none;\n box-shadow: 0 1px white;\n}\n\n.line-highlight[data-end]:after {\n content: attr(data-end);\n top: auto;\n bottom: .4em;\n}\n\n.line-numbers .line-highlight:before,\n.line-numbers .line-highlight:after {\n content: none;\n}\n\n.code-toolbar {\n $code-margin: 40px;\n\tposition: relative;\n\tmargin: $code-margin 0;\n\tpadding: 20px;\n\tborder: 1px solid rgba(255, 255, 255, .1);\n\n\t+ .code-toolbar,\n\t+ .highlight,\n\t+ .highlight .code-toolbar {\n\t\tborder-top: 0;\n\t\tmargin-top: calc(-1 * $code-margin);\n\t}\n\n\tpre, code {\n\t\tborder: none;\n\t}\n\n\tcode {\n\t\tdisplay: block;\n\t\tcolor: inherit;\n\t}\n\n > .toolbar {\n button {\n font-size: .8em !important;\n background: hsla(0,0%,87.8%,.2) !important;\n color: #bbb !important;\n box-shadow: 0 2px 0 0 rgba(0,0,0,.2) !important;\n border-radius: 0 !important;\n margin: 6px !important;\n padding: 10px !important;\n user-select:none\n }\n }\n}\n", + ".collapsable-code {\n $border-color: mix($accent, #999, 90%);\n\n position: relative;\n width: 100%;\n margin: 40px 0;\n\n input[type=\"checkbox\"] {\n position: absolute;\n visibility: hidden;\n }\n\n input[type=\"checkbox\"]:checked {\n ~ pre,\n ~ .code-toolbar pre {\n height: 0;\n padding: 0;\n border-top: none;\n }\n\n ~ .code-toolbar {\n padding: 0;\n border-top: none;\n\n .toolbar {\n display: none;\n }\n }\n\n ~ label .collapsable-code__toggle:after {\n content: attr(data-label-expand);\n }\n }\n\n label {\n position: relative;\n display: flex;\n justify-content: space-between;\n min-width: 30px;\n min-height: 30px;\n margin: 0;\n border-bottom: 1px solid $border-color;\n cursor: pointer;\n }\n\n &__title {\n flex: 1;\n color: $accent;\n padding: 3px 10px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n &__language {\n color: $accent;\n border: 1px solid $border-color;\n border-bottom: none;\n text-transform: uppercase;\n padding: 3px 10px;\n }\n\n &__toggle {\n color: $accent;\n font-size: 16px;\n padding: 3px 10px;\n\n &:after {\n content: attr(data-label-collapse);\n }\n }\n\n pre {\n margin-top: 0;\n\n &::first-line {\n line-height: 0;\n }\n }\n\n .code-toolbar {\n margin: 0;\n }\n}\n", + ".terms {\n h3 {\n font-size: initial;\n }\n\n ul {\n list-style: none;\n\n li {\n a {\n color: $accent;\n }\n }\n\n li:not(:empty):before {\n content: '-';\n position: absolute;\n left: -20px;\n color: $accent;\n }\n }\n}\n", + "body .gist .blob-num /* line numbers */,\nbody .gist .blob-code-inner\n{\n border: none;\n}\n\n" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/public/tags/index.html b/public/tags/index.html new file mode 100644 index 0000000..0f09170 --- /dev/null +++ b/public/tags/index.html @@ -0,0 +1,150 @@ + + + + + Tags :: Rsmsn Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+ + +
+ +
+

Tags

+ + +
+ +
+ + + + + + + + + + + + + + + + +
+ + + diff --git a/public/tags/index.xml b/public/tags/index.xml new file mode 100644 index 0000000..c043cd3 --- /dev/null +++ b/public/tags/index.xml @@ -0,0 +1,31 @@ + + + + Tags on Rsmsn Blog + https://selfhosted.rsmsn.co/tags/ + Recent content in Tags on Rsmsn Blog + Hugo -- gohugo.io + en-us + Sat, 05 Aug 2023 15:23:51 -0500 + + self-hosted + https://selfhosted.rsmsn.co/tags/self-hosted/ + Sat, 05 Aug 2023 15:23:51 -0500 + + https://selfhosted.rsmsn.co/tags/self-hosted/ + + + + + + tutorial + https://selfhosted.rsmsn.co/tags/tutorial/ + Sat, 05 Aug 2023 15:23:51 -0500 + + https://selfhosted.rsmsn.co/tags/tutorial/ + + + + + + diff --git a/public/tags/self-hosted/index.html b/public/tags/self-hosted/index.html new file mode 100644 index 0000000..c0856bd --- /dev/null +++ b/public/tags/self-hosted/index.html @@ -0,0 +1,172 @@ + + + + + self-hosted :: Rsmsn Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+ + +
+ +

Posts for: #self-hosted

+ +
+ +
+

+ Tutorial: Move from NginxProxyManager to Nginx +

+ + + + + + + + + +
+ + A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for this reddit post and to post this my Github profile. Thought my website would also be a good place to share it for any passers-by. +Goal To give clear instructions to help users migrate from using Nginx Proxy Manager (NPM) to standard Nginx. This tutorial is not exhaustive and there are many other implementations of this transition. + +
+ + +
+ +
+ +
+ + + + +
+ +
+ + + + + + + + + + + + + + + + +
+ + + diff --git a/public/tags/self-hosted/index.xml b/public/tags/self-hosted/index.xml new file mode 100644 index 0000000..bc5e678 --- /dev/null +++ b/public/tags/self-hosted/index.xml @@ -0,0 +1,281 @@ + + + + self-hosted on Rsmsn Blog + https://selfhosted.rsmsn.co/tags/self-hosted/ + Recent content in self-hosted on Rsmsn Blog + Hugo -- gohugo.io + en-us + Sat, 05 Aug 2023 15:23:51 -0500 + + Tutorial: Move from NginxProxyManager to Nginx + https://selfhosted.rsmsn.co/posts/npm_to_nginx_tutorial/ + Sat, 05 Aug 2023 15:23:51 -0500 + + https://selfhosted.rsmsn.co/posts/npm_to_nginx_tutorial/ + A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for this reddit post and to post this my Github profile. Thought my website would also be a good place to share it for any passers-by. +Goal To give clear instructions to help users migrate from using Nginx Proxy Manager (NPM) to standard Nginx. This tutorial is not exhaustive and there are many other implementations of this transition. + <p>A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for <a href="https://www.reddit.com/r/selfhosted/comments/15j4v80/minitutorial_migrating_from_nginx_proxy_manager/">this reddit +post</a> and to post this <a href="https://github.com/Normanras/Npm_to_Nginx">my Github profile</a>. Thought my website would also be a good place to share it for any passers-by.</p> +<h2 id="goal">Goal</h2> +<p>To give clear instructions to help users migrate from using <a href="https://nginxproxymanager.com/">Nginx Proxy Manager</a> (NPM) to standard <a href="https://docs.nginx.com/">Nginx</a>. This tutorial is not exhaustive and there are many other implementations of this transition. I would recommend checking out the many Nginx <a href="http://nginx.org/en/docs/">Documentation Sites</a> and tutorials to learn more.</p> +<h3 id="introduction">Introduction</h3> +<p>If you&rsquo;re anything like me and you got into the self-hosted/homelab/diy game sometime within the last 5 years, you&rsquo;ve likely been recommended to use Nginx Proxy Manager as one of the choice Reverse Proxy services. If you&rsquo;ve also been paying attention to various self-hosted communities, you may have also come across Christian Lempa&rsquo;s Video on <a href="https://youtu.be/uaixCKTaqY0">trusting smaller self hosted projects and tools</a>.</p> +<p><em>Spoilers:</em> He roasts NPM in his video and towards the end says he won&rsquo;t be using NPM anymore. He also, perhaps purposely, doesn&rsquo;t share which tool he will be migrating to.</p> +<p>Whether you follow Christian away from NPM or not, it dawned on me that while NPM is using a very trusted web server and reverse proxy under the hood, I hadn&rsquo;t taken the time to understand how an Nginx Config actually worked. Since NPM was already creating most of the files for Nginx, I got to reading through all the files and reworking them so that I could begin using Nginx without the NPM gui.</p> +<p><em>Contributing: This is not all encompassing of Nginx possibilities. Including instructions for various installation methods, using OpenResty, and any other migrations or use cases would help the community. If you&rsquo;d like to add in additional information on how to migrate from NPM to Nginx, that is welcome. Simply submit a PR with your steps.</em></p> +<h3 id="tldr---quick-steps">TL;DR - Quick Steps</h3> +<ol> +<li> +<p>Copy the following contents (including sub-directories) from the NPM <code>/data/nginx</code> directory to the Nginx <code>/etc/nginx</code> folder:</p> +<ul> +<li><code>proxy_hosts</code> &gt; <code>sites-available</code></li> +<li><code>conf.d</code> &gt; <code>conf.d</code></li> +<li><code>snippets</code> &gt; <code>snippets</code></li> +<li><code>custom_ssl</code> &gt; <code>custom_ssl</code> (if applicable)</li> +</ul> +</li> +<li> +<p>Edit each file in your <code>sites-available</code> directory and update the paths. Most will change from <code>/data/nginx/</code> to <code>/etc/nginx</code>.</p> +</li> +<li> +<p>Edit your <code>nginx.conf</code> file and ensure the following two paths are there:</p> +<ul> +<li><code>include /etc/nginx/conf.d/*.conf;</code> and <code>include /etc/nginx/sites-enabled/*;</code></li> +</ul> +</li> +<li> +<p>Symlink the proxy host files in <code>sites-available</code> to <code>sites-enabled</code></p> +<ul> +<li><code>ln -s * ./sites-enabled</code></li> +</ul> +</li> +<li> +<p>Test your changes with <code>nginx -t</code>. Make appropriate changes if there are error messages.</p> +</li> +</ol> +<h3 id="pre-requisites--assumptions">Pre-requisites &amp; Assumptions</h3> +<p>I am using an Ubuntu VM with NPM and it&rsquo;s db as a Docker Container while Nginx is installed natively on the machine. You don&rsquo;t have to use this setup exactly, but I am making a few assumptions as to what you should have access to before you begin. I am also using custom SSL certs, but theoretically, the transition should be the same when using Lets Encrypt.</p> +<p>I&rsquo;ve added some example files to show before and after changes to this repo and outlined file trees below.</p> +<ul> +<li>You understand the basics of what a Reverse Proxy is doing and are sticking with some stock settings (like exposing port 80 an 443).</li> +<li>You&rsquo;ve installed <a href="https://nginxproxymanager.com/setup/">NPM</a> and <a href="https://www.nginx.com/resources/wiki/start/topics/tutorials/install/">Nginx</a> using your preferred method.</li> +<li>You have access to both NPMs file tree and Nginx&rsquo;s.</li> +<li>If using NPM in docker, make sure you&rsquo;ve mapped a local volume on the host to the container.</li> +<li>My setup using docker-compose is the following: <code>/user/nginx/data:/data</code>.</li> +<li>Know where your Nginx files are. If using docker, same as above, make sure your container directories are mapped to the host.</li> +<li>For a linux install, they should be accessible at <code>/etc/nginx</code>.</li> +<li>You know how to edit files at the command line using <code>nano</code>, <code>vi</code>, <code>vim</code>, <code>neovim</code>, <code>emacs</code>, or something else.</li> +</ul> +<h3 id="nginx-files">Nginx Files</h3> +<p>Nginx uses the <code>nginx.conf</code> file and within that file, it will include your proxy files. These exist under <code>./nginx/sites-enabled/</code>. In the main <code>nginx.conf</code> file, the line <code>include /etc/nginx/sites-enabled/*;</code> will bring in those files to the config file, making the proxies accessible.</p> +<h3 id="how-to-transition---detailed-version">How to Transition - Detailed Version</h3> +<ol> +<li> +<p>Since NPM uses Nginx under the hood, they are both, by default, going to try and use ports 80 and 443 to serve up your apps and content. Turn off both systems.</p> +<ul> +<li>Docker: <code>docker stop [app_container, db_container]</code></li> +<li>Systemd: <code>systemctl stop nginx</code></li> +</ul> +</li> +<li> +<p>Copy your <code>proxy_host</code> (NPM) files to the <code>sites-available</code> (Nginx) folder. +<code>cp -r /user/nginx/data/nginx/proxy_hosts/* /etc/nginx/sites-available/</code></p> +</li> +<li> +<p>Nginx doesn&rsquo;t really care what the files are called, but NPM numbers them based on the order in which you added them in the GUI. I find it better to rename them to what service they actually serve up for easier identification later.</p> +</li> +<li> +<p>Copy your <code>custom_ssl</code> folder from NPM to the <code>custom_ssl</code> folder in Nginx. See the following step for the various default paths in both systems.</p> +<ul> +<li><code>cp -r /user/nginx/data/custom_ssl/* /etc/nginx/custom_ssl/</code></li> +</ul> +</li> +<li> +<p>Copy the <code>conf.d</code> folder from NPM to the <code>conf.d</code> folder in Nginx. <em>Note: For some reason, not all of the files in +the proxy files were actually in my <code>conf.d</code> directory. If you&rsquo;re missing any files, please download and/or copy and +paste them from the <a href="https://github.com/NginxProxyManager/nginx-proxy-manager/tree/fa851b61da3fe3726d1a04c25e69d36e79edea2d/docker/rootfs/etc/nginx/conf.d/include">NPM Repo</a></em></p> +<ul> +<li><code>cp -r /user/nginx/data/nginx/conf.d /etc/nginx/</code></li> +</ul> +</li> +<li> +<p>If you had any additional files included in the Advanced section of an NPM Proxy Host, make sure you copy them over. For my setup and this tutorial, they were all located in the <code>snippets</code> directory.</p> +<ul> +<li><code>cp -r /user/nginx/data/nginx/snippets/* /etc/nginx/snippets/</code></li> +</ul> +</li> +<li> +<p>There are a number of lines that need to be updated in each proxy configuration file to make them work with Nginx. I&rsquo;ve placed additional comments in <a href="./proxy_host/npm_proxy.conf"><code>./proxy_host/npm_proxy.conf</code></a> file. The line changes are the following:</p> +<ol> +<li> +<p>Custom SSL path:</p> +<ul> +<li>NPM path: <code>/data/custom_ssl...</code></li> +<li>Nginx path: <code>/etc/nginx/custom_ssl...</code></li> +</ul> +</li> +<li> +<p>conf.d:</p> +<ul> +<li>The paths should remain the same. However, if you changed the path for <code>conf.d</code> in Nginx and differed in step 5, above, make sure you use the correct path.</li> +</ul> +</li> +<li> +<p>Access &amp; Error Logs</p> +<ul> +<li>NPM path: <code>/data/logs/...</code></li> +<li>Nginx path: <code>/var/log/nginx/...</code></li> +</ul> +</li> +</ol> +</li> +<li> +<p>Double Check all your paths! If this is your first time using Nginx, make sure every directory is correct! Save your work.</p> +</li> +<li> +<p>Navigate to the <code>nginx.conf</code> file which is located at <code>/etc/nginx/</code>. You can see the one I am using in this repo.</p> +</li> +<li> +<p>Make sure that you have the following two lines in the main conf file and that they are pointing to the appropriate directories in the nginx directory path.</p> +<ul> +<li><code>include /etc/nginx/conf.d/*.conf;</code> and <code>include /etc/nginx/sites-enabled/*;</code></li> +</ul> +</li> +<li> +<p>You&rsquo;ll notice that you ensured there was a <code>sites-enabled</code> directory in the configuration file, but you changed all your proxy host config files in <code>sites-available</code>! Good eye, all that&rsquo;s left is to symlink the files to <code>sites-enabled</code> so that nginx can start using them.</p> +</li> +<li> +<p>To symlink the available proxy files run the following command within the <code>sites-available</code> directory:</p> +<ul> +<li><code>ln -s * ./sites-enabled</code></li> +</ul> +</li> +<li> +<p>Once you&rsquo;re confident that you&rsquo;ve done all the above correctly, you can test your setup using nginx command and flags. While in the directory with your <code>nginx.conf</code> file - usually <code>/etc/nginx</code> - run the following command: <code>nginx -t</code>.</p> +</li> +<li> +<p>If all is working as expected you should see the below output. If it returns any errors, fix them appropriately. It will usually tell you what line is throwing the error. In this case, there&rsquo;s a high likelihood that it will be path error.</p> +</li> +</ol> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nginx: the configuration file /etc/nginx/nginx.conf syntax is ok +</span></span><span style="display:flex;"><span>nginx: configuration file /etc/nginx/nginx.conf test is successful +</span></span></code></pre></div><p>And that&rsquo;s it! You can now restart your nginx service on the host and access all your sites just as if you were using Nginx Proxy Manager! Make sure you take a look at your logs and system&rsquo;s status should nginx fail to start.</p> +<h3 id="additional-informationappendix">Additional Information/Appendix</h3> +<h4 id="file-trees-for-npm-in-container-and-nginx-on-host">File Trees for NPM (in container) and Nginx (on host)</h4> +<p><em>I did not expand every directory in these trees. Only the ones that are pertinent for reference in this tutorial.</em></p> +<h4 id="nginx">NGINX</h4> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>├── conf.d +</span></span><span style="display:flex;"><span>│   └── include +</span></span><span style="display:flex;"><span>│   ├── assets.conf +</span></span><span style="display:flex;"><span>│   ├── block-exploits.conf +</span></span><span style="display:flex;"><span>│   ├── force-ssl.conf +</span></span><span style="display:flex;"><span>│   ├── ip_ranges.conf +</span></span><span style="display:flex;"><span>│   ├── proxy.conf +</span></span><span style="display:flex;"><span>│   └── resolvers.conf +</span></span><span style="display:flex;"><span>├── custom_ssl +</span></span><span style="display:flex;"><span>│   ├── npm-1 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   ├── npm-2 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   └── npm-3 +</span></span><span style="display:flex;"><span>│   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   └── privkey.pem +</span></span><span style="display:flex;"><span>├── fastcgi.conf +</span></span><span style="display:flex;"><span>├── fastcgi_params +</span></span><span style="display:flex;"><span>├── koi-utf +</span></span><span style="display:flex;"><span>├── koi-win +</span></span><span style="display:flex;"><span>├── mime.types +</span></span><span style="display:flex;"><span>├── modules-available +</span></span><span style="display:flex;"><span>├── modules-enabled +</span></span><span style="display:flex;"><span>├── nginx.conf +</span></span><span style="display:flex;"><span>├── proxy_params +</span></span><span style="display:flex;"><span>├── scgi_params +</span></span><span style="display:flex;"><span>├── sites-available +</span></span><span style="display:flex;"><span>│   ├── auth.conf +</span></span><span style="display:flex;"><span>│   ├── bitwarden.conf +</span></span><span style="display:flex;"><span>│   ├── codehub.conf +</span></span><span style="display:flex;"><span>│   ├── default.backup +</span></span><span style="display:flex;"><span>│   ├── files.conf +</span></span><span style="display:flex;"><span>│   ├── notes.conf +</span></span><span style="display:flex;"><span>│   ├── photos.conf +</span></span><span style="display:flex;"><span>│   ├── rsmsn-root.conf +</span></span><span style="display:flex;"><span>│   ├── wordle.conf +</span></span><span style="display:flex;"><span>│   └── wordle-it.conf +</span></span><span style="display:flex;"><span>├── sites-enabled +</span></span><span style="display:flex;"><span>│   ├── auth.conf -&gt; /etc/nginx/sites-available/auth.conf +</span></span><span style="display:flex;"><span>│   ├── bitwarden.conf -&gt; /etc/nginx/sites-available/bitwarden.conf +</span></span><span style="display:flex;"><span>│   ├── codehub.conf -&gt; /etc/nginx/sites-available/codehub.conf +</span></span><span style="display:flex;"><span>│   ├── files.conf -&gt; /etc/nginx/sites-available/files.conf +</span></span><span style="display:flex;"><span>│   ├── notes.conf -&gt; /etc/nginx/sites-available/notes.conf +</span></span><span style="display:flex;"><span>│   ├── photos.conf -&gt; /etc/nginx/sites-available/photos.conf +</span></span><span style="display:flex;"><span>│   ├── wordle.conf -&gt; /etc/nginx/sites-available/wordle.conf +</span></span><span style="display:flex;"><span>│   └── wordle-it.conf -&gt; /etc/nginx/sites-available/wordle-it.conf +</span></span><span style="display:flex;"><span>├── snippets +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest-basic.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest-detect.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location-basic.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location-detect.conf +</span></span><span style="display:flex;"><span>│   ├── fastcgi-php.conf +</span></span><span style="display:flex;"><span>│   ├── proxy.conf +</span></span><span style="display:flex;"><span>│   └── snakeoil.conf +</span></span><span style="display:flex;"><span>├── uwsgi_params +</span></span><span style="display:flex;"><span>└── win-utf +</span></span></code></pre></div><h4 id="npm">NPM</h4> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>├── data +</span></span><span style="display:flex;"><span>│   ├── access +</span></span><span style="display:flex;"><span>│   ├── custom_ssl +</span></span><span style="display:flex;"><span>│   │   ├── npm-1 +</span></span><span style="display:flex;"><span>│   │   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   │   ├── npm-2 +</span></span><span style="display:flex;"><span>│   │   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   │   └── npm-3 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   ├── keys.json +</span></span><span style="display:flex;"><span>│   ├── letsencrypt-acme-challenge +</span></span><span style="display:flex;"><span>│   ├── logs +</span></span><span style="display:flex;"><span>│   ├── mysql +</span></span><span style="display:flex;"><span>│   └── nginx +</span></span><span style="display:flex;"><span>│   ├── custom +</span></span><span style="display:flex;"><span>│   ├── dead_host +</span></span><span style="display:flex;"><span>│   ├── default_host +</span></span><span style="display:flex;"><span>│   ├── default_www +</span></span><span style="display:flex;"><span>│   ├── dummycert.pem +</span></span><span style="display:flex;"><span>│   ├── dummykey.pem +</span></span><span style="display:flex;"><span>│   ├── proxy_host +</span></span><span style="display:flex;"><span>│   │   ├── 10.conf +</span></span><span style="display:flex;"><span>│   │   ├── 11.conf +</span></span><span style="display:flex;"><span>│   │   ├── 12.conf +</span></span><span style="display:flex;"><span>│   │   ├── 13.conf +</span></span><span style="display:flex;"><span>│   │   ├── 15.conf +</span></span><span style="display:flex;"><span>│   │   ├── 1.conf +</span></span><span style="display:flex;"><span>│   │   ├── 2.conf +</span></span><span style="display:flex;"><span>│   │   ├── 4.conf +</span></span><span style="display:flex;"><span>│   │   ├── 5.conf +</span></span><span style="display:flex;"><span>│   │   └── 6.conf +</span></span><span style="display:flex;"><span>│   ├── redirection_host +</span></span><span style="display:flex;"><span>│   ├── snippets +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest-basic.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest-detect.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location-basic.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location-detect.conf +</span></span><span style="display:flex;"><span>│   │   └── proxy.conf +</span></span><span style="display:flex;"><span>│   ├── stream +</span></span><span style="display:flex;"><span>│   └── temp +</span></span><span style="display:flex;"><span>├── docker-compose.yml +</span></span><span style="display:flex;"><span>└── letsencrypt +</span></span><span style="display:flex;"><span>└── renewal-hooks +</span></span></code></pre></div> + + + + diff --git a/public/tags/self-hosted/page/1/index.html b/public/tags/self-hosted/page/1/index.html new file mode 100644 index 0000000..f8b6eda --- /dev/null +++ b/public/tags/self-hosted/page/1/index.html @@ -0,0 +1,10 @@ + + + + https://selfhosted.rsmsn.co/tags/self-hosted/ + + + + + + diff --git a/public/tags/tutorial/index.html b/public/tags/tutorial/index.html new file mode 100644 index 0000000..fc1f1ac --- /dev/null +++ b/public/tags/tutorial/index.html @@ -0,0 +1,172 @@ + + + + + tutorial :: Rsmsn Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+ + +
+ +

Posts for: #tutorial

+ +
+ +
+

+ Tutorial: Move from NginxProxyManager to Nginx +

+ + + + + + + + + +
+ + A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for this reddit post and to post this my Github profile. Thought my website would also be a good place to share it for any passers-by. +Goal To give clear instructions to help users migrate from using Nginx Proxy Manager (NPM) to standard Nginx. This tutorial is not exhaustive and there are many other implementations of this transition. + +
+ + +
+ +
+ +
+ + + + +
+ +
+ + + + + + + + + + + + + + + + +
+ + + diff --git a/public/tags/tutorial/index.xml b/public/tags/tutorial/index.xml new file mode 100644 index 0000000..29071c7 --- /dev/null +++ b/public/tags/tutorial/index.xml @@ -0,0 +1,281 @@ + + + + tutorial on Rsmsn Blog + https://selfhosted.rsmsn.co/tags/tutorial/ + Recent content in tutorial on Rsmsn Blog + Hugo -- gohugo.io + en-us + Sat, 05 Aug 2023 15:23:51 -0500 + + Tutorial: Move from NginxProxyManager to Nginx + https://selfhosted.rsmsn.co/posts/npm_to_nginx_tutorial/ + Sat, 05 Aug 2023 15:23:51 -0500 + + https://selfhosted.rsmsn.co/posts/npm_to_nginx_tutorial/ + A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for this reddit post and to post this my Github profile. Thought my website would also be a good place to share it for any passers-by. +Goal To give clear instructions to help users migrate from using Nginx Proxy Manager (NPM) to standard Nginx. This tutorial is not exhaustive and there are many other implementations of this transition. + <p>A Tutorial Repo for migrating your Nginx Proxy Manager proxy setup to Nginx. I wrote this originally for <a href="https://www.reddit.com/r/selfhosted/comments/15j4v80/minitutorial_migrating_from_nginx_proxy_manager/">this reddit +post</a> and to post this <a href="https://github.com/Normanras/Npm_to_Nginx">my Github profile</a>. Thought my website would also be a good place to share it for any passers-by.</p> +<h2 id="goal">Goal</h2> +<p>To give clear instructions to help users migrate from using <a href="https://nginxproxymanager.com/">Nginx Proxy Manager</a> (NPM) to standard <a href="https://docs.nginx.com/">Nginx</a>. This tutorial is not exhaustive and there are many other implementations of this transition. I would recommend checking out the many Nginx <a href="http://nginx.org/en/docs/">Documentation Sites</a> and tutorials to learn more.</p> +<h3 id="introduction">Introduction</h3> +<p>If you&rsquo;re anything like me and you got into the self-hosted/homelab/diy game sometime within the last 5 years, you&rsquo;ve likely been recommended to use Nginx Proxy Manager as one of the choice Reverse Proxy services. If you&rsquo;ve also been paying attention to various self-hosted communities, you may have also come across Christian Lempa&rsquo;s Video on <a href="https://youtu.be/uaixCKTaqY0">trusting smaller self hosted projects and tools</a>.</p> +<p><em>Spoilers:</em> He roasts NPM in his video and towards the end says he won&rsquo;t be using NPM anymore. He also, perhaps purposely, doesn&rsquo;t share which tool he will be migrating to.</p> +<p>Whether you follow Christian away from NPM or not, it dawned on me that while NPM is using a very trusted web server and reverse proxy under the hood, I hadn&rsquo;t taken the time to understand how an Nginx Config actually worked. Since NPM was already creating most of the files for Nginx, I got to reading through all the files and reworking them so that I could begin using Nginx without the NPM gui.</p> +<p><em>Contributing: This is not all encompassing of Nginx possibilities. Including instructions for various installation methods, using OpenResty, and any other migrations or use cases would help the community. If you&rsquo;d like to add in additional information on how to migrate from NPM to Nginx, that is welcome. Simply submit a PR with your steps.</em></p> +<h3 id="tldr---quick-steps">TL;DR - Quick Steps</h3> +<ol> +<li> +<p>Copy the following contents (including sub-directories) from the NPM <code>/data/nginx</code> directory to the Nginx <code>/etc/nginx</code> folder:</p> +<ul> +<li><code>proxy_hosts</code> &gt; <code>sites-available</code></li> +<li><code>conf.d</code> &gt; <code>conf.d</code></li> +<li><code>snippets</code> &gt; <code>snippets</code></li> +<li><code>custom_ssl</code> &gt; <code>custom_ssl</code> (if applicable)</li> +</ul> +</li> +<li> +<p>Edit each file in your <code>sites-available</code> directory and update the paths. Most will change from <code>/data/nginx/</code> to <code>/etc/nginx</code>.</p> +</li> +<li> +<p>Edit your <code>nginx.conf</code> file and ensure the following two paths are there:</p> +<ul> +<li><code>include /etc/nginx/conf.d/*.conf;</code> and <code>include /etc/nginx/sites-enabled/*;</code></li> +</ul> +</li> +<li> +<p>Symlink the proxy host files in <code>sites-available</code> to <code>sites-enabled</code></p> +<ul> +<li><code>ln -s * ./sites-enabled</code></li> +</ul> +</li> +<li> +<p>Test your changes with <code>nginx -t</code>. Make appropriate changes if there are error messages.</p> +</li> +</ol> +<h3 id="pre-requisites--assumptions">Pre-requisites &amp; Assumptions</h3> +<p>I am using an Ubuntu VM with NPM and it&rsquo;s db as a Docker Container while Nginx is installed natively on the machine. You don&rsquo;t have to use this setup exactly, but I am making a few assumptions as to what you should have access to before you begin. I am also using custom SSL certs, but theoretically, the transition should be the same when using Lets Encrypt.</p> +<p>I&rsquo;ve added some example files to show before and after changes to this repo and outlined file trees below.</p> +<ul> +<li>You understand the basics of what a Reverse Proxy is doing and are sticking with some stock settings (like exposing port 80 an 443).</li> +<li>You&rsquo;ve installed <a href="https://nginxproxymanager.com/setup/">NPM</a> and <a href="https://www.nginx.com/resources/wiki/start/topics/tutorials/install/">Nginx</a> using your preferred method.</li> +<li>You have access to both NPMs file tree and Nginx&rsquo;s.</li> +<li>If using NPM in docker, make sure you&rsquo;ve mapped a local volume on the host to the container.</li> +<li>My setup using docker-compose is the following: <code>/user/nginx/data:/data</code>.</li> +<li>Know where your Nginx files are. If using docker, same as above, make sure your container directories are mapped to the host.</li> +<li>For a linux install, they should be accessible at <code>/etc/nginx</code>.</li> +<li>You know how to edit files at the command line using <code>nano</code>, <code>vi</code>, <code>vim</code>, <code>neovim</code>, <code>emacs</code>, or something else.</li> +</ul> +<h3 id="nginx-files">Nginx Files</h3> +<p>Nginx uses the <code>nginx.conf</code> file and within that file, it will include your proxy files. These exist under <code>./nginx/sites-enabled/</code>. In the main <code>nginx.conf</code> file, the line <code>include /etc/nginx/sites-enabled/*;</code> will bring in those files to the config file, making the proxies accessible.</p> +<h3 id="how-to-transition---detailed-version">How to Transition - Detailed Version</h3> +<ol> +<li> +<p>Since NPM uses Nginx under the hood, they are both, by default, going to try and use ports 80 and 443 to serve up your apps and content. Turn off both systems.</p> +<ul> +<li>Docker: <code>docker stop [app_container, db_container]</code></li> +<li>Systemd: <code>systemctl stop nginx</code></li> +</ul> +</li> +<li> +<p>Copy your <code>proxy_host</code> (NPM) files to the <code>sites-available</code> (Nginx) folder. +<code>cp -r /user/nginx/data/nginx/proxy_hosts/* /etc/nginx/sites-available/</code></p> +</li> +<li> +<p>Nginx doesn&rsquo;t really care what the files are called, but NPM numbers them based on the order in which you added them in the GUI. I find it better to rename them to what service they actually serve up for easier identification later.</p> +</li> +<li> +<p>Copy your <code>custom_ssl</code> folder from NPM to the <code>custom_ssl</code> folder in Nginx. See the following step for the various default paths in both systems.</p> +<ul> +<li><code>cp -r /user/nginx/data/custom_ssl/* /etc/nginx/custom_ssl/</code></li> +</ul> +</li> +<li> +<p>Copy the <code>conf.d</code> folder from NPM to the <code>conf.d</code> folder in Nginx. <em>Note: For some reason, not all of the files in +the proxy files were actually in my <code>conf.d</code> directory. If you&rsquo;re missing any files, please download and/or copy and +paste them from the <a href="https://github.com/NginxProxyManager/nginx-proxy-manager/tree/fa851b61da3fe3726d1a04c25e69d36e79edea2d/docker/rootfs/etc/nginx/conf.d/include">NPM Repo</a></em></p> +<ul> +<li><code>cp -r /user/nginx/data/nginx/conf.d /etc/nginx/</code></li> +</ul> +</li> +<li> +<p>If you had any additional files included in the Advanced section of an NPM Proxy Host, make sure you copy them over. For my setup and this tutorial, they were all located in the <code>snippets</code> directory.</p> +<ul> +<li><code>cp -r /user/nginx/data/nginx/snippets/* /etc/nginx/snippets/</code></li> +</ul> +</li> +<li> +<p>There are a number of lines that need to be updated in each proxy configuration file to make them work with Nginx. I&rsquo;ve placed additional comments in <a href="./proxy_host/npm_proxy.conf"><code>./proxy_host/npm_proxy.conf</code></a> file. The line changes are the following:</p> +<ol> +<li> +<p>Custom SSL path:</p> +<ul> +<li>NPM path: <code>/data/custom_ssl...</code></li> +<li>Nginx path: <code>/etc/nginx/custom_ssl...</code></li> +</ul> +</li> +<li> +<p>conf.d:</p> +<ul> +<li>The paths should remain the same. However, if you changed the path for <code>conf.d</code> in Nginx and differed in step 5, above, make sure you use the correct path.</li> +</ul> +</li> +<li> +<p>Access &amp; Error Logs</p> +<ul> +<li>NPM path: <code>/data/logs/...</code></li> +<li>Nginx path: <code>/var/log/nginx/...</code></li> +</ul> +</li> +</ol> +</li> +<li> +<p>Double Check all your paths! If this is your first time using Nginx, make sure every directory is correct! Save your work.</p> +</li> +<li> +<p>Navigate to the <code>nginx.conf</code> file which is located at <code>/etc/nginx/</code>. You can see the one I am using in this repo.</p> +</li> +<li> +<p>Make sure that you have the following two lines in the main conf file and that they are pointing to the appropriate directories in the nginx directory path.</p> +<ul> +<li><code>include /etc/nginx/conf.d/*.conf;</code> and <code>include /etc/nginx/sites-enabled/*;</code></li> +</ul> +</li> +<li> +<p>You&rsquo;ll notice that you ensured there was a <code>sites-enabled</code> directory in the configuration file, but you changed all your proxy host config files in <code>sites-available</code>! Good eye, all that&rsquo;s left is to symlink the files to <code>sites-enabled</code> so that nginx can start using them.</p> +</li> +<li> +<p>To symlink the available proxy files run the following command within the <code>sites-available</code> directory:</p> +<ul> +<li><code>ln -s * ./sites-enabled</code></li> +</ul> +</li> +<li> +<p>Once you&rsquo;re confident that you&rsquo;ve done all the above correctly, you can test your setup using nginx command and flags. While in the directory with your <code>nginx.conf</code> file - usually <code>/etc/nginx</code> - run the following command: <code>nginx -t</code>.</p> +</li> +<li> +<p>If all is working as expected you should see the below output. If it returns any errors, fix them appropriately. It will usually tell you what line is throwing the error. In this case, there&rsquo;s a high likelihood that it will be path error.</p> +</li> +</ol> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nginx: the configuration file /etc/nginx/nginx.conf syntax is ok +</span></span><span style="display:flex;"><span>nginx: configuration file /etc/nginx/nginx.conf test is successful +</span></span></code></pre></div><p>And that&rsquo;s it! You can now restart your nginx service on the host and access all your sites just as if you were using Nginx Proxy Manager! Make sure you take a look at your logs and system&rsquo;s status should nginx fail to start.</p> +<h3 id="additional-informationappendix">Additional Information/Appendix</h3> +<h4 id="file-trees-for-npm-in-container-and-nginx-on-host">File Trees for NPM (in container) and Nginx (on host)</h4> +<p><em>I did not expand every directory in these trees. Only the ones that are pertinent for reference in this tutorial.</em></p> +<h4 id="nginx">NGINX</h4> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>├── conf.d +</span></span><span style="display:flex;"><span>│   └── include +</span></span><span style="display:flex;"><span>│   ├── assets.conf +</span></span><span style="display:flex;"><span>│   ├── block-exploits.conf +</span></span><span style="display:flex;"><span>│   ├── force-ssl.conf +</span></span><span style="display:flex;"><span>│   ├── ip_ranges.conf +</span></span><span style="display:flex;"><span>│   ├── proxy.conf +</span></span><span style="display:flex;"><span>│   └── resolvers.conf +</span></span><span style="display:flex;"><span>├── custom_ssl +</span></span><span style="display:flex;"><span>│   ├── npm-1 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   ├── npm-2 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   └── npm-3 +</span></span><span style="display:flex;"><span>│   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   └── privkey.pem +</span></span><span style="display:flex;"><span>├── fastcgi.conf +</span></span><span style="display:flex;"><span>├── fastcgi_params +</span></span><span style="display:flex;"><span>├── koi-utf +</span></span><span style="display:flex;"><span>├── koi-win +</span></span><span style="display:flex;"><span>├── mime.types +</span></span><span style="display:flex;"><span>├── modules-available +</span></span><span style="display:flex;"><span>├── modules-enabled +</span></span><span style="display:flex;"><span>├── nginx.conf +</span></span><span style="display:flex;"><span>├── proxy_params +</span></span><span style="display:flex;"><span>├── scgi_params +</span></span><span style="display:flex;"><span>├── sites-available +</span></span><span style="display:flex;"><span>│   ├── auth.conf +</span></span><span style="display:flex;"><span>│   ├── bitwarden.conf +</span></span><span style="display:flex;"><span>│   ├── codehub.conf +</span></span><span style="display:flex;"><span>│   ├── default.backup +</span></span><span style="display:flex;"><span>│   ├── files.conf +</span></span><span style="display:flex;"><span>│   ├── notes.conf +</span></span><span style="display:flex;"><span>│   ├── photos.conf +</span></span><span style="display:flex;"><span>│   ├── rsmsn-root.conf +</span></span><span style="display:flex;"><span>│   ├── wordle.conf +</span></span><span style="display:flex;"><span>│   └── wordle-it.conf +</span></span><span style="display:flex;"><span>├── sites-enabled +</span></span><span style="display:flex;"><span>│   ├── auth.conf -&gt; /etc/nginx/sites-available/auth.conf +</span></span><span style="display:flex;"><span>│   ├── bitwarden.conf -&gt; /etc/nginx/sites-available/bitwarden.conf +</span></span><span style="display:flex;"><span>│   ├── codehub.conf -&gt; /etc/nginx/sites-available/codehub.conf +</span></span><span style="display:flex;"><span>│   ├── files.conf -&gt; /etc/nginx/sites-available/files.conf +</span></span><span style="display:flex;"><span>│   ├── notes.conf -&gt; /etc/nginx/sites-available/notes.conf +</span></span><span style="display:flex;"><span>│   ├── photos.conf -&gt; /etc/nginx/sites-available/photos.conf +</span></span><span style="display:flex;"><span>│   ├── wordle.conf -&gt; /etc/nginx/sites-available/wordle.conf +</span></span><span style="display:flex;"><span>│   └── wordle-it.conf -&gt; /etc/nginx/sites-available/wordle-it.conf +</span></span><span style="display:flex;"><span>├── snippets +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest-basic.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-authrequest-detect.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location-basic.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location.conf +</span></span><span style="display:flex;"><span>│   ├── authelia-location-detect.conf +</span></span><span style="display:flex;"><span>│   ├── fastcgi-php.conf +</span></span><span style="display:flex;"><span>│   ├── proxy.conf +</span></span><span style="display:flex;"><span>│   └── snakeoil.conf +</span></span><span style="display:flex;"><span>├── uwsgi_params +</span></span><span style="display:flex;"><span>└── win-utf +</span></span></code></pre></div><h4 id="npm">NPM</h4> +<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>├── data +</span></span><span style="display:flex;"><span>│   ├── access +</span></span><span style="display:flex;"><span>│   ├── custom_ssl +</span></span><span style="display:flex;"><span>│   │   ├── npm-1 +</span></span><span style="display:flex;"><span>│   │   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   │   ├── npm-2 +</span></span><span style="display:flex;"><span>│   │   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   │   └── npm-3 +</span></span><span style="display:flex;"><span>│   │   ├── fullchain.pem +</span></span><span style="display:flex;"><span>│   │   └── privkey.pem +</span></span><span style="display:flex;"><span>│   ├── keys.json +</span></span><span style="display:flex;"><span>│   ├── letsencrypt-acme-challenge +</span></span><span style="display:flex;"><span>│   ├── logs +</span></span><span style="display:flex;"><span>│   ├── mysql +</span></span><span style="display:flex;"><span>│   └── nginx +</span></span><span style="display:flex;"><span>│   ├── custom +</span></span><span style="display:flex;"><span>│   ├── dead_host +</span></span><span style="display:flex;"><span>│   ├── default_host +</span></span><span style="display:flex;"><span>│   ├── default_www +</span></span><span style="display:flex;"><span>│   ├── dummycert.pem +</span></span><span style="display:flex;"><span>│   ├── dummykey.pem +</span></span><span style="display:flex;"><span>│   ├── proxy_host +</span></span><span style="display:flex;"><span>│   │   ├── 10.conf +</span></span><span style="display:flex;"><span>│   │   ├── 11.conf +</span></span><span style="display:flex;"><span>│   │   ├── 12.conf +</span></span><span style="display:flex;"><span>│   │   ├── 13.conf +</span></span><span style="display:flex;"><span>│   │   ├── 15.conf +</span></span><span style="display:flex;"><span>│   │   ├── 1.conf +</span></span><span style="display:flex;"><span>│   │   ├── 2.conf +</span></span><span style="display:flex;"><span>│   │   ├── 4.conf +</span></span><span style="display:flex;"><span>│   │   ├── 5.conf +</span></span><span style="display:flex;"><span>│   │   └── 6.conf +</span></span><span style="display:flex;"><span>│   ├── redirection_host +</span></span><span style="display:flex;"><span>│   ├── snippets +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest-basic.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-authrequest-detect.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location-basic.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location.conf +</span></span><span style="display:flex;"><span>│   │   ├── authelia-location-detect.conf +</span></span><span style="display:flex;"><span>│   │   └── proxy.conf +</span></span><span style="display:flex;"><span>│   ├── stream +</span></span><span style="display:flex;"><span>│   └── temp +</span></span><span style="display:flex;"><span>├── docker-compose.yml +</span></span><span style="display:flex;"><span>└── letsencrypt +</span></span><span style="display:flex;"><span>└── renewal-hooks +</span></span></code></pre></div> + + + + diff --git a/public/tags/tutorial/page/1/index.html b/public/tags/tutorial/page/1/index.html new file mode 100644 index 0000000..acf4bec --- /dev/null +++ b/public/tags/tutorial/page/1/index.html @@ -0,0 +1,10 @@ + + + + https://selfhosted.rsmsn.co/tags/tutorial/ + + + + + + diff --git a/resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.content b/resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.content new file mode 100644 index 0000000..7ac618e --- /dev/null +++ b/resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.content @@ -0,0 +1,3 @@ +@font-face{font-display:swap;font-family:'Fira Code';font-style:normal;font-weight:400;src:url("../fonts/FiraCode-Regular.woff") format("woff")}@font-face{font-display:swap;font-family:'Fira Code';font-style:normal;font-weight:800;src:url("../fonts/FiraCode-Bold.woff") format("woff")}.button-container{display:table;margin-left:auto;margin-right:auto}button,.button,a.button{position:relative;display:flex;align-items:center;justify-content:center;padding:8px 18px;margin:5px 0;text-decoration:none;text-align:center;border-radius:8;border:1px solid #FFA86A;background:#FFA86A;color:#222129;font:inherit;font-weight:bold;appearance:none;cursor:pointer;outline:none}button:hover,.button:hover,a.button:hover{background:rgba(255,168,106,0.9)}button.outline,.button.outline,a.button.outline{background:transparent;box-shadow:none;padding:8px 18px}button.outline :hover,.button.outline :hover,a.button.outline :hover{transform:none;box-shadow:none}button.link,.button.link,a.button.link{background:none;font-size:1rem}button.small,.button.small,a.button.small{font-size:.8rem}button.wide,.button.wide,a.button.wide{min-width:200px;padding:14px 24px}a.read-more,a.read-more:hover,a.read-more:active{display:inline-flex;border:none;color:#FFA86A;background:none;box-shadow:none;padding:0;margin:20px 0;max-width:100%}.code-toolbar{margin-bottom:20px}.code-toolbar .toolbar-item a{position:relative;display:inline-flex;align-items:center;justify-content:center;padding:3px 8px;margin-bottom:5px;text-decoration:none;text-align:center;font-size:13px;font-weight:500;border-radius:8px;border:1px solid transparent;appearance:none;cursor:pointer;outline:none}input,textarea,select{background:transparent;color:#FFA86A;border:1px solid #FFA86A;border-radius:0;padding:10px;margin:5px 0;font:inherit;appearance:none}input:focus,input :active,textarea:focus,textarea :active,select:focus,select :active{border-color:#fff;outline:1px solid #fff}input:active,textarea:active,select:active{box-shadow:none}select{background:#222129}select option{background:#222129}::placeholder{color:rgba(255,168,106,0.5)}input[type="checkbox"]{vertical-align:middle;padding:10px;box-shadow:inset 0 0 0 3px #222129}input[type="checkbox"]:checked{background:#FFA86A}.header{display:flex;flex-direction:column;position:relative}@media print{.header{display:none}}.header__inner{display:flex;align-items:center;justify-content:space-between}.header__logo{display:flex;flex:1}.header__logo:after{content:'';background:repeating-linear-gradient(90deg, #FFA86A, #FFA86A 2px, transparent 0, transparent 10px);display:block;width:100%;right:10px}.header__logo a{flex:0 0 auto;max-width:100%;text-decoration:none}.navigation-menu{display:flex;align-items:flex-start;justify-content:space-between;margin:20px 1px}@media (max-width: 684px){.navigation-menu{margin:0}}.navigation-menu__inner{display:flex;flex:1;flex-wrap:wrap;list-style:none;margin:0;padding:0}.navigation-menu__inner>li{flex:0 0 auto;margin-bottom:10px;white-space:nowrap}.navigation-menu__inner>li:not(:last-of-type){margin-right:20px}@media (max-width: 684px){.navigation-menu__inner{flex-direction:column;align-items:flex-start;padding:0}.navigation-menu__inner li{margin:0;padding:5px}}.navigation-menu .spacer{flex-grow:1 !important}.menu{display:flex;flex-direction:column;position:relative;list-style:none;padding:0;margin:0}.menu__trigger{margin-right:0 !important;color:#FFA86A;user-select:none;cursor:pointer}.menu__dropdown{display:none;flex-direction:column;position:absolute;background:#222129;box-shadow:0 10px rgba(34,33,41,0.8),-10px 10px rgba(34,33,41,0.8),10px 10px rgba(34,33,41,0.8);color:white;border:2px solid;margin:0;padding:10px;top:10px;left:0;list-style:none;z-index:99}.open .menu__dropdown{display:flex}.menu__dropdown>li{flex:0 0 auto}.menu__dropdown>li:not(:last-of-type){margin-bottom:10px}.menu__dropdown>li a{display:flex;padding:5px}@media (max-width: 684px){.menu--desktop{display:none}}.menu--mobile .menu__trigger{color:#FFA86A;border:2px solid;margin-left:10px;height:100%;padding:3px 8px;margin-bottom:0 !important;position:relative;cursor:pointer;display:none}@media (max-width: 684px){.menu--mobile .menu__trigger{display:block}}@media (max-width: 684px){.menu--mobile .menu__dropdown{left:auto;right:0}}.menu--mobile li{flex:0 0 auto}.menu--mobile li:not(:last-of-type){margin-bottom:10px}.menu--language-selector .menu__trigger{color:#FFA86A;border:2px solid;margin-left:10px;height:100%;padding:3px 8px;margin-bottom:0 !important;position:relative;cursor:pointer}@media (max-width: 684px){.menu--language-selector .menu__trigger{display:none}}.menu--language-selector .menu__dropdown{left:auto;right:0}.logo{display:flex;align-items:center;text-decoration:none;background:#FFA86A;color:black;padding:5px 10px}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}body{margin:0;padding:0;font-family:'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace;font-size:1rem;line-height:1.54;letter-spacing:-0.02em;background-color:#222129;color:#fff;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;font-feature-settings:"liga", "tnum", "zero", "ss01", "locl";font-variant-ligatures:contextual;-webkit-overflow-scrolling:touch;-webkit-text-size-adjust:100%}@media (max-width: 684px){body{font-size:1rem}}.headings--one-size h1,.headings--one-size h2,.headings--one-size h3,.headings--one-size h4,.headings--one-size h5,.headings--one-size h6{line-height:1.3}.headings--one-size h1:not(first-child),.headings--one-size h2:not(first-child),.headings--one-size h3:not(first-child),.headings--one-size h4:not(first-child),.headings--one-size h5:not(first-child),.headings--one-size h6:not(first-child){margin-top:40px}.headings--one-size h1,.headings--one-size h2,.headings--one-size h3{font-size:1.4rem}.headings--one-size h4,.headings--one-size h5,.headings--one-size h6{font-size:1.2rem}a{color:inherit}img{display:block;max-width:100%}img.left{margin-right:auto}img.center{margin-left:auto;margin-right:auto}img.right{margin-left:auto}p{margin-bottom:20px}figure{display:table;max-width:100%;margin:25px 0}figure.left{margin-right:auto}figure.center{margin-left:auto;margin-right:auto}figure.right{margin-left:auto}figure figcaption{font-size:14px;padding:5px 10px;margin-top:5px;background:#FFA86A;color:#222129}figure figcaption.left{text-align:left}figure figcaption.center{text-align:center}figure figcaption.right{text-align:right}code,kbd{font-family:'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace !important;font-feature-settings:normal;background:rgba(255,168,106,0.2);color:#FFA86A;padding:1px 6px;margin:0 2px;font-size:.95rem}code code,code kbd,kbd code,kbd kbd{background:transparent;padding:0;margin:0}pre{background:transparent !important;padding:20px 10px;margin:40px 0;font-size:.95rem !important;overflow:auto;border-top:1px solid rgba(255,255,255,0.1);border-bottom:1px solid rgba(255,255,255,0.1)}pre+pre{border-top:0;margin-top:-40px}@media (max-width: 684px){pre{white-space:pre-wrap;word-wrap:break-word}}pre code{background:none !important;margin:0;padding:0;font-size:inherit;border:none}blockquote{border-top:1px solid #FFA86A;border-bottom:1px solid #FFA86A;margin:40px 0;padding:25px}@media (max-width: 684px){blockquote{padding-right:0}}blockquote p:first-of-type{margin-top:0}blockquote p:last-of-type{margin-bottom:0}blockquote p{position:relative}blockquote p:first-of-type:before{content:'>';display:block;position:absolute;left:-25px;color:#FFA86A}blockquote.twitter-tweet{position:relative;background:rgba(255,168,106,0.1);font:inherit;color:inherit;border:1px solid #FFA86A;padding-top:60px}blockquote.twitter-tweet p:before{content:''}blockquote.twitter-tweet:before{content:'> From Twitter:';position:absolute;top:20px;color:#FFA86A;font-weight:bold}blockquote.twitter-tweet a{color:#FFA86A}table{table-layout:auto;border-collapse:collapse;width:100%;margin:40px 0}table,th,td{border:1px dashed #FFA86A;padding:10px}th{color:#FFA86A}ul,ol{margin-left:22px;padding:0}ul li,ol li{position:relative}@media (max-width: 684px){ul,ol{margin-left:20px}}ol{list-style:none;counter-reset:li}ol>li{counter-increment:li}ol>li:before{content:counter(li);position:absolute;right:calc(100% + 10px);color:#FFA86A;display:inline-block;text-align:right}ol>li>ol{margin-left:38px}ol>li>ol>li{counter-increment:li}ol>li>ol>li:before{content:counters(li, ".") " "}mark{background:#FFA86A;color:#222129}.container{display:flex;flex-direction:column;padding:40px;max-width:864px;min-height:100vh;border-right:1px solid rgba(255,255,255,0.1)}.container.full,.container.center{border:none;margin:0 auto}.container.full{max-width:100%}@media (max-width: 684px){.container{padding:20px}}@media print{.container{display:initial}}.content{display:flex;flex-direction:column}@media print{.content{display:initial}}hr{width:100%;border:none;background:rgba(255,255,255,0.1);height:1px}.hidden{display:none}sup{line-height:0}.index-content{margin-top:20px}.framed{border:1px solid #FFA86A;padding:20px}.framed *:first-child{margin-top:0}.framed *:last-child{margin-bottom:0}.posts{width:100%}.post{width:100%;text-align:left;margin:20px auto;padding:20px 0}.post:not(:last-of-type){border-bottom:1px solid rgba(255,255,255,0.1)}.post-meta{font-size:1rem;margin-bottom:10px;color:rgba(255,168,106,0.7)}.post-meta>*:not(:first-child)::before{content:"::";display:inline-block;margin:0 8px}.post-title{position:relative;color:#FFA86A;margin:0 0 15px;padding-bottom:15px;border-bottom:3px dotted #FFA86A}.post-title:after{content:'';position:absolute;bottom:2px;display:block;width:100%;border-bottom:3px dotted #FFA86A}.post-title a{text-decoration:none}.post-tags{display:block;margin-bottom:20px;font-size:1rem;opacity:.5}.post-tags a{text-decoration:none}.post-content{margin-top:30px}.post-cover{border:20px solid #FFA86A;background:transparent;margin:40px 0;padding:20px}@media (max-width: 684px){.post-cover{padding:10px;border-width:10px}}.post ul{list-style:none}.post ul li:not(:empty):before{content:'-';position:absolute;left:-20px;color:#FFA86A}.post--regulation h1{justify-content:center}.post--regulation h2{justify-content:center;margin-bottom:10px}.post--regulation h2+h2{margin-top:-10px;margin-bottom:20px}.hanchor{color:rgba(255,168,106,0.9);text-decoration:none;margin-left:10px;visibility:hidden}h1:hover a,h2:hover a,h3:hover a,h4:hover a{visibility:visible}.footnotes{color:rgba(255,255,255,0.5)}.pagination{margin-top:50px}@media print{.pagination{display:none}}.pagination__title{display:flex;text-align:center;position:relative;margin:100px 0 20px}.pagination__title-h{text-align:center;margin:0 auto;padding:5px 10px;background:#222129;color:rgba(255,255,255,0.3);font-size:.8rem;text-transform:uppercase;text-decoration:none;letter-spacing:.1em;z-index:1}.pagination__title hr{position:absolute;left:0;right:0;width:100%;margin-top:15px;z-index:0}.pagination__buttons{display:flex;align-items:center;justify-content:center;flex-flow:row wrap;gap:10px}.pagination__buttons a{text-decoration:none}.button{position:relative;display:inline-flex;align-items:center;justify-content:center;font-size:1rem;padding:0;appearance:none}@media (max-width: 684px){.button{flex:1}}.button a{display:flex;justify-content:center;flex:1;padding:8px 16px;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.button__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.button.next .button__icon{margin-left:8px}.button.previous .button__icon{margin-right:8px}.footer{padding:40px 0;flex-grow:0;opacity:.5}.footer__inner{display:flex;align-items:center;justify-content:space-between;margin:0;width:760px;max-width:100%}@media (max-width: 900px){.footer__inner{flex-direction:column}}.footer a{color:inherit}.footer .copyright{display:flex;flex-flow:row wrap;flex:1;align-items:center;font-size:1rem;justify-content:center}.footer .copyright--user{margin:auto;text-align:center}.footer .copyright>*:first-child:not(:only-child){margin-right:10px}.footer .copyright span{white-space:nowrap}code[class*="language-"],pre[class*="language-"]{color:#ccc;background:none;font-family:Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*="language-"]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#2d2d2d}:not(pre)>code[class*="language-"]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}pre[data-line]{position:relative;padding:1em 0 1em 3em}.line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}@media print{.line-highlight{-webkit-print-color-adjust:exact;color-adjust:exact}}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:before,.line-numbers .line-highlight:after{content:none}pre[id].linkable-line-numbers span.line-numbers-rows{pointer-events:all}pre[id].linkable-line-numbers span.line-numbers-rows>span:before{cursor:pointer}pre[id].linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:rgba(128,128,128,0.2)}pre[class*="language-"].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*="language-"].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:0.8em;text-align:right}.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.command-line-prompt>span:before{color:#999;content:' ';display:block;padding-right:0.8em}.command-line-prompt>span[data-user]:before{content:"[" attr(data-user) "@" attr(data-host) "] $"}.command-line-prompt>span[data-user="root"]:before{content:"[" attr(data-user) "@" attr(data-host) "] #"}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:.3em;right:.2em;transition:opacity 0.3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:none;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224,224,224,0.2);box-shadow:0 2px 0 0 rgba(0,0,0,0.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus{color:inherit;text-decoration:none}code.language-css,code.language-scss,.token.boolean,.token.string,.token.entity,.token.url,.language-css .token.string,.language-scss .token.string,.style .token.string,.token.attr-value,.token.keyword,.token.control,.token.directive,.token.statement,.token.regex,.token.atrule,.token.number,.token.inserted,.token.important{color:#FFA86A !important}.token.tag-id,.token.atrule-id,.token.operator,.token.unit,.token.placeholder,.token.variable,.token.tag,.token.attr-name,.token.namespace,.token.deleted,.token.property,.token.class-name,.token.constant,.token.symbol{color:rgba(255,168,106,0.7) !important}.token.property,.token.function,.token.function-name,.token.deleted,code.language-javascript,code.language-html,.command-line-prompt>span:before{color:#9a9999 !important}.token.selector,.token.tag,.token.punctuation{color:white}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:rgba(255,255,255,0.3) !important}.token.namespace{opacity:.7 !important}pre[data-line]{position:relative}pre[class*="language-"]{margin:0;padding:0;overflow:auto}.line-highlight{position:absolute;left:0;right:0;padding:0;margin:0;background:rgba(245,167,111,0.08);pointer-events:none;line-height:inherit;white-space:pre}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:before,.line-numbers .line-highlight:after{content:none}.code-toolbar{position:relative;margin:40px 0;padding:20px;border:1px solid rgba(255,255,255,0.1)}.code-toolbar+.code-toolbar,.code-toolbar+.highlight,.code-toolbar+.highlight .code-toolbar{border-top:0;margin-top:calc(-1 * $code-margin)}.code-toolbar pre,.code-toolbar code{border:none}.code-toolbar code{display:block;color:inherit}.code-toolbar>.toolbar button{font-size:.8em !important;background:rgba(224,224,224,0.2) !important;color:#bbb !important;box-shadow:0 2px 0 0 rgba(0,0,0,0.2) !important;border-radius:0 !important;margin:6px !important;padding:10px !important;user-select:none}.collapsable-code{position:relative;width:100%;margin:40px 0}.collapsable-code input[type="checkbox"]{position:absolute;visibility:hidden}.collapsable-code input[type="checkbox"]:checked~pre,.collapsable-code input[type="checkbox"]:checked~.code-toolbar pre{height:0;padding:0;border-top:none}.collapsable-code input[type="checkbox"]:checked~.code-toolbar{padding:0;border-top:none}.collapsable-code input[type="checkbox"]:checked~.code-toolbar .toolbar{display:none}.collapsable-code input[type="checkbox"]:checked~label .collapsable-code__toggle:after{content:attr(data-label-expand)}.collapsable-code label{position:relative;display:flex;justify-content:space-between;min-width:30px;min-height:30px;margin:0;border-bottom:1px solid #f5a76f;cursor:pointer}.collapsable-code__title{flex:1;color:#FFA86A;padding:3px 10px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.collapsable-code__language{color:#FFA86A;border:1px solid #f5a76f;border-bottom:none;text-transform:uppercase;padding:3px 10px}.collapsable-code__toggle{color:#FFA86A;font-size:16px;padding:3px 10px}.collapsable-code__toggle:after{content:attr(data-label-collapse)}.collapsable-code pre{margin-top:0}.collapsable-code pre::first-line{line-height:0}.collapsable-code .code-toolbar{margin:0}.terms h3{font-size:initial}.terms ul{list-style:none}.terms ul li a{color:#FFA86A}.terms ul li:not(:empty):before{content:'-';position:absolute;left:-20px;color:#FFA86A}body .gist .blob-num,body .gist .blob-code-inner{border:none} + +/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.json b/resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.json new file mode 100644 index 0000000..e7b8e7c --- /dev/null +++ b/resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.json @@ -0,0 +1 @@ +{"Target":"styles.css","MediaType":"text/css","Data":{}} \ No newline at end of file diff --git a/themes/terminal b/themes/terminal new file mode 160000 index 0000000..7e13d24 --- /dev/null +++ b/themes/terminal @@ -0,0 +1 @@ +Subproject commit 7e13d24d10c59c1cf1d1f011f7c4c93266d8aa7d

-)m^#{IPs3A! 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 aR3GSJEiz648hltsV)pni+|;b={r>=`f+|V? literal 0 HcmV?d00001 diff --git a/public/img/theme-colors/blue.png b/public/img/theme-colors/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5fd9960d0086cb792f348447b655632ec033e2 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-&H|6fVg?3oVGw3ym^DWND9BhG zLF`I5%edj39bOujXKbLh*2~7aa+&duv literal 0 HcmV?d00001 diff --git a/public/img/theme-colors/green.png b/public/img/theme-colors/green.png new file mode 100644 index 0000000000000000000000000000000000000000..490979290cfff1aed10757350935c5485d670e2b GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-&H|6fVg?3oVGw3ym^DWND9BhG zgTe~DWM4f5u`Tg literal 0 HcmV?d00001 diff --git a/public/img/theme-colors/orange.png b/public/img/theme-colors/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac2c2772a6d8d5905459c349e848c297c9bd86d GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-&H|6fVg?3oVGw3ym^DWND9BhG zGQmYp^O8qeVA>gTe~DWM4f7lb!O literal 0 HcmV?d00001 diff --git a/public/img/theme-colors/pink.png b/public/img/theme-colors/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..96d49eca2576e0126bd016b55b4bbe32399a372e GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-&H|6fVg?3oVGw3ym^DWND9BhG zzT9m6h}9o k-F;qGKH{;kk|}ABe={$$R?!r`TA=9+p00i_>zopr0JSYDoB#j- literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..74ca47f --- /dev/null +++ b/public/index.html @@ -0,0 +1,182 @@ + + + + + + Rsmsn Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +